From owner-svn-src-head@freebsd.org Sun Aug 9 00:06:57 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4CB8B9B7A36; Sun, 9 Aug 2015 00:06:57 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3642AA42; Sun, 9 Aug 2015 00:06:57 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t7906v6F031239; Sun, 9 Aug 2015 00:06:57 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.14.9/8.14.9/Submit) id t7906vbK031238; Sun, 9 Aug 2015 00:06:57 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508090006.t7906vbK031238@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 9 Aug 2015 00:06:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286491 - head/lib/libc/locale X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 00:06:57 -0000 Author: bapt Date: Sun Aug 9 00:06:56 2015 New Revision: 286491 URL: https://svnweb.freebsd.org/changeset/base/286491 Log: Remove 5 and 6 bytes sequences which are illegal in UTF-8 space. (part2) Per rfc3629 value greater than 0x10ffff should be rejected Suggested by: jilles Modified: head/lib/libc/locale/utf8.c Modified: head/lib/libc/locale/utf8.c ============================================================================== --- head/lib/libc/locale/utf8.c Sat Aug 8 23:59:15 2015 (r286490) +++ head/lib/libc/locale/utf8.c Sun Aug 9 00:06:56 2015 (r286491) @@ -320,15 +320,9 @@ _UTF8_wcrtomb(char * __restrict s, wchar } else if ((wc & ~0xffff) == 0) { lead = 0xe0; len = 3; - } else if ((wc & ~0x1fffff) == 0) { + } else if (wc >= 0 && wc <= 0x10ffff) { lead = 0xf0; len = 4; - } else if ((wc & ~0x3ffffff) == 0) { - lead = 0xf8; - len = 5; - } else if ((wc & ~0x7fffffff) == 0) { - lead = 0xfc; - len = 6; } else { errno = EILSEQ; return ((size_t)-1); From owner-svn-src-head@freebsd.org Sun Aug 9 02:08:29 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6F1F39B214C; Sun, 9 Aug 2015 02:08:29 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 60397A1F; Sun, 9 Aug 2015 02:08:29 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t7928Tps081419; Sun, 9 Aug 2015 02:08:29 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.14.9/8.14.9/Submit) id t7928TR1081418; Sun, 9 Aug 2015 02:08:29 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508090208.t7928TR1081418@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Sun, 9 Aug 2015 02:08:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286495 - head/share/misc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 02:08:29 -0000 Author: araujo Date: Sun Aug 9 02:08:28 2015 New Revision: 286495 URL: https://svnweb.freebsd.org/changeset/base/286495 Log: Add rodrigc@ to the committers graph. Approved by: bapt (mentor) Differential Revision: D3288 Modified: head/share/misc/committers-src.dot Modified: head/share/misc/committers-src.dot ============================================================================== --- head/share/misc/committers-src.dot Sun Aug 9 00:21:59 2015 (r286494) +++ head/share/misc/committers-src.dot Sun Aug 9 02:08:28 2015 (r286495) @@ -263,6 +263,7 @@ rmacklem [label="Rick Macklem\nrmacklem@ rmh [label="Robert Millan\nrmh@FreeBSD.org\n2011/09/18"] rnoland [label="Robert Noland\nrnoland@FreeBSD.org\n2008/09/15"] roberto [label="Ollivier Robert\nroberto@FreeBSD.org\n1995/02/22"] +rodrigc [label="Craig Rodrigues\nrodrigc@FreeBSD.org\n2005/05/14"] royger [label="Roger Pau Monne\nroyger@FreeBSD.org\n2013/11/26"] rpaulo [label="Rui Paulo\nrpaulo@FreeBSD.org\n2007/09/25"] rrs [label="Randall R Stewart\nrrs@FreeBSD.org\n2007/02/08"] @@ -389,6 +390,7 @@ cperciva -> simon csjp -> bushman das -> kargl +das -> rodrigc delphij -> gabor delphij -> rafan From owner-svn-src-head@freebsd.org Sun Aug 9 02:10:21 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 673149B21AE; Sun, 9 Aug 2015 02:10:21 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 585A9BF6; Sun, 9 Aug 2015 02:10:21 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t792ALub081567; Sun, 9 Aug 2015 02:10:21 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.14.9/8.14.9/Submit) id t792ALBq081565; Sun, 9 Aug 2015 02:10:21 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508090210.t792ALBq081565@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Sun, 9 Aug 2015 02:10:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286496 - head/share/misc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 02:10:21 -0000 Author: araujo Date: Sun Aug 9 02:10:20 2015 New Revision: 286496 URL: https://svnweb.freebsd.org/changeset/base/286496 Log: Add myself into the src graph. Approved by: bapt (mentor) Differential Revision: D3294 Modified: head/share/misc/committers-src.dot Modified: head/share/misc/committers-src.dot ============================================================================== --- head/share/misc/committers-src.dot Sun Aug 9 02:08:28 2015 (r286495) +++ head/share/misc/committers-src.dot Sun Aug 9 02:10:20 2015 (r286496) @@ -113,6 +113,7 @@ andre [label="Andre Oppermann\nandre@Fre andreast [label="Andreas Tobler\nandreast@FreeBSD.org\n2010/09/05"] andrew [label="Andrew Turner\nandrew@FreeBSD.org\n2010/07/19"] antoine [label="Antoine Brodin\nantoine@FreeBSD.org\n2008/02/03"] +araujo [label="Marcelo Araujo\naraujo@FreeBSD.org\n2015/08/04"] ariff [label="Ariff Abdullah\nariff@FreeBSD.org\n2005/11/14"] art [label="Artem Belevich\nart@FreeBSD.org\n2011/03/29"] arybchik [label="Andrew Rybchenko\narybchik@FreeBSD.org\n2014/10/12"] @@ -349,6 +350,7 @@ avg -> pluknet avg -> smh bapt -> allanjude +bapt -> araujo bapt -> bdrewery benno -> grehan @@ -690,6 +692,8 @@ rwatson -> trasz rwatson -> trhodes rwatson -> wsalamon +rodrigc -> araujo + sam -> andre sam -> benjsc sam -> sephe From owner-svn-src-head@freebsd.org Sun Aug 9 05:14:33 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 191D299DF81; Sun, 9 Aug 2015 05:14:33 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 073949FF; Sun, 9 Aug 2015 05:14:33 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t795EWC8068464; Sun, 9 Aug 2015 05:14:33 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t795EQHq068437; Sun, 9 Aug 2015 05:14:26 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508090514.t795EQHq068437@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Sun, 9 Aug 2015 05:14:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286503 - in head: contrib/apr contrib/apr/encoding contrib/apr/include contrib/apr/locks/unix contrib/apr/memory/unix contrib/apr/misc/unix contrib/apr/network_io/unix contrib/apr/poll... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 05:14:33 -0000 Author: peter Date: Sun Aug 9 05:14:25 2015 New Revision: 286503 URL: https://svnweb.freebsd.org/changeset/base/286503 Log: Update apr-1.5.1 to 1.5.2 Modified: head/contrib/apr/CHANGES head/contrib/apr/CMakeLists.txt head/contrib/apr/Makefile.in head/contrib/apr/NOTICE head/contrib/apr/NWGNUmakefile head/contrib/apr/apr.dsp head/contrib/apr/apr.spec head/contrib/apr/build-outputs.mk head/contrib/apr/configure head/contrib/apr/configure.in head/contrib/apr/encoding/apr_escape.c head/contrib/apr/include/apr_skiplist.h head/contrib/apr/include/apr_version.h head/contrib/apr/libapr.dsp head/contrib/apr/locks/unix/proc_mutex.c head/contrib/apr/memory/unix/apr_pools.c head/contrib/apr/misc/unix/errorcodes.c head/contrib/apr/network_io/unix/sockaddr.c head/contrib/apr/network_io/unix/sockets.c head/contrib/apr/poll/unix/epoll.c head/contrib/apr/poll/unix/kqueue.c head/contrib/apr/poll/unix/poll.c head/contrib/apr/poll/unix/pollcb.c head/contrib/apr/poll/unix/port.c head/contrib/apr/poll/unix/z_asio.c head/contrib/apr/tables/apr_skiplist.c head/usr.bin/svn/lib/libapr/apr.h head/usr.bin/svn/lib/libapr/apr_private.h Directory Properties: head/contrib/apr/ (props changed) Modified: head/contrib/apr/CHANGES ============================================================================== --- head/contrib/apr/CHANGES Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/CHANGES Sun Aug 9 05:14:25 2015 (r286503) @@ -1,4 +1,63 @@ -*- coding: utf-8 -*- +Changes for APR 1.5.2 + + *) SECURITY: CVE-2015-1829 (cve.mitre.org) + APR applications using APR named pipe support on Windows can be + vulnerable to a pipe squatting attack from a local process; the extent + of the vulnerability, when present, depends on the application. + Initial analysis and report was provided by John Hernandez of Casaba + Security via HP SSRT Security Alert. [Yann Ylavic] + + *) apr_atomic: Fix errors when building on Visual Studio 2013 while + maintaining the ability to build on Visual Studio 6 with Windows + Server 2003 R2 SDK. PR 57191. [Gregg Smith] + + *) Switch to generic atomics for early/unpatched Solaris 10 not exporting + some atomic functions. PR 55418. [Yann Ylavic] + + *) apr_file_mktemp() on HP-UX: Remove limitation of 26 temporary files + per process. PR 57677. [Jeff Trawick] + + *) apr_escape: Correctly calculate the size of the returned string in + apr_escape_path and set the correct return value in case we actually + escape the string. [] PR 57230. + + *) pollcb on Windows: Handle calls with no file/socket descriptors. + Follow up to PR 49882. [Jeff Trawick, Yann Ylavic] + + *) apr_poll(cb): fix error paths returned values and leaks. [Yann Ylavic] + + *) apr_thread_cond_*wait() on BeOS: Fix broken logic. PR 45800. + [Jochen Voss (no e-mail)] + + *) apr_skiplist: Optimize the number of allocations by reusing pooled or + malloc()ed nodes for the lifetime of the skiplist. [Yann Ylavic] + + *) apr_skiplist: Fix possible multiple-free() on the same value in + apr_skiplist_remove_all(). [Yann Ylavic] + + *) apr_pollset: On z/OS, threadsafe apr_pollset_poll() may return + "EDC8102I Operation would block" under load. + [Pat Odonnell ] + + *) On z/OS, apr_sockaddr_info_get() with family == APR_UNSPEC was not + returning IPv4 addresses if any IPv6 addresses were returned. + [Eric Covener] + + *) Windows cmake build: Fix an incompatibility with cmake 2.8.12 and + later. [Jeff Trawick] + + *) apr_global_mutex/apr_proc_mutex: Resolve failures with the + POSIX sem implementation in environments which receive signals. + [Jeff Trawick] + + *) apr_skiplist: Fix potential corruption of skiplists leading to + results or crashes. [Takashi Sato , Eric Covener] + PR 56654. + + *) Improve platform detection by updating config.guess and config.sub. + [Rainer Jung] + Changes for APR 1.5.1 *) apr_os_proc_mutex_get() on Unix: Avoid segfault for cross- @@ -37,8 +96,8 @@ Changes for APR 1.5.1 *) Correct a regression in 1.5.0 which affected out-of-tree builds on Unix. [Rainer Jung] - *) Improve platform detection for bundled expat by updating - config.guess and config.sub. [Rainer Jung] + *) Improve platform detection by updating config.guess and config.sub. + [Rainer Jung] Changes for APR 1.5.0 Modified: head/contrib/apr/CMakeLists.txt ============================================================================== --- head/contrib/apr/CMakeLists.txt Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/CMakeLists.txt Sun Aug 9 05:14:25 2015 (r286503) @@ -234,6 +234,7 @@ SET(APR_TEST_SOURCES test/testprocmutex.c test/testrand.c test/testshm.c + test/testskiplist.c test/testsleep.c test/testsock.c test/testsockets.c @@ -252,7 +253,6 @@ SET(APR_TEST_SOURCES SET(install_targets) SET(install_bin_pdb) -SET(install_lib_pdb) # libapr-1 is shared, apr-1 is static ADD_LIBRARY(libapr-1 SHARED ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED} libapr.rc) @@ -264,7 +264,6 @@ ADD_DEPENDENCIES(libapr-1 test_char_head ADD_LIBRARY(apr-1 STATIC ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED}) SET(install_targets ${install_targets} apr-1) -SET(install_lib_pdb ${install_lib_pdb} ${PROJECT_BINARY_DIR}/apr-1.pdb) TARGET_LINK_LIBRARIES(apr-1 ${APR_SYSTEM_LIBS}) SET_TARGET_PROPERTIES(apr-1 PROPERTIES COMPILE_DEFINITIONS "APR_DECLARE_STATIC;WINNT") ADD_DEPENDENCIES(apr-1 test_char_header) @@ -272,12 +271,10 @@ ADD_DEPENDENCIES(apr-1 test_char_header) # libaprapp-1 and aprapp-1 are static ADD_LIBRARY(libaprapp-1 STATIC misc/win32/apr_app.c misc/win32/internal.c ${APR_PUBLIC_HEADERS_GENERATED}) SET(install_targets ${install_targets} libaprapp-1) -SET(install_lib_pdb ${install_lib_pdb} ${PROJECT_BINARY_DIR}/libaprapp-1.pdb) SET_TARGET_PROPERTIES(libaprapp-1 PROPERTIES COMPILE_DEFINITIONS "APR_APP;WINNT") ADD_LIBRARY(aprapp-1 STATIC misc/win32/apr_app.c misc/win32/internal.c ${APR_PUBLIC_HEADERS_GENERATED}) SET(install_targets ${install_targets} aprapp-1) -SET(install_lib_pdb ${install_lib_pdb} ${PROJECT_BINARY_DIR}/aprapp-1.pdb) SET_TARGET_PROPERTIES(aprapp-1 PROPERTIES COMPILE_DEFINITIONS "APR_DECLARE_STATIC;APR_APP;WINNT") IF(APR_BUILD_TESTAPR) @@ -394,10 +391,6 @@ IF(INSTALL_PDB) INSTALL(FILES ${install_bin_pdb} DESTINATION bin CONFIGURATIONS RelWithDebInfo Debug) - - INSTALL(FILES ${install_lib_pdb} - DESTINATION lib - CONFIGURATIONS RelWithDebInfo Debug) ENDIF() INSTALL(FILES ${APR_PUBLIC_HEADERS_STATIC} ${APR_PUBLIC_HEADERS_GENERATED} DESTINATION include) Modified: head/contrib/apr/Makefile.in ============================================================================== --- head/contrib/apr/Makefile.in Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/Makefile.in Sun Aug 9 05:14:25 2015 (r286503) @@ -129,11 +129,11 @@ check: $(TARGET_LIB) etags: etags `find . -name '*.[ch]'` -make_tools_dir: +OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS) +tools/gen_test_char.lo: tools/gen_test_char.c $(APR_MKDIR) tools + $(LT_COMPILE) -OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS) -tools/gen_test_char.lo: make_tools_dir tools/gen_test_char@EXEEXT@: $(OBJECTS_gen_test_char) $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS) Modified: head/contrib/apr/NOTICE ============================================================================== --- head/contrib/apr/NOTICE Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/NOTICE Sun Aug 9 05:14:25 2015 (r286503) @@ -1,5 +1,5 @@ Apache Portable Runtime -Copyright (c) 2000-2014 The Apache Software Foundation. +Copyright (c) 2000-2015 The Apache Software Foundation. This product includes software developed at The Apache Software Foundation (http://www.apache.org/). Modified: head/contrib/apr/NWGNUmakefile ============================================================================== --- head/contrib/apr/NWGNUmakefile Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/NWGNUmakefile Sun Aug 9 05:14:25 2015 (r286503) @@ -50,6 +50,7 @@ include $(APR_WORK)/build/NWGNUhead.inc # XINCDIRS += \ $(APR)/include \ + $(APR)/include/private \ $(APR)/include/arch/NetWare \ $(APR)/include/arch/unix \ $(APR)/memory/unix \ @@ -293,11 +294,13 @@ FILES_nlm_exports = \ FILES_lib_objs = \ $(OBJDIR)/apr_atomic.o \ $(OBJDIR)/apr_cpystrn.o \ + $(OBJDIR)/apr_escape.o \ $(OBJDIR)/apr_fnmatch.o \ $(OBJDIR)/apr_getpass.o \ $(OBJDIR)/apr_hash.o \ $(OBJDIR)/apr_pools.o \ $(OBJDIR)/apr_random.o \ + $(OBJDIR)/apr_skiplist.o \ $(OBJDIR)/apr_snprintf.o \ $(OBJDIR)/apr_strings.o \ $(OBJDIR)/apr_strnatcmp.o \ @@ -407,7 +410,7 @@ endif vpath %.c atomic/netware:strings:tables:passwd:lib:time/unix vpath %.c file_io/unix:locks/netware:misc/netware:misc/unix:threadproc/netware vpath %.c poll/unix:shmem/unix:support/unix:random/unix -vpath %.c dso/netware:memory/unix:mmap/unix:user/netware +vpath %.c dso/netware:memory/unix:mmap/unix:user/netware:encoding # Use the win32 network_io if Winsock is being used ifndef USE_STDSOCKETS Modified: head/contrib/apr/apr.dsp ============================================================================== --- head/contrib/apr/apr.dsp Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/apr.dsp Sun Aug 9 05:14:25 2015 (r286503) @@ -907,69 +907,6 @@ SOURCE=.\include\apr_version.h # Begin Source File SOURCE=.\include\apr_want.h - -!IF "$(CFG)" == "apr - Win32 Release" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\LibR\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "apr - Win32 Debug" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\LibD\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "apr - Win32 Release9x" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\9x\LibR\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "apr - Win32 Debug9x" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\9x\LibD\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "apr - x64 Release" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\x64\LibR\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "apr - x64 Debug" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\x64\LibD\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ENDIF - # End Source File # End Group # End Target Modified: head/contrib/apr/apr.spec ============================================================================== --- head/contrib/apr/apr.spec Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/apr.spec Sun Aug 9 05:14:25 2015 (r286503) @@ -3,7 +3,7 @@ Summary: Apache Portable Runtime library Name: apr -Version: 1.5.1 +Version: 1.5.2 Release: 1 License: Apache Software License Group: System Environment/Libraries @@ -76,7 +76,7 @@ rm -rf $RPM_BUILD_ROOT %defattr(-,root,root,-) %doc docs/APRDesign.html docs/canonical_filenames.html %doc docs/incomplete_types docs/non_apr_programs -%doc --parents html +%doc html %{_bindir}/apr*config %{_libdir}/libapr-%{aprver}.*a %{_libdir}/libapr-%{aprver}.so Modified: head/contrib/apr/build-outputs.mk ============================================================================== --- head/contrib/apr/build-outputs.mk Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/build-outputs.mk Sun Aug 9 05:14:25 2015 (r286503) @@ -251,7 +251,7 @@ file_io/win32/filestat.lo: file_io/win32 file_io/win32/filesys.lo: file_io/win32/filesys.c .make.dirs include/apr_allocator.h include/apr_errno.h include/apr_general.h include/apr_pools.h include/apr_strings.h include/apr_thread_mutex.h include/apr_want.h file_io/win32/flock.lo: file_io/win32/flock.c .make.dirs file_io/win32/open.lo: file_io/win32/open.c .make.dirs include/apr_allocator.h include/apr_dso.h include/apr_errno.h include/apr_file_info.h include/apr_file_io.h include/apr_general.h include/apr_global_mutex.h include/apr_inherit.h include/apr_network_io.h include/apr_pools.h include/apr_portable.h include/apr_proc_mutex.h include/apr_shm.h include/apr_strings.h include/apr_tables.h include/apr_thread_mutex.h include/apr_thread_proc.h include/apr_time.h include/apr_user.h include/apr_want.h -file_io/win32/pipe.lo: file_io/win32/pipe.c .make.dirs include/apr_allocator.h include/apr_errno.h include/apr_file_info.h include/apr_file_io.h include/apr_general.h include/apr_inherit.h include/apr_pools.h include/apr_strings.h include/apr_tables.h include/apr_thread_mutex.h include/apr_time.h include/apr_user.h include/apr_want.h +file_io/win32/pipe.lo: file_io/win32/pipe.c .make.dirs include/apr_allocator.h include/apr_errno.h include/apr_escape.h include/apr_file_info.h include/apr_file_io.h include/apr_general.h include/apr_inherit.h include/apr_pools.h include/apr_strings.h include/apr_tables.h include/apr_thread_mutex.h include/apr_time.h include/apr_user.h include/apr_want.h file_io/win32/readwrite.lo: file_io/win32/readwrite.c .make.dirs include/apr_allocator.h include/apr_errno.h include/apr_file_info.h include/apr_file_io.h include/apr_general.h include/apr_inherit.h include/apr_lib.h include/apr_pools.h include/apr_strings.h include/apr_tables.h include/apr_thread_mutex.h include/apr_time.h include/apr_user.h include/apr_want.h file_io/win32/seek.lo: file_io/win32/seek.c .make.dirs include/apr_allocator.h include/apr_errno.h include/apr_file_info.h include/apr_file_io.h include/apr_general.h include/apr_inherit.h include/apr_pools.h include/apr_tables.h include/apr_thread_mutex.h include/apr_time.h include/apr_user.h include/apr_want.h Modified: head/contrib/apr/configure ============================================================================== --- head/contrib/apr/configure Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/configure Sun Aug 9 05:14:25 2015 (r286503) @@ -6802,10 +6802,10 @@ if test "x$apr_preload_done" != "xyes" ; *-apple-darwin*) if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp\"" - CPPFLAGS="-DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp" + test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK\"" + CPPFLAGS="-DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK" else - apr_addto_bugger="-DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp" + apr_addto_bugger="-DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $CPPFLAGS; do @@ -18794,7 +18794,34 @@ if test "${enable_nonportable_atomics+se else case $host_cpu in i[456]86) force_generic_atomics=yes ;; - *) force_generic_atomics=no ;; + *) force_generic_atomics=no + case $host in + *solaris2.10*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +void *ptr = NULL; atomic_cas_ptr(&ptr, NULL, NULL); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + force_generic_atomics=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $force_generic_atomics = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: nonportable atomic support disabled, system needs Patch-ID 118884 or 118885" >&5 +$as_echo "$as_me: nonportable atomic support disabled, system needs Patch-ID 118884 or 118885" >&6;} + fi + ;; + esac + ;; esac fi @@ -22292,7 +22319,7 @@ else fi done -for ac_func in getpass getpassphrase gmtime_r localtime_r mkstemp +for ac_func in getpass getpassphrase gmtime_r localtime_r do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -22304,6 +22331,23 @@ _ACEOF fi done +case $host in + *-hp-hpux*) + ;; + *) + for ac_func in mkstemp +do : + ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" +if test "x$ac_cv_func_mkstemp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MKSTEMP 1 +_ACEOF + +fi +done + + ;; +esac @@ -23902,7 +23946,7 @@ _ACEOF if test "${ac_cv_sizeof_off_t}${apr_cv_use_lfs64}" = "4yes"; then # Enable LFS aprlfs=1 - for ac_func in mmap64 sendfile64 sendfilev64 mkstemp64 readdir64_r + for ac_func in mmap64 sendfile64 sendfilev64 readdir64_r do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -23914,6 +23958,23 @@ _ACEOF fi done + case $host in + *-hp-hpux*) + ;; + *) + for ac_func in mkstemp64 +do : + ac_fn_c_check_func "$LINENO" "mkstemp64" "ac_cv_func_mkstemp64" +if test "x$ac_cv_func_mkstemp64" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MKSTEMP64 1 +_ACEOF + +fi +done + + ;; + esac elif test "${ac_cv_sizeof_off_t}" != "${ac_cv_sizeof_size_t}"; then # unsure of using -gt above is as portable, can can't forsee where # off_t can legitimately be smaller than size_t Modified: head/contrib/apr/configure.in ============================================================================== --- head/contrib/apr/configure.in Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/configure.in Sun Aug 9 05:14:25 2015 (r286503) @@ -640,7 +640,20 @@ AC_ARG_ENABLE(nonportable-atomics, ], [case $host_cpu in i[[456]]86) force_generic_atomics=yes ;; - *) force_generic_atomics=no ;; + *) force_generic_atomics=no + case $host in + *solaris2.10*) + AC_TRY_COMPILE( + [#include ], + [void *ptr = NULL; atomic_cas_ptr(&ptr, NULL, NULL);],, + [force_generic_atomics=yes] + ) + if test $force_generic_atomics = yes; then + AC_MSG_NOTICE([nonportable atomic support disabled, system needs Patch-ID 118884 or 118885]) + fi + ;; + esac + ;; esac ]) @@ -1400,7 +1413,15 @@ if test "$native_mmap_emul" = "1"; then mmap="1" fi AC_CHECK_FUNCS(memmove, [ have_memmove="1" ], [have_memmove="0" ]) -AC_CHECK_FUNCS([getpass getpassphrase gmtime_r localtime_r mkstemp]) +AC_CHECK_FUNCS([getpass getpassphrase gmtime_r localtime_r]) +case $host in + *-hp-hpux*) + dnl mkstemp is limited to 26 temporary files (a-z); use APR replacement + ;; + *) + AC_CHECK_FUNCS(mkstemp) + ;; +esac AC_SUBST(fork) AC_SUBST(have_inet_addr) @@ -1801,7 +1822,15 @@ APR_CHECK_SIZEOF_EXTENDED([#include 0 indicates placement + * before this node. * */ typedef int (*apr_skiplist_compare) (void *, void *); @@ -171,7 +173,8 @@ APR_DECLARE(void *) apr_skiplist_next(ap APR_DECLARE(void *) apr_skiplist_previous(apr_skiplist *sl, apr_skiplistnode **iter); /** - * Insert an element into the skip list using the specified comparison function. + * Insert an element into the skip list using the specified comparison function + * if it does not already exist. * @param sl The skip list * @param data The element to insert * @param comp The comparison function to use for placement into the skip list @@ -180,7 +183,8 @@ APR_DECLARE(apr_skiplistnode *) apr_skip void *data, apr_skiplist_compare comp); /** - * Insert an element into the skip list using the existing comparison function. + * Insert an element into the skip list using the existing comparison function + * if it does not already exist (as determined by the comparison function) * @param sl The skip list * @param data The element to insert * @remark If no comparison function has been set for the skip list, the element @@ -190,7 +194,7 @@ APR_DECLARE(apr_skiplistnode *) apr_skip /** * Remove an element from the skip list using the specified comparison function for - * locating the element. + * locating the element. In the case of duplicates, the 1st entry will be removed. * @param sl The skip list * @param data The element to remove * @param myfree A function to be called for each removed element @@ -203,7 +207,7 @@ APR_DECLARE(int) apr_skiplist_remove_com /** * Remove an element from the skip list using the existing comparison function for - * locating the element. + * locating the element. In the case of duplicates, the 1st entry will be removed. * @param sl The skip list * @param data The element to remove * @param myfree A function to be called for each removed element @@ -229,7 +233,7 @@ APR_DECLARE(void) apr_skiplist_remove_al APR_DECLARE(void) apr_skiplist_destroy(apr_skiplist *sl, apr_skiplist_freefunc myfree); /** - * Return the first element in the skip list, leaving the element in the skip list. + * Return the first element in the skip list, removing the element from the skip list. * @param sl The skip list * @param myfree A function to be called for the removed element * @remark NULL will be returned if there are no elements Modified: head/contrib/apr/include/apr_version.h ============================================================================== --- head/contrib/apr/include/apr_version.h Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/include/apr_version.h Sun Aug 9 05:14:25 2015 (r286503) @@ -38,7 +38,7 @@ */ -#define APR_COPYRIGHT "Copyright (c) 2000-2014 The Apache Software " \ +#define APR_COPYRIGHT "Copyright (c) 2000-2015 The Apache Software " \ "Foundation or its licensors, as applicable." /* The numeric compile-time version constants. These constants are the @@ -62,7 +62,7 @@ * The Patch Level never includes API changes, simply bug fixes. * Reset to 0 when upgrading APR_MINOR_VERSION */ -#define APR_PATCH_VERSION 1 +#define APR_PATCH_VERSION 2 /** * The symbol APR_IS_DEV_VERSION is only defined for internal, Modified: head/contrib/apr/libapr.dsp ============================================================================== --- head/contrib/apr/libapr.dsp Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/libapr.dsp Sun Aug 9 05:14:25 2015 (r286503) @@ -765,7 +765,7 @@ SOURCE=.\include\apr_escape.h # Begin Custom Build - Creating gen_test_char.exe and apr_escape_test_char.h InputPath=.\include\apr_escape.h -".\Release\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" cl.exe /nologo /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /I ".\include" /Fo.\Release\gen_test_char /Fe.\Release\gen_test_char.exe .\tools\gen_test_char.c .\Release\gen_test_char.exe > .\include\apr_escape_test_char.h @@ -776,7 +776,7 @@ InputPath=.\include\apr_escape.h # Begin Custom Build - Creating gen_test_char.exe and apr_escape_test_char.h InputPath=.\include\apr_escape.h -".\Debug\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" cl.exe /nologo /W3 /EHsc /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /I ".\include" /Fo.\Debug\gen_test_char /Fe.\Debug\gen_test_char.exe .\tools\gen_test_char.c .\Debug\gen_test_char.exe > .\include\apr_escape_test_char.h @@ -787,7 +787,7 @@ InputPath=.\include\apr_escape.h # Begin Custom Build - Creating gen_test_char.exe and apr_escape_test_char.h InputPath=.\include\apr_escape.h -".\9x\Release\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" cl.exe /nologo /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /I ".\include" /Fo.\9x\Release\gen_test_char /Fe.\9x\Release\gen_test_char.exe .\tools\gen_test_char.c .\9x\Release\gen_test_char.exe > .\include\apr_escape_test_char.h @@ -798,7 +798,7 @@ InputPath=.\include\apr_escape.h # Begin Custom Build - Creating gen_test_char.exe and apr_escape_test_char.h InputPath=.\include\apr_escape.h -".\9x\Debug\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" cl.exe /nologo /W3 /EHsc /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /I ".\include" /Fo.\9x\Debug\gen_test_char /Fe.\9x\Debug\gen_test_char.exe .\tools\gen_test_char.c .\9x\Debug\gen_test_char.exe > .\include\apr_escape_test_char.h @@ -809,7 +809,7 @@ InputPath=.\include\apr_escape.h # Begin Custom Build - Creating gen_test_char.exe and apr_escape_test_char.h InputPath=.\include\apr_escape.h -".\x64\Release\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" cl.exe /nologo /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /I ".\include" /Fo.\x64\Release\gen_test_char /Fe.\x64\Release\gen_test_char.exe .\tools\gen_test_char.c .\x64\Release\gen_test_char.exe > .\include\apr_escape_test_char.h @@ -820,7 +820,7 @@ InputPath=.\include\apr_escape.h # Begin Custom Build - Creating gen_test_char.exe and apr_escape_test_char.h InputPath=.\include\apr_escape.h -".\x64\Debug\gen_test_char.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" cl.exe /nologo /W3 /EHsc /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /I ".\include" /Fo.\x64\Debug\gen_test_char /Fe.\x64\Debug\gen_test_char.exe .\tools\gen_test_char.c .\x64\Debug\gen_test_char.exe > .\include\apr_escape_test_char.h @@ -952,69 +952,6 @@ SOURCE=.\include\apr_version.h # Begin Source File SOURCE=.\include\apr_want.h - -!IF "$(CFG)" == "libapr - Win32 Release" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "libapr - Win32 Debug" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "libapr - Win32 Release9x" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "libapr - Win32 Debug9x" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "libapr - x64 Release" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ELSEIF "$(CFG)" == "libapr - x64 Debug" - -# Begin Custom Build -InputPath=.\include\apr_want.h - -".\include\apr_escape_test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - type .\include\apr.hw > .\include\apr.h - -# End Custom Build - -!ENDIF - # End Source File # End Group # Begin Source File Modified: head/contrib/apr/locks/unix/proc_mutex.c ============================================================================== --- head/contrib/apr/locks/unix/proc_mutex.c Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/locks/unix/proc_mutex.c Sun Aug 9 05:14:25 2015 (r286503) @@ -114,7 +114,9 @@ static apr_status_t proc_mutex_posix_cre usec = apr_time_usec(now); apr_snprintf(semname, sizeof(semname), "/ApR.%lxZ%lx", sec, usec); } - psem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1); + do { + psem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1); + } while (psem == (sem_t *)SEM_FAILED && errno == EINTR); if (psem == (sem_t *)SEM_FAILED) { if (errno == ENAMETOOLONG) { /* Oh well, good try */ @@ -122,7 +124,9 @@ static apr_status_t proc_mutex_posix_cre } else { return errno; } - psem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1); + do { + psem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1); + } while (psem == (sem_t *)SEM_FAILED && errno == EINTR); } if (psem == (sem_t *)SEM_FAILED) { @@ -140,7 +144,12 @@ static apr_status_t proc_mutex_posix_cre static apr_status_t proc_mutex_posix_acquire(apr_proc_mutex_t *mutex) { - if (sem_wait(mutex->psem_interproc) < 0) { + int rc; + + do { + rc = sem_wait(mutex->psem_interproc); + } while (rc < 0 && errno == EINTR); + if (rc < 0) { return errno; } mutex->curr_locked = 1; @@ -149,7 +158,12 @@ static apr_status_t proc_mutex_posix_acq static apr_status_t proc_mutex_posix_tryacquire(apr_proc_mutex_t *mutex) { - if (sem_trywait(mutex->psem_interproc) < 0) { + int rc; + + do { + rc = sem_trywait(mutex->psem_interproc); + } while (rc < 0 && errno == EINTR); + if (rc < 0) { if (errno == EAGAIN) { return APR_EBUSY; } Modified: head/contrib/apr/memory/unix/apr_pools.c ============================================================================== --- head/contrib/apr/memory/unix/apr_pools.c Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/memory/unix/apr_pools.c Sun Aug 9 05:14:25 2015 (r286503) @@ -1135,21 +1135,12 @@ APR_DECLARE(char *) apr_pvsprintf(apr_po * room to hold the NUL terminator. */ if (ps.node->first_avail == ps.node->endp) { - if (psprintf_flush(&ps.vbuff) == -1) { - if (pool->abort_fn) { - pool->abort_fn(APR_ENOMEM); - } - - return NULL; - } + if (psprintf_flush(&ps.vbuff) == -1) + goto error; } - if (apr_vformatter(psprintf_flush, &ps.vbuff, fmt, ap) == -1) { - if (pool->abort_fn) - pool->abort_fn(APR_ENOMEM); - - return NULL; - } + if (apr_vformatter(psprintf_flush, &ps.vbuff, fmt, ap) == -1) + goto error; strp = ps.vbuff.curpos; *strp++ = '\0'; @@ -1195,6 +1186,15 @@ APR_DECLARE(char *) apr_pvsprintf(apr_po list_insert(active, node); return strp; + +error: + if (pool->abort_fn) + pool->abort_fn(APR_ENOMEM); + if (ps.got_a_new_node) { + ps.node->next = ps.free; + allocator_free(pool->allocator, ps.node); + } + return NULL; } Modified: head/contrib/apr/misc/unix/errorcodes.c ============================================================================== --- head/contrib/apr/misc/unix/errorcodes.c Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/misc/unix/errorcodes.c Sun Aug 9 05:14:25 2015 (r286503) @@ -39,6 +39,8 @@ static char *stuffbuffer(char *buf, apr_ static char *apr_error_string(apr_status_t statcode) { switch (statcode) { + case APR_ENOSTAT: + return "Could not perform a stat on the file."; case APR_ENOPOOL: return "A new pool could not be created."; case APR_EBADDATE: @@ -73,7 +75,10 @@ static char *apr_error_string(apr_status return "The specified IP address is invalid."; case APR_EBADMASK: return "The specified network mask is invalid."; - + case APR_ESYMNOTFOUND: + return "Could not find the requested symbol."; + case APR_ENOTENOUGHENTROPY: + return "Not enough entropy to continue."; case APR_INCHILD: return "Your code just forked, and you are currently executing in the " @@ -128,10 +133,12 @@ static char *apr_error_string(apr_status return "The given path is misformatted or contained invalid characters"; case APR_EPATHWILD: return "The given path contained wildcard characters"; + case APR_EBUSY: + return "The given lock was busy."; case APR_EPROC_UNKNOWN: return "The process is not recognized."; case APR_EGENERAL: - return "Internal error"; + return "Internal error (specific information not available)"; default: return "Error string not specified yet"; } Modified: head/contrib/apr/network_io/unix/sockaddr.c ============================================================================== --- head/contrib/apr/network_io/unix/sockaddr.c Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/network_io/unix/sockaddr.c Sun Aug 9 05:14:25 2015 (r286503) @@ -325,6 +325,16 @@ static apr_status_t call_resolver(apr_so hints.ai_flags = AI_ADDRCONFIG; } #endif + +#ifdef __MVS__ + /* z/OS will not return IPv4 address under AF_UNSPEC if any IPv6 results + * are returned, w/o AI_ALL. + */ + if (family == APR_UNSPEC) { + hints.ai_flags |= AI_ALL; + } +#endif + if(hostname == NULL) { #ifdef AI_PASSIVE /* If hostname is NULL, assume we are trying to bind to all Modified: head/contrib/apr/network_io/unix/sockets.c ============================================================================== --- head/contrib/apr/network_io/unix/sockets.c Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/network_io/unix/sockets.c Sun Aug 9 05:14:25 2015 (r286503) @@ -145,13 +145,22 @@ apr_status_t apr_socket_create(apr_socke #ifndef HAVE_SOCK_CLOEXEC { int flags; + apr_status_t rv; - if ((flags = fcntl((*new)->socketdes, F_GETFD)) == -1) - return errno; + if ((flags = fcntl((*new)->socketdes, F_GETFD)) == -1) { + rv = errno; + close((*new)->socketdes); + (*new)->socketdes = -1; + return rv; + } flags |= FD_CLOEXEC; - if (fcntl((*new)->socketdes, F_SETFD, flags) == -1) - return errno; + if (fcntl((*new)->socketdes, F_SETFD, flags) == -1) { + rv = errno; + close((*new)->socketdes); + (*new)->socketdes = -1; + return rv; + } } #endif @@ -306,13 +315,22 @@ apr_status_t apr_socket_accept(apr_socke #ifndef HAVE_ACCEPT4 { int flags; + apr_status_t rv; - if ((flags = fcntl((*new)->socketdes, F_GETFD)) == -1) - return errno; + if ((flags = fcntl((*new)->socketdes, F_GETFD)) == -1) { + rv = errno; + close((*new)->socketdes); + (*new)->socketdes = -1; + return rv; + } flags |= FD_CLOEXEC; - if (fcntl((*new)->socketdes, F_SETFD, flags) == -1) - return errno; + if (fcntl((*new)->socketdes, F_SETFD, flags) == -1) { + rv = errno; + close((*new)->socketdes); + (*new)->socketdes = -1; + return rv; + } } #endif Modified: head/contrib/apr/poll/unix/epoll.c ============================================================================== --- head/contrib/apr/poll/unix/epoll.c Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/poll/unix/epoll.c Sun Aug 9 05:14:25 2015 (r286503) @@ -104,14 +104,22 @@ static apr_status_t impl_pollset_create( #ifndef HAVE_EPOLL_CREATE1 { - int flags; + int fd_flags; - if ((flags = fcntl(fd, F_GETFD)) == -1) - return errno; + if ((fd_flags = fcntl(fd, F_GETFD)) == -1) { + rv = errno; + close(fd); + pollset->p = NULL; + return rv; + } - flags |= FD_CLOEXEC; - if (fcntl(fd, F_SETFD, flags) == -1) - return errno; + fd_flags |= FD_CLOEXEC; + if (fcntl(fd, F_SETFD, fd_flags) == -1) { + rv = errno; + close(fd); + pollset->p = NULL; + return rv; + } } #endif @@ -122,11 +130,13 @@ static apr_status_t impl_pollset_create( ((rv = apr_thread_mutex_create(&pollset->p->ring_lock, APR_THREAD_MUTEX_DEFAULT, p)) != APR_SUCCESS)) { + close(fd); pollset->p = NULL; return rv; } #else if (flags & APR_POLLSET_THREADSAFE) { + close(fd); pollset->p = NULL; return APR_ENOTIMPL; } @@ -345,14 +355,23 @@ static apr_status_t impl_pollcb_create(a #ifndef HAVE_EPOLL_CREATE1 { - int flags; + int fd_flags; + apr_status_t rv; - if ((flags = fcntl(fd, F_GETFD)) == -1) - return errno; + if ((fd_flags = fcntl(fd, F_GETFD)) == -1) { + rv = errno; + close(fd); + pollcb->fd = -1; + return rv; + } - flags |= FD_CLOEXEC; - if (fcntl(fd, F_SETFD, flags) == -1) - return errno; + fd_flags |= FD_CLOEXEC; + if (fcntl(fd, F_SETFD, fd_flags) == -1) { + rv = errno; + close(fd); + pollcb->fd = -1; + return rv; + } } #endif Modified: head/contrib/apr/poll/unix/kqueue.c ============================================================================== --- head/contrib/apr/poll/unix/kqueue.c Sun Aug 9 04:38:21 2015 (r286502) +++ head/contrib/apr/poll/unix/kqueue.c Sun Aug 9 05:14:25 2015 (r286503) @@ -115,12 +115,20 @@ static apr_status_t impl_pollset_create( { int flags; - if ((flags = fcntl(pollset->p->kqueue_fd, F_GETFD)) == -1) - return errno; + if ((flags = fcntl(pollset->p->kqueue_fd, F_GETFD)) == -1) { + rv = errno; + close(pollset->p->kqueue_fd); + pollset->p = NULL; + return rv; + } flags |= FD_CLOEXEC; - if (fcntl(pollset->p->kqueue_fd, F_SETFD, flags) == -1) - return errno; + if (fcntl(pollset->p->kqueue_fd, F_SETFD, flags) == -1) { + rv = errno; + close(pollset->p->kqueue_fd); + pollset->p = NULL; + return rv; + } } pollset->p->result_set = apr_palloc(p, pollset->p->setsize * sizeof(apr_pollfd_t)); @@ -338,13 +346,22 @@ static apr_status_t impl_pollcb_create(a { int flags; + apr_status_t rv; - if ((flags = fcntl(fd, F_GETFD)) == -1) - return errno; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Sun Aug 9 05:15:30 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0388799DFAF; Sun, 9 Aug 2015 05:15:30 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CF29EB63; Sun, 9 Aug 2015 05:15:29 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t795FTv5068570; Sun, 9 Aug 2015 05:15:29 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t795FTqB068568; Sun, 9 Aug 2015 05:15:29 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508090515.t795FTqB068568@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Sun, 9 Aug 2015 05:15:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286504 - head/usr.bin/svn/lib/libapr_util X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 05:15:30 -0000 Author: peter Date: Sun Aug 9 05:15:28 2015 New Revision: 286504 URL: https://svnweb.freebsd.org/changeset/base/286504 Log: Update apr-util config - I don't believe this part is used by svn, but if it were, use shm_* instead of sysvshm. Modified: head/usr.bin/svn/lib/libapr_util/apu.h head/usr.bin/svn/lib/libapr_util/apu_config.h Modified: head/usr.bin/svn/lib/libapr_util/apu.h ============================================================================== --- head/usr.bin/svn/lib/libapr_util/apu.h Sun Aug 9 05:14:25 2015 (r286503) +++ head/usr.bin/svn/lib/libapr_util/apu.h Sun Aug 9 05:15:28 2015 (r286504) @@ -117,16 +117,12 @@ #define APU_HAVE_FREETDS 0 #define APU_HAVE_ODBC 0 -#define APU_HAVE_CRYPTO 0 -#define APU_HAVE_OPENSSL 0 +#define APU_HAVE_CRYPTO 1 +#define APU_HAVE_OPENSSL 1 #define APU_HAVE_NSS 0 -#ifndef APU_HAVE_APR_ICONV #define APU_HAVE_APR_ICONV 0 -#endif -#ifndef APU_HAVE_ICONV -#define APU_HAVE_ICONV 0 -#endif +#define APU_HAVE_ICONV 1 #define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV) #endif /* APU_H */ Modified: head/usr.bin/svn/lib/libapr_util/apu_config.h ============================================================================== --- head/usr.bin/svn/lib/libapr_util/apu_config.h Sun Aug 9 05:14:25 2015 (r286503) +++ head/usr.bin/svn/lib/libapr_util/apu_config.h Sun Aug 9 05:15:28 2015 (r286504) @@ -13,7 +13,7 @@ /* #undef APU_DSO_LIBDIR */ /* Define if the inbuf parm to iconv() is const char ** */ -#define APU_ICONV_INBUF_CONST 1 +/* #undef APU_ICONV_INBUF_CONST */ /* Define that OpenSSL uses const buffers */ #define CRYPTO_OPENSSL_CONST_BUFFERS 1 @@ -41,7 +41,7 @@ /* #undef HAVE_FREETDS_SYBDB_H */ /* Define to 1 if you have the header file. */ -/* #undef HAVE_ICONV_H */ +#define HAVE_ICONV_H 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 From owner-svn-src-head@freebsd.org Sun Aug 9 05:16:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 760BC99DFF2; Sun, 9 Aug 2015 05:16:16 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5AD95E56; Sun, 9 Aug 2015 05:16:16 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t795GGd1068656; Sun, 9 Aug 2015 05:16:16 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t795GES6068648; Sun, 9 Aug 2015 05:16:14 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508090516.t795GES6068648@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Sun, 9 Aug 2015 05:16:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286505 - in head/contrib/serf: . auth buckets X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 05:16:16 -0000 Author: peter Date: Sun Aug 9 05:16:14 2015 New Revision: 286505 URL: https://svnweb.freebsd.org/changeset/base/286505 Log: Update serf from 1.3.7 to 1.3.8. Mostly disables sslv2 and sslv3. Modified: head/contrib/serf/CHANGES head/contrib/serf/auth/auth_spnego_sspi.c head/contrib/serf/buckets/deflate_buckets.c head/contrib/serf/buckets/ssl_buckets.c head/contrib/serf/serf.h Directory Properties: head/contrib/serf/ (props changed) Modified: head/contrib/serf/CHANGES ============================================================================== --- head/contrib/serf/CHANGES Sun Aug 9 05:15:28 2015 (r286504) +++ head/contrib/serf/CHANGES Sun Aug 9 05:16:14 2015 (r286505) @@ -1,10 +1,18 @@ +Serf 1.3.8 [2014-10-20, from /tags/1.3.8, rxxxx] +Fix issue #152: CRC calculation error for gzipped http reponses > 4GB. +Fix issue #153: SSPI CredHandle not freed when APR pool is destroyed. +Fix issue #154: Disable SSLv2 and SSLv3 as both or broken. + + Serf 1.3.7 [2014-08-11, from /tags/1.3.7, r2411] Handle NUL bytes in fields of an X.509 certificate. (r2393, r2399) + Serf 1.3.6 [2014-06-09, from /tags/1.3.6, r2372] Revert r2319 from serf 1.3.5: this change was making serf call handle_response multiple times in case of an error response, leading to unexpected behavior. + Serf 1.3.5 [2014-04-27, from /tags/1.3.5, r2355] Fix issue #125: no reverse lookup during Negotiate authentication for proxies. Fix a crash caused by incorrect reuse of the ssltunnel CONNECT request (r2316) Modified: head/contrib/serf/auth/auth_spnego_sspi.c ============================================================================== --- head/contrib/serf/auth/auth_spnego_sspi.c Sun Aug 9 05:15:28 2015 (r286504) +++ head/contrib/serf/auth/auth_spnego_sspi.c Sun Aug 9 05:16:14 2015 (r286505) @@ -95,8 +95,8 @@ cleanup_ctx(void *data) } if (SecIsValidHandle(&ctx->sspi_credentials)) { - FreeCredentialsHandle(&ctx->sspi_context); - SecInvalidateHandle(&ctx->sspi_context); + FreeCredentialsHandle(&ctx->sspi_credentials); + SecInvalidateHandle(&ctx->sspi_credentials); } return APR_SUCCESS; Modified: head/contrib/serf/buckets/deflate_buckets.c ============================================================================== --- head/contrib/serf/buckets/deflate_buckets.c Sun Aug 9 05:15:28 2015 (r286504) +++ head/contrib/serf/buckets/deflate_buckets.c Sun Aug 9 05:16:14 2015 (r286505) @@ -141,7 +141,6 @@ static apr_status_t serf_deflate_read(se const char **data, apr_size_t *len) { deflate_context_t *ctx = bucket->data; - unsigned long compCRC, compLen; apr_status_t status; const char *private_data; apr_size_t private_len; @@ -186,17 +185,25 @@ static apr_status_t serf_deflate_read(se ctx->state++; break; case STATE_VERIFY: + { + unsigned long compCRC, compLen, actualLen; + /* Do the checksum computation. */ compCRC = getLong((unsigned char*)ctx->hdr_buffer); if (ctx->crc != compCRC) { return SERF_ERROR_DECOMPRESSION_FAILED; } compLen = getLong((unsigned char*)ctx->hdr_buffer + 4); - if (ctx->zstream.total_out != compLen) { + /* The length in the trailer is module 2^32, so do the same for + the actual length. */ + actualLen = ctx->zstream.total_out; + actualLen &= 0xFFFFFFFF; + if (actualLen != compLen) { return SERF_ERROR_DECOMPRESSION_FAILED; } ctx->state++; break; + } case STATE_INIT: zRC = inflateInit2(&ctx->zstream, ctx->windowSize); if (zRC != Z_OK) { @@ -264,10 +271,14 @@ static apr_status_t serf_deflate_read(se ctx->zstream.next_in = (unsigned char*)private_data; ctx->zstream.avail_in = private_len; } - zRC = Z_OK; - while (ctx->zstream.avail_in != 0) { - /* We're full, clear out our buffer, reset, and return. */ - if (ctx->zstream.avail_out == 0) { + + while (1) { + + zRC = inflate(&ctx->zstream, Z_NO_FLUSH); + + /* We're full or zlib requires more space. Either case, clear + out our buffer, reset, and return. */ + if (zRC == Z_BUF_ERROR || ctx->zstream.avail_out == 0) { serf_bucket_t *tmp; ctx->zstream.next_out = ctx->buffer; private_len = ctx->bufferSize - ctx->zstream.avail_out; @@ -283,7 +294,6 @@ static apr_status_t serf_deflate_read(se ctx->zstream.avail_out = ctx->bufferSize; break; } - zRC = inflate(&ctx->zstream, Z_NO_FLUSH); if (zRC == Z_STREAM_END) { serf_bucket_t *tmp; @@ -330,9 +340,13 @@ static apr_status_t serf_deflate_read(se break; } + + /* Any other error? */ if (zRC != Z_OK) { return SERF_ERROR_DECOMPRESSION_FAILED; } + + /* As long as zRC == Z_OK, just keep looping. */ } /* Okay, we've inflated. Try to read. */ status = serf_bucket_read(ctx->inflate_stream, requested, data, @@ -340,8 +354,13 @@ static apr_status_t serf_deflate_read(se /* Hide EOF. */ if (APR_STATUS_IS_EOF(status)) { status = ctx->stream_status; - /* If our stream is finished too, return SUCCESS so - * we'll iterate one more time. + + /* If the inflation wasn't finished, return APR_SUCCESS. */ + if (zRC != Z_STREAM_END) + return APR_SUCCESS; + + /* If our stream is finished too and all data was inflated, + * return SUCCESS so we'll iterate one more time. */ if (APR_STATUS_IS_EOF(status)) { /* No more data to read from the stream, and everything Modified: head/contrib/serf/buckets/ssl_buckets.c ============================================================================== --- head/contrib/serf/buckets/ssl_buckets.c Sun Aug 9 05:15:28 2015 (r286504) +++ head/contrib/serf/buckets/ssl_buckets.c Sun Aug 9 05:16:14 2015 (r286505) @@ -1317,7 +1317,9 @@ static serf_ssl_context_t *ssl_init_cont ssl_ctx->pool = serf_bucket_allocator_get_pool(allocator); ssl_ctx->allocator = allocator; + /* Use the best possible protocol version, but disable the broken SSLv2/3 */ ssl_ctx->ctx = SSL_CTX_new(SSLv23_client_method()); + SSL_CTX_set_options(ssl_ctx->ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3); SSL_CTX_set_client_cert_cb(ssl_ctx->ctx, ssl_need_client_cert); ssl_ctx->cached_cert = 0; Modified: head/contrib/serf/serf.h ============================================================================== --- head/contrib/serf/serf.h Sun Aug 9 05:15:28 2015 (r286504) +++ head/contrib/serf/serf.h Sun Aug 9 05:16:14 2015 (r286505) @@ -1062,7 +1062,7 @@ void serf_debug__bucket_alloc_check( /* Version info */ #define SERF_MAJOR_VERSION 1 #define SERF_MINOR_VERSION 3 -#define SERF_PATCH_VERSION 7 +#define SERF_PATCH_VERSION 8 /* Version number string */ #define SERF_VERSION_STRING APR_STRINGIFY(SERF_MAJOR_VERSION) "." \ From owner-svn-src-head@freebsd.org Sun Aug 9 05:22:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3E15499D1FB; Sun, 9 Aug 2015 05:22:56 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2BA70267; Sun, 9 Aug 2015 05:22:56 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t795Mu82072617; Sun, 9 Aug 2015 05:22:56 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t795MsPH072607; Sun, 9 Aug 2015 05:22:54 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508090522.t795MsPH072607@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Sun, 9 Aug 2015 05:22:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286506 - in head: contrib/subversion contrib/subversion/subversion contrib/subversion/subversion/include contrib/subversion/subversion/include/private contrib/subversion/subversion/lib... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 05:22:56 -0000 Author: peter Date: Sun Aug 9 05:22:53 2015 New Revision: 286506 URL: https://svnweb.freebsd.org/changeset/base/286506 Log: Update svnlite from 1.8.10 to 1.8.14. This is mostly for client-side bug fixes and quality of life improvements. While there are security issues in this time frame that affect usage as a server (eg: linked into apache), this isn't possible here. Modified: head/contrib/subversion/CHANGES head/contrib/subversion/Makefile.in head/contrib/subversion/NOTICE head/contrib/subversion/autogen.sh head/contrib/subversion/build-outputs.mk head/contrib/subversion/build.conf head/contrib/subversion/configure head/contrib/subversion/configure.ac head/contrib/subversion/get-deps.sh head/contrib/subversion/subversion/include/private/svn_diff_private.h head/contrib/subversion/subversion/include/private/svn_mergeinfo_private.h head/contrib/subversion/subversion/include/private/svn_repos_private.h head/contrib/subversion/subversion/include/private/svn_sqlite.h head/contrib/subversion/subversion/include/svn_io.h head/contrib/subversion/subversion/include/svn_version.h head/contrib/subversion/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c head/contrib/subversion/subversion/libsvn_client/copy.c head/contrib/subversion/subversion/libsvn_client/externals.c head/contrib/subversion/subversion/libsvn_client/log.c head/contrib/subversion/subversion/libsvn_client/merge.c head/contrib/subversion/subversion/libsvn_client/patch.c head/contrib/subversion/subversion/libsvn_client/upgrade.c head/contrib/subversion/subversion/libsvn_delta/svndiff.c head/contrib/subversion/subversion/libsvn_diff/parse-diff.c head/contrib/subversion/subversion/libsvn_diff/util.c head/contrib/subversion/subversion/libsvn_fs_fs/caching.c head/contrib/subversion/subversion/libsvn_fs_fs/fs_fs.c head/contrib/subversion/subversion/libsvn_fs_fs/rep-cache-db.h head/contrib/subversion/subversion/libsvn_fs_fs/tree.c head/contrib/subversion/subversion/libsvn_ra_serf/commit.c head/contrib/subversion/subversion/libsvn_ra_serf/options.c head/contrib/subversion/subversion/libsvn_repos/commit.c head/contrib/subversion/subversion/libsvn_repos/load-fs-vtable.c head/contrib/subversion/subversion/libsvn_repos/rev_hunt.c head/contrib/subversion/subversion/libsvn_subr/cache-membuffer.c head/contrib/subversion/subversion/libsvn_subr/config.c head/contrib/subversion/subversion/libsvn_subr/dso.c head/contrib/subversion/subversion/libsvn_subr/error.c head/contrib/subversion/subversion/libsvn_subr/gpg_agent.c head/contrib/subversion/subversion/libsvn_subr/internal_statements.h head/contrib/subversion/subversion/libsvn_subr/io.c head/contrib/subversion/subversion/libsvn_subr/mergeinfo.c head/contrib/subversion/subversion/libsvn_subr/sqlite3wrapper.c head/contrib/subversion/subversion/libsvn_subr/string.c head/contrib/subversion/subversion/libsvn_subr/version.c head/contrib/subversion/subversion/libsvn_wc/adm_ops.c head/contrib/subversion/subversion/libsvn_wc/cleanup.c head/contrib/subversion/subversion/libsvn_wc/conflicts.c head/contrib/subversion/subversion/libsvn_wc/copy.c head/contrib/subversion/subversion/libsvn_wc/diff.h head/contrib/subversion/subversion/libsvn_wc/diff_editor.c head/contrib/subversion/subversion/libsvn_wc/diff_local.c head/contrib/subversion/subversion/libsvn_wc/entries.c head/contrib/subversion/subversion/libsvn_wc/externals.c head/contrib/subversion/subversion/libsvn_wc/update_editor.c head/contrib/subversion/subversion/libsvn_wc/wc-checks.h head/contrib/subversion/subversion/libsvn_wc/wc-metadata.h head/contrib/subversion/subversion/libsvn_wc/wc-metadata.sql head/contrib/subversion/subversion/libsvn_wc/wc-queries.h head/contrib/subversion/subversion/libsvn_wc/wc-queries.sql head/contrib/subversion/subversion/libsvn_wc/wc.h head/contrib/subversion/subversion/libsvn_wc/wc_db.c head/contrib/subversion/subversion/libsvn_wc/wc_db.h head/contrib/subversion/subversion/libsvn_wc/wc_db_private.h head/contrib/subversion/subversion/libsvn_wc/wc_db_wcroot.c head/contrib/subversion/subversion/svn/conflict-callbacks.c head/contrib/subversion/subversion/svn/list-cmd.c head/contrib/subversion/subversion/svn/svn.c head/contrib/subversion/subversion/svn_private_config.h.in head/contrib/subversion/subversion/svnadmin/svnadmin.c head/contrib/subversion/subversion/svndumpfilter/svndumpfilter.c head/contrib/subversion/subversion/svnrdump/load_editor.c head/contrib/subversion/subversion/svnserve/serve.c head/contrib/subversion/subversion/svnsync/sync.c head/contrib/subversion/win-tests.py head/usr.bin/svn/svn_private_config.h Directory Properties: head/contrib/subversion/ (props changed) Modified: head/contrib/subversion/CHANGES ============================================================================== --- head/contrib/subversion/CHANGES Sun Aug 9 05:16:14 2015 (r286505) +++ head/contrib/subversion/CHANGES Sun Aug 9 05:22:53 2015 (r286506) @@ -1,3 +1,138 @@ +Version 1.8.14 +(5 Aug 2015, from /branches/1.8.x) +http://svn.apache.org/repos/asf/subversion/tags/1.8.14 + + User-visible changes: + - Client-side bugfixes: + * document svn:autoprops (r1678494 et al.) + * cp: fix 'svn cp ^/A/D/H@1 ^/A' to properly create A (r1674455, r1674456) + * resolve: improve conflict prompts for binary files (r1667228 et al.) + * ls: improve performance of '-v' on tag directories (r1673153) + * improved Sqlite 3.8.9 query performance regression on externals (r1672295 et al.) + * fixed issue #4580: 'svn -v st' on file externals reports "?" instead + of user and revision after 'svn up' (r1680242) + + - Server-side bugfixes: + * mod_dav_svn: do not ignore skel parsing errors (r1658168) + * detect invalid svndiff data earlier (r1684077) + * prevent possible repository corruption on power/disk failures (r1680819) + * fixed issue #4577: Read error with nodes whose DELTA chain starts with + a PLAIN rep (r1676667, r1677267) + * fixed issue #4531: server-side copy (over dav) is slow and uses + too much memory (r1674627) + + Developer-visible changes: + - General: + * support building on Windows with Visual Studio 2015 (r1692785) + * avoid failing some tests on versions of Python with a very old sqlite (r1674522) + * fix Ruby tests so they don't use the users real configuration (r1597884) + + - Bindings: + * swig-pl: fix some stack memory problems (r1668618, 1671388) + +Version 1.8.13 +(31 Mar 2015, from /branches/1.8.x) +http://svn.apache.org/repos/asf/subversion/tags/1.8.13 + + User-visible changes: + - Client-side bugfixes: + * ra_serf: prevent abort of commits that have already succeeded (r1659867) + * ra_serf: support case-insensitivity in HTTP headers (r1650481, r1650489) + * better error message if an external is shadowed (r1655712, r1655738) + * ra_svn: fix reporting of directory read errors (r1656713) + * fix a redirect handling bug in 'svn log' over HTTP (r1650531) + * properly copy tree conflict information (r1658115, r1659553, r1659554) + * fix 'svn patch' output for reordered hunks (issue #4533) + * svnrdump load: don't load wrong props with no-deltas dump (issue #4551) + * fix working copy corruption with relative file external (issue #4411) + * don't crash if config file is unreadable (r1590751, r1660350) + * svn resolve: don't ask a question with only one answer (r1658417) + * fix assertion failure in svn move (r1651963 et al) + * working copy performance improvements (r1664531, r1664476, et al) + * handle existing working copies which become externals (r1660071) + * fix recording of WC meta-data for foreign repos copies (r1660593) + * fix calculating repository path of replaced directories (r1660646) + * fix calculating repository path after commit of switched nodes (r1663991) + * svnrdump: don't provide HEAD+1 as base revision for deletes (r1664684) + * don't leave conflict markers on files that are moved (r1660220, r1665874) + * avoid unnecessary subtree mergeinfo recording (r1666690) + * fix diff of a locally copied directory with props (r1619380 et al) + + - Server-side bugfixes: + * fsfs: fix a problem verifying pre-1.4 repos used with 1.8 (r1561419) + * svnadmin freeze: fix memory allocation error (r1653039) + * svnadmin load: tolerate invalid mergeinfo at r0 (r1643074, issue #4476) + * svnadmin load: strip references to r1 from mergeinfo (issue #4538) + * svnsync: strip any r0 references from mergeinfo (issue #4476) + * fsfs: reduce memory consumption when operating on dag nodes (r1655651) + * reject invalid get-location-segments requests in mod_dav_svn and + svnserve (r1667233) + * mod_dav_svn: reject invalid txnprop change requests (r1667235) + + - Client-side and server-side bugfixes: + * fix undefined behaviour in string buffer routines (r1650834) + * fix consistency issues with APR r/w locks on Windows (r1611380 et al) + * fix occasional SEGV if threads load DSOs in parallel (r1659013, r1659315) + * properly duplicate svn error objects (r1651759) + * fix use-after-free in config parser (1646785, r1646786, r1646797) + + Developer-visible changes: + * add lock file config for testing against HTTPD 2.4+ (r1544302, r1544303) + * make sqlite amalgamated build work with sqlite 3.8.x+ (r1659399) + * fix build with Ruby 2 (r1596882) + * process 'svnadmin dump' output as binary in the test suite (r1592987) + * simplify Windows resource compilation to avoid warnings (r1532287) + + +Version 1.8.12 +(Not released, see changes for 1.8.13.) + + +Version 1.8.11 +(15 Dec 2014, from /branches/1.8.x) +http://svn.apache.org/repos/asf/subversion/tags/1.8.11 + + User-visible changes: + - Client-side bugfixes: + * checkout/update: fix file externals failing to follow history and + subsequently silently failing (issue #4185) + * patch: don't skip targets in valid --git difs (r1592014, r1592034) + * diff: make property output in diffs stable (r1589360) + * diff: fix diff of local copied directory with props (r1619380, r1619393) + * diff: fix changelist filter for repos-WC and WC-WC (r1621978, r1621981) + * remove broken conflict resolver menu options that always error out + (r1620332) + * improve gpg-agent support (r1600331, r1600348, 1600368, r1600563, + r1600781) + * fix crash in eclipse IDE with GNOME Keyring (issue #3498) + * fix externals shadowing a versioned directory (issue #4085) + * fix problems working on unix file systems that don't support + permissions (r1612225) + * upgrade: keep external registrations (issue #4519) + * cleanup: iprove performance of recorded timestamp fixups (r1633126) + * translation updates for German + + - Server-side bugfixes: + * disable revprop caching feature due to cache invalidation problems + (r1543594, r1619774, r1619105, r1619118, r1619153, r1619802) + * skip generating uniquifiers if rep-sharing is not supported (r1561426) + * mod_dav_svn: reject requests with missing repository paths (r1643409) + * mod_dav_svn: reject requests with invalid virtual transaction names + (r1643437) + * mod_dav_svn: avoid unneeded memory growth in resource walking + (issue #4531) + + Developer-visible changes: + - General: + * make sure all members of the repos layer notify struct are valid, + fixes crashes in API users using all members (r1616131) + * properly generate a version resource when building on Windows (r1542610, + r1564576, r1568180) + * fix LIBTOOL_M4 and LIBTOOL_CONFIG variable not be evaluated properly + during a unix build (r1637826) + * allow the use of libtool 2.4.3 (r1640862, r1640873, r1643793) + + Version 1.8.10 (11 Aug 2014, from /branches/1.8.x) http://svn.apache.org/repos/asf/subversion/tags/1.8.10 @@ -316,7 +451,7 @@ http://svn.apache.org/repos/asf/subversi * merge: rename 'automatic merge' to 'complete merge' (r1491432) * mergeinfo: reduce network usage for '--show-revs' (r1492005) * ra_serf: improve http status handling (r1495104) - * merge: avoid unneeded ra session (r1493475) + * merge: avoid unneeded RA session (r1493475) * merge: reduce network usage (r1478987) * merge: remove duplicated ancestry check (r1493424, r1495597) * ra_serf: fix 'Accept-Encoding' header for IIS interoperability (r1497551) @@ -729,6 +864,81 @@ http://svn.apache.org/repos/asf/subversi * fix some reference counting bugs in swig-py bindings (r1464899, r1466524) +Version 1.7.21 +(5 Aug 2015, from /branches/1.7.x) +http://svn.apache.org/repos/asf/subversion/tags/1.8.21 + + User-visible changes: + - Client-side bugfixes: + * cp: fix 'svn cp ^/A/D/H@1 ^/A' to properly create A (r1674455, r1674456) + * fix issue #4551: svnrdump load commits wrong properties, or fails, on a + non-deltas dumpfile (r1652182 et al.) + + - Server-side bugfixes: + * fix 'svnadmin recover' for pre-1.4 FSFS repositories (r1561419) + + Developer-visible changes: + - General: + * support building on Windows with Visual Studio 2012, 2013 and 2015 (r1687158, r1692783) + + - Bindings: + * swig-pl: fix some stack memory problems (r1668618, 1671388) + +Version 1.7.20 +(31 Mar 2015, from /branches/1.7.x) +http://svn.apache.org/repos/asf/subversion/tags/1.7.20 + + User-visible changes: + - Client-side bugfixes: + * fix 'svn patch' output for reordered hunks (issue #4533) + + - Server-side bugfixes: + * reject invalid get-location-segments requests in mod_dav_svn and + svnserve (r1667233) + * mod_dav_svn: reject invalid txnprop change requests (r1667235) + + - Client-side and server-side bugfixes: + * properly duplicate svn error objects (r1651759) + * fix use-after-free in config parser (1646785, r1646786, r1646797) + + Developer-visible changes: + * add lock file config for testing against HTTPD 2.4+ (r1544302, r1544303) + * fix build with absolute path to neon install (r1664789) + + +Version 1.7.19 +(15 Dec 2014, from /branches/1.7.x) +http://svn.apache.org/repos/asf/subversion/tags/1.7.19 + + User-visible changes: + - Client-side bugfixes: + * rm: display the proper URL in commit log editor (r1591123) + * diff: fix invalid read during suffix scanning (issue #4339) + * fix crash in eclipse IDE with GNOME Keyring (issue #3498) + * checkout/update: fix file externals failing to follow history and + subsequently silently failing (issue #4185) + + - Server-side bugfixes: + * svnadmin dump: don't let invalid mergeinfo prevent a dump (issue #4476) + * mod_dav_svn: reject requests with missing repository paths (r1643409) + * mod_dav_svn: reject requests with invalid virtual transaction names + (r1643437) + * mod_dav_svn: avoid unneeded memory growth in resource walking + (issue #4531) + + Developer-visible changes: + - General: + * properly generate a version resource when building on Windows (r1542610, + r1564576, r1568180) + * fix a problem with the unix build that could result in linking to the + wrong Subversion libraries at build or at run time (r1594157) + * use a proper intermediate directory when building with Visual Studio + 2003-2008 (r1595431) + * fix LIBTOOL_M4 and LIBTOOL_CONFIG variable not be evaluated properly + during a unix build (r1637826) + * allow the use of libtool 2.4.3 (r1640862, r1640873, r1643793) + + Version 1.7.18 (11 Aug 2014, from /branches/1.7.x) http://svn.apache.org/repos/asf/subversion/tags/1.7.18 Modified: head/contrib/subversion/Makefile.in ============================================================================== --- head/contrib/subversion/Makefile.in Sun Aug 9 05:16:14 2015 (r286505) +++ head/contrib/subversion/Makefile.in Sun Aug 9 05:22:53 2015 (r286506) @@ -357,6 +357,7 @@ TEST_SHLIB_VAR_SWIG_RB=\ fi; APXS = @APXS@ +HTTPD_VERSION = @HTTPD_VERSION@ PYTHON = @PYTHON@ PERL = @PERL@ @@ -509,6 +510,9 @@ check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $ if test "$(HTTP_LIBRARY)" != ""; then \ flags="--http-library $(HTTP_LIBRARY) $$flags"; \ fi; \ + if test "$(HTTPD_VERSION)" != ""; then \ + flags="--httpd-version $(HTTPD_VERSION) $$flags"; \ + fi; \ if test "$(SERVER_MINOR_VERSION)" != ""; then \ flags="--server-minor-version $(SERVER_MINOR_VERSION) $$flags"; \ fi; \ Modified: head/contrib/subversion/NOTICE ============================================================================== --- head/contrib/subversion/NOTICE Sun Aug 9 05:16:14 2015 (r286505) +++ head/contrib/subversion/NOTICE Sun Aug 9 05:22:53 2015 (r286506) @@ -1,5 +1,5 @@ Apache Subversion -Copyright 2014 The Apache Software Foundation +Copyright 2015 The Apache Software Foundation This product includes software developed by many people, and distributed under Contributor License Agreements to The Apache Software Foundation Modified: head/contrib/subversion/autogen.sh ============================================================================== --- head/contrib/subversion/autogen.sh Sun Aug 9 05:16:14 2015 (r286505) +++ head/contrib/subversion/autogen.sh Sun Aug 9 05:22:53 2015 (r286506) @@ -23,6 +23,10 @@ ### Run this to produce everything needed for configuration. ### +# Some shells can produce output when running 'cd' which interferes +# with the construct 'abs=`cd dir && pwd`'. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + # Run tests to ensure that our build requirements are met RELEASE_MODE="" RELEASE_ARGS="" @@ -71,48 +75,80 @@ rm -f build/config.guess build/config.su $libtoolize --copy --automake --force ltpath="`dirname $libtoolize`" -ltfile=${LIBTOOL_M4-`cd $ltpath/../share/aclocal ; pwd`/libtool.m4} -if [ ! -f $ltfile ]; then - echo "$ltfile not found (try setting the LIBTOOL_M4 environment variable)" +if [ "x$LIBTOOL_M4" = "x" ]; then + ltm4_error='(try setting the LIBTOOL_M4 environment variable)' + if [ -d "$ltpath/../share/aclocal/." ]; then + ltm4=`cd "$ltpath/../share/aclocal" && pwd` + else + echo "Libtool helper path not found $ltm4_error" + echo " expected at: '$ltpath/../share/aclocal'" + exit 1 + fi +else + ltm4_error="(the LIBTOOL_M4 environment variable is: $LIBTOOL_M4)" + ltm4="$LIBTOOL_M4" +fi + +ltfile="$ltm4/libtool.m4" +if [ ! -f "$ltfile" ]; then + echo "$ltfile not found $ltm4_error" exit 1 fi -echo "Copying libtool helper: $ltfile" +echo "Copying libtool helper: $ltfile" # An ancient helper might already be present from previous builds, # and it might be write-protected (e.g. mode 444, seen on FreeBSD). # This would cause cp to fail and print an error message, but leave # behind a potentially outdated libtool helper. So, remove before # copying: rm -f build/libtool.m4 -cp $ltfile build/libtool.m4 +cp "$ltfile" build/libtool.m4 for file in ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4; do rm -f build/$file if [ $lt_major_version -ge 2 ]; then - ltfile=${LIBTOOL_M4-`cd $ltpath/../share/aclocal ; pwd`/$file} + ltfile="$ltm4/$file" - if [ ! -f $ltfile ]; then - echo "$ltfile not found (try setting the LIBTOOL_M4 environment variable)" + if [ ! -f "$ltfile" ]; then + echo "$ltfile not found $ltm4_error" exit 1 fi - echo "Copying libtool helper: $ltfile" - cp $ltfile build/$file + echo "Copying libtool helper: $ltfile" + cp "$ltfile" "build/$file" fi done if [ $lt_major_version -ge 2 ]; then + if [ "x$LIBTOOL_CONFIG" = "x" ]; then + ltconfig_error='(try setting the LIBTOOL_CONFIG environment variable)' + if [ -d "$ltpath/../share/libtool/config/." ]; then + ltconfig=`cd "$ltpath/../share/libtool/config" && pwd` + elif [ -d "$ltpath/../share/libtool/build-aux/." ]; then + ltconfig=`cd "$ltpath/../share/libtool/build-aux" && pwd` + else + echo "Autoconf helper path not found $ltconfig_error" + echo " expected at: '$ltpath/../share/libtool/config'" + echo " or: '$ltpath/../share/libtool/build-aux'" + exit 1 + fi + else + ltconfig_error="(the LIBTOOL_CONFIG environment variable is: $LIBTOOL_CONFIG)" + ltconfig="$LIBTOOL_CONFIG" + fi + for file in config.guess config.sub; do - configfile=${LIBTOOL_CONFIG-`cd $ltpath/../share/libtool/config ; pwd`/$file} + configfile="$ltconfig/$file" - if [ ! -f $configfile ]; then - echo "$configfile not found (try setting the LIBTOOL_CONFIG environment variable)" + if [ ! -f "$configfile" ]; then + echo "$configfile not found $ltconfig_error" exit 1 fi - cp $configfile build/$file + echo "Copying autoconf helper: $configfile" + cp "$configfile" build/$file done fi Modified: head/contrib/subversion/build-outputs.mk ============================================================================== --- head/contrib/subversion/build-outputs.mk Sun Aug 9 05:16:14 2015 (r286505) +++ head/contrib/subversion/build-outputs.mk Sun Aug 9 05:22:53 2015 (r286506) @@ -26,15 +26,15 @@ BDB_TEST_DEPS = subversion/tests/libsvn_ BDB_TEST_PROGRAMS = subversion/tests/libsvn_fs_base/changes-test$(EXEEXT) subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT) subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT) -TEST_DEPS = subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/cmdline/entries-dump$(EXEEXT) subversion/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-pack-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tes ts/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_subr/named_atomic-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/ server-side/svnauthz-validate$(EXEEXT) subve! rsion/tests/libsvn_delta/svndiff-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEEXT) subversion/tests/libsvn_delta/vdelta-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/cmdline/authz_tests.py subversion/tests/cmdline/autoprop_tests.py subversion/tests/cmdline/basic_tests.py subversion/tests/cmdline/blame_tests.py subversion/tests/cmdline/cat_tests.py subversion/tests/cmdline/changelist_tests.py subversion/tests/cmdline/checkout_tests.py subversion/tests/cmdline/commit_tests.py subversion/tests/cmdline/copy_tests.py subversion/tests/cmdline/depth_tests.py subversion/tests/cmdline/diff_tests.py subversion/tests/cmdline/entries_tests.py subver sion/tests/cmdline/export_tests.py subversion/tests/cmdline/externals_tests.py subversion/tests/cmdline/getopt_tests.py subversion/tests/cmdline/history_tests.py subversion/tests/cmdline/import_tests.py subversion/tests/cmdline/info_tests.py subversion/tests/cmdline/input_validation_tests.py subversion/tests/cmdline/iprop_authz_tests.py subversion/tests/cmdline/iprop_tests.py subversion/tests/cmdline/lock_tests.py subversion/tests/cmdline/log_tests.py subversion/tests/cmdline/merge_authz_tests.py subversion/tests/cmdline/merge_automatic_tests.py subversion/tests/cmdline/merge_reintegrate_tests.py subversion/tests/cmdline/merge_tests.py subversion/tests/cmdline/merge_tree_conflict_tests.py subversion/tests/cmdline/mergeinfo_tests.py subversion/tests/cmdline/move_tests.py subversion/tests/cmdline/patch_tests.py subversion/tests/cmdline/prop_tests.py subversion/tests/cmdline/redirect_tests.py subversion/tests/cmdline/relocate_tests.py subversion/tests/cmdline/resolve_tests.py subversio n/tests/cmdline/revert_tests.py subversion/t! ests/cmdl! ine/schedule_tests.py subversion/tests/cmdline/special_tests.py subversion/tests/cmdline/stat_tests.py subversion/tests/cmdline/svnadmin_tests.py subversion/tests/cmdline/svnauthz_tests.py subversion/tests/cmdline/svndumpfilter_tests.py subversion/tests/cmdline/svnlook_tests.py subversion/tests/cmdline/svnmucc_tests.py subversion/tests/cmdline/svnrdump_tests.py subversion/tests/cmdline/svnsync_authz_tests.py subversion/tests/cmdline/svnsync_tests.py subversion/tests/cmdline/svnversion_tests.py subversion/tests/cmdline/switch_tests.py subversion/tests/cmdline/trans_tests.py subversion/tests/cmdline/tree_conflict_tests.py subversion/tests/cmdline/update_tests.py subversion/tests/cmdline/upgrade_tests.py subversion/tests/cmdline/wc_tests.py +TEST_DEPS = subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/cmdline/entries-dump$(EXEEXT) subversion/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-pack-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tes ts/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_subr/named_atomic-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/ server-side/svnauthz-validate$(EXEEXT) subve! rsion/tests/libsvn_delta/svndiff-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEEXT) subversion/tests/libsvn_delta/vdelta-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/cmdline/authz_tests.py subversion/tests/cmdline/autoprop_tests.py subversion/tests/cmdline/basic_tests.py subversion/tests/cmdline/blame_tests.py subversion/tests/cmdline/cat_tests.py subversion/tests/cmdline/changelist_tests.py subversion/tests/cmdline/checkout_tests.py subversion/tests/cmdline/commit_tests.py subversion/tests/cmdline/copy_tests.py subversion/tests/cmdline/depth_tests.py subversion/tests/cmdline/diff_tests.py subversion/tests/cmdline/entries_tests.py subver sion/tests/cmdline/export_tests.py subversion/tests/cmdline/externals_tests.py subversion/tests/cmdline/getopt_tests.py subversion/tests/cmdline/history_tests.py subversion/tests/cmdline/import_tests.py subversion/tests/cmdline/info_tests.py subversion/tests/cmdline/input_validation_tests.py subversion/tests/cmdline/iprop_authz_tests.py subversion/tests/cmdline/iprop_tests.py subversion/tests/cmdline/lock_tests.py subversion/tests/cmdline/log_tests.py subversion/tests/cmdline/merge_authz_tests.py subversion/tests/cmdline/merge_automatic_tests.py subversion/tests/cmdline/merge_reintegrate_tests.py subversion/tests/cmdline/merge_tests.py subversion/tests/cmdline/merge_tree_conflict_tests.py subversion/tests/cmdline/mergeinfo_tests.py subversion/tests/cmdline/mod_authz_svn_tests.py subversion/tests/cmdline/move_tests.py subversion/tests/cmdline/patch_tests.py subversion/tests/cmdline/prop_tests.py subversion/tests/cmdline/redirect_tests.py subversion/tests/cmdline/relocate_tests.py sub version/tests/cmdline/resolve_tests.py subve! rsion/tes! ts/cmdline/revert_tests.py subversion/tests/cmdline/schedule_tests.py subversion/tests/cmdline/special_tests.py subversion/tests/cmdline/stat_tests.py subversion/tests/cmdline/svnadmin_tests.py subversion/tests/cmdline/svnauthz_tests.py subversion/tests/cmdline/svndumpfilter_tests.py subversion/tests/cmdline/svnlook_tests.py subversion/tests/cmdline/svnmucc_tests.py subversion/tests/cmdline/svnrdump_tests.py subversion/tests/cmdline/svnsync_authz_tests.py subversion/tests/cmdline/svnsync_tests.py subversion/tests/cmdline/svnversion_tests.py subversion/tests/cmdline/switch_tests.py subversion/tests/cmdline/trans_tests.py subversion/tests/cmdline/tree_conflict_tests.py subversion/tests/cmdline/update_tests.py subversion/tests/cmdline/upgrade_tests.py subversion/tests/cmdline/wc_tests.py -TEST_PROGRAMS = subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-pack-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tests/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn _subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_subr/named_atomic-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEE XT) subversion/tests/libsvn_wc/wc-queries-te! st$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/cmdline/authz_tests.py subversion/tests/cmdline/autoprop_tests.py subversion/tests/cmdline/basic_tests.py subversion/tests/cmdline/blame_tests.py subversion/tests/cmdline/cat_tests.py subversion/tests/cmdline/changelist_tests.py subversion/tests/cmdline/checkout_tests.py subversion/tests/cmdline/commit_tests.py subversion/tests/cmdline/copy_tests.py subversion/tests/cmdline/depth_tests.py subversion/tests/cmdline/diff_tests.py subversion/tests/cmdline/entries_tests.py subversion/tests/cmdline/export_tests.py subversion/tests/cmdline/externals_tests.py subversion/tests/cmdline/getopt_tests.py subversion/tests/cmdline/history_tests.py subversion/tests/cmdline/import_tests.py subversion/tests/cmdline/info_tests.py subversion/tests/cmdline/input_validation_tests.py subversion/tests/cmdline/iprop_authz_tests.py subversion/tests/cmdline/iprop_tests.py subversion/test s/cmdline/lock_tests.py subversion/tests/cmdline/log_tests.py subversion/tests/cmdline/merge_authz_tests.py subversion/tests/cmdline/merge_automatic_tests.py subversion/tests/cmdline/merge_reintegrate_tests.py subversion/tests/cmdline/merge_tests.py subversion/tests/cmdline/merge_tree_conflict_tests.py subversion/tests/cmdline/mergeinfo_tests.py subversion/tests/cmdline/move_tests.py subversion/tests/cmdline/patch_tests.py subversion/tests/cmdline/prop_tests.py subversion/tests/cmdline/redirect_tests.py subversion/tests/cmdline/relocate_tests.py subversion/tests/cmdline/resolve_tests.py subversion/tests/cmdline/revert_tests.py subversion/tests/cmdline/schedule_tests.py subversion/tests/cmdline/special_tests.py subversion/tests/cmdline/stat_tests.py subversion/tests/cmdline/svnadmin_tests.py subversion/tests/cmdline/svnauthz_tests.py subversion/tests/cmdline/svndumpfilter_tests.py subversion/tests/cmdline/svnlook_tests.py subversion/tests/cmdline/svnmucc_tests.py subversion/tests/cmd line/svnrdump_tests.py subversion/tests/cmdl! ine/svnsy! nc_authz_tests.py subversion/tests/cmdline/svnsync_tests.py subversion/tests/cmdline/svnversion_tests.py subversion/tests/cmdline/switch_tests.py subversion/tests/cmdline/trans_tests.py subversion/tests/cmdline/tree_conflict_tests.py subversion/tests/cmdline/update_tests.py subversion/tests/cmdline/upgrade_tests.py subversion/tests/cmdline/wc_tests.py +TEST_PROGRAMS = subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-pack-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tests/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn _subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_subr/named_atomic-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEE XT) subversion/tests/libsvn_wc/wc-queries-te! st$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/cmdline/authz_tests.py subversion/tests/cmdline/autoprop_tests.py subversion/tests/cmdline/basic_tests.py subversion/tests/cmdline/blame_tests.py subversion/tests/cmdline/cat_tests.py subversion/tests/cmdline/changelist_tests.py subversion/tests/cmdline/checkout_tests.py subversion/tests/cmdline/commit_tests.py subversion/tests/cmdline/copy_tests.py subversion/tests/cmdline/depth_tests.py subversion/tests/cmdline/diff_tests.py subversion/tests/cmdline/entries_tests.py subversion/tests/cmdline/export_tests.py subversion/tests/cmdline/externals_tests.py subversion/tests/cmdline/getopt_tests.py subversion/tests/cmdline/history_tests.py subversion/tests/cmdline/import_tests.py subversion/tests/cmdline/info_tests.py subversion/tests/cmdline/input_validation_tests.py subversion/tests/cmdline/iprop_authz_tests.py subversion/tests/cmdline/iprop_tests.py subversion/test s/cmdline/lock_tests.py subversion/tests/cmdline/log_tests.py subversion/tests/cmdline/merge_authz_tests.py subversion/tests/cmdline/merge_automatic_tests.py subversion/tests/cmdline/merge_reintegrate_tests.py subversion/tests/cmdline/merge_tests.py subversion/tests/cmdline/merge_tree_conflict_tests.py subversion/tests/cmdline/mergeinfo_tests.py subversion/tests/cmdline/mod_authz_svn_tests.py subversion/tests/cmdline/move_tests.py subversion/tests/cmdline/patch_tests.py subversion/tests/cmdline/prop_tests.py subversion/tests/cmdline/redirect_tests.py subversion/tests/cmdline/relocate_tests.py subversion/tests/cmdline/resolve_tests.py subversion/tests/cmdline/revert_tests.py subversion/tests/cmdline/schedule_tests.py subversion/tests/cmdline/special_tests.py subversion/tests/cmdline/stat_tests.py subversion/tests/cmdline/svnadmin_tests.py subversion/tests/cmdline/svnauthz_tests.py subversion/tests/cmdline/svndumpfilter_tests.py subversion/tests/cmdline/svnlook_tests.py subversion/tes ts/cmdline/svnmucc_tests.py subversion/tests! /cmdline/! svnrdump_tests.py subversion/tests/cmdline/svnsync_authz_tests.py subversion/tests/cmdline/svnsync_tests.py subversion/tests/cmdline/svnversion_tests.py subversion/tests/cmdline/switch_tests.py subversion/tests/cmdline/trans_tests.py subversion/tests/cmdline/tree_conflict_tests.py subversion/tests/cmdline/update_tests.py subversion/tests/cmdline/upgrade_tests.py subversion/tests/cmdline/wc_tests.py check-deps test-deps: subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/cmdline/entries-dump$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT) subversion/tests/libsvn_delta/svndiff-test$(EXEEXT) subversion/tests/libsvn_delta/vdelta-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT) MANPAGES = subversion/svn/svn.1 subversion/svnadmin/svnadmin.1 subversion/svndumpfilter/svndumpfilter.1 subversion/svnlook/svnlook.1 subversion/svnmucc/svnmucc.1 subversion/svnrdump/svnrdump.1 subversion/svnserve/svnserve.8 subversion/svnserve/svnserve.conf.5 subversion/svnsync/svnsync.1 subversion/svnversion/svnversion.1 -CLEAN_FILES = subversion/bindings/cxxhl/cxxhl-tests$(EXEEXT) subversion/svn/svn$(EXEEXT) subversion/svnadmin/svnadmin$(EXEEXT) subversion/svndumpfilter/svndumpfilter$(EXEEXT) subversion/svnlook/svnlook$(EXEEXT) subversion/svnmucc/svnmucc$(EXEEXT) subversion/svnrdump/svnrdump$(EXEEXT) subversion/svnserve/svnserve$(EXEEXT) subversion/svnsync/svnsync$(EXEEXT) subversion/svnversion/svnversion$(EXEEXT) subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/cmdline/authz_tests.pyc subversion/tests/cmdline/autoprop_tests.pyc subversion/tests/cmdline/basic_tests.pyc subversion/tests/cmdline/blame_tests.pyc subversion/tests/cmdline/cat_tests.pyc subversion/tests/cmdline/changelist_tests.pyc subversion/tests/cmdline/checkout_tests.pyc subversion/tests/cmdline/commit_tests.pyc subversion/tests/cmdline/copy_tests.pyc subversion/tests/cmdline/depth_tests.pyc subversion/tests/cmdline/diff_tests.pyc subversion/tests/cmdline/entries-dump$(EXEEXT) subversion/tests/cmdline/entrie s_tests.pyc subversion/tests/cmdline/export_tests.pyc subversion/tests/cmdline/externals_tests.pyc subversion/tests/cmdline/getopt_tests.pyc subversion/tests/cmdline/history_tests.pyc subversion/tests/cmdline/import_tests.pyc subversion/tests/cmdline/info_tests.pyc subversion/tests/cmdline/input_validation_tests.pyc subversion/tests/cmdline/iprop_authz_tests.pyc subversion/tests/cmdline/iprop_tests.pyc subversion/tests/cmdline/lock_tests.pyc subversion/tests/cmdline/log_tests.pyc subversion/tests/cmdline/merge_authz_tests.pyc subversion/tests/cmdline/merge_automatic_tests.pyc subversion/tests/cmdline/merge_reintegrate_tests.pyc subversion/tests/cmdline/merge_tests.pyc subversion/tests/cmdline/merge_tree_conflict_tests.pyc subversion/tests/cmdline/mergeinfo_tests.pyc subversion/tests/cmdline/move_tests.pyc subversion/tests/cmdline/patch_tests.pyc subversion/tests/cmdline/prop_tests.pyc subversion/tests/cmdline/redirect_tests.pyc subversion/tests/cmdline/relocate_tests.pyc subversion/ tests/cmdline/resolve_tests.pyc subversion/t! ests/cmdline/revert_tests.pyc subversion/tests/cmdline/schedule_tests.pyc subversion/tests/cmdline/special_tests.pyc subversion/tests/cmdline/stat_tests.pyc subversion/tests/cmdline/svnadmin_tests.pyc subversion/tests/cmdline/svnauthz_tests.pyc subversion/tests/cmdline/svndumpfilter_tests.pyc subversion/tests/cmdline/svnlook_tests.pyc subversion/tests/cmdline/svnmucc_tests.pyc subversion/tests/cmdline/svnrdump_tests.pyc subversion/tests/cmdline/svnsync_authz_tests.pyc subversion/tests/cmdline/svnsync_tests.pyc subversion/tests/cmdline/svnversion_tests.pyc subversion/tests/cmdline/switch_tests.pyc subversion/tests/cmdline/trans_tests.pyc subversion/tests/cmdline/tree_conflict_tests.pyc subversion/tests/cmdline/update_tests.pyc subversion/tests/cmdline/upgrade_tests.pyc subversion/tests/cmdline/wc_tests.pyc subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_delta/svndiff-test$(EXEEXT) subversion/tests/libsvn_d elta/vdelta-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn_fs_base/changes-test$(EXEEXT) subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT) subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-pack-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_subr/error-code-tes! t$(EXEEXT! ) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tests/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_subr/named_atomic-proc-test$(EXEEXT) subversion/tests/libsvn_subr/named_atomic-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_w c/entries-compat-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) tools/client-side/svn-bench/svn-bench$(EXEEXT) tools/dev/fsfs-access-map$(EXEEXT) tools/dev/fsfs-reorg$(EXEEXT) tools/dev/svnraisetreeconflict/svnraisetreeconflict$(EXEEXT) tools/diff/diff$(EXEEXT) tools/diff/diff3$(EXEEXT) tools/diff/diff4$(EXEEXT) tools/server-side/fsfs-stats$(EXEEXT) tools/server-side/svn-populate-node-origins-index$(EXEEXT) tools/server-side/svn-rep-sharing-stats$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT) +CLEAN_FILES = subversion/bindings/cxxhl/cxxhl-tests$(EXEEXT) subversion/svn/svn$(EXEEXT) subversion/svnadmin/svnadmin$(EXEEXT) subversion/svndumpfilter/svndumpfilter$(EXEEXT) subversion/svnlook/svnlook$(EXEEXT) subversion/svnmucc/svnmucc$(EXEEXT) subversion/svnrdump/svnrdump$(EXEEXT) subversion/svnserve/svnserve$(EXEEXT) subversion/svnsync/svnsync$(EXEEXT) subversion/svnversion/svnversion$(EXEEXT) subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/cmdline/authz_tests.pyc subversion/tests/cmdline/autoprop_tests.pyc subversion/tests/cmdline/basic_tests.pyc subversion/tests/cmdline/blame_tests.pyc subversion/tests/cmdline/cat_tests.pyc subversion/tests/cmdline/changelist_tests.pyc subversion/tests/cmdline/checkout_tests.pyc subversion/tests/cmdline/commit_tests.pyc subversion/tests/cmdline/copy_tests.pyc subversion/tests/cmdline/depth_tests.pyc subversion/tests/cmdline/diff_tests.pyc subversion/tests/cmdline/entries-dump$(EXEEXT) subversion/tests/cmdline/entrie s_tests.pyc subversion/tests/cmdline/export_tests.pyc subversion/tests/cmdline/externals_tests.pyc subversion/tests/cmdline/getopt_tests.pyc subversion/tests/cmdline/history_tests.pyc subversion/tests/cmdline/import_tests.pyc subversion/tests/cmdline/info_tests.pyc subversion/tests/cmdline/input_validation_tests.pyc subversion/tests/cmdline/iprop_authz_tests.pyc subversion/tests/cmdline/iprop_tests.pyc subversion/tests/cmdline/lock_tests.pyc subversion/tests/cmdline/log_tests.pyc subversion/tests/cmdline/merge_authz_tests.pyc subversion/tests/cmdline/merge_automatic_tests.pyc subversion/tests/cmdline/merge_reintegrate_tests.pyc subversion/tests/cmdline/merge_tests.pyc subversion/tests/cmdline/merge_tree_conflict_tests.pyc subversion/tests/cmdline/mergeinfo_tests.pyc subversion/tests/cmdline/mod_authz_svn_tests.pyc subversion/tests/cmdline/move_tests.pyc subversion/tests/cmdline/patch_tests.pyc subversion/tests/cmdline/prop_tests.pyc subversion/tests/cmdline/redirect_tests.pyc subver sion/tests/cmdline/relocate_tests.pyc subver! sion/tests/cmdline/resolve_tests.pyc subversion/tests/cmdline/revert_tests.pyc subversion/tests/cmdline/schedule_tests.pyc subversion/tests/cmdline/special_tests.pyc subversion/tests/cmdline/stat_tests.pyc subversion/tests/cmdline/svnadmin_tests.pyc subversion/tests/cmdline/svnauthz_tests.pyc subversion/tests/cmdline/svndumpfilter_tests.pyc subversion/tests/cmdline/svnlook_tests.pyc subversion/tests/cmdline/svnmucc_tests.pyc subversion/tests/cmdline/svnrdump_tests.pyc subversion/tests/cmdline/svnsync_authz_tests.pyc subversion/tests/cmdline/svnsync_tests.pyc subversion/tests/cmdline/svnversion_tests.pyc subversion/tests/cmdline/switch_tests.pyc subversion/tests/cmdline/trans_tests.pyc subversion/tests/cmdline/tree_conflict_tests.pyc subversion/tests/cmdline/update_tests.pyc subversion/tests/cmdline/upgrade_tests.pyc subversion/tests/cmdline/wc_tests.pyc subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_delt a/svndiff-test$(EXEEXT) subversion/tests/libsvn_delta/vdelta-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn_fs_base/changes-test$(EXEEXT) subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT) subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-pack-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subv ersion/tests/libsvn_subr/dirent_uri-test$(EX! EEXT) sub! version/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tests/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_subr/named_atomic-proc-test$(EXEEXT) subversion/tests/libsvn_subr/named_atomic-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/lib svn_wc/db-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) tools/client-side/svn-bench/svn-bench$(EXEEXT) tools/dev/fsfs-access-map$(EXEEXT) tools/dev/fsfs-reorg$(EXEEXT) tools/dev/svnraisetreeconflict/svnraisetreeconflict$(EXEEXT) tools/diff/diff$(EXEEXT) tools/diff/diff3$(EXEEXT) tools/diff/diff4$(EXEEXT) tools/server-side/fsfs-stats$(EXEEXT) tools/server-side/svn-populate-node-origins-index$(EXEEXT) tools/server-side/svn-rep-sharing-stats$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT) EXTRACLEAN_FILES = subversion/libsvn_fs_fs/rep-cache-db.h subversion/libsvn_subr/internal_statements.h subversion/libsvn_wc/wc-queries.h SWIG_INCLUDES = -I$(abs_builddir)/subversion \ @@ -2087,7 +2087,7 @@ subversion/libsvn_diff/parse-diff.lo: su subversion/libsvn_diff/token.lo: subversion/libsvn_diff/token.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_diff/diff.h -subversion/libsvn_diff/util.lo: subversion/libsvn_diff/util.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_diff/diff.h subversion/svn_private_config.h +subversion/libsvn_diff/util.lo: subversion/libsvn_diff/util.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_diff/diff.h subversion/svn_private_config.h subversion/libsvn_fs/access.lo: subversion/libsvn_fs/access.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h @@ -2219,7 +2219,7 @@ subversion/libsvn_ra_serf/merge.lo: subv subversion/libsvn_ra_serf/mergeinfo.lo: subversion/libsvn_ra_serf/mergeinfo.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h -subversion/libsvn_ra_serf/options.lo: subversion/libsvn_ra_serf/options.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_co nfig.h +subversion/libsvn_ra_serf/options.lo: subversion/libsvn_ra_serf/options.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_s erf.h subversion/svn_private_config.h subversion/libsvn_ra_serf/property.lo: subversion/libsvn_ra_serf/property.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra_serf/blncac he.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h @@ -2269,7 +2269,7 @@ subversion/libsvn_repos/fs-wrap.lo: subv subversion/libsvn_repos/hooks.lo: subversion/libsvn_repos/hooks.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h -subversion/libsvn_repos/load-fs-vtable.lo: subversion/libsvn_repos/load-fs-vtable.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h +subversion/libsvn_repos/load-fs-vtable.lo: subversion/libsvn_repos/load-fs-vtable.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_repos_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h subversion/libsvn_repos/load.lo: subversion/libsvn_repos/load.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mergeinfo_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h @@ -2331,13 +2331,13 @@ subversion/libsvn_subr/deprecated.lo: su subversion/libsvn_subr/dirent_uri.lo: subversion/libsvn_subr/dirent_uri.c subversion/include/private/svn_cert.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/dirent_uri.h subversion/svn_private_config.h -subversion/libsvn_subr/dso.lo: subversion/libsvn_subr/dso.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h +subversion/libsvn_subr/dso.lo: subversion/libsvn_subr/dso.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/libsvn_subr/eol.lo: subversion/libsvn_subr/eol.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_eol_private.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/error.lo: subversion/libsvn_subr/error.c subversion/include/private/svn_debug.h subversion/include/private/svn_error_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h -subversion/libsvn_subr/gpg_agent.lo: subversion/libsvn_subr/gpg_agent.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h +subversion/libsvn_subr/gpg_agent.lo: subversion/libsvn_subr/gpg_agent.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/svn_private_config.h subversion/libsvn_subr/hash.lo: subversion/libsvn_subr/hash.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/svn_private_config.h @@ -2513,7 +2513,7 @@ subversion/libsvn_wc/wcroot_anchor.lo: s subversion/libsvn_wc/workqueue.lo: subversion/libsvn_wc/workqueue.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/trans late.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h -subversion/mod_authz_svn/mod_authz_svn.lo: subversion/mod_authz_svn/mod_authz_svn.c subversion/include/mod_authz_svn.h subversion/include/mod_dav_svn.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h +subversion/mod_authz_svn/mod_authz_svn.lo: subversion/mod_authz_svn/mod_authz_svn.c subversion/include/mod_authz_svn.h subversion/include/mod_dav_svn.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_authz_svn/mod_authz_svn.c ; else echo "fake" > subversion/mod_authz_svn/mod_authz_svn.lo ; fi subversion/mod_dav_svn/activity.lo: subversion/mod_dav_svn/activity.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h @@ -2727,7 +2727,7 @@ subversion/svnserve/winservice.lo: subve subversion/svnsync/svnsync.lo: subversion/svnsync/svnsync.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/s vn_private_config.h subversion/svnsync/sync.h -subversion/svnsync/sync.lo: subversion/svnsync/sync.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h subversion/svnsync/sync.h +subversion/svnsync/sync.lo: subversion/svnsync/sync.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h subversion/svnsync/sync.h subversion/svnversion/svnversion.lo: subversion/svnversion/svnversion.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h @@ -2759,15 +2759,15 @@ subversion/tests/libsvn_fs_base/fs-base- subversion/tests/libsvn_fs_base/strings-reps-test.lo: subversion/tests/libsvn_fs_base/strings-reps-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/reps-table.h subversion/libsvn_fs_base/bdb/strings-table.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/svn_private_config.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h -subversion/tests/libsvn_fs_fs/fs-pack-test.lo: subversion/tests/libsvn_fs_fs/fs-pack-test.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_named_atomic.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h su bversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_fs/fs.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h +subversion/tests/libsvn_fs_fs/fs-pack-test.lo: subversion/tests/libsvn_fs_fs/fs-pack-test.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_named_atomic.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h sub version/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_fs/fs.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h -subversion/tests/libsvn_ra/ra-test.lo: subversion/tests/libsvn_ra/ra-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra_local/ra_local.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h +subversion/tests/libsvn_ra/ra-test.lo: subversion/tests/libsvn_ra/ra-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_ra_local/ra_local.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h subversion/tests/libsvn_ra_local/ra-local-test.lo: subversion/tests/libsvn_ra_local/ra-local-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_ra_local/ra_local.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h subversion/tests/libsvn_repos/dir-delta-editor.lo: subversion/tests/libsvn_repos/dir-delta-editor.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/libsvn_repos/dir-delta-editor.h subversion/tests/svn_test.h -subversion/tests/libsvn_repos/repos-test.lo: subversion/tests/libsvn_repos/repos-test.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/tests/libsvn_repos/dir-delta-editor.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h +subversion/tests/libsvn_repos/repos-test.lo: subversion/tests/libsvn_repos/repos-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_repos_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/tests/libsvn_repos/dir-delta-editor.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h subversion/tests/libsvn_subr/auth-test.lo: subversion/tests/libsvn_subr/auth-test.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/tests/svn_test.h Modified: head/contrib/subversion/build.conf ============================================================================== --- head/contrib/subversion/build.conf Sun Aug 9 05:16:14 2015 (r286505) +++ head/contrib/subversion/build.conf Sun Aug 9 05:22:53 2015 (r286506) @@ -1357,6 +1357,7 @@ install = tools libs = libsvn_repos libsvn_fs libsvn_subr apr [svn-populate-node-origins-index] +description = Tool to populate the node origins index of a repository type = exe path = tools/server-side sources = svn-populate-node-origins-index.c Modified: head/contrib/subversion/configure ============================================================================== --- head/contrib/subversion/configure Sun Aug 9 05:16:14 2015 (r286505) +++ head/contrib/subversion/configure Sun Aug 9 05:22:53 2015 (r286506) @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for subversion 1.8.10. +# Generated by GNU Autoconf 2.69 for subversion 1.8.14. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='subversion' PACKAGE_TARNAME='subversion' -PACKAGE_VERSION='1.8.10' -PACKAGE_STRING='subversion 1.8.10' +PACKAGE_VERSION='1.8.14' +PACKAGE_STRING='subversion 1.8.14' PACKAGE_BUGREPORT='http://subversion.apache.org/' PACKAGE_URL='' @@ -753,6 +753,7 @@ LIBTOOL SVN_BINDIR SVN_SQLITE_LIBS SVN_SQLITE_INCLUDES +HTTPD_VERSION INSTALL_APACHE_MODS APACHE_LIBEXECDIR APACHE_INCLUDES @@ -857,6 +858,7 @@ with_serf with_apr_memcache with_apxs with_apache_libexecdir +enable_broken_httpd_auth with_sqlite enable_sqlite_compatibility_version enable_shared @@ -1457,7 +1459,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures subversion 1.8.10 to adapt to many kinds of systems. +\`configure' configures subversion 1.8.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1523,7 +1525,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of subversion 1.8.10:";; + short | recursive ) echo "Configuration of subversion 1.8.14:";; esac cat <<\_ACEOF @@ -1531,6 +1533,8 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-broken-httpd-auth + Allow building against httpd 2.4 with broken auth --enable-sqlite-compatibility-version=X.Y.Z Allow binary to run against SQLite as old as ARG --enable-shared[=PKGS] build shared libraries [default=yes] @@ -1606,8 +1610,8 @@ Optional Packages: --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). --with-trang=PATH Specify the command to run the trang schema converter --with-doxygen=PATH Specify the command to run doxygen @@ -1737,7 +1741,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -subversion configure 1.8.10 +subversion configure 1.8.14 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2281,7 +2285,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by subversion $as_me 1.8.10, which was +It was created by subversion $as_me 1.8.14, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2661,8 +2665,8 @@ ac_configure="$SHELL $ac_aux_dir/configu -{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.8.10" >&5 -$as_echo "$as_me: Configuring Subversion 1.8.10" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.8.14" >&5 +$as_echo "$as_me: Configuring Subversion 1.8.14" >&6;} abs_srcdir="`cd $srcdir && pwd`" @@ -5817,6 +5821,25 @@ if test -n "$APXS" && test "$APXS" != "n BUILD_APACHE_RULE=apache-mod INSTALL_APACHE_RULE=install-mods-shared INSTALL_APACHE_MODS=true + HTTPD="`$APXS -q sbindir`/`$APXS -q PROGNAME`" + if ! test -e $HTTPD ; then + HTTPD="`$APXS -q bindir`/`$APXS -q PROGNAME`" + fi + HTTPD_VERSION="`$HTTPD -v | $SED -e 's@^.*/\([0-9.]*\)\(.*$\)@\1@ ; 1q'`" + # Check whether --enable-broken-httpd-auth was given. +if test "${enable_broken_httpd_auth+set}" = set; then : + enableval=$enable_broken_httpd_auth; broken_httpd_auth=$enableval +else + broken_httpd_auth=no +fi + + if test "$enable_broken_httpd_auth" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Building with broken httpd auth" >&5 +$as_echo "$as_me: Building with broken httpd auth" >&6;} + +$as_echo "#define SVN_ALLOW_BROKEN_HTTPD_AUTH 1" >>confdefs.h + + fi case $host in *-*-cygwin*) @@ -5836,6 +5859,7 @@ fi + # there aren't any flags that interest us ... #if test -n "$APXS" && test "$APXS" != "no"; then # CFLAGS="$CFLAGS `$APXS -q CFLAGS CFLAGS_SHLIB`" @@ -7256,8 +7280,8 @@ esac -macro_version='2.4.2' -macro_revision='1.3337' +macro_version='2.4.2.458.26-92994' +macro_revision='2.4.3' @@ -7271,7 +7295,7 @@ macro_revision='1.3337' -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. @@ -7320,7 +7344,7 @@ func_echo_all () $ECHO "" } -case "$ECHO" in +case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 @@ -7513,19 +7537,19 @@ test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld -if test "$GCC" = yes; then +if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw + # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; @@ -7539,7 +7563,7 @@ $as_echo_n "checking for ld used by $CC. while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done - test -z "$LD" && LD="$ac_prog" + test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. @@ -7550,7 +7574,7 @@ $as_echo_n "checking for ld used by $CC. with_gnu_ld=unknown ;; esac -elif test "$with_gnu_ld" = yes; then +elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else @@ -7561,32 +7585,32 @@ if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" + lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } @@ -7629,33 +7653,38 @@ if ${lt_cv_path_NM+:} false; then : else if test -n "$NM"; then # Let the user override the test. - lt_cv_path_NM="$NM" + lt_cv_path_NM=$NM else - lt_nm_to_check="${ac_tool_prefix}nm" + lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" - break + break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" - break + break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but @@ -7666,15 +7695,15 @@ else esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : @@ -7780,9 +7809,9 @@ esac fi fi - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) - DUMPBIN="$DUMPBIN -symbols" + DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: @@ -7790,8 +7819,8 @@ fi esac fi - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi test -z "$NM" && NM=nm @@ -7831,7 +7860,7 @@ if ${lt_cv_sys_max_cmd_len+:} false; the $as_echo_n "(cached) " >&6 else i=0 - teststring="ABCD" + teststring=ABCD case $build_os in msdosdjgpp*) @@ -7871,7 +7900,7 @@ else lt_cv_sys_max_cmd_len=8192; ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -7921,22 +7950,23 @@ else ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do + for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough + test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring @@ -7954,7 +7984,7 @@ else fi -if test -n $lt_cv_sys_max_cmd_len ; then +if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else @@ -7972,30 +8002,6 @@ max_cmd_len=$lt_cv_sys_max_cmd_len : ${MV="mv -f"} : ${RM="rm -f"} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else @@ -8118,13 +8124,13 @@ esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then + if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi @@ -8252,13 +8258,13 @@ lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. +# 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) @@ -8285,8 +8291,7 @@ mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else @@ -8322,10 +8327,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -8364,7 +8365,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; @@ -8386,8 +8387,8 @@ newos6*) lt_cv_deplibs_check_method=pass_all ;; -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' @@ -8597,8 +8598,8 @@ else case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib @@ -8610,7 +8611,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" + lt_cv_sharedlib_from_linklib_cmd=$ECHO *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Sun Aug 9 05:38:32 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AA39599D388; Sun, 9 Aug 2015 05:38:32 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 936F8B66; Sun, 9 Aug 2015 05:38:32 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t795cWbk077154; Sun, 9 Aug 2015 05:38:32 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t795cWgJ077153; Sun, 9 Aug 2015 05:38:32 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508090538.t795cWgJ077153@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Sun, 9 Aug 2015 05:38:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286509 - head/usr.bin/svn/svnversion X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 05:38:32 -0000 Author: peter Date: Sun Aug 9 05:38:31 2015 New Revision: 286509 URL: https://svnweb.freebsd.org/changeset/base/286509 Log: Fix typo introduced in r275079 Modified: head/usr.bin/svn/svnversion/Makefile Modified: head/usr.bin/svn/svnversion/Makefile ============================================================================== --- head/usr.bin/svn/svnversion/Makefile Sun Aug 9 05:28:45 2015 (r286508) +++ head/usr.bin/svn/svnversion/Makefile Sun Aug 9 05:38:31 2015 (r286509) @@ -27,6 +27,6 @@ LDADD= -L${LIBSVN_WCDIR} -lsvn_wc \ LIBADD+= bsdxml sqlite3 z pthread DPADD= ${LIBSVN_WC} ${LIBSVN_DELTA} ${LIBSVN_DIFF} ${LIBSVN_SUBR} \ - ${LIBSERF} ${LIBAPR_UTIL}${LIBAPR} + ${LIBSERF} ${LIBAPR_UTIL} ${LIBAPR} .include From owner-svn-src-head@freebsd.org Sun Aug 9 05:45:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 42AE999D4BF; Sun, 9 Aug 2015 05:45:01 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 32557EF3; Sun, 9 Aug 2015 05:45:01 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t795j1fq081105; Sun, 9 Aug 2015 05:45:01 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t795iwmh081084; Sun, 9 Aug 2015 05:44:58 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508090544.t795iwmh081084@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Sun, 9 Aug 2015 05:44:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286510 - head/contrib/sqlite3 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 05:45:01 -0000 Author: peter Date: Sun Aug 9 05:44:57 2015 New Revision: 286510 URL: https://svnweb.freebsd.org/changeset/base/286510 Log: Update the private sqlite3 from 3.8.9 to 3.8.11.1 (used by svnlite and kerberos) Modified: head/contrib/sqlite3/Makefile.am head/contrib/sqlite3/Makefile.in head/contrib/sqlite3/configure head/contrib/sqlite3/configure.ac head/contrib/sqlite3/shell.c head/contrib/sqlite3/sqlite3.c head/contrib/sqlite3/sqlite3.h head/contrib/sqlite3/sqlite3ext.h Directory Properties: head/contrib/sqlite3/ (props changed) Modified: head/contrib/sqlite3/Makefile.am ============================================================================== --- head/contrib/sqlite3/Makefile.am Sun Aug 9 05:38:31 2015 (r286509) +++ head/contrib/sqlite3/Makefile.am Sun Aug 9 05:44:57 2015 (r286510) @@ -6,9 +6,9 @@ libsqlite3_la_SOURCES = sqlite3.c libsqlite3_la_LDFLAGS = -no-undefined -version-info 8:6:8 bin_PROGRAMS = sqlite3 -sqlite3_SOURCES = shell.c sqlite3.h -sqlite3_LDADD = $(top_builddir)/libsqlite3.la @READLINE_LIBS@ -sqlite3_DEPENDENCIES = $(top_builddir)/libsqlite3.la +sqlite3_SOURCES = shell.c sqlite3.c sqlite3.h +sqlite3_LDADD = @READLINE_LIBS@ +sqlite3_CFLAGS = $(AM_CFLAGS) include_HEADERS = sqlite3.h sqlite3ext.h Modified: head/contrib/sqlite3/Makefile.in ============================================================================== --- head/contrib/sqlite3/Makefile.in Sun Aug 9 05:38:31 2015 (r286509) +++ head/contrib/sqlite3/Makefile.in Sun Aug 9 05:44:57 2015 (r286510) @@ -107,8 +107,12 @@ libsqlite3_la_LINK = $(LIBTOOL) --tag=CC $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libsqlite3_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(bin_PROGRAMS) -am_sqlite3_OBJECTS = shell.$(OBJEXT) +am_sqlite3_OBJECTS = sqlite3-shell.$(OBJEXT) sqlite3-sqlite3.$(OBJEXT) sqlite3_OBJECTS = $(am_sqlite3_OBJECTS) +sqlite3_DEPENDENCIES = +sqlite3_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(sqlite3_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -272,9 +276,9 @@ AM_CFLAGS = @THREADSAFE_FLAGS@ @DYNAMIC_ lib_LTLIBRARIES = libsqlite3.la libsqlite3_la_SOURCES = sqlite3.c libsqlite3_la_LDFLAGS = -no-undefined -version-info 8:6:8 -sqlite3_SOURCES = shell.c sqlite3.h -sqlite3_LDADD = $(top_builddir)/libsqlite3.la @READLINE_LIBS@ -sqlite3_DEPENDENCIES = $(top_builddir)/libsqlite3.la +sqlite3_SOURCES = shell.c sqlite3.c sqlite3.h +sqlite3_LDADD = @READLINE_LIBS@ +sqlite3_CFLAGS = $(AM_CFLAGS) include_HEADERS = sqlite3.h sqlite3ext.h EXTRA_DIST = sqlite3.1 tea pkgconfigdir = ${libdir}/pkgconfig @@ -402,7 +406,7 @@ clean-binPROGRAMS: rm -f $$list sqlite3$(EXEEXT): $(sqlite3_OBJECTS) $(sqlite3_DEPENDENCIES) $(EXTRA_sqlite3_DEPENDENCIES) @rm -f sqlite3$(EXEEXT) - $(LINK) $(sqlite3_OBJECTS) $(sqlite3_LDADD) $(LIBS) + $(sqlite3_LINK) $(sqlite3_OBJECTS) $(sqlite3_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -410,7 +414,8 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shell.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sqlite3-shell.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sqlite3-sqlite3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sqlite3.Plo@am__quote@ .c.o: @@ -434,6 +439,34 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +sqlite3-shell.o: shell.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sqlite3_CFLAGS) $(CFLAGS) -MT sqlite3-shell.o -MD -MP -MF $(DEPDIR)/sqlite3-shell.Tpo -c -o sqlite3-shell.o `test -f 'shell.c' || echo '$(srcdir)/'`shell.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sqlite3-shell.Tpo $(DEPDIR)/sqlite3-shell.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shell.c' object='sqlite3-shell.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sqlite3_CFLAGS) $(CFLAGS) -c -o sqlite3-shell.o `test -f 'shell.c' || echo '$(srcdir)/'`shell.c + +sqlite3-shell.obj: shell.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sqlite3_CFLAGS) $(CFLAGS) -MT sqlite3-shell.obj -MD -MP -MF $(DEPDIR)/sqlite3-shell.Tpo -c -o sqlite3-shell.obj `if test -f 'shell.c'; then $(CYGPATH_W) 'shell.c'; else $(CYGPATH_W) '$(srcdir)/shell.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sqlite3-shell.Tpo $(DEPDIR)/sqlite3-shell.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shell.c' object='sqlite3-shell.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sqlite3_CFLAGS) $(CFLAGS) -c -o sqlite3-shell.obj `if test -f 'shell.c'; then $(CYGPATH_W) 'shell.c'; else $(CYGPATH_W) '$(srcdir)/shell.c'; fi` + +sqlite3-sqlite3.o: sqlite3.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sqlite3_CFLAGS) $(CFLAGS) -MT sqlite3-sqlite3.o -MD -MP -MF $(DEPDIR)/sqlite3-sqlite3.Tpo -c -o sqlite3-sqlite3.o `test -f 'sqlite3.c' || echo '$(srcdir)/'`sqlite3.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sqlite3-sqlite3.Tpo $(DEPDIR)/sqlite3-sqlite3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sqlite3.c' object='sqlite3-sqlite3.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sqlite3_CFLAGS) $(CFLAGS) -c -o sqlite3-sqlite3.o `test -f 'sqlite3.c' || echo '$(srcdir)/'`sqlite3.c + +sqlite3-sqlite3.obj: sqlite3.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sqlite3_CFLAGS) $(CFLAGS) -MT sqlite3-sqlite3.obj -MD -MP -MF $(DEPDIR)/sqlite3-sqlite3.Tpo -c -o sqlite3-sqlite3.obj `if test -f 'sqlite3.c'; then $(CYGPATH_W) 'sqlite3.c'; else $(CYGPATH_W) '$(srcdir)/sqlite3.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sqlite3-sqlite3.Tpo $(DEPDIR)/sqlite3-sqlite3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sqlite3.c' object='sqlite3-sqlite3.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sqlite3_CFLAGS) $(CFLAGS) -c -o sqlite3-sqlite3.obj `if test -f 'sqlite3.c'; then $(CYGPATH_W) 'sqlite3.c'; else $(CYGPATH_W) '$(srcdir)/sqlite3.c'; fi` + mostlyclean-libtool: -rm -f *.lo Modified: head/contrib/sqlite3/configure ============================================================================== --- head/contrib/sqlite3/configure Sun Aug 9 05:38:31 2015 (r286509) +++ head/contrib/sqlite3/configure Sun Aug 9 05:44:57 2015 (r286510) @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sqlite 3.8.9. +# Generated by GNU Autoconf 2.69 for sqlite 3.8.11.1. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.8.9' -PACKAGE_STRING='sqlite 3.8.9' +PACKAGE_VERSION='3.8.11.1' +PACKAGE_STRING='sqlite 3.8.11.1' PACKAGE_BUGREPORT='http://www.sqlite.org' PACKAGE_URL='' @@ -1313,7 +1313,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.8.9 to adapt to many kinds of systems. +\`configure' configures sqlite 3.8.11.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1383,7 +1383,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.8.9:";; + short | recursive ) echo "Configuration of sqlite 3.8.11.1:";; esac cat <<\_ACEOF @@ -1489,7 +1489,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.8.9 +sqlite configure 3.8.11.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1813,7 +1813,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.8.9, which was +It was created by sqlite $as_me 3.8.11.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2631,7 +2631,7 @@ fi # Define the identity of the package. PACKAGE='sqlite' - VERSION='3.8.9' + VERSION='3.8.11.1' cat >>confdefs.h <<_ACEOF @@ -13196,7 +13196,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.8.9, which was +This file was extended by sqlite $as_me 3.8.11.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13253,7 +13253,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sqlite config.status 3.8.9 +sqlite config.status 3.8.11.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Modified: head/contrib/sqlite3/configure.ac ============================================================================== --- head/contrib/sqlite3/configure.ac Sun Aug 9 05:38:31 2015 (r286509) +++ head/contrib/sqlite3/configure.ac Sun Aug 9 05:44:57 2015 (r286510) @@ -8,7 +8,7 @@ # AC_PREREQ(2.61) -AC_INIT(sqlite, 3.8.9, http://www.sqlite.org) +AC_INIT(sqlite, 3.8.11.1, http://www.sqlite.org) AC_CONFIG_SRCDIR([sqlite3.c]) # Use automake. Modified: head/contrib/sqlite3/shell.c ============================================================================== --- head/contrib/sqlite3/shell.c Sun Aug 9 05:38:31 2015 (r286509) +++ head/contrib/sqlite3/shell.c Sun Aug 9 05:44:57 2015 (r286510) @@ -101,28 +101,26 @@ #if defined(_WIN32) || defined(WIN32) # include # include -#define isatty(h) _isatty(h) -#ifndef access -# define access(f,m) _access((f),(m)) -#endif -#undef popen -#define popen _popen -#undef pclose -#define pclose _pclose +# define isatty(h) _isatty(h) +# ifndef access +# define access(f,m) _access((f),(m)) +# endif +# undef popen +# define popen _popen +# undef pclose +# define pclose _pclose #else -/* Make sure isatty() has a prototype. -*/ -extern int isatty(int); - -#if !defined(__RTP__) && !defined(_WRS_KERNEL) - /* popen and pclose are not C89 functions and so are sometimes omitted from - ** the header */ - extern FILE *popen(const char*,const char*); - extern int pclose(FILE*); -#else -# define SQLITE_OMIT_POPEN 1 -#endif + /* Make sure isatty() has a prototype. */ + extern int isatty(int); +# if !defined(__RTP__) && !defined(_WRS_KERNEL) + /* popen and pclose are not C89 functions and so are + ** sometimes omitted from the header */ + extern FILE *popen(const char*,const char*); + extern int pclose(FILE*); +# else +# define SQLITE_OMIT_POPEN 1 +# endif #endif #if defined(_WIN32_WCE) @@ -336,7 +334,7 @@ static int stdin_is_interactive = 1; ** to this database a static variable so that it can be accessed ** by the SIGINT handler to interrupt database processing. */ -static sqlite3 *db = 0; +static sqlite3 *globalDb = 0; /* ** True if an interrupt (Control-C) has been received. @@ -527,6 +525,7 @@ struct ShellState { int autoEQP; /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */ int statsOn; /* True to display memory stats before each finalize */ int scanstatsOn; /* True to display scan stats before each finalize */ + int backslashOn; /* Resolve C-style \x escapes in SQL input text */ int outCount; /* Revert to stdout when reaching zero */ int cnt; /* Number of records displayed so far */ FILE *out; /* Write results here */ @@ -804,7 +803,7 @@ static void interrupt_handler(int NotUse UNUSED_PARAMETER(NotUsed); seenInterrupt++; if( seenInterrupt>2 ) exit(1); - if( db ) sqlite3_interrupt(db); + if( globalDb ) sqlite3_interrupt(globalDb); } #endif @@ -989,7 +988,16 @@ static int shell_callback( case MODE_Insert: { p->cnt++; if( azArg==0 ) break; - fprintf(p->out,"INSERT INTO %s VALUES(",p->zDestTable); + fprintf(p->out,"INSERT INTO %s",p->zDestTable); + if( p->showHeader ){ + fprintf(p->out,"("); + for(i=0; i0 ? ",": ""; + fprintf(p->out, "%s%s", zSep, azCol[i]); + } + fprintf(p->out,")"); + } + fprintf(p->out," VALUES("); for(i=0; i0 ? ",": ""; if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){ @@ -1190,7 +1198,7 @@ static char *save_err_msg( sqlite3 *db /* Database to query */ ){ int nErrMsg = 1+strlen30(sqlite3_errmsg(db)); - char *zErrMsg = sqlite3_malloc(nErrMsg); + char *zErrMsg = sqlite3_malloc64(nErrMsg); if( zErrMsg ){ memcpy(zErrMsg, sqlite3_errmsg(db), nErrMsg); } @@ -1321,7 +1329,10 @@ static void display_scanstats( sqlite3 *db, /* Database to query */ ShellState *pArg /* Pointer to ShellState */ ){ -#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +#ifndef SQLITE_ENABLE_STMT_SCANSTATUS + UNUSED_PARAMETER(db); + UNUSED_PARAMETER(pArg); +#else int i, k, n, mx; fprintf(pArg->out, "-------- scanstats --------\n"); mx = 0; @@ -1427,8 +1438,8 @@ static void explain_data_prepare(ShellSt /* Grow the p->aiIndent array as required */ if( iOp>=nAlloc ){ nAlloc += 100; - p->aiIndent = (int*)sqlite3_realloc(p->aiIndent, nAlloc*sizeof(int)); - abYield = (int*)sqlite3_realloc(abYield, nAlloc*sizeof(int)); + p->aiIndent = (int*)sqlite3_realloc64(p->aiIndent, nAlloc*sizeof(int)); + abYield = (int*)sqlite3_realloc64(abYield, nAlloc*sizeof(int)); } abYield[iOp] = str_in_array(zOp, azYield); p->aiIndent[iOp] = 0; @@ -1545,7 +1556,7 @@ static int shell_exec( if( xCallback ){ /* allocate space for col name ptr, value ptr, and type */ int nCol = sqlite3_column_count(pStmt); - void *pData = sqlite3_malloc(3*nCol*sizeof(const char*) + 1); + void *pData = sqlite3_malloc64(3*nCol*sizeof(const char*) + 1); if( !pData ){ rc = SQLITE_NOMEM; }else{ @@ -1771,6 +1782,7 @@ static int run_schema_dump_query( static char zHelp[] = ".backup ?DB? FILE Backup DB (default \"main\") to FILE\n" ".bail on|off Stop after hitting an error. Default OFF\n" + ".binary on|off Turn binary output on or off. Default OFF\n" ".clone NEWDB Clone data into NEWDB from the existing database\n" ".databases List names and files of attached databases\n" ".dbinfo ?DB? Show status information about the database\n" @@ -1792,6 +1804,7 @@ static char zHelp[] = #ifdef SQLITE_ENABLE_IOTRACE ".iotrace FILE Enable I/O diagnostic logging to FILE\n" #endif + ".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT\n" #ifndef SQLITE_OMIT_LOAD_EXTENSION ".load FILE ?ENTRY? Load an extension library\n" #endif @@ -1854,6 +1867,7 @@ static void readfileFunc( long nIn; void *pBuf; + UNUSED_PARAMETER(argc); zName = (const char*)sqlite3_value_text(argv[0]); if( zName==0 ) return; in = fopen(zName, "rb"); @@ -1861,7 +1875,7 @@ static void readfileFunc( fseek(in, 0, SEEK_END); nIn = ftell(in); rewind(in); - pBuf = sqlite3_malloc( nIn ); + pBuf = sqlite3_malloc64( nIn ); if( pBuf && 1==fread(pBuf, nIn, 1, in) ){ sqlite3_result_blob(context, pBuf, nIn, sqlite3_free); }else{ @@ -1886,6 +1900,7 @@ static void writefileFunc( sqlite3_int64 rc; const char *zFile; + UNUSED_PARAMETER(argc); zFile = (const char*)sqlite3_value_text(argv[0]); if( zFile==0 ) return; out = fopen(zFile, "wb"); @@ -1908,23 +1923,23 @@ static void open_db(ShellState *p, int k if( p->db==0 ){ sqlite3_initialize(); sqlite3_open(p->zDbFilename, &p->db); - db = p->db; - if( db && sqlite3_errcode(db)==SQLITE_OK ){ - sqlite3_create_function(db, "shellstatic", 0, SQLITE_UTF8, 0, + globalDb = p->db; + if( p->db && sqlite3_errcode(p->db)==SQLITE_OK ){ + sqlite3_create_function(p->db, "shellstatic", 0, SQLITE_UTF8, 0, shellstaticFunc, 0, 0); } - if( db==0 || SQLITE_OK!=sqlite3_errcode(db) ){ + if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ fprintf(stderr,"Error: unable to open database \"%s\": %s\n", - p->zDbFilename, sqlite3_errmsg(db)); + p->zDbFilename, sqlite3_errmsg(p->db)); if( keepAlive ) return; exit(1); } #ifndef SQLITE_OMIT_LOAD_EXTENSION sqlite3_enable_load_extension(p->db, 1); #endif - sqlite3_create_function(db, "readfile", 1, SQLITE_UTF8, 0, + sqlite3_create_function(p->db, "readfile", 1, SQLITE_UTF8, 0, readfileFunc, 0, 0); - sqlite3_create_function(db, "writefile", 2, SQLITE_UTF8, 0, + sqlite3_create_function(p->db, "writefile", 2, SQLITE_UTF8, 0, writefileFunc, 0, 0); } } @@ -1932,26 +1947,44 @@ static void open_db(ShellState *p, int k /* ** Do C-language style dequoting. ** +** \a -> alarm +** \b -> backspace ** \t -> tab ** \n -> newline +** \v -> vertical tab +** \f -> form feed ** \r -> carriage return +** \s -> space ** \" -> " -** \NNN -> ascii character NNN in octal +** \' -> ' ** \\ -> backslash +** \NNN -> ascii character NNN in octal */ static void resolve_backslashes(char *z){ int i, j; char c; while( *z && *z!='\\' ) z++; for(i=j=0; (c = z[i])!=0; i++, j++){ - if( c=='\\' ){ + if( c=='\\' && z[i+1]!=0 ){ c = z[++i]; - if( c=='n' ){ - c = '\n'; + if( c=='a' ){ + c = '\a'; + }else if( c=='b' ){ + c = '\b'; }else if( c=='t' ){ c = '\t'; + }else if( c=='n' ){ + c = '\n'; + }else if( c=='v' ){ + c = '\v'; + }else if( c=='f' ){ + c = '\f'; }else if( c=='r' ){ c = '\r'; + }else if( c=='"' ){ + c = '"'; + }else if( c=='\'' ){ + c = '\''; }else if( c=='\\' ){ c = '\\'; }else if( c>='0' && c<='7' ){ @@ -2121,7 +2154,7 @@ struct ImportCtx { static void import_append_char(ImportCtx *p, int c){ if( p->n+1>=p->nAlloc ){ p->nAlloc += p->nAlloc + 100; - p->z = sqlite3_realloc(p->z, p->nAlloc); + p->z = sqlite3_realloc64(p->z, p->nAlloc); if( p->z==0 ){ fprintf(stderr, "out of memory\n"); exit(1); @@ -2135,7 +2168,7 @@ static void import_append_char(ImportCtx ** ** + Input comes from p->in. ** + Store results in p->z of length p->n. Space to hold p->z comes -** from sqlite3_malloc(). +** from sqlite3_malloc64(). ** + Use p->cSep as the column separator. The default is ",". ** + Use p->rSep as the row separator. The default is "\n". ** + Keep track of the line number in p->nLine. @@ -2209,7 +2242,7 @@ static char *SQLITE_CDECL csv_read_one_f ** ** + Input comes from p->in. ** + Store results in p->z of length p->n. Space to hold p->z comes -** from sqlite3_malloc(). +** from sqlite3_malloc64(). ** + Use p->cSep as the column separator. The default is "\x1F". ** + Use p->rSep as the row separator. The default is "\x1E". ** + Keep track of the row number in p->nLine. @@ -2269,7 +2302,7 @@ static void tryToCloneData( goto end_data_xfer; } n = sqlite3_column_count(pQuery); - zInsert = sqlite3_malloc(200 + nTable + n*3); + zInsert = sqlite3_malloc64(200 + nTable + n*3); if( zInsert==0 ){ fprintf(stderr, "out of memory\n"); goto end_data_xfer; @@ -2547,7 +2580,7 @@ static int shell_dbinfo_command(ShellSta fprintf(p->out, "%-20s %d\n", "write format:", aHdr[18]); fprintf(p->out, "%-20s %d\n", "read format:", aHdr[19]); fprintf(p->out, "%-20s %d\n", "reserved bytes:", aHdr[20]); - for(i=0; iout, "%-20s %u", aField[i].zName, val); @@ -2567,7 +2600,7 @@ static int shell_dbinfo_command(ShellSta }else{ zSchemaTab = sqlite3_mprintf("\"%w\".sqlite_master", zDb); } - for(i=0; i=3 && strncmp(azArg[0], "binary", n)==0 ){ + if( nArg==2 ){ + if( booleanValue(azArg[1]) ){ + setBinaryMode(p->out); + }else{ + setTextMode(p->out); + } + }else{ + fprintf(stderr, "Usage: .binary on|off\n"); + rc = 1; + } + }else + /* The undocumented ".breakpoint" command causes a call to the no-op ** routine named test_breakpoint(). */ @@ -2986,7 +3032,7 @@ static int do_meta_command(char *zLine, nByte = strlen30(zSql); rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); import_append_char(&sCtx, 0); /* To ensure sCtx.z is allocated */ - if( rc && sqlite3_strglob("no such table: *", sqlite3_errmsg(db))==0 ){ + if( rc && sqlite3_strglob("no such table: *", sqlite3_errmsg(p->db))==0 ){ char *zCreate = sqlite3_mprintf("CREATE TABLE %s", zTable); char cSep = '('; while( xRead(&sCtx) ){ @@ -3006,7 +3052,7 @@ static int do_meta_command(char *zLine, sqlite3_free(zCreate); if( rc ){ fprintf(stderr, "CREATE TABLE %s(...) failed: %s\n", zTable, - sqlite3_errmsg(db)); + sqlite3_errmsg(p->db)); sqlite3_free(sCtx.z); xCloser(sCtx.in); return 1; @@ -3016,7 +3062,7 @@ static int do_meta_command(char *zLine, sqlite3_free(zSql); if( rc ){ if (pStmt) sqlite3_finalize(pStmt); - fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db)); + fprintf(stderr,"Error: %s\n", sqlite3_errmsg(p->db)); xCloser(sCtx.in); return 1; } @@ -3024,7 +3070,7 @@ static int do_meta_command(char *zLine, sqlite3_finalize(pStmt); pStmt = 0; if( nCol==0 ) return 0; /* no columns, no error */ - zSql = sqlite3_malloc( nByte*2 + 20 + nCol*2 ); + zSql = sqlite3_malloc64( nByte*2 + 20 + nCol*2 ); if( zSql==0 ){ fprintf(stderr, "Error: out of memory\n"); xCloser(sCtx.in); @@ -3041,13 +3087,13 @@ static int do_meta_command(char *zLine, rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); sqlite3_free(zSql); if( rc ){ - fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db)); + fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); if (pStmt) sqlite3_finalize(pStmt); xCloser(sCtx.in); return 1; } - needCommit = sqlite3_get_autocommit(db); - if( needCommit ) sqlite3_exec(db, "BEGIN", 0, 0, 0); + needCommit = sqlite3_get_autocommit(p->db); + if( needCommit ) sqlite3_exec(p->db, "BEGIN", 0, 0, 0); do{ int startLine = sCtx.nLine; for(i=0; idb)); } } }while( sCtx.cTerm!=EOF ); @@ -3094,7 +3140,7 @@ static int do_meta_command(char *zLine, xCloser(sCtx.in); sqlite3_free(sCtx.z); sqlite3_finalize(pStmt); - if( needCommit ) sqlite3_exec(db, "COMMIT", 0, 0, 0); + if( needCommit ) sqlite3_exec(p->db, "COMMIT", 0, 0, 0); }else if( c=='i' && (strncmp(azArg[0], "indices", n)==0 @@ -3164,6 +3210,64 @@ static int do_meta_command(char *zLine, } }else #endif + if( c=='l' && n>=5 && strncmp(azArg[0], "limits", n)==0 ){ + static const struct { + const char *zLimitName; /* Name of a limit */ + int limitCode; /* Integer code for that limit */ + } aLimit[] = { + { "length", SQLITE_LIMIT_LENGTH }, + { "sql_length", SQLITE_LIMIT_SQL_LENGTH }, + { "column", SQLITE_LIMIT_COLUMN }, + { "expr_depth", SQLITE_LIMIT_EXPR_DEPTH }, + { "compound_select", SQLITE_LIMIT_COMPOUND_SELECT }, + { "vdbe_op", SQLITE_LIMIT_VDBE_OP }, + { "function_arg", SQLITE_LIMIT_FUNCTION_ARG }, + { "attached", SQLITE_LIMIT_ATTACHED }, + { "like_pattern_length", SQLITE_LIMIT_LIKE_PATTERN_LENGTH }, + { "variable_number", SQLITE_LIMIT_VARIABLE_NUMBER }, + { "trigger_depth", SQLITE_LIMIT_TRIGGER_DEPTH }, + { "worker_threads", SQLITE_LIMIT_WORKER_THREADS }, + }; + int i, n2; + open_db(p, 0); + if( nArg==1 ){ + for(i=0; idb, aLimit[i].limitCode, -1)); + } + }else if( nArg>3 ){ + fprintf(stderr, "Usage: .limit NAME ?NEW-VALUE?\n"); + rc = 1; + goto meta_command_exit; + }else{ + int iLimit = -1; + n2 = strlen30(azArg[1]); + for(i=0; idb, aLimit[iLimit].limitCode, + (int)integerValue(azArg[2])); + } + printf("%20s %d\n", aLimit[iLimit].zLimitName, + sqlite3_limit(p->db, aLimit[iLimit].limitCode, -1)); + } + }else #ifndef SQLITE_OMIT_LOAD_EXTENSION if( c=='l' && strncmp(azArg[0], "load", n)==0 ){ @@ -3248,9 +3352,8 @@ static int do_meta_command(char *zLine, const char *zSavedFilename = p->zDbFilename; char *zNewFilename = 0; p->db = 0; - if( nArg>=2 ){ - p->zDbFilename = zNewFilename = sqlite3_mprintf("%s", azArg[1]); - } + if( nArg>=2 ) zNewFilename = sqlite3_mprintf("%s", azArg[1]); + p->zDbFilename = zNewFilename; open_db(p, 1); if( p->db!=0 ){ sqlite3_close(savedDb); @@ -3648,13 +3751,13 @@ static int do_meta_command(char *zLine, while( sqlite3_step(pStmt)==SQLITE_ROW ){ if( nRow>=nAlloc ){ char **azNew; - int n = nAlloc*2 + 10; - azNew = sqlite3_realloc(azResult, sizeof(azResult[0])*n); + int n2 = nAlloc*2 + 10; + azNew = sqlite3_realloc64(azResult, sizeof(azResult[0])*n2); if( azNew==0 ){ fprintf(stderr, "Error: out of memory\n"); break; } - nAlloc = n; + nAlloc = n2; azResult = azNew; } azResult[nRow] = sqlite3_mprintf("%s", sqlite3_column_text(pStmt, 0)); @@ -3707,15 +3810,15 @@ static int do_meta_command(char *zLine, { "imposter", SQLITE_TESTCTRL_IMPOSTER }, }; int testctrl = -1; - int rc = 0; - int i, n; + int rc2 = 0; + int i, n2; open_db(p, 0); /* convert testctrl text option to value. allow any unique prefix ** of the option name, or a numerical value. */ - n = strlen30(azArg[1]); - for(i=0; i<(int)(sizeof(aCtrl)/sizeof(aCtrl[0])); i++){ - if( strncmp(azArg[1], aCtrl[i].zCtrlName, n)==0 ){ + n2 = strlen30(azArg[1]); + for(i=0; idb, opt); - fprintf(p->out, "%d (0x%08x)\n", rc, rc); + rc2 = sqlite3_test_control(testctrl, p->db, opt); + fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); } else { fprintf(stderr,"Error: testctrl %s takes a single int option\n", azArg[1]); @@ -3750,8 +3853,8 @@ static int do_meta_command(char *zLine, case SQLITE_TESTCTRL_PRNG_RESET: case SQLITE_TESTCTRL_BYTEORDER: if( nArg==2 ){ - rc = sqlite3_test_control(testctrl); - fprintf(p->out, "%d (0x%08x)\n", rc, rc); + rc2 = sqlite3_test_control(testctrl); + fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); } else { fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]); } @@ -3761,8 +3864,8 @@ static int do_meta_command(char *zLine, case SQLITE_TESTCTRL_PENDING_BYTE: if( nArg==3 ){ unsigned int opt = (unsigned int)integerValue(azArg[2]); - rc = sqlite3_test_control(testctrl, opt); - fprintf(p->out, "%d (0x%08x)\n", rc, rc); + rc2 = sqlite3_test_control(testctrl, opt); + fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); } else { fprintf(stderr,"Error: testctrl %s takes a single unsigned" " int option\n", azArg[1]); @@ -3775,8 +3878,8 @@ static int do_meta_command(char *zLine, case SQLITE_TESTCTRL_NEVER_CORRUPT: if( nArg==3 ){ int opt = booleanValue(azArg[2]); - rc = sqlite3_test_control(testctrl, opt); - fprintf(p->out, "%d (0x%08x)\n", rc, rc); + rc2 = sqlite3_test_control(testctrl, opt); + fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); } else { fprintf(stderr,"Error: testctrl %s takes a single int option\n", azArg[1]); @@ -3788,8 +3891,8 @@ static int do_meta_command(char *zLine, case SQLITE_TESTCTRL_ISKEYWORD: if( nArg==3 ){ const char *opt = azArg[2]; - rc = sqlite3_test_control(testctrl, opt); - fprintf(p->out, "%d (0x%08x)\n", rc, rc); + rc2 = sqlite3_test_control(testctrl, opt); + fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); } else { fprintf(stderr,"Error: testctrl %s takes a single char * option\n", azArg[1]); @@ -3799,11 +3902,11 @@ static int do_meta_command(char *zLine, case SQLITE_TESTCTRL_IMPOSTER: if( nArg==5 ){ - rc = sqlite3_test_control(testctrl, p->db, + rc2 = sqlite3_test_control(testctrl, p->db, azArg[2], integerValue(azArg[3]), integerValue(azArg[4])); - fprintf(p->out, "%d (0x%08x)\n", rc, rc); + fprintf(p->out, "%d (0x%08x)\n", rc2, rc2); }else{ fprintf(stderr,"Usage: .testctrl imposter dbName onoff tnum\n"); } @@ -4111,6 +4214,7 @@ static int process_input(ShellState *p, && sqlite3_complete(zSql) ){ p->cnt = 0; open_db(p, 0); + if( p->backslashOn ) resolve_backslashes(zSql); BEGIN_TIMER; rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg); END_TIMER; @@ -4577,6 +4681,13 @@ int SQLITE_CDECL main(int argc, char **a data.statsOn = 1; }else if( strcmp(z,"-scanstats")==0 ){ data.scanstatsOn = 1; + }else if( strcmp(z,"-backslash")==0 ){ + /* Undocumented command-line option: -backslash + ** Causes C-style backslash escapes to be evaluated in SQL statements + ** prior to sending the SQL into SQLite. Useful for injecting + ** crazy bytes in the middle of SQL statements for testing and debugging. + */ + data.backslashOn = 1; }else if( strcmp(z,"-bail")==0 ){ bail_on_error = 1; }else if( strcmp(z,"-version")==0 ){ @@ -4683,7 +4794,7 @@ int SQLITE_CDECL main(int argc, char **a sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome); } } - if( zHistory ) shell_read_history(zHistory); + if( zHistory ){ shell_read_history(zHistory); } rc = process_input(&data, 0); if( zHistory ){ shell_stifle_history(100); Modified: head/contrib/sqlite3/sqlite3.c ============================================================================== --- head/contrib/sqlite3/sqlite3.c Sun Aug 9 05:38:31 2015 (r286509) +++ head/contrib/sqlite3/sqlite3.c Sun Aug 9 05:44:57 2015 (r286510) @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.8.9. By combining all the individual C code files into this +** version 3.8.11.1. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -70,6 +70,7 @@ #pragma warning(disable : 4055) #pragma warning(disable : 4100) #pragma warning(disable : 4127) +#pragma warning(disable : 4130) #pragma warning(disable : 4152) #pragma warning(disable : 4189) #pragma warning(disable : 4206) @@ -157,6 +158,13 @@ # define _LARGEFILE_SOURCE 1 #endif +/* What version of GCC is being used. 0 means GCC is not being used */ +#ifdef __GNUC__ +# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) +#else +# define GCC_VERSION 0 +#endif + /* Needed for various definitions... */ #if defined(__GNUC__) && !defined(_GNU_SOURCE) # define _GNU_SOURCE @@ -229,7 +237,7 @@ ** ** The official C-language API documentation for SQLite is derived ** from comments in this file. This file is the authoritative source -** on how SQLite interfaces are suppose to operate. +** on how SQLite interfaces are supposed to operate. ** ** The name of this file under configuration management is "sqlite.h.in". ** The makefile makes some minor changes to this file (such as inserting @@ -317,9 +325,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.8.9" -#define SQLITE_VERSION_NUMBER 3008009 -#define SQLITE_SOURCE_ID "2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09" +#define SQLITE_VERSION "3.8.11.1" +#define SQLITE_VERSION_NUMBER 3008011 +#define SQLITE_SOURCE_ID "2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -476,6 +484,7 @@ typedef sqlite_uint64 sqlite3_uint64; /* ** CAPI3REF: Closing A Database Connection +** DESTRUCTOR: sqlite3 ** ** ^The sqlite3_close() and sqlite3_close_v2() routines are destructors ** for the [sqlite3] object. @@ -527,6 +536,7 @@ typedef int (*sqlite3_callback)(void*,in /* ** CAPI3REF: One-Step Query Execution Interface +** METHOD: sqlite3 ** ** The sqlite3_exec() interface is a convenience wrapper around ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()], @@ -1167,6 +1177,14 @@ struct sqlite3_io_methods { ** circumstances in order to fix a problem with priority inversion. ** Applications should not use this file-control. ** +**
  • [[SQLITE_FCNTL_ZIPVFS]] +** The [SQLITE_FCNTL_ZIPVFS] opcode is implemented by zipvfs only. All other +** VFS should return SQLITE_NOTFOUND for this opcode. +** +**
  • [[SQLITE_FCNTL_RBU]] +** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by +** the RBU extension only. All other VFS should return SQLITE_NOTFOUND for +** this opcode. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -1192,6 +1210,8 @@ struct sqlite3_io_methods { #define SQLITE_FCNTL_COMMIT_PHASETWO 22 #define SQLITE_FCNTL_WIN32_SET_HANDLE 23 #define SQLITE_FCNTL_WAL_BLOCK 24 +#define SQLITE_FCNTL_ZIPVFS 25 +#define SQLITE_FCNTL_RBU 26 /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE @@ -1584,6 +1604,7 @@ SQLITE_API int SQLITE_CDECL sqlite3_conf /* ** CAPI3REF: Configure database connections +** METHOD: sqlite3 ** ** The sqlite3_db_config() interface is used to make configuration ** changes to a [database connection]. The interface is similar to @@ -2081,6 +2102,7 @@ struct sqlite3_mem_methods { /* ** CAPI3REF: Enable Or Disable Extended Result Codes +** METHOD: sqlite3 ** ** ^The sqlite3_extended_result_codes() routine enables or disables the ** [extended result codes] feature of SQLite. ^The extended result @@ -2090,6 +2112,7 @@ SQLITE_API int SQLITE_STDCALL sqlite3_ex /* ** CAPI3REF: Last Insert Rowid +** METHOD: sqlite3 ** ** ^Each entry in most SQLite tables (except for [WITHOUT ROWID] tables) ** has a unique 64-bit signed @@ -2141,6 +2164,7 @@ SQLITE_API sqlite3_int64 SQLITE_STDCALL /* ** CAPI3REF: Count The Number Of Rows Modified +** METHOD: sqlite3 ** ** ^This function returns the number of rows modified, inserted or ** deleted by the most recently completed INSERT, UPDATE or DELETE @@ -2193,6 +2217,7 @@ SQLITE_API int SQLITE_STDCALL sqlite3_ch /* ** CAPI3REF: Total Number Of Rows Modified +** METHOD: sqlite3 ** ** ^This function returns the total number of rows inserted, modified or ** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed @@ -2216,6 +2241,7 @@ SQLITE_API int SQLITE_STDCALL sqlite3_to /* ** CAPI3REF: Interrupt A Long-Running Query +** METHOD: sqlite3 ** ** ^This function causes any pending database operation to abort and ** return at its earliest opportunity. This routine is typically @@ -2292,6 +2318,7 @@ SQLITE_API int SQLITE_STDCALL sqlite3_co /* *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Sun Aug 9 05:54:54 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2F73299D60B; Sun, 9 Aug 2015 05:54:54 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 209B1676; Sun, 9 Aug 2015 05:54:54 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t795sso1085306; Sun, 9 Aug 2015 05:54:54 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t795srDj085305; Sun, 9 Aug 2015 05:54:53 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508090554.t795srDj085305@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Sun, 9 Aug 2015 05:54:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286511 - head/lib/libsqlite3 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 05:54:54 -0000 Author: peter Date: Sun Aug 9 05:54:53 2015 New Revision: 286511 URL: https://svnweb.freebsd.org/changeset/base/286511 Log: Move the USE_PREAD configuration knob out of the middle of the autoconf generated ones. It is easy to mistake as an option that has gone away when it's actually a control that was explicitly turned on for FreeBSD. Modified: head/lib/libsqlite3/Makefile Modified: head/lib/libsqlite3/Makefile ============================================================================== --- head/lib/libsqlite3/Makefile Sun Aug 9 05:44:57 2015 (r286510) +++ head/lib/libsqlite3/Makefile Sun Aug 9 05:54:53 2015 (r286511) @@ -12,10 +12,10 @@ SQLITE= ${.CURDIR}/../../contrib/sqlite3 WARNS= 3 CFLAGS+= -I${SQLITE} \ + -DUSE_PREAD=1 \ -DSTDC_HEADERS=1 \ -DHAVE_SYS_TYPES_H=1 \ -DHAVE_SYS_STAT_H=1 \ - -DUSE_PREAD=1 \ -DHAVE_STDLIB_H=1 \ -DHAVE_STRING_H=1 \ -DHAVE_MEMORY_H=1 \ From owner-svn-src-head@freebsd.org Sun Aug 9 06:56:08 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D491E99D18E; Sun, 9 Aug 2015 06:56:08 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pa0-x233.google.com (mail-pa0-x233.google.com [IPv6:2607:f8b0:400e:c03::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9C541C2F; Sun, 9 Aug 2015 06:56:08 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by pacgr6 with SMTP id gr6so4313631pac.2; Sat, 08 Aug 2015 23:56:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=sqtftHtiWg/7iWEuR2wyx3mnJBYY2I/ALv7H/IfIsgQ=; b=R9j1zfqJWOoLNY+IQYp/+fYbdHx1/9SpoUpuriT8fwUpw3i60tXp7M+itaeSoTWUOI RJ2HleruLqH96U5SU0y9YL7j3Smf1ly4qUJtSrimslLOkh8vJhlL0TrJRX7zs09NwHSf JirkFPcYuy9xLzrXtDwHwhIcfjLK65wExmGZaYQlxmGeCllCVPezVPsLZ5scs4eoP8za JPTNJiciuwIq6ppUn/piwHmpPs9If0cQKBiQa9p1CWxVntAUq1nuPSAsgm19EGJLtpQP d78/d+0yhBk7dFHd/I1mr+/OvMeB8iuNXJB0ljzFUv0jmsrSson8BSaUge58lwpGn7Ng F6AA== X-Received: by 10.68.253.195 with SMTP id ac3mr32815472pbd.159.1439103367638; Sat, 08 Aug 2015 23:56:07 -0700 (PDT) Received: from ?IPv6:2601:601:800:126d:142e:2b8d:c570:df27? ([2601:601:800:126d:142e:2b8d:c570:df27]) by smtp.gmail.com with ESMTPSA id qc9sm15625965pab.18.2015.08.08.23.56.06 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 08 Aug 2015 23:56:06 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) Subject: Re: svn commit: r286505 - in head/contrib/serf: . auth buckets From: Garrett Cooper In-Reply-To: <201508090516.t795GES6068648@repo.freebsd.org> Date: Sat, 8 Aug 2015 23:56:04 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: 7bit Message-Id: References: <201508090516.t795GES6068648@repo.freebsd.org> To: Peter Wemm X-Mailer: Apple Mail (2.1878.6) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 06:56:08 -0000 On Aug 8, 2015, at 22:16, Peter Wemm wrote: > Author: peter > Date: Sun Aug 9 05:16:14 2015 > New Revision: 286505 > URL: https://svnweb.freebsd.org/changeset/base/286505 > > Log: > Update serf from 1.3.7 to 1.3.8. Mostly disables sslv2 and sslv3. Relnotes: yes ? From owner-svn-src-head@freebsd.org Sun Aug 9 06:56:29 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C1D4A99D1C2; Sun, 9 Aug 2015 06:56:29 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pa0-x233.google.com (mail-pa0-x233.google.com [IPv6:2607:f8b0:400e:c03::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 95240D7F; Sun, 9 Aug 2015 06:56:29 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by pacrr5 with SMTP id rr5so80958503pac.3; Sat, 08 Aug 2015 23:56:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=eaK6w8C9rV24e8VL50bnoybsFKlCOLBxUNIG/jwjuy8=; b=rFviIbbJmyDurIVyqT9ECuFwB/1R8+CneDWsvBQYnskcX0KmZqhfwfWp8U4FRuK1sN l0LGhDA68C1t/5QyW0VhcxOJUovQvD37CleKn4Q+AbX45FQ/eP/6FAOfEE0N9UaRJcdl UdkL7zEb1l5+N9mjQpSYQktemKgK2ukS9k122xwQjJa2+m2GrwXDb2MWIjJMJUv8/6GM KJI1cP1dtZdwkxq3+V5GeH9F2yE42OQuIRGPKFpYKo4ExKuN84ta/Lx+kaYmQL4Ie2O8 DKGafYcE9MF7TND7hG/MtlsUEWbiBPlnxKbc6y15kjyhXeZ1j5Ssxbefp8nqbmYDhckS icsw== X-Received: by 10.66.236.167 with SMTP id uv7mr31777985pac.134.1439103389269; Sat, 08 Aug 2015 23:56:29 -0700 (PDT) Received: from ?IPv6:2601:601:800:126d:142e:2b8d:c570:df27? ([2601:601:800:126d:142e:2b8d:c570:df27]) by smtp.gmail.com with ESMTPSA id qc9sm15625965pab.18.2015.08.08.23.56.28 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 08 Aug 2015 23:56:28 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) Subject: Re: svn commit: r286510 - head/contrib/sqlite3 From: Garrett Cooper In-Reply-To: <201508090544.t795iwmh081084@repo.freebsd.org> Date: Sat, 8 Aug 2015 23:56:27 -0700 Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: 7bit Message-Id: <3F0CF946-9253-4BC3-A5F5-587F6591F524@gmail.com> References: <201508090544.t795iwmh081084@repo.freebsd.org> To: Peter Wemm X-Mailer: Apple Mail (2.1878.6) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 06:56:29 -0000 On Aug 8, 2015, at 22:44, Peter Wemm wrote: > Author: peter > Date: Sun Aug 9 05:44:57 2015 > New Revision: 286510 > URL: https://svnweb.freebsd.org/changeset/base/286510 > > Log: > Update the private sqlite3 from 3.8.9 to 3.8.11.1 (used by svnlite and > kerberos) Relnotes: yes ? From owner-svn-src-head@freebsd.org Sun Aug 9 06:56:54 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2DD4399D1F4; Sun, 9 Aug 2015 06:56:54 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pa0-x236.google.com (mail-pa0-x236.google.com [IPv6:2607:f8b0:400e:c03::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id F3A5DEC8; Sun, 9 Aug 2015 06:56:53 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by pacgr6 with SMTP id gr6so4320512pac.2; Sat, 08 Aug 2015 23:56:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=MnhZ1vnHHv2dhRhodEG9u7+BQATPwbsVh4rs68QrW24=; b=dkI1djDtuJQy+vy+BLu+b69hIGw/TQqmxe1mOwwUELK3rEF64ksAGjm90efr5gQEBg L8qgOBCO8N8xRtAnNJnOTy43VIG0GgabasDgm5JdZf6wI0Ua/xBipKvF5n/ciACAptDb TQjuVgCzJwKPhXM2Lp7tWQwhHDFJBcvdW8CTb8sEGuf2HZyuWH4e2Mb+UjDbocllmt74 v8jHedZV7e2hIPY/4pOHGeXaOXyhIiaNrSi2LpAW/OjrvkEmrHPPckCZbmxy+zBS6mKH vOkL+yICwIneXrBKkmhIaDYrB1+PcF3wlGjs2BCYPJAERWI1e7IMskOqAZdjEUY7TFeY neHg== X-Received: by 10.68.206.103 with SMTP id ln7mr32087629pbc.37.1439103413419; Sat, 08 Aug 2015 23:56:53 -0700 (PDT) Received: from ?IPv6:2601:601:800:126d:142e:2b8d:c570:df27? ([2601:601:800:126d:142e:2b8d:c570:df27]) by smtp.gmail.com with ESMTPSA id qc9sm15625965pab.18.2015.08.08.23.56.52 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 08 Aug 2015 23:56:52 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) Subject: Re: svn commit: r286503 - in head: contrib/apr contrib/apr/encoding contrib/apr/include contrib/apr/locks/unix contrib/apr/memory/unix contrib/apr/misc/unix contrib/apr/network_io/unix contrib/apr/poll... From: Garrett Cooper In-Reply-To: <201508090514.t795EQHq068437@repo.freebsd.org> Date: Sat, 8 Aug 2015 23:56:52 -0700 Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: 7bit Message-Id: References: <201508090514.t795EQHq068437@repo.freebsd.org> To: Peter Wemm X-Mailer: Apple Mail (2.1878.6) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 06:56:54 -0000 On Aug 8, 2015, at 22:14, Peter Wemm wrote: > Author: peter > Date: Sun Aug 9 05:14:25 2015 > New Revision: 286503 > URL: https://svnweb.freebsd.org/changeset/base/286503 > > Log: > Update apr-1.5.1 to 1.5.2 Relnotes: yes ? From owner-svn-src-head@freebsd.org Sun Aug 9 06:58:07 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B8BC999D39B; Sun, 9 Aug 2015 06:58:07 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 901A21111; Sun, 9 Aug 2015 06:58:07 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t796w7jS010547; Sun, 9 Aug 2015 06:58:07 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t796w7f0010546; Sun, 9 Aug 2015 06:58:07 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201508090658.t796w7f0010546@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Garrett Cooper Date: Sun, 9 Aug 2015 06:58:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286512 - head/sys/geom/uncompress X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 06:58:07 -0000 Author: ngie Date: Sun Aug 9 06:58:06 2015 New Revision: 286512 URL: https://svnweb.freebsd.org/changeset/base/286512 Log: Make some debug printf's into DPRINTF's to reduce noise on attach/detahh Similar reasoning to what was done in r286367 with geom_uzip(4) MFC after: 2 weeks Differential Revision: D3320 Sponsored by: EMC / Isilon Storage Division Modified: head/sys/geom/uncompress/g_uncompress.c Modified: head/sys/geom/uncompress/g_uncompress.c ============================================================================== --- head/sys/geom/uncompress/g_uncompress.c Sun Aug 9 05:54:53 2015 (r286511) +++ head/sys/geom/uncompress/g_uncompress.c Sun Aug 9 06:58:06 2015 (r286512) @@ -111,8 +111,8 @@ g_uncompress_softc_free(struct g_uncompr { if (gp != NULL) { - printf("%s: %d requests, %d cached\n", - gp->name, sc->req_total, sc->req_cached); + DPRINTF(("%s: %d requests, %d cached\n", + gp->name, sc->req_total, sc->req_cached)); } if (sc->offsets != NULL) { free(sc->offsets, M_GEOM_UNCOMPRESS); @@ -518,7 +518,7 @@ g_uncompress_taste(struct g_class *mp, s DPRINTF(("%s: image version too old\n", gp->name)); goto err; } - printf("%s: GEOM_ULZMA image found\n", gp->name); + DPRINTF(("%s: GEOM_ULZMA image found\n", gp->name)); break; case 'V': type = GEOM_UZIP; @@ -526,7 +526,7 @@ g_uncompress_taste(struct g_class *mp, s DPRINTF(("%s: image version too old\n", gp->name)); goto err; } - printf("%s: GEOM_UZIP image found\n", gp->name); + DPRINTF(("%s: GEOM_UZIP image found\n", gp->name)); break; default: DPRINTF(("%s: unsupported image type\n", gp->name)); @@ -622,7 +622,7 @@ g_uncompress_taste(struct g_class *mp, s gp->name, pp2->sectorsize, (intmax_t)pp2->mediasize, pp2->stripeoffset, pp2->stripesize, pp2->flags)); - printf("%s: %u x %u blocks\n", gp->name, sc->nblocks, sc->blksz); + DPRINTF(("%s: %u x %u blocks\n", gp->name, sc->nblocks, sc->blksz)); return (gp); err: @@ -651,7 +651,7 @@ g_uncompress_destroy_geom(struct gctl_re g_topology_assert(); if (gp->softc == NULL) { - printf("%s(%s): gp->softc == NULL\n", __func__, gp->name); + DPRINTF(("%s(%s): gp->softc == NULL\n", __func__, gp->name)); return (ENXIO); } From owner-svn-src-head@freebsd.org Sun Aug 9 07:37:20 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AA73399D970 for ; Sun, 9 Aug 2015 07:37:20 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-oi0-f50.google.com (mail-oi0-f50.google.com [209.85.218.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6E7BA11E for ; Sun, 9 Aug 2015 07:37:19 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by oio137 with SMTP id 137so71813421oio.0 for ; Sun, 09 Aug 2015 00:37:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=HyKDJIOxy0sYx6DumwhtC6Gh78S5pmBM8ZtSMOk4f00=; b=VbPw3eoa67D+mhbVUjjuGdfndHK3ypApb64BvclX7RSLC9B8kLwfcv9Gf289/pJBnA pwylozuD9YgTd8i5KZsj6Z5eVZG+eoiWiVWKJLDD2w42r8rq/m9q2Lc5VZ9B8AfKhFS3 yjyk8vdD7SB4dZ4JflO/FpPm1gqJ+WpoeLlc2r0uaV2nylVLuV82QJQhkURVFBCJjSN6 U4gHAc7GlVXSWrXVo1hefseMSZAQ7zSiMJUFz60Ks2wEWjrA2NhZBzD3aGpVxz/7cYDf 3Tonu0BPT8/sYd35ustGo/Q7bI0EgMU27IJrfNQePJAnMd92dnh89y1yTl9kvw6sse8+ dtmw== X-Gm-Message-State: ALoCoQl57Dsrf8oL0+GOOM7mk8Bwv8Op9o1OTttdOX/vVi+tM5zJSXM4+NohAiTefQxOoH8LqwOY MIME-Version: 1.0 X-Received: by 10.202.171.21 with SMTP id u21mr13803275oie.113.1439105833199; Sun, 09 Aug 2015 00:37:13 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Sun, 9 Aug 2015 00:37:13 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <20150808150539.0b43cfcd@kan> References: <201507271317.t6RDHwpj067194@repo.freebsd.org> <20150808150539.0b43cfcd@kan> Date: Sun, 9 Aug 2015 09:37:13 +0200 Message-ID: Subject: Re: svn commit: r285910 - in head: lib/libc/sys sys/kern sys/sys From: Ed Schouten To: Alexander Kabaev Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: multipart/mixed; boundary=001a113cae68fbad7c051cdbef59 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 07:37:20 -0000 --001a113cae68fbad7c051cdbef59 Content-Type: text/plain; charset=UTF-8 Hi Alexander, 2015-08-08 21:05 GMT+02:00 Alexander Kabaev : > this commit broke more than just syslogd. rtsol and rtsold both are > victims of the change as they are trying to shutdown unconnected > raw sockets to make then 'send-only' and fail. Good catch! I think that in this case it is safe to omit the call to shutdown(), or at least not let the application fail on startup because of shutdown() being more strict. After all, this code would fail on Linux, OS X, etc. already because of this. Could you test the attached patch and let me know whether it makes rtsol/rtsold work again? Thanks, -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK/VAT number: 62051717 --001a113cae68fbad7c051cdbef59 Content-Type: text/plain; charset=US-ASCII; name="rtsold.diff" Content-Disposition: attachment; filename="rtsold.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_id46gcon1 ZGlmZiAtLWdpdCBhL3Vzci5zYmluL3J0c29sZC9wcm9iZS5jIGIvdXNyLnNiaW4vcnRzb2xkL3By b2JlLmMKaW5kZXggODlhMTYxN2EuLjNhYTUzMDMgMTAwNjQ0Ci0tLSBhL3Vzci5zYmluL3J0c29s ZC9wcm9iZS5jCisrKyBiL3Vzci5zYmluL3J0c29sZC9wcm9iZS5jCkBAIC04MCwxMiArODAsNiBA QCBwcm9iZV9pbml0KHZvaWQpCiAJCXJldHVybiAoLTEpOwogCX0KIAotCS8qIG1ha2UgdGhlIHNv Y2tldCBzZW5kLW9ubHkgKi8KLQlpZiAoc2h1dGRvd24ocHJvYmVzb2NrLCAwKSkgewotCQl3YXJu bXNnKExPR19FUlIsIF9fZnVuY19fLCAic2h1dGRvd246ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsK LQkJcmV0dXJuICgtMSk7Ci0JfQotCiAJLyogaW5pdGlhbGl6ZSBtc2doZHIgZm9yIHNlbmRpbmcg cGFja2V0cyAqLwogCXNuZG1oZHIubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy X2luNik7CiAJc25kbWhkci5tc2dfaW92ID0gc25kaW92Owo= --001a113cae68fbad7c051cdbef59-- From owner-svn-src-head@freebsd.org Sun Aug 9 07:45:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 65B0A99DCC0; Sun, 9 Aug 2015 07:45:16 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 49CDB7F8; Sun, 9 Aug 2015 07:45:16 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t797jGRL032396; Sun, 9 Aug 2015 07:45:16 GMT (envelope-from alc@FreeBSD.org) Received: (from alc@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t797jGWt032395; Sun, 9 Aug 2015 07:45:16 GMT (envelope-from alc@FreeBSD.org) Message-Id: <201508090745.t797jGWt032395@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: alc set sender to alc@FreeBSD.org using -f From: Alan Cox Date: Sun, 9 Aug 2015 07:45:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286513 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 07:45:16 -0000 Author: alc Date: Sun Aug 9 07:45:15 2015 New Revision: 286513 URL: https://svnweb.freebsd.org/changeset/base/286513 Log: Revise the text about the atomicity of the defined operations across multiple processors. In particular, clearly state that the operations are always atomic when they are applied to the default memory type that is used by the kernel (and applications). Reviewed by: kib, jhb (an earlier version) MFC after: 1 week Modified: head/share/man/man9/atomic.9 Modified: head/share/man/man9/atomic.9 ============================================================================== --- head/share/man/man9/atomic.9 Sun Aug 9 06:58:06 2015 (r286512) +++ head/share/man/man9/atomic.9 Sun Aug 9 07:45:15 2015 (r286513) @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 20, 2015 +.Dd August 9, 2015 .Dt ATOMIC 9 .Os .Sh NAME @@ -67,8 +67,8 @@ .Ft int .Fn atomic_testandset_ "volatile *p" "u_int v" .Sh DESCRIPTION -Each of the atomic operations is guaranteed to be atomic in the presence of -interrupts. +Each of the atomic operations is guaranteed to be atomic across multiple +processors and in the presence of interrupts. They can be used to implement reference counts or as building blocks for more advanced synchronization primitives such as mutexes. .Ss Types @@ -162,17 +162,21 @@ guarantee that the lock is held before a Finally, one would use a write barrier when releasing the lock to ensure that all of the protected operations are completed before the lock is released. .Ss Multiple Processors -The current set of atomic operations do not necessarily guarantee atomicity -across multiple processors. -To guarantee atomicity across processors, not only does the individual -operation need to be atomic on the processor performing the operation, but -the result of the operation needs to be pushed out to stable storage and the -caches of all other processors on the system need to invalidate any cache -lines that include the affected memory region. -On the +In multiprocessor systems, the atomicity of the atomic operations on memory +depends on support for cache coherence in the underlying architecture. +In general, cache coherence on the default memory type, +.Dv VM_MEMATTR_DEFAULT , +is guaranteed by all architectures that are supported by +.Fx . +For example, cache coherence is guaranteed on write-back memory by the +.Tn amd64 +and .Tn i386 -architecture, the cache coherency model requires that the hardware perform -this task, thus the atomic operations are atomic across multiple processors. +architectures. +However, on some architectures, cache coherence may not be enabled on all +memory types. +To determine if cache coherence is enabled for a non-default memory type, +consult the architecture's documentation. .Ss Semantics This section describes the semantics of each operation using a C like notation. .Bl -hang From owner-svn-src-head@freebsd.org Sun Aug 9 09:54:30 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ACD249980E6; Sun, 9 Aug 2015 09:54:30 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 82B9081C; Sun, 9 Aug 2015 09:54:30 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t799sUpN049071; Sun, 9 Aug 2015 09:54:30 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t799sUl1049070; Sun, 9 Aug 2015 09:54:30 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508090954.t799sUl1049070@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 09:54:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286514 - head/sys/cam/ctl X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 09:54:30 -0000 Author: mav Date: Sun Aug 9 09:54:29 2015 New Revision: 286514 URL: https://svnweb.freebsd.org/changeset/base/286514 Log: Remove verbose CTL messages. Reporting SCSI errors to console is often useless, pollutes logs and may affect performance. For debugging there is kern.cam.ctl.debug sysctl MFC after: 1 week Modified: head/sys/cam/ctl/ctl.c Modified: head/sys/cam/ctl/ctl.c ============================================================================== --- head/sys/cam/ctl/ctl.c Sun Aug 9 07:45:15 2015 (r286513) +++ head/sys/cam/ctl/ctl.c Sun Aug 9 09:54:29 2015 (r286514) @@ -1188,8 +1188,6 @@ ctl_init(void) ctl_pool_free(other_pool); return (error); } - if (bootverbose) - printf("ctl: CAM Target Layer loaded\n"); /* * Initialize the ioctl front end. @@ -1272,9 +1270,6 @@ ctl_shutdown(void) free(control_softc, M_DEVBUF); control_softc = NULL; - - if (bootverbose) - printf("ctl: CAM Target Layer unloaded\n"); } static int @@ -13651,7 +13646,7 @@ ctl_process_done(union ctl_io *io) case CTL_IO_SCSI: break; case CTL_IO_TASK: - if (bootverbose || (ctl_debug & CTL_DEBUG_INFO)) + if (ctl_debug & CTL_DEBUG_INFO) ctl_io_error_print(io, NULL); if (io->io_hdr.flags & CTL_FLAG_FROM_OTHER_SC) ctl_free_io(io); @@ -13758,27 +13753,10 @@ bailout: /* * If enabled, print command error status. - * We don't print UAs unless debugging was enabled explicitly. */ - do { - if ((io->io_hdr.status & CTL_STATUS_MASK) == CTL_SUCCESS) - break; - if (!bootverbose && (ctl_debug & CTL_DEBUG_INFO) == 0) - break; - if ((ctl_debug & CTL_DEBUG_INFO) == 0 && - ((io->io_hdr.status & CTL_STATUS_MASK) == CTL_SCSI_ERROR) && - (io->scsiio.scsi_status == SCSI_STATUS_CHECK_COND)) { - int error_code, sense_key, asc, ascq; - - scsi_extract_sense_len(&io->scsiio.sense_data, - io->scsiio.sense_len, &error_code, &sense_key, - &asc, &ascq, /*show_errors*/ 0); - if (sense_key == SSD_KEY_UNIT_ATTENTION) - break; - } - + if ((io->io_hdr.status & CTL_STATUS_MASK) != CTL_SUCCESS && + (ctl_debug & CTL_DEBUG_INFO) != 0) ctl_io_error_print(io, NULL); - } while (0); /* * Tell the FETD or the other shelf controller we're done with this From owner-svn-src-head@freebsd.org Sun Aug 9 10:00:14 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DCAE39982AE; Sun, 9 Aug 2015 10:00:14 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CCA229EC; Sun, 9 Aug 2015 10:00:14 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79A0ES1049443; Sun, 9 Aug 2015 10:00:14 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79A0E4S049442; Sun, 9 Aug 2015 10:00:14 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201508091000.t79A0E4S049442@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sun, 9 Aug 2015 10:00:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286515 - head/lib/msun/src X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 10:00:15 -0000 Author: dim Date: Sun Aug 9 10:00:13 2015 New Revision: 286515 URL: https://svnweb.freebsd.org/changeset/base/286515 Log: In libm's exp2(3), avoid left-shifting a negative integer, which is undefined. Replace it with the intended value, in a defined way. Reviewed by: bde MFC after: 3 days Modified: head/lib/msun/src/s_exp2.c Modified: head/lib/msun/src/s_exp2.c ============================================================================== --- head/lib/msun/src/s_exp2.c Sun Aug 9 09:54:29 2015 (r286514) +++ head/lib/msun/src/s_exp2.c Sun Aug 9 10:00:13 2015 (r286515) @@ -376,14 +376,14 @@ exp2(double x) /* Compute r = exp2(y) = exp2t[i0] * p(z - eps[i]). */ t = tbl[i0]; /* exp2t[i0] */ z -= tbl[i0 + 1]; /* eps[i0] */ - if (k >= -1021 << 20) + if (k >= -(1021 << 20)) INSERT_WORDS(twopk, 0x3ff00000 + k, 0); else INSERT_WORDS(twopkp1000, 0x3ff00000 + k + (1000 << 20), 0); r = t + t * z * (P1 + z * (P2 + z * (P3 + z * (P4 + z * P5)))); /* Scale by 2**(k>>20). */ - if(k >= -1021 << 20) { + if(k >= -(1021 << 20)) { if (k == 1024 << 20) return (r * 2.0 * 0x1p1023); return (r * twopk); From owner-svn-src-head@freebsd.org Sun Aug 9 10:11:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7C83C9984B2; Sun, 9 Aug 2015 10:11:05 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6A061195; Sun, 9 Aug 2015 10:11:05 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79AB5eP057433; Sun, 9 Aug 2015 10:11:05 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79AB5fa057432; Sun, 9 Aug 2015 10:11:05 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508091011.t79AB5fa057432@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 10:11:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286516 - head/share/man/man4 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 10:11:05 -0000 Author: mav Date: Sun Aug 9 10:11:04 2015 New Revision: 286516 URL: https://svnweb.freebsd.org/changeset/base/286516 Log: Document kern.cam.ctl.debug sysctl. MFC after: 1 week Modified: head/share/man/man4/ctl.4 Modified: head/share/man/man4/ctl.4 ============================================================================== --- head/share/man/man4/ctl.4 Sun Aug 9 10:00:13 2015 (r286515) +++ head/share/man/man4/ctl.4 Sun Aug 9 10:11:04 2015 (r286516) @@ -23,7 +23,7 @@ .\" SUCH DAMAGE. .\" .\" $FreeBSD$ -.Dd July 11, 2015 +.Dd August 9, 2015 .Dt CTL 4 .Os .Sh NAME @@ -91,6 +91,17 @@ variables and .Xr loader 8 tunables: .Bl -tag -width indent +.It Va kern.cam.ctl.debug +Bit mask of enabled CTL log levels: +.Bl -tag -offset indent -compact +.It 1 +log commands with errors; +.It 2 +log all commands; +.It 4 +log received data for commands except READ/WRITE. +.El +Defaults to 0. .It Va kern.cam.ctl.iscsi.debug Verbosity level for log messages from the kernel part of iSCSI target. Set to 0 to disable logging or 1 to warn about potential problems. From owner-svn-src-head@freebsd.org Sun Aug 9 11:06:41 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8855299820E; Sun, 9 Aug 2015 11:06:41 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 728CFE76; Sun, 9 Aug 2015 11:06:41 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79B6fDi078308; Sun, 9 Aug 2015 11:06:41 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79B6fGN078307; Sun, 9 Aug 2015 11:06:41 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201508091106.t79B6fGN078307@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sun, 9 Aug 2015 11:06:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286519 - head/contrib/binutils/gas/config X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 11:06:41 -0000 Author: dim Date: Sun Aug 9 11:06:40 2015 New Revision: 286519 URL: https://svnweb.freebsd.org/changeset/base/286519 Log: In GNU as, avoid left-shifting negative integers, which is undefined. MFC after: 3 days Modified: head/contrib/binutils/gas/config/tc-i386.c Modified: head/contrib/binutils/gas/config/tc-i386.c ============================================================================== --- head/contrib/binutils/gas/config/tc-i386.c Sun Aug 9 10:36:25 2015 (r286518) +++ head/contrib/binutils/gas/config/tc-i386.c Sun Aug 9 11:06:40 2015 (r286519) @@ -914,8 +914,8 @@ fits_in_signed_long (offsetT num ATTRIBU #ifndef BFD64 return 1; #else - return (!(((offsetT) -1 << 31) & num) - || (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31)); + return (!(-((offsetT) 1 << 31) & num) + || (-((offsetT) 1 << 31) & num) == -((offsetT) 1 << 31)); #endif } /* fits_in_signed_long() */ From owner-svn-src-head@freebsd.org Sun Aug 9 11:51:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C0C3899D09D for ; Sun, 9 Aug 2015 11:51:31 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-oi0-f44.google.com (mail-oi0-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 92230AFF for ; Sun, 9 Aug 2015 11:51:31 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by oihn130 with SMTP id n130so76099756oih.2 for ; Sun, 09 Aug 2015 04:51:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=fYUhINffG50hOl9RyPAQb50tTLo9tTuOGYj89DXAqRc=; b=GbQbomNUan4uJua6h+waL/Zbs/+IY2IB0UO5VOWoQkx2ungoEdmVplMtLPGppE1OGg RVAW3KOiwBvizYX7wjm3aIJdwWoHBm35UMccNObt8QNBBcBqhlLalwyTZvhtylci/TZ9 tIaBysOyKhIpT6wFIOqmczJGBKOBzalQLnDjTyA46nEsJX+VOF8orZCfrsSLUMk48h9L 8ASgT3pRD/g11Khv0SuXDtpjsxrmpNee99sJeAu6q5elVWk7Dr+FhjICLl+hSApxq03n Dyut5iTJrb1HfWWljlvx5ikfcUsI3g3kVXL+UiHIKoeEjeWcdfBXAwgYMYL3FxRAyqoN UGTg== X-Gm-Message-State: ALoCoQlhA2CfrB1NWahYMge1tWMTMhM12HIbA9jz+YWQh3KWEa8lq3IdJ6C1PCKIiSMuYErRrKeP MIME-Version: 1.0 X-Received: by 10.202.67.67 with SMTP id q64mr14694357oia.124.1439121085579; Sun, 09 Aug 2015 04:51:25 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Sun, 9 Aug 2015 04:51:25 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508040234.t742YqQA045448@repo.freebsd.org> References: <201508040234.t742YqQA045448@repo.freebsd.org> Date: Sun, 9 Aug 2015 13:51:25 +0200 Message-ID: Subject: Re: svn commit: r286266 - head/usr.bin/ypmatch From: Ed Schouten To: Marcelo Araujo Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 11:51:31 -0000 Hi Marcelo, 2015-08-04 4:34 GMT+02:00 Marcelo Araujo : > Sync the code with the OpenBSD version. That's a shame. It looks like improvements that we made to our version have been undone because of this. > -static void > +void > usage(void) This function could be static. > + fprintf(stderr, > + "where\n" > + "\tmapname may be either a mapname or a nickname for a map.\n" > + "\t-k prints keys as well as values.\n" > + "\t-t inhibits map nickname translation.\n" > + "\t-x dumps the map nickname translation table.\n"); It is fairly uncommon for BSD utilities to have an extensive help output. Man pages are intended for that purpose. > - while ((c = getopt(argc, argv, "xd:kt")) != -1) > + while ((c=getopt(argc, argv, "xd:kt")) != -1) > switch (c) { > case 'x': > - for (i = 0; i + for (i=0; i ... > - if ((argc-optind) < 2) > + if ((argc-optind) < 2 ) > ... > - if (!domainname) > + if (!domainname) { > yp_get_default_domain(&domainname); > + } Though the style(9) conformance of tool wasn't ideal, this change made it worse. -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK/VAT number: 62051717 From owner-svn-src-head@freebsd.org Sun Aug 9 12:55:54 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B5A8899876B; Sun, 9 Aug 2015 12:55:54 +0000 (UTC) (envelope-from kabaev@gmail.com) Received: from mail-qk0-x22b.google.com (mail-qk0-x22b.google.com [IPv6:2607:f8b0:400d:c09::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6D6937A1; Sun, 9 Aug 2015 12:55:54 +0000 (UTC) (envelope-from kabaev@gmail.com) Received: by qkbm65 with SMTP id m65so50754061qkb.2; Sun, 09 Aug 2015 05:55:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-type; bh=5hO+83RulaN5GRSpQQViUY4Hcce+gO3sV9+gdAEUvDw=; b=AQRzPKVWfJYfesrl+hTyIIDowh3vtzOFUTkOUCpocrSplcmohkRIZUcgaX/St0b0WE wgkOfn43C1ta84vjXNJBxPi7f76LmtjT3CitjOhg4cUSGjDGUGyA9hGKhYQUE7OiGptn rxqUJyiQT9S9+byFaXo8mDlaAAlpZnaj0TkWYN5iFirNgFYUAuMluRVB2IKUrbVTbos3 XwmfAiZQwgw7vgeMjSQJKzC3geANIQFc7MHeIkw216bXPWC+eaaV5oLrEjUaD0CAWfLk n52n2rBU9I53PcFwdzyN5+KazODcVdrEzhZ4iE2fk1rqYHYvrs4OZUXoY4nB6FXBod+I BUVw== X-Received: by 10.55.41.16 with SMTP id p16mr28579929qkh.82.1439124953455; Sun, 09 Aug 2015 05:55:53 -0700 (PDT) Received: from kan ([2601:18f:0:1570:226:18ff:fe00:232e]) by smtp.gmail.com with ESMTPSA id x75sm8181310qkx.28.2015.08.09.05.55.52 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Aug 2015 05:55:52 -0700 (PDT) Date: Sun, 9 Aug 2015 08:55:45 -0400 From: Alexander Kabaev To: Ed Schouten Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r285910 - in head: lib/libc/sys sys/kern sys/sys Message-ID: <20150809085545.0beef79b@kan> In-Reply-To: References: <201507271317.t6RDHwpj067194@repo.freebsd.org> <20150808150539.0b43cfcd@kan> X-Mailer: Claws Mail 3.12.0 (GTK+ 2.24.28; amd64-portbld-freebsd11.0) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/a7Ec4kwZJh29oIlDB9btwpN"; protocol="application/pgp-signature" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 12:55:54 -0000 --Sig_/a7Ec4kwZJh29oIlDB9btwpN Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Sun, 9 Aug 2015 09:37:13 +0200 Ed Schouten wrote: > Hi Alexander, >=20 > 2015-08-08 21:05 GMT+02:00 Alexander Kabaev : > > this commit broke more than just syslogd. rtsol and rtsold both are > > victims of the change as they are trying to shutdown unconnected > > raw sockets to make then 'send-only' and fail. >=20 > Good catch! I think that in this case it is safe to omit the call to > shutdown(), or at least not let the application fail on startup > because of shutdown() being more strict. After all, this code would > fail on Linux, OS X, etc. already because of this. >=20 > Could you test the attached patch and let me know whether it makes > rtsol/rtsold work again? >=20 > Thanks, > --=20 > Ed Schouten > Nuxi, 's-Hertogenbosch, the Netherlands > KvK/VAT number: 62051717 It most definitely does work, this is what I have done to get my network scripts work again. I wonder if there are other means of restricting raw sockets that can be used to achieve the result authors of rtsold had hoped or? =20 --=20 Alexander Kabaev --Sig_/a7Ec4kwZJh29oIlDB9btwpN Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQJ8BAEBCgBmBQJVx03TXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRDNUY3RDk5NTk5QjY0MUUxM0M1MTU2OTEw NzEzMjI5OTkyNzkyRTdFAAoJEAcTIpmSeS5+vicP/jRqCzEY39Zjf9bmzYFCUdNZ rjcsXOyOClRt90hqbqGD93GTmtHvr1qylsFEKYLyym/LGUu1ffecZfBQXKT02cDy rLZlWcSVaIwkpVKG1VYaCE4Pa2YQ6hJgLrSTbOTdDxy2ur/dHUh384DoeLJLkZu+ qWHxTkq9aRUaNC6AhYggQY+M1hPyi15sCPRslMKF5xYQw/u41Fz3oti/pTXJxRVi tu+eZCWcouFdn1oS5ezJ/HjJSpDBnSxFYjAYP8mPcwwy/mQNrqzlR2iRRchbcxGK IXUJcWDbgeeAs1L3DEigxE0YT/FL4t1xyDI3lMKFE4+j9n1LAKxQkA/S9wkqmSNh P2NOs04Y6iaNXogxEuRyn3HqdorrQakiFsUMQLB0Un5UU1W5qxpuKR3FtgAt52LR 6L9ltmfUc6QUIpicva+jPqd5OV3QoOHg5c1Y5AgbBcsb2Y8Imjy44xWCd+H3DXHm hBTn91lw046Hbo7RjwlUKLGcAq34nNsUL5lsDljPonbRVwJL002dOwOc/USEoQZd BLH1xu4MR0mRL1Q7Vhk0ySB+5ZLRwRA5yHmtw8Pt3EL9ogxc4HM6zCNTQK4NOCDy GelCyKn0AdpPOs0LIcqh0r5arsznV3gct8qrC3zy1+1gA+Ns8sEnnYgZF9rwZYye N26hz97S8VMgaIC9zzjC =nZIq -----END PGP SIGNATURE----- --Sig_/a7Ec4kwZJh29oIlDB9btwpN-- From owner-svn-src-head@freebsd.org Sun Aug 9 12:58:58 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B74C699884C; Sun, 9 Aug 2015 12:58:58 +0000 (UTC) (envelope-from kwm@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8E6409AC; Sun, 9 Aug 2015 12:58:58 +0000 (UTC) (envelope-from kwm@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79Cww2d027167; Sun, 9 Aug 2015 12:58:58 GMT (envelope-from kwm@FreeBSD.org) Received: (from kwm@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79CwvGj027161; Sun, 9 Aug 2015 12:58:57 GMT (envelope-from kwm@FreeBSD.org) Message-Id: <201508091258.t79CwvGj027161@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kwm set sender to kwm@FreeBSD.org using -f From: Koop Mast Date: Sun, 9 Aug 2015 12:58:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286524 - in head: . etc sys/dev/drm sys/dev/drm2 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 12:58:58 -0000 Author: kwm (ports committer) Date: Sun Aug 9 12:58:56 2015 New Revision: 286524 URL: https://svnweb.freebsd.org/changeset/base/286524 Log: Add a new group named 'video' with the id of 44. And make drm create devices in /dev/dri/ with this new group. This will allow ports and users to more easily access to these devices for OpenGL and OpenCL support. Reviewed by: dumbbell@ Approved by: dumbbell@ Differential Revision: https://reviews.freebsd.org/D1260 Modified: head/UPDATING head/etc/group head/sys/dev/drm/drmP.h head/sys/dev/drm2/drmP.h Modified: head/UPDATING ============================================================================== --- head/UPDATING Sun Aug 9 12:20:22 2015 (r286523) +++ head/UPDATING Sun Aug 9 12:58:56 2015 (r286524) @@ -31,6 +31,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11 disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20150809: + The default group assigned to /dev/dri entries has been changed + from 'wheel' to 'video' with the id of '44'. If you want to have + access to the dri devices please add yourself to the video group + with: + + # pw groupmod video -m $USER + 20150806: The menu.rc and loader.rc files will now be replaced during upgrades. Please migrate local changes to menu.rc.local and Modified: head/etc/group ============================================================================== --- head/etc/group Sun Aug 9 12:20:22 2015 (r286523) +++ head/etc/group Sun Aug 9 12:58:56 2015 (r286524) @@ -17,6 +17,7 @@ sshd:*:22: smmsp:*:25: mailnull:*:26: guest:*:31: +video:*:44: bind:*:53: unbound:*:59: proxy:*:62: Modified: head/sys/dev/drm/drmP.h ============================================================================== --- head/sys/dev/drm/drmP.h Sun Aug 9 12:20:22 2015 (r286523) +++ head/sys/dev/drm/drmP.h Sun Aug 9 12:58:56 2015 (r286524) @@ -175,7 +175,7 @@ SYSCTL_DECL(_hw_drm); #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) #define DRM_DEV_UID 0 -#define DRM_DEV_GID 0 +#define DRM_DEV_GID 44 /* "video" group */ #define wait_queue_head_t atomic_t #define DRM_WAKEUP(w) wakeup((void *)w) Modified: head/sys/dev/drm2/drmP.h ============================================================================== --- head/sys/dev/drm2/drmP.h Sun Aug 9 12:20:22 2015 (r286523) +++ head/sys/dev/drm2/drmP.h Sun Aug 9 12:58:56 2015 (r286524) @@ -1593,7 +1593,7 @@ SYSCTL_DECL(_hw_drm); #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) #define DRM_DEV_UID 0 -#define DRM_DEV_GID 0 +#define DRM_DEV_GID 44 /* "video" group */ #define DRM_WAKEUP(w) wakeup((void *)w) #define DRM_WAKEUP_INT(w) wakeup(w) From owner-svn-src-head@freebsd.org Sun Aug 9 13:08:08 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7C01A998AB7 for ; Sun, 9 Aug 2015 13:08:08 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-ob0-f170.google.com (mail-ob0-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BB36E98 for ; Sun, 9 Aug 2015 13:08:07 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by obbhe7 with SMTP id he7so11138627obb.0 for ; Sun, 09 Aug 2015 06:08:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=0wdexFA/T0tPPggsyXIUJSOfryUWb8Wl1FNMGv2L5u8=; b=MJqPBULgbAm52oVLar9BtboZYn+tQXBSvrreTxO6NSU2e+YQkSNFH5oq3cgZJIUdom uemaBzWTU9Uz6MvoIOBCjk4qDj2UiIBjdzmStEIN4Og6++wZ9eREnDs7zrBAK3QPn7MR li2usnYgRTKaTHntysqVpcKhkxT1BVad7Fekt+GwkKCdRz7L7FGutzb2r6wfZsum4gaR 4QgBuIas5JiJNVQ8YDeAP1WU2PEyQWo/4Ed0lB3r4XZoDiDIhN0zK0+eb8kDPQ8mxnlq yDDfnR3PfPuNa/4cDdNKn9reUABH9lA3jgbes+zGMI3xoVz0jeuru7lY7y66YlcQhe9l wnYQ== X-Gm-Message-State: ALoCoQm/ytCirHlfoW7VJvDOF3ZvsLVWiWFw3oy8SJuYRBHPOnKapeeA5jM2ZkaIngWKdMV0o3fd MIME-Version: 1.0 X-Received: by 10.182.86.72 with SMTP id n8mr16136934obz.9.1439125681535; Sun, 09 Aug 2015 06:08:01 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Sun, 9 Aug 2015 06:08:01 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <20150809085545.0beef79b@kan> References: <201507271317.t6RDHwpj067194@repo.freebsd.org> <20150808150539.0b43cfcd@kan> <20150809085545.0beef79b@kan> Date: Sun, 9 Aug 2015 15:08:01 +0200 Message-ID: Subject: Re: svn commit: r285910 - in head: lib/libc/sys sys/kern sys/sys From: Ed Schouten To: Alexander Kabaev Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 13:08:08 -0000 Hi Alexander, 2015-08-09 14:55 GMT+02:00 Alexander Kabaev : > On Sun, 9 Aug 2015 09:37:13 +0200 > It most definitely does work, this is what I have done to get my > network scripts work again. I wonder if there are other means of > restricting raw sockets that can be used to achieve the result > authors of rtsold had hoped or? Yes, there sure are. We could for example call cap_rights_limit() on the socket and whitelist the exacty set of actions that the program needs. That said, it wouldn't make a difference in the end. It looks like rtsol/rtsold don't seem to drop any privileges or switch credentials after startup, assuming I haven't overlooked anything. Even if we were to restrict the raw socket, the process could always open a new one later on. I think it would make sense for now to just commit the patch that I proposed. Will push it into the tree tomorrow. Thanks, -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK/VAT number: 62051717 From owner-svn-src-head@freebsd.org Sun Aug 9 14:45:29 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E576999D2A2; Sun, 9 Aug 2015 14:45:29 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D6657E7E; Sun, 9 Aug 2015 14:45:29 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79EjTku072930; Sun, 9 Aug 2015 14:45:29 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79EjTxE072929; Sun, 9 Aug 2015 14:45:29 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508091445.t79EjTxE072929@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 9 Aug 2015 14:45:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286527 - head/etc/mtree X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 14:45:30 -0000 Author: bapt Date: Sun Aug 9 14:45:29 2015 New Revision: 286527 URL: https://svnweb.freebsd.org/changeset/base/286527 Log: Add missing entry Reported by: antroine Modified: head/etc/mtree/BSD.usr.dist Modified: head/etc/mtree/BSD.usr.dist ============================================================================== --- head/etc/mtree/BSD.usr.dist Sun Aug 9 13:43:36 2015 (r286526) +++ head/etc/mtree/BSD.usr.dist Sun Aug 9 14:45:29 2015 (r286527) @@ -723,6 +723,8 @@ .. kk_KZ.UTF-8 .. + kk_Cyrl_KZ.UTF-8 + .. ko_KR.CP949 .. ko_KR.UTF-8 From owner-svn-src-head@freebsd.org Sun Aug 9 14:46:19 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1C64699D2F3; Sun, 9 Aug 2015 14:46:19 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0D30DFC7; Sun, 9 Aug 2015 14:46:19 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79EkIgL073008; Sun, 9 Aug 2015 14:46:18 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79EkIwA073007; Sun, 9 Aug 2015 14:46:18 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508091446.t79EkIwA073007@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 9 Aug 2015 14:46:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286528 - head/etc/mtree X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 14:46:19 -0000 Author: bapt Date: Sun Aug 9 14:46:18 2015 New Revision: 286528 URL: https://svnweb.freebsd.org/changeset/base/286528 Log: Properly sort Modified: head/etc/mtree/BSD.usr.dist Modified: head/etc/mtree/BSD.usr.dist ============================================================================== --- head/etc/mtree/BSD.usr.dist Sun Aug 9 14:45:29 2015 (r286527) +++ head/etc/mtree/BSD.usr.dist Sun Aug 9 14:46:18 2015 (r286528) @@ -719,12 +719,12 @@ .. ja_JP.eucJP .. + kk_Cyrl_KZ.UTF-8 + .. kk_KZ.PT154 .. kk_KZ.UTF-8 .. - kk_Cyrl_KZ.UTF-8 - .. ko_KR.CP949 .. ko_KR.UTF-8 From owner-svn-src-head@freebsd.org Sun Aug 9 15:38:33 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 89B5D99DD80; Sun, 9 Aug 2015 15:38:33 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 76E96EF5; Sun, 9 Aug 2015 15:38:33 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79FcX9H093658; Sun, 9 Aug 2015 15:38:33 GMT (envelope-from pfg@FreeBSD.org) Received: (from pfg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79FcX8s093657; Sun, 9 Aug 2015 15:38:33 GMT (envelope-from pfg@FreeBSD.org) Message-Id: <201508091538.t79FcX8s093657@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: pfg set sender to pfg@FreeBSD.org using -f From: "Pedro F. Giffuni" Date: Sun, 9 Aug 2015 15:38:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286531 - head/sys/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 15:38:33 -0000 Author: pfg Date: Sun Aug 9 15:38:32 2015 New Revision: 286531 URL: https://svnweb.freebsd.org/changeset/base/286531 Log: cdefs: reduce code duplication Modified: head/sys/sys/cdefs.h Modified: head/sys/sys/cdefs.h ============================================================================== --- head/sys/sys/cdefs.h Sun Aug 9 15:22:37 2015 (r286530) +++ head/sys/sys/cdefs.h Sun Aug 9 15:38:32 2015 (r286531) @@ -227,16 +227,7 @@ #define __unused /* XXX Find out what to do for __packed, __aligned and __section */ #endif -#if __GNUC_PREREQ__(2, 7) -#define __dead2 __attribute__((__noreturn__)) -#define __pure2 __attribute__((__const__)) -#define __unused __attribute__((__unused__)) -#define __used __attribute__((__used__)) -#define __packed __attribute__((__packed__)) -#define __aligned(x) __attribute__((__aligned__(x))) -#define __section(x) __attribute__((__section__(x))) -#endif -#if defined(__INTEL_COMPILER) +#if __GNUC_PREREQ__(2, 7) || defined(__INTEL_COMPILER) #define __dead2 __attribute__((__noreturn__)) #define __pure2 __attribute__((__const__)) #define __unused __attribute__((__unused__)) From owner-svn-src-head@freebsd.org Sun Aug 9 15:59:58 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E4E9E99D471 for ; Sun, 9 Aug 2015 15:59:57 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from mail-pa0-f47.google.com (mail-pa0-f47.google.com [209.85.220.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BA3FB1D07 for ; Sun, 9 Aug 2015 15:59:57 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: by pawu10 with SMTP id u10so122391384paw.1 for ; Sun, 09 Aug 2015 08:59:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:subject:mime-version:content-type:from :in-reply-to:date:cc:message-id:references:to; bh=Y4U9kFIYNOq8DfhXftI5ts5wcIVIAA66OKqg6fPqzzc=; b=dlbhaZ+X4raAB3z8fSlys942lW3Zup7WTYK7ViQWlFMGg5mIk4cngNwPYr9NpNwV3o VINFFYTeNBwNmRmLv0cF30oIp9dM3mXVas+h0hQbDLrBIkNbh/LLJBoidV1yMZQIDq0r T8pnNQI/5+WgDXhsma9SHP87HxG4PvPCECVrphZ4rWLP49rwp9yn/sn4uLVnOn0cbZO/ 35A2kur8GzU1KPsEkrLL3X1oym3yssq8A2IMOLM+QMD3e6obdQifqqzq1goMbVDYsuJ7 LntvJLV2d6bUI5HF9o5pZHN7GRgiNXTd1cmeHqYat1eyG8Tz/J1HgPYR/LWEsyVSIn+X 8v/w== X-Gm-Message-State: ALoCoQnTDezOUOWzCkkozrObB7SwWuFgg+Ow/BILDRDnALULK9hCykFgSrVaPt/sh4ujzJb0i2wC X-Received: by 10.66.192.162 with SMTP id hh2mr36523395pac.71.1439135991441; Sun, 09 Aug 2015 08:59:51 -0700 (PDT) Received: from [10.64.26.118] ([69.53.236.236]) by smtp.gmail.com with ESMTPSA id nm8sm12928867pbc.20.2015.08.09.08.59.49 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 09 Aug 2015 08:59:50 -0700 (PDT) Sender: Warner Losh Subject: Re: svn commit: r286519 - head/contrib/binutils/gas/config Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Content-Type: multipart/signed; boundary="Apple-Mail=_B63C258E-B2F2-4F1E-B2F0-726E7BBE828F"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail 2.5 From: Warner Losh In-Reply-To: <201508091106.t79B6fGN078307@repo.freebsd.org> Date: Sun, 9 Aug 2015 09:59:49 -0600 Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: References: <201508091106.t79B6fGN078307@repo.freebsd.org> To: Dimitry Andric X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 15:59:58 -0000 --Apple-Mail=_B63C258E-B2F2-4F1E-B2F0-726E7BBE828F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Since when is LEFT shifting a signed number undefined. It is RIGHT shifting that=E2=80=99s undefined=E2=80=A6 Warner > On Aug 9, 2015, at 5:06 AM, Dimitry Andric wrote: >=20 > Author: dim > Date: Sun Aug 9 11:06:40 2015 > New Revision: 286519 > URL: https://svnweb.freebsd.org/changeset/base/286519 >=20 > Log: > In GNU as, avoid left-shifting negative integers, which is undefined. >=20 > MFC after: 3 days >=20 > Modified: > head/contrib/binutils/gas/config/tc-i386.c >=20 > Modified: head/contrib/binutils/gas/config/tc-i386.c > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > --- head/contrib/binutils/gas/config/tc-i386.c Sun Aug 9 = 10:36:25 2015 (r286518) > +++ head/contrib/binutils/gas/config/tc-i386.c Sun Aug 9 = 11:06:40 2015 (r286519) > @@ -914,8 +914,8 @@ fits_in_signed_long (offsetT num ATTRIBU > #ifndef BFD64 > return 1; > #else > - return (!(((offsetT) -1 << 31) & num) > - || (((offsetT) -1 << 31) & num) =3D=3D ((offsetT) -1 << 31)); > + return (!(-((offsetT) 1 << 31) & num) > + || (-((offsetT) 1 << 31) & num) =3D=3D -((offsetT) 1 << 31)); > #endif > } /* fits_in_signed_long() */ >=20 >=20 --Apple-Mail=_B63C258E-B2F2-4F1E-B2F0-726E7BBE828F Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVx3j2AAoJEGwc0Sh9sBEAbmwQAJEasQpFomXfXNppBe140ID/ yUG26/ITDXaM/EtJwQNwmeN1BYvDw0WLk/q452UF4Ov+FRWoDiMC0kv+Ngu+o37E mHsbSuGyzMnG6Jbch6h0g4sLzidIKN7Ept4JzdKkEsV24EKs6C7XHNkERFEMhqcp h4nd5wg09O6AacIu8nPP0AAwloZZLxNpE32qvxdiPRsOiY7xd4LIHTrdYpN0CrM4 5JS2yNpUlaJCWX8U/xzdtAoBZOe5KfuQhZAgFbcY3QtlSapPoOliVzpvNHbCCoa+ jCPL2sLXnZTqEjgLspPoKmqrG0eohHDfjaI8b6m+d00AJTtlJagxnT2Lm9KN3ARB 33KDUGyBIypR8EJdW5a5dbQIdgpwrIrBx3GSe70OeQWEa6OB1fQprT3TSb3Zmxd0 VRS7T++7+KCEm9VzfaX49rSA+gRgSxPFGbqotowBoF1iKI6kxtRkwgEJHO5WMfln 0djAgdYecSuzUvrWPmBPntSv5+vAvh97h5bXEAgvgpfDwr4VW/L43/FWOyLUMVsE 43mvuoiYNWeOTMxBRwitIZBc1Ax0JCjw6hggsrpMbhCL6h6qluBT3r9bvzCpl2G5 QjM8j5cuWMlzk3KfyCdkdfB77yPSrjKcPt5skhIAlimwmfEQ5EqDJcXHDPZoFZDE quHhoYYDVnyIhSSUPKjC =dzOF -----END PGP SIGNATURE----- --Apple-Mail=_B63C258E-B2F2-4F1E-B2F0-726E7BBE828F-- From owner-svn-src-head@freebsd.org Sun Aug 9 17:21:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CC58D998C50; Sun, 9 Aug 2015 17:21:16 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail108.syd.optusnet.com.au (mail108.syd.optusnet.com.au [211.29.132.59]) by mx1.freebsd.org (Postfix) with ESMTP id 8D19B301; Sun, 9 Aug 2015 17:21:16 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from c211-30-166-197.carlnfd1.nsw.optusnet.com.au (c211-30-166-197.carlnfd1.nsw.optusnet.com.au [211.30.166.197]) by mail108.syd.optusnet.com.au (Postfix) with ESMTPS id D18581A1ABA; Mon, 10 Aug 2015 03:21:10 +1000 (AEST) Date: Mon, 10 Aug 2015 03:21:09 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Warner Losh cc: Dimitry Andric , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286519 - head/contrib/binutils/gas/config In-Reply-To: Message-ID: <20150810030920.K3557@besplex.bde.org> References: <201508091106.t79B6fGN078307@repo.freebsd.org> MIME-Version: 1.0 X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=XMDNMlVE c=1 sm=1 tr=0 a=KA6XNC2GZCFrdESI5ZmdjQ==:117 a=PO7r1zJSAAAA:8 a=JzwRw_2MAAAA:8 a=nlC_4_pT8q9DhB4Ho9EA:9 a=cvhUyJTsP3Ug5lygeE0A:9 a=45ClL6m2LaAA:10 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 17:21:16 -0000 On Sun, 9 Aug 2015, Warner Losh wrote: > Since when is LEFT shifting a signed number undefined. It is RIGHT > shifting that=E2=80=99s undefined=E2=80=A6 Always. It always shifts out the sign bit in the usual 2's complement representation, so must be undefined in that case. It is undefined by definition in other representions where the sign bit could have been anywhere before C99. Left shifting of a positive value is undefined if the shift moves a bit into or through the sign bit. Strangely, right shifting is never undefined. It is implementation- defined. Now the sign bit may or may not be preserved or take part in the shift, but other bits are never shifted into the sign bit except possibly in weird pre-C99 representations, so overflow doesn't occur and the usual reason for undefined behaviour of an expression -- that the correct result is unrepresentable -- doesn't apply. I remembered this backwards too. Bruce From owner-svn-src-head@freebsd.org Sun Aug 9 18:15:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B2C6099DA24; Sun, 9 Aug 2015 18:15:34 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A26FBEE5; Sun, 9 Aug 2015 18:15:34 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79IFYhH061097; Sun, 9 Aug 2015 18:15:34 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79IFYwv061096; Sun, 9 Aug 2015 18:15:34 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201508091815.t79IFYwv061096@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Sun, 9 Aug 2015 18:15:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286536 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 18:15:34 -0000 Author: imp Date: Sun Aug 9 18:15:33 2015 New Revision: 286536 URL: https://svnweb.freebsd.org/changeset/base/286536 Log: cmp and cp are used by the kerberos install, so need to be imclided in ITOOLS. They are tiny enough that I'm not making conditional: the minuscule savings in disk space isn't worth the obfuscation of Makefile.inc1. Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Sun Aug 9 17:08:18 2015 (r286535) +++ head/Makefile.inc1 Sun Aug 9 18:15:33 2015 (r286536) @@ -807,7 +807,7 @@ __installcheck_UGID: _zoneinfo= zic tzsetup .endif -ITOOLS= [ awk cap_mkdb cat chflags chmod chown \ +ITOOLS= [ awk cap_mkdb cat chflags chmod chown cmp cp \ date echo egrep find grep id install ${_install-info} \ ln lockf make mkdir mtree mv pwd_mkdb \ rm sed services_mkdb sh strip sysctl test true uname wc ${_zoneinfo} \ From owner-svn-src-head@freebsd.org Sun Aug 9 19:07:25 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 886BF99D869; Sun, 9 Aug 2015 19:07:25 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6FAA7DE7; Sun, 9 Aug 2015 19:07:25 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79J7PPO082027; Sun, 9 Aug 2015 19:07:25 GMT (envelope-from kp@FreeBSD.org) Received: (from kp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79J7PqS082026; Sun, 9 Aug 2015 19:07:25 GMT (envelope-from kp@FreeBSD.org) Message-Id: <201508091907.t79J7PqS082026@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kp set sender to kp@FreeBSD.org using -f From: Kristof Provost Date: Sun, 9 Aug 2015 19:07:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286537 - head/sys/netinet X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 19:07:25 -0000 Author: kp Date: Sun Aug 9 19:07:24 2015 New Revision: 286537 URL: https://svnweb.freebsd.org/changeset/base/286537 Log: tcp_reass_zone is not a VNET variable. This fixes a panic during 'sysctl -a' on VIMAGE kernels. The tcp_reass_zone variable is not VNET_DEFINE() so we can not mark it as a VNET variable (with CTLFLAG_VNET). Modified: head/sys/netinet/tcp_reass.c Modified: head/sys/netinet/tcp_reass.c ============================================================================== --- head/sys/netinet/tcp_reass.c Sun Aug 9 18:15:33 2015 (r286536) +++ head/sys/netinet/tcp_reass.c Sun Aug 9 19:07:24 2015 (r286537) @@ -84,7 +84,7 @@ SYSCTL_INT(_net_inet_tcp_reass, OID_AUTO "Global maximum number of TCP Segments in Reassembly Queue"); static uma_zone_t tcp_reass_zone; -SYSCTL_UMA_CUR(_net_inet_tcp_reass, OID_AUTO, cursegments, CTLFLAG_VNET, +SYSCTL_UMA_CUR(_net_inet_tcp_reass, OID_AUTO, cursegments, 0, &tcp_reass_zone, "Global number of TCP Segments currently in Reassembly Queue"); From owner-svn-src-head@freebsd.org Sun Aug 9 19:18:00 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DD7A899DA81; Sun, 9 Aug 2015 19:18:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B45C083C; Sun, 9 Aug 2015 19:18:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79JI0Un089769; Sun, 9 Aug 2015 19:18:00 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79JI0Ns089768; Sun, 9 Aug 2015 19:18:00 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508091918.t79JI0Ns089768@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 19:18:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286539 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 19:18:01 -0000 Author: mav Date: Sun Aug 9 19:17:59 2015 New Revision: 286539 URL: https://svnweb.freebsd.org/changeset/base/286539 Log: MFV 286538: 5562 ZFS sa_handle's violate kmem invariants, debug kernels panic on boot Reviewed by: Matthew Ahrens Reviewed by: Robert Mustacchi Reviewed by: George Wilson Reviewed by: Rich Lowe Approved by: Dan McDonald Author: Justin T. Gibbs illumos/illumos-gate@0fda3cc5c1c5a1d9bdea6d52637bef6e781549c9 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c Sun Aug 9 19:12:43 2015 (r286538) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c Sun Aug 9 19:17:59 2015 (r286539) @@ -210,12 +210,6 @@ sa_cache_constructor(void *buf, void *un { sa_handle_t *hdl = buf; - hdl->sa_bonus_tab = NULL; - hdl->sa_spill_tab = NULL; - hdl->sa_os = NULL; - hdl->sa_userp = NULL; - hdl->sa_bonus = NULL; - hdl->sa_spill = NULL; mutex_init(&hdl->sa_lock, NULL, MUTEX_DEFAULT, NULL); return (0); } @@ -1350,14 +1344,11 @@ sa_handle_destroy(sa_handle_t *hdl) (void) dmu_buf_update_user((dmu_buf_t *)hdl->sa_bonus, hdl, NULL, NULL); - if (hdl->sa_bonus_tab) { + if (hdl->sa_bonus_tab) sa_idx_tab_rele(hdl->sa_os, hdl->sa_bonus_tab); - hdl->sa_bonus_tab = NULL; - } - if (hdl->sa_spill_tab) { + + if (hdl->sa_spill_tab) sa_idx_tab_rele(hdl->sa_os, hdl->sa_spill_tab); - hdl->sa_spill_tab = NULL; - } dmu_buf_rele(hdl->sa_bonus, NULL); @@ -1392,6 +1383,8 @@ sa_handle_get_from_db(objset_t *os, dmu_ handle->sa_bonus = db; handle->sa_os = os; handle->sa_spill = NULL; + handle->sa_bonus_tab = NULL; + handle->sa_spill_tab = NULL; error = sa_build_index(handle, SA_BONUS); newhandle = (hdl_type == SA_HDL_SHARED) ? From owner-svn-src-head@freebsd.org Sun Aug 9 19:26:24 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 77AD799DCFD; Sun, 9 Aug 2015 19:26:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5DE7FD8F; Sun, 9 Aug 2015 19:26:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79JQOtr093815; Sun, 9 Aug 2015 19:26:24 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79JQMrW093808; Sun, 9 Aug 2015 19:26:22 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508091926.t79JQMrW093808@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 19:26:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286541 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 19:26:24 -0000 Author: mav Date: Sun Aug 9 19:26:21 2015 New Revision: 286541 URL: https://svnweb.freebsd.org/changeset/base/286541 Log: MFV 286540: 5531 NULL pointer dereference in dsl_prop_get_ds() Reviewed by: Matthew Ahrens Reviewed by: Dan McDonald Reviewed by: George Wilson Reviewed by: Bayard Bell Approved by: Robert Mustacchi Author: Justin T. Gibbs illumos/illumos-gate@e57a022b8f718889ffa92adbde47a8f08abcdb25 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Sun Aug 9 19:25:40 2015 (r286540) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Sun Aug 9 19:26:21 2015 (r286541) @@ -118,11 +118,9 @@ dbuf_hash(void *os, uint64_t obj, uint8_ (dbuf)->db_blkid == (blkid)) dmu_buf_impl_t * -dbuf_find(dnode_t *dn, uint8_t level, uint64_t blkid) +dbuf_find(objset_t *os, uint64_t obj, uint8_t level, uint64_t blkid) { dbuf_hash_table_t *h = &dbuf_hash_table; - objset_t *os = dn->dn_objset; - uint64_t obj = dn->dn_object; uint64_t hv = DBUF_HASH(os, obj, level, blkid); uint64_t idx = hv & h->hash_table_mask; dmu_buf_impl_t *db; @@ -142,6 +140,24 @@ dbuf_find(dnode_t *dn, uint8_t level, ui return (NULL); } +static dmu_buf_impl_t * +dbuf_find_bonus(objset_t *os, uint64_t object) +{ + dnode_t *dn; + dmu_buf_impl_t *db = NULL; + + if (dnode_hold(os, object, FTAG, &dn) == 0) { + rw_enter(&dn->dn_struct_rwlock, RW_READER); + if (dn->dn_bonus != NULL) { + db = dn->dn_bonus; + mutex_enter(&db->db_mtx); + } + rw_exit(&dn->dn_struct_rwlock); + dnode_rele(dn, FTAG); + } + return (db); +} + /* * Insert an entry into the hash table. If there is already an element * equal to elem in the hash table, then the already existing element @@ -1852,7 +1868,7 @@ dbuf_prefetch(dnode_t *dn, uint64_t blki return; /* dbuf_find() returns with db_mtx held */ - if (db = dbuf_find(dn, 0, blkid)) { + if (db = dbuf_find(dn->dn_objset, dn->dn_object, 0, blkid)) { /* * This dbuf is already in the cache. We assume that * it is already CACHED, or else about to be either @@ -1899,7 +1915,7 @@ dbuf_hold_impl(dnode_t *dn, uint8_t leve *dbp = NULL; top: /* dbuf_find() returns with db_mtx held */ - db = dbuf_find(dn, level, blkid); + db = dbuf_find(dn->dn_objset, dn->dn_object, level, blkid); if (db == NULL) { blkptr_t *bp = NULL; @@ -2035,6 +2051,30 @@ dbuf_add_ref(dmu_buf_impl_t *db, void *t ASSERT(holds > 1); } +#pragma weak dmu_buf_try_add_ref = dbuf_try_add_ref +boolean_t +dbuf_try_add_ref(dmu_buf_t *db_fake, objset_t *os, uint64_t obj, uint64_t blkid, + void *tag) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dmu_buf_impl_t *found_db; + boolean_t result = B_FALSE; + + if (db->db_blkid == DMU_BONUS_BLKID) + found_db = dbuf_find_bonus(os, obj); + else + found_db = dbuf_find(os, obj, 0, blkid); + + if (found_db != NULL) { + if (db == found_db && dbuf_refcount(db) > db->db_dirtycnt) { + (void) refcount_add(&db->db_holds, tag); + result = B_TRUE; + } + mutex_exit(&db->db_mtx); + } + return (result); +} + /* * If you call dbuf_rele() you had better not be referencing the dnode handle * unless you have some other direct or indirect hold on the dnode. (An indirect Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c Sun Aug 9 19:25:40 2015 (r286540) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c Sun Aug 9 19:26:21 2015 (r286541) @@ -76,7 +76,8 @@ dnode_increase_indirection(dnode_t *dn, /* set dbuf's parent pointers to new indirect buf */ for (i = 0; i < nblkptr; i++) { - dmu_buf_impl_t *child = dbuf_find(dn, old_toplvl, i); + dmu_buf_impl_t *child = + dbuf_find(dn->dn_objset, dn->dn_object, old_toplvl, i); if (child == NULL) continue; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Sun Aug 9 19:25:40 2015 (r286540) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Sun Aug 9 19:26:21 2015 (r286541) @@ -369,6 +369,13 @@ dsl_dataset_snap_remove(dsl_dataset_t *d return (err); } +boolean_t +dsl_dataset_try_add_ref(dsl_pool_t *dp, dsl_dataset_t *ds, void *tag) +{ + return (dmu_buf_try_add_ref(ds->ds_dbuf, dp->dp_meta_objset, + ds->ds_object, DMU_BONUS_BLKID, tag)); +} + int dsl_dataset_hold_obj(dsl_pool_t *dp, uint64_t dsobj, void *tag, dsl_dataset_t **dsp) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c Sun Aug 9 19:25:40 2015 (r286540) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c Sun Aug 9 19:26:21 2015 (r286541) @@ -442,9 +442,31 @@ dsl_prop_notify_all_cb(dsl_pool_t *dp, d cbr = list_next(&dd->dd_prop_cbs, cbr)) { uint64_t value; + /* + * Callback entries do not have holds on their datasets + * so that datasets with registered callbacks are still + * eligible for eviction. Unlike operations on callbacks + * for a single dataset, we are performing a recursive + * descent of related datasets and the calling context + * for this iteration only has a dataset hold on the root. + * Without a hold, the callback's pointer to the dataset + * could be invalidated by eviction at any time. + * + * Use dsl_dataset_try_add_ref() to verify that the + * dataset has not begun eviction processing and to + * prevent eviction from occurring for the duration + * of the callback. If the hold attempt fails, this + * object is already being evicted and the callback can + * be safely ignored. + */ + if (!dsl_dataset_try_add_ref(dp, cbr->cbr_ds, FTAG)) + continue; + if (dsl_prop_get_ds(cbr->cbr_ds, cbr->cbr_propname, sizeof (value), 1, &value, NULL) == 0) cbr->cbr_func(cbr->cbr_arg, value); + + dsl_dataset_rele(cbr->cbr_ds, FTAG); } mutex_exit(&dd->dd_lock); @@ -497,19 +519,28 @@ dsl_prop_changed_notify(dsl_pool_t *dp, mutex_enter(&dd->dd_lock); for (cbr = list_head(&dd->dd_prop_cbs); cbr; cbr = list_next(&dd->dd_prop_cbs, cbr)) { - uint64_t propobj = dsl_dataset_phys(cbr->cbr_ds)->ds_props_obj; + uint64_t propobj; - if (strcmp(cbr->cbr_propname, propname) != 0) + /* + * cbr->cbf_ds may be invalidated due to eviction, + * requiring the use of dsl_dataset_try_add_ref(). + * See comment block in dsl_prop_notify_all_cb() + * for details. + */ + if (strcmp(cbr->cbr_propname, propname) != 0 || + !dsl_dataset_try_add_ref(dp, cbr->cbr_ds, FTAG)) continue; + propobj = dsl_dataset_phys(cbr->cbr_ds)->ds_props_obj; + /* - * If the property is set on this ds, then it is not - * inherited here; don't call the callback. + * If the property is not set on this ds, then it is + * inherited here; call the callback. */ - if (propobj && 0 == zap_contains(mos, propobj, propname)) - continue; + if (propobj == 0 || zap_contains(mos, propobj, propname) != 0) + cbr->cbr_func(cbr->cbr_arg, value); - cbr->cbr_func(cbr->cbr_arg, value); + dsl_dataset_rele(cbr->cbr_ds, FTAG); } mutex_exit(&dd->dd_lock); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h Sun Aug 9 19:25:40 2015 (r286540) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h Sun Aug 9 19:26:21 2015 (r286541) @@ -264,12 +264,15 @@ int dbuf_hold_impl(struct dnode *dn, uin void dbuf_prefetch(struct dnode *dn, uint64_t blkid, zio_priority_t prio); void dbuf_add_ref(dmu_buf_impl_t *db, void *tag); +boolean_t dbuf_try_add_ref(dmu_buf_t *db, objset_t *os, uint64_t obj, + uint64_t blkid, void *tag); uint64_t dbuf_refcount(dmu_buf_impl_t *db); void dbuf_rele(dmu_buf_impl_t *db, void *tag); void dbuf_rele_and_unlock(dmu_buf_impl_t *db, void *tag); -dmu_buf_impl_t *dbuf_find(struct dnode *dn, uint8_t level, uint64_t blkid); +dmu_buf_impl_t *dbuf_find(struct objset *os, uint64_t object, uint8_t level, + uint64_t blkid); int dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags); void dmu_buf_will_not_fill(dmu_buf_t *db, dmu_tx_t *tx); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h Sun Aug 9 19:25:40 2015 (r286540) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h Sun Aug 9 19:26:21 2015 (r286541) @@ -462,7 +462,23 @@ int dmu_spill_hold_existing(dmu_buf_t *b */ int dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset, void *tag, dmu_buf_t **, int flags); + +/* + * Add a reference to a dmu buffer that has already been held via + * dmu_buf_hold() in the current context. + */ void dmu_buf_add_ref(dmu_buf_t *db, void* tag); + +/* + * Attempt to add a reference to a dmu buffer that is in an unknown state, + * using a pointer that may have been invalidated by eviction processing. + * The request will succeed if the passed in dbuf still represents the + * same os/object/blkid, is ineligible for eviction, and has at least + * one hold by a user other than the syncer. + */ +boolean_t dmu_buf_try_add_ref(dmu_buf_t *, objset_t *os, uint64_t object, + uint64_t blkid, void *tag); + void dmu_buf_rele(dmu_buf_t *db, void *tag); uint64_t dmu_buf_refcount(dmu_buf_t *db); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Sun Aug 9 19:25:40 2015 (r286540) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Sun Aug 9 19:26:21 2015 (r286541) @@ -208,6 +208,8 @@ dsl_dataset_is_snapshot(dsl_dataset_t *d int dsl_dataset_hold(struct dsl_pool *dp, const char *name, void *tag, dsl_dataset_t **dsp); +boolean_t dsl_dataset_try_add_ref(struct dsl_pool *dp, dsl_dataset_t *ds, + void *tag); int dsl_dataset_hold_obj(struct dsl_pool *dp, uint64_t dsobj, void *tag, dsl_dataset_t **); void dsl_dataset_rele(dsl_dataset_t *ds, void *tag); From owner-svn-src-head@freebsd.org Sun Aug 9 19:29:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0FC6899DE07; Sun, 9 Aug 2015 19:29:11 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 00A961CA; Sun, 9 Aug 2015 19:29:11 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79JTA7b094182; Sun, 9 Aug 2015 19:29:10 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79JTAjb094181; Sun, 9 Aug 2015 19:29:10 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508091929.t79JTAjb094181@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 19:29:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286543 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 19:29:11 -0000 Author: mav Date: Sun Aug 9 19:29:10 2015 New Revision: 286543 URL: https://svnweb.freebsd.org/changeset/base/286543 Log: MFV 286542: 5592 NULL pointer dereference in dsl_prop_notify_all_cb() Reviewed by: Dan McDonald Reviewed by: Matthew Ahrens Reviewed by: George Wilson Reviewed by: Will Andrews Approved by: Robert Mustacchi illumos/illumos-gate@9d47dec0481d8cd53b2c1053c96bfa3f78357d6a Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Sun Aug 9 19:28:31 2015 (r286542) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Sun Aug 9 19:29:10 2015 (r286543) @@ -372,8 +372,19 @@ dsl_dataset_snap_remove(dsl_dataset_t *d boolean_t dsl_dataset_try_add_ref(dsl_pool_t *dp, dsl_dataset_t *ds, void *tag) { - return (dmu_buf_try_add_ref(ds->ds_dbuf, dp->dp_meta_objset, - ds->ds_object, DMU_BONUS_BLKID, tag)); + dmu_buf_t *dbuf = ds->ds_dbuf; + boolean_t result = B_FALSE; + + if (dbuf != NULL && dmu_buf_try_add_ref(dbuf, dp->dp_meta_objset, + ds->ds_object, DMU_BONUS_BLKID, tag)) { + + if (ds == dmu_buf_get_user(dbuf)) + result = B_TRUE; + else + dmu_buf_rele(dbuf, tag); + } + + return (result); } int From owner-svn-src-head@freebsd.org Sun Aug 9 19:35:41 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E02B799D0FB; Sun, 9 Aug 2015 19:35:40 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C4AFABFC; Sun, 9 Aug 2015 19:35:40 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79JZepb098336; Sun, 9 Aug 2015 19:35:40 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79JZdKi098329; Sun, 9 Aug 2015 19:35:39 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508091935.t79JZdKi098329@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 19:35:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286545 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 19:35:41 -0000 Author: mav Date: Sun Aug 9 19:35:39 2015 New Revision: 286545 URL: https://svnweb.freebsd.org/changeset/base/286545 Log: MFV 286544: 5630 stale bonus buffer in recycled dnode_t leads to data corruption Reviewed by: Matthew Ahrens Reviewed by: George Wilson Reviewed by: Will Andrews Approved by: Robert Mustacchi Author: Justin T. Gibbs Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Sun Aug 9 19:35:08 2015 (r286544) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Sun Aug 9 19:35:39 2015 (r286545) @@ -2128,21 +2128,60 @@ dbuf_rele_and_unlock(dmu_buf_impl_t *db, if (holds == 0) { if (db->db_blkid == DMU_BONUS_BLKID) { - mutex_exit(&db->db_mtx); + dnode_t *dn; /* - * If the dnode moves here, we cannot cross this barrier - * until the move completes. + * If the dnode moves here, we cannot cross this + * barrier until the move completes. */ DB_DNODE_ENTER(db); - atomic_dec_32(&DB_DNODE(db)->dn_dbufs_count); + + dn = DB_DNODE(db); + atomic_dec_32(&dn->dn_dbufs_count); + + /* + * Decrementing the dbuf count means that the bonus + * buffer's dnode hold is no longer discounted in + * dnode_move(). The dnode cannot move until after + * the dnode_rele_and_unlock() below. + */ DB_DNODE_EXIT(db); + /* - * The bonus buffer's dnode hold is no longer discounted - * in dnode_move(). The dnode cannot move until after - * the dnode_rele(). + * Do not reference db after its lock is dropped. + * Another thread may evict it. */ - dnode_rele(DB_DNODE(db), db); + mutex_exit(&db->db_mtx); + + /* + * If the dnode has been freed, evict the bonus + * buffer immediately. The data in the bonus + * buffer is no longer relevant and this prevents + * a stale bonus buffer from being associated + * with this dnode_t should the dnode_t be reused + * prior to being destroyed. + */ + mutex_enter(&dn->dn_mtx); + if (dn->dn_type == DMU_OT_NONE || + dn->dn_free_txg != 0) { + /* + * Drop dn_mtx. It is a leaf lock and + * cannot be held when dnode_evict_bonus() + * acquires other locks in order to + * perform the eviction. + * + * Freed dnodes cannot be reused until the + * last hold is released. Since this bonus + * buffer has a hold, the dnode will remain + * in the free state, even without dn_mtx + * held, until the dnode_rele_and_unlock() + * below. + */ + mutex_exit(&dn->dn_mtx); + dnode_evict_bonus(dn); + mutex_enter(&dn->dn_mtx); + } + dnode_rele_and_unlock(dn, db); } else if (db->db_buf == NULL) { /* * This is a special case: we never associated this Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c Sun Aug 9 19:35:08 2015 (r286544) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c Sun Aug 9 19:35:39 2015 (r286545) @@ -1205,12 +1205,18 @@ dnode_add_ref(dnode_t *dn, void *tag) void dnode_rele(dnode_t *dn, void *tag) { + mutex_enter(&dn->dn_mtx); + dnode_rele_and_unlock(dn, tag); +} + +void +dnode_rele_and_unlock(dnode_t *dn, void *tag) +{ uint64_t refs; /* Get while the hold prevents the dnode from moving. */ dmu_buf_impl_t *db = dn->dn_dbuf; dnode_handle_t *dnh = dn->dn_handle; - mutex_enter(&dn->dn_mtx); refs = refcount_remove(&dn->dn_holds, tag); mutex_exit(&dn->dn_mtx); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c Sun Aug 9 19:35:08 2015 (r286544) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c Sun Aug 9 19:35:39 2015 (r286545) @@ -441,6 +441,12 @@ dnode_evict_dbufs(dnode_t *dn) ASSERT(pass < 100); /* sanity check */ } while (progress); + dnode_evict_bonus(dn); +} + +void +dnode_evict_bonus(dnode_t *dn) +{ rw_enter(&dn->dn_struct_rwlock, RW_WRITER); if (dn->dn_bonus && refcount_is_zero(&dn->dn_bonus->db_holds)) { mutex_enter(&dn->dn_bonus->db_mtx); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h Sun Aug 9 19:35:08 2015 (r286544) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h Sun Aug 9 19:35:39 2015 (r286545) @@ -279,6 +279,7 @@ int dnode_hold_impl(struct objset *dd, u void *ref, dnode_t **dnp); boolean_t dnode_add_ref(dnode_t *dn, void *ref); void dnode_rele(dnode_t *dn, void *ref); +void dnode_rele_and_unlock(dnode_t *dn, void *tag); void dnode_setdirty(dnode_t *dn, dmu_tx_t *tx); void dnode_sync(dnode_t *dn, dmu_tx_t *tx); void dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs, @@ -300,6 +301,7 @@ void dnode_fini(void); int dnode_next_offset(dnode_t *dn, int flags, uint64_t *off, int minlvl, uint64_t blkfill, uint64_t txg); void dnode_evict_dbufs(dnode_t *dn); +void dnode_evict_bonus(dnode_t *dn); #ifdef ZFS_DEBUG From owner-svn-src-head@freebsd.org Sun Aug 9 20:02:18 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3FAF399D83C; Sun, 9 Aug 2015 20:02:18 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1C9D9EC7; Sun, 9 Aug 2015 20:02:18 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79K2HRd010946; Sun, 9 Aug 2015 20:02:17 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79K2GJP010941; Sun, 9 Aug 2015 20:02:16 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508092002.t79K2GJP010941@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 20:02:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286547 - in head: cddl/contrib/opensolaris/cmd/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 20:02:18 -0000 Author: mav Date: Sun Aug 9 20:02:16 2015 New Revision: 286547 URL: https://svnweb.freebsd.org/changeset/base/286547 Log: MFV 286546: 5661 ZFS: "compression = on" should use lz4 if feature is enabled Reviewed by: Matthew Ahrens Reviewed by: Josef 'Jeff' Sipek Reviewed by: Xin LI Approved by: Robert Mustacchi Author: Justin T. Gibbs illumos/illumos-gate@db1741f555ec79def5e9846e6bfd132248514ffe Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sun Aug 9 20:01:22 2015 (r286546) +++ head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sun Aug 9 20:02:16 2015 (r286547) @@ -939,7 +939,23 @@ Disabling checksums is .Em NOT a recommended practice. .It Sy compression Ns = Ns Cm on | off | lzjb | gzip | gzip- Ns Ar N | Cm zle | Cm lz4 -Controls the compression algorithm used for this dataset. The +Controls the compression algorithm used for this dataset. +Setting compression to +.Cm on +indicates that the current default compression algorithm should be used. +The default balances compression and decompression speed, with compression +ratio and is expected to work well on a wide variety of workloads. +Unlike all other settings for this property, on does not select a fixed +compression type. +As new compression algorithms are added to ZFS and enabled on a pool, the +default compression algorithm may change. +The current default compression algorthm is either +.Cm lzjb +or, if the +.Sy lz4_compress +feature is enabled, +.Cm lz4 . +The .Cm lzjb compression algorithm is optimized for performance while providing decent data compression. Setting compression to Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Sun Aug 9 20:01:22 2015 (r286546) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Sun Aug 9 20:02:16 2015 (r286547) @@ -1783,19 +1783,15 @@ dmu_write_policy(objset_t *os, dnode_t * * 3. all other level 0 blocks */ if (ismd) { - /* - * XXX -- we should design a compression algorithm - * that specializes in arrays of bps. - */ - boolean_t lz4_ac = spa_feature_is_active(os->os_spa, - SPA_FEATURE_LZ4_COMPRESS); - if (zfs_mdcomp_disable) { compress = ZIO_COMPRESS_EMPTY; - } else if (lz4_ac) { - compress = ZIO_COMPRESS_LZ4; } else { - compress = ZIO_COMPRESS_LZJB; + /* + * XXX -- we should design a compression algorithm + * that specializes in arrays of bps. + */ + compress = zio_compress_select(os->os_spa, + ZIO_COMPRESS_ON, ZIO_COMPRESS_ON); } /* @@ -1828,7 +1824,8 @@ dmu_write_policy(objset_t *os, dnode_t * compress = ZIO_COMPRESS_OFF; checksum = ZIO_CHECKSUM_NOPARITY; } else { - compress = zio_compress_select(dn->dn_compress, compress); + compress = zio_compress_select(os->os_spa, dn->dn_compress, + compress); checksum = (dedup_checksum == ZIO_CHECKSUM_OFF) ? zio_checksum_select(dn->dn_checksum, checksum) : Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Sun Aug 9 20:01:22 2015 (r286546) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Sun Aug 9 20:02:16 2015 (r286547) @@ -151,7 +151,8 @@ compression_changed_cb(void *arg, uint64 */ ASSERT(newval != ZIO_COMPRESS_INHERIT); - os->os_compress = zio_compress_select(newval, ZIO_COMPRESS_ON_VALUE); + os->os_compress = zio_compress_select(os->os_spa, newval, + ZIO_COMPRESS_ON); } static void @@ -408,7 +409,7 @@ dmu_objset_open_impl(spa_t *spa, dsl_dat } else { /* It's the meta-objset. */ os->os_checksum = ZIO_CHECKSUM_FLETCHER_4; - os->os_compress = ZIO_COMPRESS_LZJB; + os->os_compress = ZIO_COMPRESS_ON; os->os_copies = spa_max_replication(spa); os->os_dedup_checksum = ZIO_CHECKSUM_OFF; os->os_dedup_verify = B_FALSE; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h Sun Aug 9 20:01:22 2015 (r286546) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h Sun Aug 9 20:02:16 2015 (r286547) @@ -125,15 +125,19 @@ enum zio_compress { */ #define ZIO_COMPRESS_LEGACY_FUNCTIONS ZIO_COMPRESS_LZ4 -/* N.B. when altering this value, also change BOOTFS_COMPRESS_VALID below */ -#define ZIO_COMPRESS_ON_VALUE ZIO_COMPRESS_LZJB -#define ZIO_COMPRESS_DEFAULT ZIO_COMPRESS_OFF +/* + * The meaning of "compress = on" selected by the compression features enabled + * on a given pool. + */ +#define ZIO_COMPRESS_LEGACY_ON_VALUE ZIO_COMPRESS_LZJB +#define ZIO_COMPRESS_LZ4_ON_VALUE ZIO_COMPRESS_LZ4 + +#define ZIO_COMPRESS_DEFAULT ZIO_COMPRESS_OFF #define BOOTFS_COMPRESS_VALID(compress) \ ((compress) == ZIO_COMPRESS_LZJB || \ (compress) == ZIO_COMPRESS_LZ4 || \ - ((compress) == ZIO_COMPRESS_ON && \ - ZIO_COMPRESS_ON_VALUE == ZIO_COMPRESS_LZJB) || \ + (compress) == ZIO_COMPRESS_ON || \ (compress) == ZIO_COMPRESS_OFF) #define ZIO_FAILURE_MODE_WAIT 0 @@ -578,8 +582,8 @@ extern enum zio_checksum zio_checksum_se enum zio_checksum parent); extern enum zio_checksum zio_checksum_dedup_select(spa_t *spa, enum zio_checksum child, enum zio_checksum parent); -extern enum zio_compress zio_compress_select(enum zio_compress child, - enum zio_compress parent); +extern enum zio_compress zio_compress_select(spa_t *spa, + enum zio_compress child, enum zio_compress parent); extern void zio_suspend(spa_t *spa, zio_t *zio); extern int zio_resume(spa_t *spa); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c Sun Aug 9 20:01:22 2015 (r286546) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c Sun Aug 9 20:02:16 2015 (r286547) @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -81,19 +82,27 @@ zio_compress_info_t zio_compress_table[Z }; enum zio_compress -zio_compress_select(enum zio_compress child, enum zio_compress parent) +zio_compress_select(spa_t *spa, enum zio_compress child, + enum zio_compress parent) { + enum zio_compress result; + ASSERT(child < ZIO_COMPRESS_FUNCTIONS); ASSERT(parent < ZIO_COMPRESS_FUNCTIONS); - ASSERT(parent != ZIO_COMPRESS_INHERIT && parent != ZIO_COMPRESS_ON); - - if (child == ZIO_COMPRESS_INHERIT) - return (parent); + ASSERT(parent != ZIO_COMPRESS_INHERIT); - if (child == ZIO_COMPRESS_ON) - return (ZIO_COMPRESS_ON_VALUE); + result = child; + if (result == ZIO_COMPRESS_INHERIT) + result = parent; + + if (result == ZIO_COMPRESS_ON) { + if (spa_feature_is_active(spa, SPA_FEATURE_LZ4_COMPRESS)) + result = ZIO_COMPRESS_LZ4_ON_VALUE; + else + result = ZIO_COMPRESS_LEGACY_ON_VALUE; + } - return (child); + return (result); } size_t From owner-svn-src-head@freebsd.org Sun Aug 9 20:08:39 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1A61599D94E; Sun, 9 Aug 2015 20:08:39 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0BDA169E; Sun, 9 Aug 2015 20:08:39 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79K8cR1011449; Sun, 9 Aug 2015 20:08:38 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79K8cea011448; Sun, 9 Aug 2015 20:08:38 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508092008.t79K8cea011448@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 20:08:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286549 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 20:08:39 -0000 Author: mav Date: Sun Aug 9 20:08:38 2015 New Revision: 286549 URL: https://svnweb.freebsd.org/changeset/base/286549 Log: MFV 286548: 5693 ztest fails in dbuf_verify: buf[i] == 0, due to dedup and bp_override Reviewed by: George Wilson Reviewed by: Christopher Siden Reviewed by: Bayard Bell Approved by: Dan McDonald Author: Matthew Ahrens illumos/illumos-gate@7f7ace370074e350853da254c65688fd43ddc695 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Sun Aug 9 20:08:14 2015 (r286548) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Sun Aug 9 20:08:38 2015 (r286549) @@ -1214,8 +1214,6 @@ zio_write_bp_init(zio_t *zio) zio->io_pipeline |= ZIO_STAGE_DDT_WRITE; return (ZIO_PIPELINE_CONTINUE); } - zio->io_bp_override = NULL; - BP_ZERO(bp); } if (!BP_IS_HOLE(bp) && bp->blk_birth == zio->io_txg) { From owner-svn-src-head@freebsd.org Sun Aug 9 20:23:36 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6165799DE9D; Sun, 9 Aug 2015 20:23:36 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 47D3E773; Sun, 9 Aug 2015 20:23:36 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79KNaK6020028; Sun, 9 Aug 2015 20:23:36 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79KNawX020027; Sun, 9 Aug 2015 20:23:36 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508092023.t79KNawX020027@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 20:23:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286551 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 20:23:36 -0000 Author: mav Date: Sun Aug 9 20:23:35 2015 New Revision: 286551 URL: https://svnweb.freebsd.org/changeset/base/286551 Log: MFV 286550: 5694 traverse_prefetcher does not prefetch enough Reviewed by: Matthew Ahrens Reviewed by: Alex Reece Reviewed by: Christopher Siden Reviewed by: Josef 'Jeff' Sipek Reviewed by: Bayard Bell Approved by: Garrett D'Amore Author: George Wilson illumos/illumos-gate@34d7ce052c4565b078f73b95ccbd49274e98edaa Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c Sun Aug 9 20:22:59 2015 (r286550) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c Sun Aug 9 20:23:35 2015 (r286551) @@ -39,13 +39,12 @@ #include #include -int zfs_pd_blks_max = 100; +int32_t zfs_pd_bytes_max = 50 * 1024 * 1024; /* 50MB */ typedef struct prefetch_data { kmutex_t pd_mtx; kcondvar_t pd_cv; - int pd_blks_max; - int pd_blks_fetched; + int32_t pd_bytes_fetched; int pd_flags; boolean_t pd_cancel; boolean_t pd_exited; @@ -250,11 +249,12 @@ traverse_visitbp(traverse_data_t *td, co } if (pd != NULL && !pd->pd_exited && prefetch_needed(pd, bp)) { + uint64_t size = BP_GET_LSIZE(bp); mutex_enter(&pd->pd_mtx); - ASSERT(pd->pd_blks_fetched >= 0); - while (pd->pd_blks_fetched == 0 && !pd->pd_exited) + ASSERT(pd->pd_bytes_fetched >= 0); + while (pd->pd_bytes_fetched < size && !pd->pd_exited) cv_wait(&pd->pd_cv, &pd->pd_mtx); - pd->pd_blks_fetched--; + pd->pd_bytes_fetched -= size; cv_broadcast(&pd->pd_cv); mutex_exit(&pd->pd_mtx); } @@ -447,7 +447,7 @@ traverse_prefetcher(spa_t *spa, zilog_t prefetch_data_t *pfd = arg; arc_flags_t aflags = ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH; - ASSERT(pfd->pd_blks_fetched >= 0); + ASSERT(pfd->pd_bytes_fetched >= 0); if (pfd->pd_cancel) return (SET_ERROR(EINTR)); @@ -455,9 +455,9 @@ traverse_prefetcher(spa_t *spa, zilog_t return (0); mutex_enter(&pfd->pd_mtx); - while (!pfd->pd_cancel && pfd->pd_blks_fetched >= pfd->pd_blks_max) + while (!pfd->pd_cancel && pfd->pd_bytes_fetched >= zfs_pd_bytes_max) cv_wait(&pfd->pd_cv, &pfd->pd_mtx); - pfd->pd_blks_fetched++; + pfd->pd_bytes_fetched += BP_GET_LSIZE(bp); cv_broadcast(&pfd->pd_cv); mutex_exit(&pfd->pd_mtx); @@ -529,7 +529,6 @@ traverse_impl(spa_t *spa, dsl_dataset_t td.td_hole_birth_enabled_txg = 0; } - pd.pd_blks_max = zfs_pd_blks_max; pd.pd_flags = flags; mutex_init(&pd.pd_mtx, NULL, MUTEX_DEFAULT, NULL); cv_init(&pd.pd_cv, NULL, CV_DEFAULT, NULL); From owner-svn-src-head@freebsd.org Sun Aug 9 20:32:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0CC7E99D21A; Sun, 9 Aug 2015 20:32:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F2842D16; Sun, 9 Aug 2015 20:32:30 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79KWUbS024452; Sun, 9 Aug 2015 20:32:30 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79KWU3d024451; Sun, 9 Aug 2015 20:32:30 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508092032.t79KWU3d024451@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 20:32:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286554 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 20:32:31 -0000 Author: mav Date: Sun Aug 9 20:32:30 2015 New Revision: 286554 URL: https://svnweb.freebsd.org/changeset/base/286554 Log: MFV 286553: 5769 Cast 'zfs bad bloc' to ULL for x86 Reviewed by: Prakash Surya Reviewed by: Matthew Ahrens Reviewed by: Paul Dagnelie Reviewed by: Richard PALO Approved by: Dan McDonald illumos/illumos-gate@8c76e0763bcf0029556e106377da859f6492a7ee Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Sun Aug 9 20:32:10 2015 (r286553) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Sun Aug 9 20:32:30 2015 (r286554) @@ -532,7 +532,7 @@ backup_cb(spa_t *spa, zilog_t *zilog, co for (ptr = abuf->b_data; (char *)ptr < (char *)abuf->b_data + blksz; ptr++) - *ptr = 0x2f5baddb10c; + *ptr = 0x2f5baddb10cULL; } else { return (SET_ERROR(EIO)); } From owner-svn-src-head@freebsd.org Sun Aug 9 20:41:45 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3F3FA99D62F; Sun, 9 Aug 2015 20:41:45 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 30DFC17FE; Sun, 9 Aug 2015 20:41:45 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t79Kfjvi026865; Sun, 9 Aug 2015 20:41:45 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t79KfjsW026864; Sun, 9 Aug 2015 20:41:45 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508092041.t79KfjsW026864@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 9 Aug 2015 20:41:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286556 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Aug 2015 20:41:45 -0000 Author: mav Date: Sun Aug 9 20:41:44 2015 New Revision: 286556 URL: https://svnweb.freebsd.org/changeset/base/286556 Log: MFV 286555: Avoid 128K kmem allocations in mzap_upgrade() Reviewed by: Matthew Ahrens Reviewed by: Prakash Surya Reviewed by: George Wilson Reviewed by: Steven Hartland Approved by: Rich Lowe illumos/illumos-gate@be3e2ab906b80af79c7b22885f279e45ad8fb995 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c Sun Aug 9 20:41:23 2015 (r286555) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c Sun Aug 9 20:41:44 2015 (r286556) @@ -547,7 +547,7 @@ mzap_upgrade(zap_t **zapp, dmu_tx_t *tx, ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); sz = zap->zap_dbuf->db_size; - mzp = kmem_alloc(sz, KM_SLEEP); + mzp = zio_buf_alloc(sz); bcopy(zap->zap_dbuf->db_data, mzp, sz); nchunks = zap->zap_m.zap_num_chunks; @@ -555,7 +555,7 @@ mzap_upgrade(zap_t **zapp, dmu_tx_t *tx, err = dmu_object_set_blocksize(zap->zap_objset, zap->zap_object, 1ULL << fzap_default_block_shift, 0, tx); if (err) { - kmem_free(mzp, sz); + zio_buf_free(mzp, sz); return (err); } } @@ -581,7 +581,7 @@ mzap_upgrade(zap_t **zapp, dmu_tx_t *tx, if (err) break; } - kmem_free(mzp, sz); + zio_buf_free(mzp, sz); *zapp = zap; return (err); } From owner-svn-src-head@freebsd.org Mon Aug 10 00:14:18 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8910A99E5B2; Mon, 10 Aug 2015 00:14:18 +0000 (UTC) (envelope-from gshapiro@gshapiro.net) Received: from zim.gshapiro.net (zim.gshapiro.net [IPv6:2001:4f8:3:36::224]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.gshapiro.net", Issuer "Certificate Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 6FEDBC52; Mon, 10 Aug 2015 00:14:18 +0000 (UTC) (envelope-from gshapiro@gshapiro.net) Received: from minime-2.local (c-67-188-138-117.hsd1.ca.comcast.net [67.188.138.117]) (authenticated bits=0) by zim.gshapiro.net (8.15.2/8.15.2) with ESMTPSA id t7A0EEg8049489 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sun, 9 Aug 2015 17:14:16 -0700 (PDT) (envelope-from gshapiro@gshapiro.net) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=gshapiro.net; s=gatsby.dkim; t=1439165657; bh=mdQW04N9wDsOoT1/UQeLxRh2XvTNs0CqWMogusR3KmQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=KU1qup2Hk6nb9K3ndXSsp/ys/szIeNUyKqiYVWgjZI6hxzUtR6DYnk/t1bTPlaXTz kil7Z/JFHscxnQcnjgfqsCu67b6s2iNhna008X3NJnErdv0IJmcBddNlD8RBnLSOS+ rF6LEKgvTuQfYb9ZPGOtn/tm3rQ+RZnvv4f0AdVw= Date: Sun, 9 Aug 2015 17:14:13 -0700 From: Gregory Shapiro To: Peter Wemm Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286504 - head/usr.bin/svn/lib/libapr_util Message-ID: <20150810001413.GB69229@minime-2.local> References: <201508090515.t795FTqB068568@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201508090515.t795FTqB068568@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 00:14:18 -0000 The change below appears to have broken cross compiling for mips platforms (using freebsd-wifi-build on an amd64 host): /home/gshapiro/tplink/src/usr.bin/svn/lib/libapr_util/../../../../contrib/apr-util/xlate/xlate.c:40:19: error: iconv.h: No such file or directory mkdep: compile failed --- .depend --- *** [.depend] Error code 1 make[6]: stopped in /home/gshapiro/tplink/src/usr.bin/svn/lib/libapr_util Setting APU_HAVE_ICONV to 0, undef'ing HAVE_ICONV_H, and preventing libapr_util/Makefile from turning them back on allowed buildworld to complete. In case it is needed, the host is: FreeBSD freebsd.local 11.0-CURRENT FreeBSD 11.0-CURRENT #0 r286285: Tue Aug 4 15:12:53 UTC 2015 root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 The src checkout is: Path: . Working Copy Root Path: /home/gshapiro/tplink/src URL: https://svn.freebsd.org/base/head Relative URL: ^/head Repository Root: https://svn.freebsd.org/base Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f Revision: 286560 Node Kind: directory Schedule: normal Last Changed Author: mav Last Changed Rev: 286556 Last Changed Date: 2015-08-09 13:41:44 -0700 (Sun, 09 Aug 2015) On Sun, Aug 09, 2015 at 05:15:29AM +0000, Peter Wemm wrote: > Author: peter > Date: Sun Aug 9 05:15:28 2015 > New Revision: 286504 > URL: https://svnweb.freebsd.org/changeset/base/286504 > > Log: > Update apr-util config - I don't believe this part is used by svn, but > if it were, use shm_* instead of sysvshm. > > Modified: > head/usr.bin/svn/lib/libapr_util/apu.h > head/usr.bin/svn/lib/libapr_util/apu_config.h > > Modified: head/usr.bin/svn/lib/libapr_util/apu.h > ============================================================================== > --- head/usr.bin/svn/lib/libapr_util/apu.h Sun Aug 9 05:14:25 2015 (r286503) > +++ head/usr.bin/svn/lib/libapr_util/apu.h Sun Aug 9 05:15:28 2015 (r286504) > @@ -117,16 +117,12 @@ > #define APU_HAVE_FREETDS 0 > #define APU_HAVE_ODBC 0 > > -#define APU_HAVE_CRYPTO 0 > -#define APU_HAVE_OPENSSL 0 > +#define APU_HAVE_CRYPTO 1 > +#define APU_HAVE_OPENSSL 1 > #define APU_HAVE_NSS 0 > > -#ifndef APU_HAVE_APR_ICONV > #define APU_HAVE_APR_ICONV 0 > -#endif > -#ifndef APU_HAVE_ICONV > -#define APU_HAVE_ICONV 0 > -#endif > +#define APU_HAVE_ICONV 1 > #define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV) > > #endif /* APU_H */ > > Modified: head/usr.bin/svn/lib/libapr_util/apu_config.h > ============================================================================== > --- head/usr.bin/svn/lib/libapr_util/apu_config.h Sun Aug 9 05:14:25 2015 (r286503) > +++ head/usr.bin/svn/lib/libapr_util/apu_config.h Sun Aug 9 05:15:28 2015 (r286504) > @@ -13,7 +13,7 @@ > /* #undef APU_DSO_LIBDIR */ > > /* Define if the inbuf parm to iconv() is const char ** */ > -#define APU_ICONV_INBUF_CONST 1 > +/* #undef APU_ICONV_INBUF_CONST */ > > /* Define that OpenSSL uses const buffers */ > #define CRYPTO_OPENSSL_CONST_BUFFERS 1 > @@ -41,7 +41,7 @@ > /* #undef HAVE_FREETDS_SYBDB_H */ > > /* Define to 1 if you have the header file. */ > -/* #undef HAVE_ICONV_H */ > +#define HAVE_ICONV_H 1 > > /* Define to 1 if you have the header file. */ > #define HAVE_INTTYPES_H 1 From owner-svn-src-head@freebsd.org Mon Aug 10 00:16:13 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C25D899E5E7 for ; Mon, 10 Aug 2015 00:16:13 +0000 (UTC) (envelope-from jbeich@freebsd.org) Received: from vfemail.net (ninezero.vfemail.net [96.30.253.190]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 84592DAC for ; Mon, 10 Aug 2015 00:16:12 +0000 (UTC) (envelope-from jbeich@freebsd.org) Received: (qmail 3855 invoked by uid 89); 10 Aug 2015 00:16:00 -0000 Received: from localhost (HELO freequeue.vfemail.net) (127.0.0.1) by localhost with (DHE-RSA-AES256-SHA encrypted) SMTP; 10 Aug 2015 00:16:00 -0000 Received: (qmail 3833 invoked by uid 89); 10 Aug 2015 00:15:43 -0000 Received: by simscan 1.3.1 ppid: 3825, pid: 3829, t: 0.0044s scanners:none Received: from unknown (HELO smtp102-2.vfemail.net) (172.16.100.62) by FreeQueue with SMTP; 10 Aug 2015 00:15:43 -0000 Received: (qmail 6843 invoked by uid 89); 10 Aug 2015 00:15:43 -0000 Received: by simscan 1.4.0 ppid: 6826, pid: 6840, t: 0.5497s scanners:none Received: from unknown (HELO nil) (amJlaWNoQHZmZW1haWwubmV0@172.16.100.27) by 172.16.100.62 with ESMTPA; 10 Aug 2015 00:15:42 -0000 From: Jan Beich To: Koop Mast Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286524 - in head: . etc sys/dev/drm sys/dev/drm2 References: <201508091258.t79CwvGj027161@repo.freebsd.org> Date: Mon, 10 Aug 2015 02:15:23 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 00:16:13 -0000 --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Koop Mast writes: > Author: kwm (ports committer) > Date: Sun Aug 9 12:58:56 2015 > New Revision: 286524 > URL: https://svnweb.freebsd.org/changeset/base/286524 > > Log: > Add a new group named 'video' with the id of 44. And make drm create > devices in /dev/dri/ with this new group. Would 'video' group include capture devices as well? Linux seems to mix /dev/nvidia*, /dev/fb* and /dev/video* all under same group despite all of them have different attack vectors. > Modified: head/sys/dev/drm/drmP.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/dev/drm/drmP.h Sun Aug 9 12:20:22 2015 (r286523) > +++ head/sys/dev/drm/drmP.h Sun Aug 9 12:58:56 2015 (r286524) > @@ -175,7 +175,7 @@ SYSCTL_DECL(_hw_drm); >=20=20 > #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) > #define DRM_DEV_UID 0 > -#define DRM_DEV_GID 0 > +#define DRM_DEV_GID 44 /* "video" group */ Why hardcode? Linux often uses udev(7) rules to assign a group which on FreeBSD can easily be translated into devd.conf(5) or devfs.rules(5). Having 'video' assigned by kernel wouldn't eliminate having to run mergemaster/etcupdate + pw groupmod on upgrade. --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQF8BAEBCgBmBQJVx+0cXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXREQjQ0MzY3NEM3RDIzNTc4NkUxNDkyQ0VF NEM3Nzg4MzQ3OURCRERCAAoJEOTHeINHnb3b39sIAImStOX28KsCCLS6BrNsknao WyYm2D7LU+tJFgja4GKvcUld7Iw7v+NjQik11aF+rPpv7fGKe1oI5+5Hk7ttuQDt 8++AvdHj7Yl+8J0918gXBlWyYrEbdIT/7BxRlcRrgLgMiB6iFHDYbYy8heMhlwpw 9/a6ptEdTE1Ky7GqBFjtag09Wn3toI6ZdXmp/J/BBzJ6Ifvy4ILGZR9mpkK+24UY 5cyQ4UXAfFShiGqS748s+FYWEUxc3lazzP/48G7nQg6UfVfhqoFj0s66NNupuLfS 56axP72kGFErt3g5FipInTyFyD6h/D23KfzsL0lPdnFlFvQwLx5kBGKIAVmLeG8= =KBTO -----END PGP SIGNATURE----- --=-=-=-- From owner-svn-src-head@freebsd.org Mon Aug 10 00:41:26 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 089AD99EAE1; Mon, 10 Aug 2015 00:41:26 +0000 (UTC) (envelope-from peter@wemm.org) Received: from smtp2.wemm.org (smtp2.wemm.org [IPv6:2001:470:67:39d::78]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp2.wemm.org", Issuer "StartCom Class 1 Primary Intermediate Server CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id DF494C9D; Mon, 10 Aug 2015 00:41:25 +0000 (UTC) (envelope-from peter@wemm.org) Received: from overcee.wemm.org (canning.wemm.org [192.203.228.65]) by smtp2.wemm.org (Postfix) with ESMTP id 686751F; Sun, 9 Aug 2015 17:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wemm.org; s=m20140428; t=1439167285; bh=ZBtjRC/W3ZPa0ZOeSxT5SqcPLUf/qbNGOxnwgwj38rg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=h15TUSQo5xH40orxpV9uORMngAIySVlDqe/ipMrxOCanf8ddZQ3nIJzsOExAgrvnB ygf1/w2H3V8QIFUNv/knvs4wC0lviFztF2bZLl5p0sEPh4EJSvDejREPcxs+4ve4sl Lsb5ereCUf0lVY0xj1J/41f0NQzizjOM/FxLfRe8= From: Peter Wemm To: Gregory Shapiro Cc: Peter Wemm , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286504 - head/usr.bin/svn/lib/libapr_util Date: Sun, 09 Aug 2015 17:41:18 -0700 Message-ID: <37874686.er3HN7UA1e@overcee.wemm.org> User-Agent: KMail/4.14.3 (FreeBSD/11.0-CURRENT; KDE/4.14.3; amd64; ; ) In-Reply-To: <20150810001413.GB69229@minime-2.local> References: <201508090515.t795FTqB068568@repo.freebsd.org> <20150810001413.GB69229@minime-2.local> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart4102054.X69gK85sas"; micalg="pgp-sha256"; protocol="application/pgp-signature" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 00:41:26 -0000 --nextPart4102054.X69gK85sas Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="us-ascii" On Sunday, August 09, 2015 05:14:13 PM Gregory Shapiro wrote: > The change below appears to have broken cross compiling for mips plat= forms > (using freebsd-wifi-build on an amd64 host): >=20 > /home/gshapiro/tplink/src/usr.bin/svn/lib/libapr_util/../../../../con= trib/ap > r-util/xlate/xlate.c:40:19: error: iconv.h: No such file or directory= mkdep: > compile failed > --- .depend --- > *** [.depend] Error code 1 >=20 > make[6]: stopped in /home/gshapiro/tplink/src/usr.bin/svn/lib/libapr_= util >=20 > Setting APU_HAVE_ICONV to 0, undef'ing HAVE_ICONV_H, and preventing > libapr_util/Makefile from turning them back on allowed buildworld to > complete. >=20 > In case it is needed, the host is: >=20 > FreeBSD freebsd.local 11.0-CURRENT FreeBSD 11.0-CURRENT #0 r286285: T= ue Aug=20 > 4 15:12:53 UTC 2015 =20 > root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 >=20 > The src checkout is: >=20 > Path: . > Working Copy Root Path: /home/gshapiro/tplink/src > URL: https://svn.freebsd.org/base/head > Relative URL: ^/head > Repository Root: https://svn.freebsd.org/base > Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f > Revision: 286560 > Node Kind: directory > Schedule: normal > Last Changed Author: mav > Last Changed Rev: 286556 > Last Changed Date: 2015-08-09 13:41:44 -0700 (Sun, 09 Aug 2015) Huh. Is this an external tool or something? I take it that it is forc= ing=20 ICONV off? > On Sun, Aug 09, 2015 at 05:15:29AM +0000, Peter Wemm wrote: > > Author: peter > > Date: Sun Aug 9 05:15:28 2015 > > New Revision: 286504 > > URL: https://svnweb.freebsd.org/changeset/base/286504 > >=20 > > Log: > > Update apr-util config - I don't believe this part is used by svn= , but > > if it were, use shm_* instead of sysvshm. > >=20 > > Modified: > > head/usr.bin/svn/lib/libapr_util/apu.h > > head/usr.bin/svn/lib/libapr_util/apu_config.h > >=20 > > Modified: head/usr.bin/svn/lib/libapr_util/apu.h > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > > =3D=3D=3D=3D --- head/usr.bin/svn/lib/libapr_util/apu.h=09Sun Aug = 9 05:14:25 > > 2015=09(r286503) +++ head/usr.bin/svn/lib/libapr_util/apu.h=09Sun A= ug 9 > > 05:15:28 2015=09(r286504) @@ -117,16 +117,12 @@ > >=20 > > #define APU_HAVE_FREETDS 0 > > #define APU_HAVE_ODBC 0 > >=20 > > -#define APU_HAVE_CRYPTO 0 > > -#define APU_HAVE_OPENSSL 0 > > +#define APU_HAVE_CRYPTO 1 > > +#define APU_HAVE_OPENSSL 1 > >=20 > > #define APU_HAVE_NSS 0 > >=20 > > -#ifndef APU_HAVE_APR_ICONV > >=20 > > #define APU_HAVE_APR_ICONV 0 > >=20 > > -#endif > > -#ifndef APU_HAVE_ICONV > > -#define APU_HAVE_ICONV 0 > > -#endif > > +#define APU_HAVE_ICONV 1 > >=20 > > #define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICO= NV) > > =20 > > #endif /* APU_H */ > >=20 > > Modified: head/usr.bin/svn/lib/libapr_util/apu_config.h > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > > =3D=3D=3D=3D --- head/usr.bin/svn/lib/libapr_util/apu_config.h=09Su= n Aug 9=20 05:14:25 > > 2015=09(r286503) +++ head/usr.bin/svn/lib/libapr_util/apu_config.h=09= Sun Aug=20 > > 9 05:15:28 2015=09(r286504) @@ -13,7 +13,7 @@ > >=20 > > /* #undef APU_DSO_LIBDIR */ > > =20 > > /* Define if the inbuf parm to iconv() is const char ** */ > >=20 > > -#define APU_ICONV_INBUF_CONST 1 > > +/* #undef APU_ICONV_INBUF_CONST */ > >=20 > > /* Define that OpenSSL uses const buffers */ > > #define CRYPTO_OPENSSL_CONST_BUFFERS 1 > >=20 > > @@ -41,7 +41,7 @@ > >=20 > > /* #undef HAVE_FREETDS_SYBDB_H */ > > =20 > > /* Define to 1 if you have the header file. */ > >=20 > > -/* #undef HAVE_ICONV_H */ > > +#define HAVE_ICONV_H 1 > >=20 > > /* Define to 1 if you have the header file. */ > > #define HAVE_INTTYPES_H 1 =2D-=20 Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com; KI= 6FJV UTF-8: for when a ' or ... just won\342\200\231t do\342\200\246 --nextPart4102054.X69gK85sas Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part. Content-Transfer-Encoding: 7Bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAABCAAGBQJVx/MuAAoJEDXWlwnsgJ4EepsH/0vcKvR0qbSBc38XOofhNlF/ j/R29hftpMopJWb8BpU2LOzZWVmzArradizj1iuwT320ZK0NGXkA4Nycw6xkfwH5 pWzeNpOob1i1j8PKSoGCp+v7rOqbxRoOu1gNPi+2Hqf0rRGe+tcOQ+H1MWjESu47 tr7QTY4lgNiUa6EAvcdPD3RJxz4HYEL0ivWvt2W8lJocp8Dg21ilTgF2I1xUTP9z 2ALzj9r1GJJjGhXlSjlsm5+HzeHPcwASrrQoy7SE5Hxv3+2GQyaV/OkOjMQ6aCCl f/YNBz+lGFAKTVunxGPLGvn2/qjO6gDvyWsZ54YAHKcUw8YV0Psi32CkgV9HV6U= =HOTZ -----END PGP SIGNATURE----- --nextPart4102054.X69gK85sas-- From owner-svn-src-head@freebsd.org Mon Aug 10 00:46:25 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CBF2699EC0F; Mon, 10 Aug 2015 00:46:25 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B75B5E62; Mon, 10 Aug 2015 00:46:25 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7A0kPvS028771; Mon, 10 Aug 2015 00:46:25 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7A0kP74028769; Mon, 10 Aug 2015 00:46:25 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508100046.t7A0kP74028769@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Mon, 10 Aug 2015 00:46:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286561 - head/usr.bin/svn/lib/libapr_util X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 00:46:25 -0000 Author: peter Date: Mon Aug 10 00:46:24 2015 New Revision: 286561 URL: https://svnweb.freebsd.org/changeset/base/286561 Log: Don't assume iconv is enabled. I didn't realize there was a configuration control to turn it off and it wasn't being respected. Pointed out by: gshapiro Modified: head/usr.bin/svn/lib/libapr_util/apu.h head/usr.bin/svn/lib/libapr_util/apu_config.h Modified: head/usr.bin/svn/lib/libapr_util/apu.h ============================================================================== --- head/usr.bin/svn/lib/libapr_util/apu.h Sun Aug 9 22:33:51 2015 (r286560) +++ head/usr.bin/svn/lib/libapr_util/apu.h Mon Aug 10 00:46:24 2015 (r286561) @@ -122,7 +122,7 @@ #define APU_HAVE_NSS 0 #define APU_HAVE_APR_ICONV 0 -#define APU_HAVE_ICONV 1 +#define APU_HAVE_ICONV 0 #define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV) #endif /* APU_H */ Modified: head/usr.bin/svn/lib/libapr_util/apu_config.h ============================================================================== --- head/usr.bin/svn/lib/libapr_util/apu_config.h Sun Aug 9 22:33:51 2015 (r286560) +++ head/usr.bin/svn/lib/libapr_util/apu_config.h Mon Aug 10 00:46:24 2015 (r286561) @@ -41,7 +41,7 @@ /* #undef HAVE_FREETDS_SYBDB_H */ /* Define to 1 if you have the header file. */ -#define HAVE_ICONV_H 1 +/* #undef HAVE_ICONV_H */ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 From owner-svn-src-head@freebsd.org Mon Aug 10 00:53:46 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4BA0099ED51; Mon, 10 Aug 2015 00:53:46 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3280F2B6; Mon, 10 Aug 2015 00:53:46 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7A0rkZj032910; Mon, 10 Aug 2015 00:53:46 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7A0rkeM032909; Mon, 10 Aug 2015 00:53:46 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508100053.t7A0rkeM032909@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Mon, 10 Aug 2015 00:53:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286562 - head/usr.bin/svn/lib/libapr_util X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 00:53:46 -0000 Author: peter Date: Mon Aug 10 00:53:45 2015 New Revision: 286562 URL: https://svnweb.freebsd.org/changeset/base/286562 Log: Add a #ifndef around the HAVE_ICONV settings since it is supplied by the Makefile. Modified: head/usr.bin/svn/lib/libapr_util/apu.h Modified: head/usr.bin/svn/lib/libapr_util/apu.h ============================================================================== --- head/usr.bin/svn/lib/libapr_util/apu.h Mon Aug 10 00:46:24 2015 (r286561) +++ head/usr.bin/svn/lib/libapr_util/apu.h Mon Aug 10 00:53:45 2015 (r286562) @@ -122,7 +122,9 @@ #define APU_HAVE_NSS 0 #define APU_HAVE_APR_ICONV 0 +#ifndef APU_HAVE_ICONV #define APU_HAVE_ICONV 0 +#endif #define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV) #endif /* APU_H */ From owner-svn-src-head@freebsd.org Mon Aug 10 00:55:21 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 10E2699EDCE; Mon, 10 Aug 2015 00:55:21 +0000 (UTC) (envelope-from gshapiro@gshapiro.net) Received: from zim.gshapiro.net (zim.gshapiro.net [IPv6:2001:4f8:3:36::224]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.gshapiro.net", Issuer "Certificate Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id ED040683; Mon, 10 Aug 2015 00:55:20 +0000 (UTC) (envelope-from gshapiro@gshapiro.net) Received: from minime-2.local (c-67-188-138-117.hsd1.ca.comcast.net [67.188.138.117]) (authenticated bits=0) by zim.gshapiro.net (8.15.2/8.15.2) with ESMTPSA id t7A0tHIl050017 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sun, 9 Aug 2015 17:55:19 -0700 (PDT) (envelope-from gshapiro@gshapiro.net) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=gshapiro.net; s=gatsby.dkim; t=1439168120; bh=RaPGmJVsniWmrwd/Fs2nrsUR4WCai3e2rkd+ddxaag8=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=MdUkS+KruXa3F9fr5ddSOXnSlpX6V4ey6IRD3wzsbKXs1WCl3Ry7zXfsrhHsUVjP/ 11hhvkAGzh0DdM22X9Z4mTmPP8dpNNDyRsp8eBJUj36291TKm8eLUWnzYXYh04zYRd YRULIgJg35qvI3zazvHaQdz8ry6ajP2k2kYjOcAc= Date: Sun, 9 Aug 2015 17:55:17 -0700 From: Gregory Shapiro To: Peter Wemm Cc: Peter Wemm , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286504 - head/usr.bin/svn/lib/libapr_util Message-ID: <20150810005517.GC69229@minime-2.local> References: <201508090515.t795FTqB068568@repo.freebsd.org> <20150810001413.GB69229@minime-2.local> <37874686.er3HN7UA1e@overcee.wemm.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <37874686.er3HN7UA1e@overcee.wemm.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 00:55:21 -0000 > Huh. Is this an external tool or something? I take it that it is forcing > ICONV off? Yes, it is a tool to build FreeBSD for Wifi APs. If interested, see: https://wiki.freebsd.org/FreeBSD/mips And yes, it does, using a src.conf containing (see 7th line): WITHOUT_KERBEROS="YES" WITHOUT_KERBEROS_SUPPORT="YES" WITHOUT_NIS="YES" WITHOUT_NDIS="YES" WITHOUT_IPX="YES" WITHOUT_ATM="YES" WITHOUT_ICONV="YES" WITHOUT_CLANG_IS_CC="YES" WITHOUT_CASPER="YES" WITHOUT_CAPSICUM="YES" WITHOUT_TESTS="YES" From owner-svn-src-head@freebsd.org Mon Aug 10 01:16:10 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 17D31998365; Mon, 10 Aug 2015 01:16:10 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from mail-ob0-x229.google.com (mail-ob0-x229.google.com [IPv6:2607:f8b0:4003:c01::229]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id CDEE2EB7; Mon, 10 Aug 2015 01:16:09 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by obnw1 with SMTP id w1so113234058obn.3; Sun, 09 Aug 2015 18:16:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=isnpWjBAlL4r92zUBiIoec6sZdoT83R2vKLuRz2f9h4=; b=TDnouuEy4DP79p9+ysILRwDoe+0pruWV3ycuxzyuGpRoGFQaahw5LETtQ4EW64PBCw 4NngAM5iiK8jEmul9mdfJSb9jDPfdpEhsXnP9raJSNewogfefftjIq+V7NjGxPFsNnHk SUCx4wFZjBYcy/Dp75lTB2HOwazEeufuKIeoHs98yUGcnzaKYQOmSRtp4W16ugnvS7N7 ajSc+oxAWBQOMfnXzcb3AbauIdGbky58KhfBFvsS31kRk+WTYmVL9f/vSW+SrSMHUyV1 7xgNr1SFiv+dsqCaWove1JzmUdo9FMJV9Glg+BPHmUz2pUTm/kwH6cKWbU/qqa4O9fey 7GnA== MIME-Version: 1.0 X-Received: by 10.182.211.66 with SMTP id na2mr17924516obc.43.1439169369132; Sun, 09 Aug 2015 18:16:09 -0700 (PDT) Received: by 10.202.11.193 with HTTP; Sun, 9 Aug 2015 18:16:09 -0700 (PDT) Reply-To: araujo@FreeBSD.org In-Reply-To: References: <201508040234.t742YqQA045448@repo.freebsd.org> Date: Mon, 10 Aug 2015 09:16:09 +0800 Message-ID: Subject: Re: svn commit: r286266 - head/usr.bin/ypmatch From: Marcelo Araujo To: Ed Schouten Cc: src-committers , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 01:16:10 -0000 Hi Ed, 2015-08-09 19:51 GMT+08:00 Ed Schouten : > Hi Marcelo, > > 2015-08-04 4:34 GMT+02:00 Marcelo Araujo : > > Sync the code with the OpenBSD version. > > That's a shame. It looks like improvements that we made to our version > have been undone because of this. > > > > -static void > > +void > > usage(void) > > This function could be static. > > > + fprintf(stderr, > > + "where\n" > > + "\tmapname may be either a mapname or a nickname for a > map.\n" > > + "\t-k prints keys as well as values.\n" > > + "\t-t inhibits map nickname translation.\n" > > + "\t-x dumps the map nickname translation table.\n"); > > It is fairly uncommon for BSD utilities to have an extensive help > output. Man pages are intended for that purpose. > > > - while ((c = getopt(argc, argv, "xd:kt")) != -1) > > + while ((c=getopt(argc, argv, "xd:kt")) != -1) > > switch (c) { > > case 'x': > > - for (i = 0; i ypaliases[0]; i++) > > + for (i=0; i ypaliases[0]; i++) > > ... > > - if ((argc-optind) < 2) > > + if ((argc-optind) < 2 ) > > ... > > - if (!domainname) > > + if (!domainname) { > > yp_get_default_domain(&domainname); > > + } > > Though the style(9) conformance of tool wasn't ideal, this change made it > worse. Agree with you! These tools are original from OpenBSD, I'm trying first to sync the code and then will rework them. I will try to send it back to upstream(OpenBSD) as soon as I have time. Some of the issues you pointed out were partially fixed at: r286394 and r286403. It doesn't include the extensive help. bde@ also pointed out it too me. I will change my approach for the next updates on yp tools, instead only to sync it with OpenBSD I will apply our style(9) changes. Thanks for the review, I will include you on the next ones if you don't mind. All the best. -- -- Marcelo Araujo (__)araujo@FreeBSD.org \\\'',)http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) From owner-svn-src-head@freebsd.org Mon Aug 10 03:24:48 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C5B2D99DE16; Mon, 10 Aug 2015 03:24:48 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail109.syd.optusnet.com.au (mail109.syd.optusnet.com.au [211.29.132.80]) by mx1.freebsd.org (Postfix) with ESMTP id 89D21623; Mon, 10 Aug 2015 03:24:48 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from c211-30-166-197.carlnfd1.nsw.optusnet.com.au (c211-30-166-197.carlnfd1.nsw.optusnet.com.au [211.30.166.197]) by mail109.syd.optusnet.com.au (Postfix) with ESMTPS id 96E76D640D0; Mon, 10 Aug 2015 13:24:37 +1000 (AEST) Date: Mon, 10 Aug 2015 13:24:37 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: araujo@freebsd.org cc: Ed Schouten , src-committers , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Subject: Re: svn commit: r286266 - head/usr.bin/ypmatch In-Reply-To: Message-ID: <20150810131627.F965@besplex.bde.org> References: <201508040234.t742YqQA045448@repo.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=ItbjC+Lg c=1 sm=1 tr=0 a=KA6XNC2GZCFrdESI5ZmdjQ==:117 a=PO7r1zJSAAAA:8 a=JzwRw_2MAAAA:8 a=kj9zAlcOel0A:10 a=6I5d2MoRAAAA:8 a=A_koM7K8mbOzyIHmAGwA:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 03:24:48 -0000 On Mon, 10 Aug 2015, Marcelo Araujo wrote: > 2015-08-09 19:51 GMT+08:00 Ed Schouten : > >> Hi Marcelo, >> >> 2015-08-04 4:34 GMT+02:00 Marcelo Araujo : >>> Sync the code with the OpenBSD version. >> >> That's a shame. It looks like improvements that we made to our version >> have been undone because of this. >> ... >> Though the style(9) conformance of tool wasn't ideal, this change made it >> worse. > > Agree with you! > > These tools are original from OpenBSD, I'm trying first to sync the code > and then will rework them. I will try to send it back to upstream(OpenBSD) > as soon as I have time. In fact, the changes were more than half to back out FreeBSD cleanups by syncing with the 1994 OpenBSD version. The cleanups were small (less than 50 lines changed), and OpenBSD doesn't seem to have changed much either. Bruce From owner-svn-src-head@freebsd.org Mon Aug 10 03:48:27 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 97DB099839E; Mon, 10 Aug 2015 03:48:27 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from mail-ob0-x231.google.com (mail-ob0-x231.google.com [IPv6:2607:f8b0:4003:c01::231]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5A38CEF1; Mon, 10 Aug 2015 03:48:27 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by obbfr1 with SMTP id fr1so78268078obb.1; Sun, 09 Aug 2015 20:48:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=Yt+A2w47IqviO13F3U9ev8VYiBQ39ovqs1xVBEVVv3M=; b=gkfCSSp70T8kWODL6ltJFHQM4GtLTmh1BKesIu31MuxG9y7H7Z0zpJgM8JfCpgudvE okCpasr5fTHYnD3mFN7Jk7UZ7pbYxvH849LllWr3tiWRR0r6H+3PFtP70XWIOGDGRdju I3h933bBI0udjrZ3+7pV9Ah2UGYvYNuHgxZxy5QCh9qaF8pTO9v1JfcofyMPQGACgFEo AizRrcWXteiih7m4WJddqgoddq/mlDsLnljh0ND7gbIwtqcZnt2MHvZ92zO2dgO56Hud w6sO6YgsW+rVztN1P4+zdd6mAYeIhnd+FHHZxbDOxi0efDu2G50hVNyPbU+RJONiRPZ+ VNTQ== MIME-Version: 1.0 X-Received: by 10.182.94.140 with SMTP id dc12mr15168039obb.87.1439178506230; Sun, 09 Aug 2015 20:48:26 -0700 (PDT) Received: by 10.202.11.193 with HTTP; Sun, 9 Aug 2015 20:48:26 -0700 (PDT) Reply-To: araujo@FreeBSD.org In-Reply-To: <20150810131627.F965@besplex.bde.org> References: <201508040234.t742YqQA045448@repo.freebsd.org> <20150810131627.F965@besplex.bde.org> Date: Mon, 10 Aug 2015 11:48:26 +0800 Message-ID: Subject: Re: svn commit: r286266 - head/usr.bin/ypmatch From: Marcelo Araujo To: Bruce Evans Cc: Ed Schouten , src-committers , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: multipart/mixed; boundary=e89a8fb1f32aa29be4051cecdb5b X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 03:48:27 -0000 --e89a8fb1f32aa29be4051cecdb5b Content-Type: text/plain; charset=UTF-8 Hi bde@ and ed@ I think the patch attached is the latest changes to bring it as it used to be before I synced the code with OpenBSD. Mostly all issues that you both pointed out were addressed. Could you both make a review and point to me if there is any issue still remain? Basically this patch address: - Remove the extra information at the usage(). - Add space between variables on while() and for(). - Remove the extra space in a if statement. - Remove the extra brackets. - s/Reason/reason/g. All the best. 2015-08-10 11:24 GMT+08:00 Bruce Evans : > On Mon, 10 Aug 2015, Marcelo Araujo wrote: > > 2015-08-09 19:51 GMT+08:00 Ed Schouten : >> >> Hi Marcelo, >>> >>> 2015-08-04 4:34 GMT+02:00 Marcelo Araujo : >>> >>>> Sync the code with the OpenBSD version. >>>> >>> >>> That's a shame. It looks like improvements that we made to our version >>> have been undone because of this. >>> ... >>> Though the style(9) conformance of tool wasn't ideal, this change made it >>> worse. >>> >> >> Agree with you! >> >> These tools are original from OpenBSD, I'm trying first to sync the code >> and then will rework them. I will try to send it back to upstream(OpenBSD) >> as soon as I have time. >> > > In fact, the changes were more than half to back out FreeBSD cleanups by > syncing with the 1994 OpenBSD version. The cleanups were small (less > than 50 lines changed), and OpenBSD doesn't seem to have changed much > either. > > Bruce > -- -- Marcelo Araujo (__)araujo@FreeBSD.org \\\'',)http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) --e89a8fb1f32aa29be4051cecdb5b Content-Type: text/plain; charset=US-ASCII; name="ypmatch.diff" Content-Disposition: attachment; filename="ypmatch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_id5dnouh0 SW5kZXg6IHlwbWF0Y2guYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB5cG1hdGNoLmMJKHJldmlzaW9uIDI4NjU2 MikKKysrIHlwbWF0Y2guYwkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4LDYgQEAKIAlmcHJp bnRmKHN0ZGVyciwgIiVzXG4lc1xuIiwKIAkgICAgInVzYWdlOiB5cG1hdGNoIFsta3RdIFstZCBk b21haW5uYW1lXSBrZXkgLi4uIG1hcG5hbWUiLAogCSAgICAiICAgICAgIHlwbWF0Y2ggLXgiKTsK LQlmcHJpbnRmKHN0ZGVyciwKLQkgICAgIndoZXJlXG4iCi0JICAgICJcdG1hcG5hbWUgbWF5IGJl IGVpdGhlciBhIG1hcG5hbWUgb3IgYSBuaWNrbmFtZSBmb3IgYSBtYXAuXG4iCi0JICAgICJcdC1r IHByaW50cyBrZXlzIGFzIHdlbGwgYXMgdmFsdWVzLlxuIgotCSAgICAiXHQtdCBpbmhpYml0cyBt YXAgbmlja25hbWUgdHJhbnNsYXRpb24uXG4iCi0JICAgICJcdC14IGR1bXBzIHRoZSBtYXAgbmlj a25hbWUgdHJhbnNsYXRpb24gdGFibGUuXG4iKTsKIAlleGl0KDEpOwogfQogCkBAIC04NywxMCAr ODEsMTAgQEAKIAogCWRvbWFpbm5hbWUgPSBOVUxMOwogCW5vdHJhbnMgPSBrZXkgPSAwOwotCXdo aWxlICgoYz1nZXRvcHQoYXJnYywgYXJndiwgInhkOmt0IikpICE9IC0xKQorCXdoaWxlICgoYyA9 IGdldG9wdChhcmdjLCBhcmd2LCAieGQ6a3QiKSkgIT0gLTEpCiAJCXN3aXRjaCAoYykgewogCQlj YXNlICd4JzoKLQkJCWZvciAoaT0wOyBpPHNpemVvZiB5cGFsaWFzZXMvc2l6ZW9mIHlwYWxpYXNl c1swXTsgaSsrKQorCQkJZm9yIChpID0gMDsgaTxzaXplb2YgeXBhbGlhc2VzL3NpemVvZiB5cGFs aWFzZXNbMF07IGkrKykKIAkJCQlwcmludGYoIlVzZSBcIiVzXCIgZm9yIFwiJXNcIlxuIiwKIAkJ CQkJeXBhbGlhc2VzW2ldLmFsaWFzLAogCQkJCQl5cGFsaWFzZXNbaV0ubmFtZSk7CkBAIC0xMDgs MTYgKzEwMiwxNSBAQAogCQkJdXNhZ2UoKTsKIAkJfQogCi0JaWYgKChhcmdjLW9wdGluZCkgPCAy ICkKKwlpZiAoKGFyZ2Mtb3B0aW5kKSA8IDIpCiAJCXVzYWdlKCk7CiAKLQlpZiAoZG9tYWlubmFt ZSA9PSBOVUxMKSB7CisJaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKIAkJeXBfZ2V0X2RlZmF1bHRf ZG9tYWluKCZkb21haW5uYW1lKTsKLQl9CiAKIAlpbm1hcCA9IGFyZ3ZbYXJnYy0xXTsKIAlpZiAo bm90cmFucyA9PSAwKSB7Ci0JCWZvciAoaT0wOyBpPHNpemVvZiB5cGFsaWFzZXMvc2l6ZW9mIHlw YWxpYXNlc1swXTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpPHNpemVvZiB5cGFsaWFzZXMvc2l6ZW9m IHlwYWxpYXNlc1swXTsgaSsrKQogCQkJaWYgKHN0cmNtcChpbm1hcCwgeXBhbGlhc2VzW2ldLmFs aWFzKSA9PSAwKQogCQkJCWlubWFwID0geXBhbGlhc2VzW2ldLm5hbWU7CiAJfQpAQCAtMTM3LDcg KzEzMCw3IEBACiAJCWNhc2UgWVBFUlJfWVBCSU5EOgogCQkJZXJyeCgxLCAibm90IHJ1bm5pbmcg eXBiaW5kIik7CiAJCWRlZmF1bHQ6Ci0JCQllcnJ4KDEsICJjYW4ndCBtYXRjaCBrZXkgJXMgaW4g bWFwICVzLiBSZWFzb246ICVzIiwKKwkJCWVycngoMSwgImNhbid0IG1hdGNoIGtleSAlcyBpbiBt YXAgJXMuIHJlYXNvbjogJXMiLAogCQkJICAgIGlua2V5LCBpbm1hcCwgeXBlcnJfc3RyaW5nKHIp KTsKIAkJCXJ2YWwgPSAxOwogCQkJYnJlYWs7Cg== --e89a8fb1f32aa29be4051cecdb5b-- From owner-svn-src-head@freebsd.org Mon Aug 10 06:11:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C064799E5EB; Mon, 10 Aug 2015 06:11:11 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AF9D7CFF; Mon, 10 Aug 2015 06:11:11 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7A6BBr7063873; Mon, 10 Aug 2015 06:11:11 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7A6BBb9063872; Mon, 10 Aug 2015 06:11:11 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201508100611.t7A6BBb9063872@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Mon, 10 Aug 2015 06:11:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286563 - head/etc/rc.d X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 06:11:11 -0000 Author: adrian Date: Mon Aug 10 06:11:10 2015 New Revision: 286563 URL: https://svnweb.freebsd.org/changeset/base/286563 Log: Finish reverting r286410 - sorry, I somehow missed this with svn commit. Modified: head/etc/rc.d/netif Modified: head/etc/rc.d/netif ============================================================================== --- head/etc/rc.d/netif Mon Aug 10 00:53:45 2015 (r286562) +++ head/etc/rc.d/netif Mon Aug 10 06:11:10 2015 (r286563) @@ -37,8 +37,6 @@ name="netif" rcvar="${name}_enable" start_cmd="netif_start" stop_cmd="netif_stop" -wlanup_cmd="wlan_up" -wlandown_cmd="wlan_down" cloneup_cmd="clone_up" clonedown_cmd="clone_down" clear_cmd="doclear" @@ -67,9 +65,6 @@ netif_start() trap : 2 fi - # Create IEEE802.3 interface - wlan_up $cmdifn - # Create cloned interfaces clone_up $cmdifn @@ -96,14 +91,12 @@ netif_start() netif_stop() { _clone_down=1 - _wlan_down=1 netif_stop0 $* } doclear() { _clone_down= - _wlan_down= netif_stop0 $* } @@ -118,11 +111,6 @@ netif_stop0() # Deconfigure the interface(s) netif_common ifn_stop $cmdifn - # Destroy wlan interfaces - if [ -n "$_wlan_down" ]; then - wlan_down $cmdifn - fi - # Destroy cloned interfaces if [ -n "$_clone_down" ]; then clone_down $cmdifn From owner-svn-src-head@freebsd.org Mon Aug 10 06:12:26 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0221B99E621; Mon, 10 Aug 2015 06:12:26 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CDA1FFCA; Mon, 10 Aug 2015 06:12:25 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7A6CPgx065139; Mon, 10 Aug 2015 06:12:25 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7A6CP4t065138; Mon, 10 Aug 2015 06:12:25 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201508100612.t7A6CP4t065138@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Mon, 10 Aug 2015 06:12:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286564 - head/etc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 06:12:26 -0000 Author: adrian Date: Mon Aug 10 06:12:24 2015 New Revision: 286564 URL: https://svnweb.freebsd.org/changeset/base/286564 Log: Commit more of the reversion of r286410 . Sorry. Modified: head/etc/network.subr Modified: head/etc/network.subr ============================================================================== --- head/etc/network.subr Mon Aug 10 06:11:10 2015 (r286563) +++ head/etc/network.subr Mon Aug 10 06:12:24 2015 (r286564) @@ -1249,70 +1249,6 @@ ifscript_down() fi } -# wlan_up -# Create IEEE802.3 interfaces. -# -wlan_up() -{ - local _list _iflist wlan parent ifn - _list= - _iflist=$* - - for wlan in `set | egrep ^wlans_[a-z]+[0-9]+=[a-z]+[0-9]+`; do - # Parse wlans_$parent=$ifn - wlan=`echo $wlan | sed -E 's/wlans_([a-z]+[0-9]+)=([a-z]+[0-9]+)/\1:\2/'` - OIFS=$IFS; IFS=:; set -- $wlan; parent=$1; ifn=$2; IFS=$OIFS - case $_iflist in - ""|$ifn|$ifn\ *|*\ $ifn\ *|*\ $ifn) ;; - *) continue ;; - esac - # Skip if ${ifn} already exists. - if ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then - continue - fi - ${IFCONFIG_CMD} ${ifn} create wlandev ${parent} - if [ $? -eq 0 ]; then - _list="$_list $ifn" - fi - done - if [ -n "${_list# }" ]; then - echo "Created wlan(4) interfaces: ${_list# }." - fi - debug "Created wlan(4)s: ${_list# }" -} - -# wlan_down -# Destroy IEEE802.3 interfaces. -# -wlan_down() -{ - local _list _iflist wlan parent ifn - _list= - _iflist=$* - - for wlan in `set | egrep ^wlans_[a-z]+[0-9]+=[a-z]+[0-9]+`; do - # Parse wlans_$parent=$ifn - wlan=`echo $wlan | sed -E 's/wlans_([a-z]+[0-9]+)=([a-z]+[0-9]+)/\1:\2/'` - OIFS=$IFS; IFS=:; set -- $wlan; parent=$1; ifn=$2; IFS=$OIFS - case $_iflist in - ""|$ifn|$ifn\ *|*\ $ifn\ *|*\ $ifn) ;; - *) continue ;; - esac - # Skip if ${ifn} doesn't exists. - if ! ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then - continue - fi - ${IFCONFIG_CMD} -n ${ifn} destroy - if [ $? -eq 0 ]; then - _list="$_list $ifn" - fi - done - if [ -n "${_list# }" ]; then - echo "Destroyed wlan(4) interfaces: ${_list# }." - fi - debug "Destroyed wlan(4)s: ${_list# }" -} - # clone_up # Create cloneable interfaces. # @@ -1462,9 +1398,6 @@ clone_down() # Create and configure child interfaces. Return 0 if child # interfaces are created. # -# XXXGL: the wlan code in this functions is superseded by wlan_up(), -# and will go away soon. -# childif_create() { local cfg child child_vlans child_wlans create_args debug_flags ifn i From owner-svn-src-head@freebsd.org Mon Aug 10 06:12:53 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EF2B099E64D; Mon, 10 Aug 2015 06:12:53 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E076C1A7; Mon, 10 Aug 2015 06:12:53 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7A6CrqU065201; Mon, 10 Aug 2015 06:12:53 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7A6Crwq065200; Mon, 10 Aug 2015 06:12:53 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201508100612.t7A6Crwq065200@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Mon, 10 Aug 2015 06:12:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286565 - head/tools/tools/iwn/iwnstats X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 06:12:54 -0000 Author: adrian Date: Mon Aug 10 06:12:53 2015 New Revision: 286565 URL: https://svnweb.freebsd.org/changeset/base/286565 Log: Finish reverting r286410 for now. Modified: head/tools/tools/iwn/iwnstats/main.c Modified: head/tools/tools/iwn/iwnstats/main.c ============================================================================== --- head/tools/tools/iwn/iwnstats/main.c Mon Aug 10 06:12:24 2015 (r286564) +++ head/tools/tools/iwn/iwnstats/main.c Mon Aug 10 06:12:53 2015 (r286565) @@ -50,7 +50,7 @@ #include "iwnstats.h" #include "iwn_ioctl.h" -#define IWN_DEFAULT_IF "wlan0" +#define IWN_DEFAULT_IF "iwn0" static struct iwnstats * iwnstats_new(const char *ifname) @@ -290,6 +290,19 @@ main(int argc, char *argv[]) if (ifname) free(ifname); ifname = strdup(optarg); + if (strncmp(ifname, "wlan", 4) == 0) { + free(ifname); + len = 0; + asprintf(&sysctlname, "net.wlan.%s.%%parent", ifname + 4); + ret = sysctlbyname(sysctlname, NULL, &len, NULL, 0); + if (ret != 0) + err(1, "sysctl failed"); + ifname = calloc(len, 1); + ret = sysctlbyname(sysctlname, ifname, &len, NULL, 0); + if (ret != 0) + err(1, "sysctl failed"); + free(sysctlname); + } break; default: case '?': From owner-svn-src-head@freebsd.org Mon Aug 10 07:45:14 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E11FD99E99E; Mon, 10 Aug 2015 07:45:14 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D25ABC45; Mon, 10 Aug 2015 07:45:14 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7A7jEXi003290; Mon, 10 Aug 2015 07:45:14 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7A7jEcc003289; Mon, 10 Aug 2015 07:45:14 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508100745.t7A7jEcc003289@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Mon, 10 Aug 2015 07:45:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286566 - head/usr.sbin/rtsold X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 07:45:15 -0000 Author: ed Date: Mon Aug 10 07:45:13 2015 New Revision: 286566 URL: https://svnweb.freebsd.org/changeset/base/286566 Log: Remove bad call to shutdown(). The socket created by rtsol/rtsold is not a connection-based socket, meaning that we should not attempt to call shutdown() on it. Reported by: kan Modified: head/usr.sbin/rtsold/probe.c Modified: head/usr.sbin/rtsold/probe.c ============================================================================== --- head/usr.sbin/rtsold/probe.c Mon Aug 10 06:12:53 2015 (r286565) +++ head/usr.sbin/rtsold/probe.c Mon Aug 10 07:45:13 2015 (r286566) @@ -80,12 +80,6 @@ probe_init(void) return (-1); } - /* make the socket send-only */ - if (shutdown(probesock, 0)) { - warnmsg(LOG_ERR, __func__, "shutdown: %s", strerror(errno)); - return (-1); - } - /* initialize msghdr for sending packets */ sndmhdr.msg_namelen = sizeof(struct sockaddr_in6); sndmhdr.msg_iov = sndiov; From owner-svn-src-head@freebsd.org Mon Aug 10 07:55:27 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 74CD899EBFB; Mon, 10 Aug 2015 07:55:27 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from vps1.elischer.org (vps1.elischer.org [204.109.63.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "vps1.elischer.org", Issuer "CA Cert Signing Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4E23F1C6; Mon, 10 Aug 2015 07:55:26 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from Julian-MBP3.local (50-196-156-133-static.hfc.comcastbusiness.net [50.196.156.133]) (authenticated bits=0) by vps1.elischer.org (8.14.9/8.14.9) with ESMTP id t7A7tFBs012045 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Mon, 10 Aug 2015 00:55:18 -0700 (PDT) (envelope-from julian@freebsd.org) Subject: Re: svn commit: r286458 - in head/sys: net netinet netinet6 To: "Alexander V. Chernikov" , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <201508081815.t78IF0xJ081015@repo.freebsd.org> From: Julian Elischer Message-ID: <55C858DD.7060202@freebsd.org> Date: Mon, 10 Aug 2015 15:55:09 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <201508081815.t78IF0xJ081015@repo.freebsd.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 07:55:27 -0000 On 8/9/15 2:15 AM, Alexander V. Chernikov wrote: > Author: melifaro > Date: Sat Aug 8 18:14:59 2015 > New Revision: 286458 > URL: https://svnweb.freebsd.org/changeset/base/286458 > > Log: > MFP r274295: > > * Move interface route cleanup to route.c:rt_flushifroutes() > * Convert most of "for (fibnum = 0; fibnum < rt_numfibs; fibnum++)" users > to use new rt_foreach_fib() instead of hand-rolling cycles. I think rt_foreach_fib() is poorly named. My expectation is that it would call a function for each fib, or be a macro that just iterates fibs, rather than actually walking the tree. rt_foreach_fib_walk() maybe. > > Mod From owner-svn-src-head@freebsd.org Mon Aug 10 08:57:35 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7E82899D09E; Mon, 10 Aug 2015 08:57:35 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6F003F10; Mon, 10 Aug 2015 08:57:35 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7A8vZEV033511; Mon, 10 Aug 2015 08:57:35 GMT (envelope-from scottl@FreeBSD.org) Received: (from scottl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7A8vZ3Z033510; Mon, 10 Aug 2015 08:57:35 GMT (envelope-from scottl@FreeBSD.org) Message-Id: <201508100857.t7A8vZ3Z033510@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: scottl set sender to scottl@FreeBSD.org using -f From: Scott Long Date: Mon, 10 Aug 2015 08:57:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286567 - head/sys/dev/mps X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 08:57:35 -0000 Author: scottl Date: Mon Aug 10 08:57:34 2015 New Revision: 286567 URL: https://svnweb.freebsd.org/changeset/base/286567 Log: Remove some unused code. Obtained from: Netflix, Inx. Modified: head/sys/dev/mps/mpsvar.h Modified: head/sys/dev/mps/mpsvar.h ============================================================================== --- head/sys/dev/mps/mpsvar.h Mon Aug 10 07:45:13 2015 (r286566) +++ head/sys/dev/mps/mpsvar.h Mon Aug 10 08:57:34 2015 (r286567) @@ -494,9 +494,6 @@ mps_alloc_chain(struct mps_softc *sc) static __inline void mps_free_chain(struct mps_softc *sc, struct mps_chain *chain) { -#if 0 - bzero(chain->chain, 128); -#endif sc->chain_free++; TAILQ_INSERT_TAIL(&sc->chain_list, chain, chain_link); } From owner-svn-src-head@freebsd.org Mon Aug 10 09:02:35 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9415799D582; Mon, 10 Aug 2015 09:02:35 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 83E686E4; Mon, 10 Aug 2015 09:02:35 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7A92Zmf037377; Mon, 10 Aug 2015 09:02:35 GMT (envelope-from scottl@FreeBSD.org) Received: (from scottl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7A92YTa037374; Mon, 10 Aug 2015 09:02:34 GMT (envelope-from scottl@FreeBSD.org) Message-Id: <201508100902.t7A92YTa037374@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: scottl set sender to scottl@FreeBSD.org using -f From: Scott Long Date: Mon, 10 Aug 2015 09:02:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286568 - head/sys/dev/mps X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 09:02:35 -0000 Author: scottl Date: Mon Aug 10 09:02:34 2015 New Revision: 286568 URL: https://svnweb.freebsd.org/changeset/base/286568 Log: Remove mps_request_polled(), it's redundant to mps_wait_command() Obtained from: Netflix, Inc. Modified: head/sys/dev/mps/mps.c head/sys/dev/mps/mps_config.c head/sys/dev/mps/mpsvar.h Modified: head/sys/dev/mps/mps.c ============================================================================== --- head/sys/dev/mps/mps.c Mon Aug 10 08:57:34 2015 (r286567) +++ head/sys/dev/mps/mps.c Mon Aug 10 09:02:34 2015 (r286568) @@ -2084,7 +2084,7 @@ mps_update_events(struct mps_softc *sc, cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE; cm->cm_data = NULL; - error = mps_request_polled(sc, cm); + error = mps_wait_command(sc, cm, 60, 0); reply = (MPI2_EVENT_NOTIFICATION_REPLY *)cm->cm_reply; if ((reply == NULL) || (reply->IOCStatus & MPI2_IOCSTATUS_MASK) != MPI2_IOCSTATUS_SUCCESS) @@ -2508,18 +2508,21 @@ mps_wait_command(struct mps_softc *sc, s return EBUSY; cm->cm_complete = NULL; - cm->cm_flags |= (MPS_CM_FLAGS_WAKEUP + MPS_CM_FLAGS_POLLED); + cm->cm_flags |= MPS_CM_FLAGS_POLLED; error = mps_map_command(sc, cm); if ((error != 0) && (error != EINPROGRESS)) return (error); - // Check for context and wait for 50 mSec at a time until time has - // expired or the command has finished. If msleep can't be used, need - // to poll. + /* + * Check for context and wait for 50 mSec at a time until time has + * expired or the command has finished. If msleep can't be used, need + * to poll. + */ if (curthread->td_no_sleeping != 0) sleep_flag = NO_SLEEP; getmicrotime(&start_time); if (mtx_owned(&sc->mps_mtx) && sleep_flag == CAN_SLEEP) { + cm->cm_flags |= MPS_CM_FLAGS_WAKEUP; error = msleep(cm, &sc->mps_mtx, 0, "mpswait", timeout*hz); } else { while ((cm->cm_flags & MPS_CM_FLAGS_COMPLETE) == 0) { @@ -2548,54 +2551,6 @@ mps_wait_command(struct mps_softc *sc, s } /* - * This is the routine to enqueue a command synchonously and poll for - * completion. Its use should be rare. - */ -int -mps_request_polled(struct mps_softc *sc, struct mps_command *cm) -{ - int error, timeout = 0, rc; - struct timeval cur_time, start_time; - - error = 0; - - cm->cm_flags |= MPS_CM_FLAGS_POLLED; - cm->cm_complete = NULL; - mps_map_command(sc, cm); - - getmicrotime(&start_time); - while ((cm->cm_flags & MPS_CM_FLAGS_COMPLETE) == 0) { - mps_intr_locked(sc); - - if (mtx_owned(&sc->mps_mtx)) - msleep(&sc->msleep_fake_chan, &sc->mps_mtx, 0, - "mpspoll", hz/20); - else - pause("mpsdiag", hz/20); - - /* - * Check for real-time timeout and fail if more than 60 seconds. - */ - getmicrotime(&cur_time); - timeout = cur_time.tv_sec - start_time.tv_sec; - if (timeout > 60) { - mps_dprint(sc, MPS_FAULT, "polling failed\n"); - error = ETIMEDOUT; - break; - } - } - - if (error) { - mps_dprint(sc, MPS_FAULT, "Calling Reinit from %s\n", __func__); - rc = mps_reinit(sc); - mps_dprint(sc, MPS_FAULT, "Reinit %s\n", (rc == 0) ? "success" : - "failed"); - } - - return (error); -} - -/* * The MPT driver had a verbose interface for config pages. In this driver, * reduce it to much simplier terms, similar to the Linux driver. */ Modified: head/sys/dev/mps/mps_config.c ============================================================================== --- head/sys/dev/mps/mps_config.c Mon Aug 10 08:57:34 2015 (r286567) +++ head/sys/dev/mps/mps_config.c Mon Aug 10 09:02:34 2015 (r286568) @@ -230,7 +230,7 @@ mps_config_get_man_pg10(struct mps_softc * This page must be polled because the IOC isn't ready yet when this * page is needed. */ - error = mps_request_polled(sc, cm); + error = mps_wait_command(sc, cm, 60, 0); reply = (MPI2_CONFIG_REPLY *)cm->cm_reply; if (error || (reply == NULL)) { /* FIXME */ @@ -286,7 +286,7 @@ mps_config_get_man_pg10(struct mps_softc * This page must be polled because the IOC isn't ready yet when this * page is needed. */ - error = mps_request_polled(sc, cm); + error = mps_wait_command(sc, cm, 60, 0); reply = (MPI2_CONFIG_REPLY *)cm->cm_reply; if (error || (reply == NULL)) { /* FIXME */ @@ -1123,7 +1123,7 @@ mps_config_get_raid_volume_pg0(struct mp * This page must be polled because the IOC isn't ready yet when this * page is needed. */ - error = mps_request_polled(sc, cm); + error = mps_wait_command(sc, cm, 60, 0); reply = (MPI2_CONFIG_REPLY *)cm->cm_reply; if (error || (reply == NULL)) { /* FIXME */ @@ -1180,7 +1180,7 @@ mps_config_get_raid_volume_pg0(struct mp * This page must be polled because the IOC isn't ready yet when this * page is needed. */ - error = mps_request_polled(sc, cm); + error = mps_wait_command(sc, cm, 60, 0); reply = (MPI2_CONFIG_REPLY *)cm->cm_reply; if (error || (reply == NULL)) { /* FIXME */ @@ -1409,7 +1409,7 @@ mps_config_get_raid_pd_pg0(struct mps_so * This page must be polled because the IOC isn't ready yet when this * page is needed. */ - error = mps_request_polled(sc, cm); + error = mps_wait_command(sc, cm, 60, 0); reply = (MPI2_CONFIG_REPLY *)cm->cm_reply; if (error || (reply == NULL)) { /* FIXME */ @@ -1466,7 +1466,7 @@ mps_config_get_raid_pd_pg0(struct mps_so * This page must be polled because the IOC isn't ready yet when this * page is needed. */ - error = mps_request_polled(sc, cm); + error = mps_wait_command(sc, cm, 60, 0); reply = (MPI2_CONFIG_REPLY *)cm->cm_reply; if (error || (reply == NULL)) { /* FIXME */ Modified: head/sys/dev/mps/mpsvar.h ============================================================================== --- head/sys/dev/mps/mpsvar.h Mon Aug 10 08:57:34 2015 (r286567) +++ head/sys/dev/mps/mpsvar.h Mon Aug 10 09:02:34 2015 (r286568) @@ -712,7 +712,6 @@ void mpssas_record_event(struct mps_soft int mps_map_command(struct mps_softc *sc, struct mps_command *cm); int mps_wait_command(struct mps_softc *sc, struct mps_command *cm, int timeout, int sleep_flag); -int mps_request_polled(struct mps_softc *sc, struct mps_command *cm); int mps_config_get_bios_pg3(struct mps_softc *sc, Mpi2ConfigReply_t *mpi_reply, Mpi2BiosPage3_t *config_page); From owner-svn-src-head@freebsd.org Mon Aug 10 10:29:33 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 516DC998B8F; Mon, 10 Aug 2015 10:29:33 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 420D5DAA; Mon, 10 Aug 2015 10:29:33 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AATXRX070504; Mon, 10 Aug 2015 10:29:33 GMT (envelope-from bz@FreeBSD.org) Received: (from bz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AATXoh070503; Mon, 10 Aug 2015 10:29:33 GMT (envelope-from bz@FreeBSD.org) Message-Id: <201508101029.t7AATXoh070503@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bz set sender to bz@FreeBSD.org using -f From: "Bjoern A. Zeeb" Date: Mon, 10 Aug 2015 10:29:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286569 - head/usr.sbin/fstyp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 10:29:33 -0000 Author: bz Date: Mon Aug 10 10:29:32 2015 New Revision: 286569 URL: https://svnweb.freebsd.org/changeset/base/286569 Log: Rather than hardcoding a string and limiting the comparison to these characters use the defined constant so that in case of change this would not break. Reviewed by: allanjude Differential Revision: https://reviews.freebsd.org/D3340 MFC after: 2 weeks Modified: head/usr.sbin/fstyp/geli.c Modified: head/usr.sbin/fstyp/geli.c ============================================================================== --- head/usr.sbin/fstyp/geli.c Mon Aug 10 09:02:34 2015 (r286568) +++ head/usr.sbin/fstyp/geli.c Mon Aug 10 10:29:32 2015 (r286569) @@ -61,7 +61,7 @@ fstyp_geli(FILE *fp, char *label __unuse if (error) goto gelierr; - if (strncmp(md.md_magic, "GEOM::ELI", 9) == 0) { + if (strcmp(md.md_magic, G_ELI_MAGIC) == 0) { free(buf); return (0); } From owner-svn-src-head@freebsd.org Mon Aug 10 10:34:24 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7AF15998E16; Mon, 10 Aug 2015 10:34:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6A5DD65E; Mon, 10 Aug 2015 10:34:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AAYOUc074608; Mon, 10 Aug 2015 10:34:24 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AAYOtk074606; Mon, 10 Aug 2015 10:34:24 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508101034.t7AAYOtk074606@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 10:34:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286570 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 10:34:24 -0000 Author: mav Date: Mon Aug 10 10:34:23 2015 New Revision: 286570 URL: https://svnweb.freebsd.org/changeset/base/286570 Log: MFV r277426: 5408 managing ZFS cache devices requires lots of RAM Reviewed by: Christopher Siden Reviewed by: George Wilson Reviewed by: Matthew Ahrens Reviewed by: Don Brady Reviewed by: Josef 'Jeff' Sipek Approved by: Garrett D'Amore Author: Chris Williamson illumos/illumos-gate@89c86e32293a30cdd7af530c38b2073fee01411c Currently, every buffer cached in the L2ARC is accompanied by a 240-byte header in memory, leading to very high memory consumption when using very large cache devices. These changes significantly reduce this overhead. Currently: L1-only header = 176 bytes L1 + L2 or L2-only header = 176 bytes + 32 byte checksum + 32 byte l2hdr = 240 bytes Memory-optimized: L1-only header = 176 bytes L1 + L2 header = 176 bytes + 32 byte checksum = 208 bytes L2-only header = 96 bytes + 32 byte checksum = 128 bytes So overall: Trunk Optimized +-----------------+ L1-only | 176 B | 176 B | (same) +-----------------+ L1 & L2 | 240 B | 208 B | (saved 32 bytes) +-----------------+ L2-only | 240 B | 128 B | (saved 116 bytes) +-----------------+ For an average blocksize of 8KB, this means that for the L2ARC, the ratio of metadata to data has gone down from about 2.92% to 1.56%. For a 'storage optimized' EC2 instance with 1600GB of SSD and 60GB of RAM, this means that we expect a completely full L2ARC to use (1600 GB * 0.0156) / 60GB = 41% of the available memory, down from 78%. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Aug 10 10:29:32 2015 (r286569) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Aug 10 10:34:23 2015 (r286570) @@ -111,7 +111,7 @@ * Note that the majority of the performance stats are manipulated * with atomic operations. * - * The L2ARC uses the l2arc_buflist_mtx global mutex for the following: + * The L2ARC uses the l2ad_mtx on each vdev for the following: * * - L2ARC buflist creation * - L2ARC buflist eviction @@ -399,6 +399,7 @@ typedef struct arc_stats { kstat_named_t arcstat_l2_writes_hdr_miss; kstat_named_t arcstat_l2_evict_lock_retry; kstat_named_t arcstat_l2_evict_reading; + kstat_named_t arcstat_l2_evict_l1cached; kstat_named_t arcstat_l2_free_on_write; kstat_named_t arcstat_l2_cdata_free_on_write; kstat_named_t arcstat_l2_abort_lowmem; @@ -481,6 +482,7 @@ static arc_stats_t arc_stats = { { "l2_writes_hdr_miss", KSTAT_DATA_UINT64 }, { "l2_evict_lock_retry", KSTAT_DATA_UINT64 }, { "l2_evict_reading", KSTAT_DATA_UINT64 }, + { "l2_evict_l1cached", KSTAT_DATA_UINT64 }, { "l2_free_on_write", KSTAT_DATA_UINT64 }, { "l2_cdata_free_on_write", KSTAT_DATA_UINT64 }, { "l2_abort_lowmem", KSTAT_DATA_UINT64 }, @@ -585,8 +587,6 @@ static int arc_no_grow; /* Don't try to static uint64_t arc_tempreserve; static uint64_t arc_loaned_bytes; -typedef struct l2arc_buf_hdr l2arc_buf_hdr_t; - typedef struct arc_callback arc_callback_t; struct arc_callback { @@ -607,29 +607,53 @@ struct arc_write_callback { arc_buf_t *awcb_buf; }; -struct arc_buf_hdr { - /* protected by hash lock */ - dva_t b_dva; - uint64_t b_birth; - uint64_t b_cksum0; - +/* + * ARC buffers are separated into multiple structs as a memory saving measure: + * - Common fields struct, always defined, and embedded within it: + * - L2-only fields, always allocated but undefined when not in L2ARC + * - L1-only fields, only allocated when in L1ARC + * + * Buffer in L1 Buffer only in L2 + * +------------------------+ +------------------------+ + * | arc_buf_hdr_t | | arc_buf_hdr_t | + * | | | | + * | | | | + * | | | | + * +------------------------+ +------------------------+ + * | l2arc_buf_hdr_t | | l2arc_buf_hdr_t | + * | (undefined if L1-only) | | | + * +------------------------+ +------------------------+ + * | l1arc_buf_hdr_t | + * | | + * | | + * | | + * | | + * +------------------------+ + * + * Because it's possible for the L2ARC to become extremely large, we can wind + * up eating a lot of memory in L2ARC buffer headers, so the size of a header + * is minimized by only allocating the fields necessary for an L1-cached buffer + * when a header is actually in the L1 cache. The sub-headers (l1arc_buf_hdr and + * l2arc_buf_hdr) are embedded rather than allocated separately to save a couple + * words in pointers. arc_hdr_realloc() is used to switch a header between + * these two allocation states. + */ +typedef struct l1arc_buf_hdr { kmutex_t b_freeze_lock; - zio_cksum_t *b_freeze_cksum; +#ifdef ZFS_DEBUG + /* + * used for debugging wtih kmem_flags - by allocating and freeing + * b_thawed when the buffer is thawed, we get a record of the stack + * trace that thawed it. + */ void *b_thawed; +#endif - arc_buf_hdr_t *b_hash_next; arc_buf_t *b_buf; - arc_flags_t b_flags; uint32_t b_datacnt; - - arc_callback_t *b_acb; + /* for waiting on writes to complete */ kcondvar_t b_cv; - /* immutable */ - arc_buf_contents_t b_type; - uint64_t b_size; - uint64_t b_spa; - /* protected by arc state mutex */ arc_state_t *b_state; list_node_t b_arc_node; @@ -640,8 +664,46 @@ struct arc_buf_hdr { /* self protecting */ refcount_t b_refcnt; - l2arc_buf_hdr_t *b_l2hdr; + arc_callback_t *b_acb; + /* temporary buffer holder for in-flight compressed data */ + void *b_tmp_cdata; +} l1arc_buf_hdr_t; + +typedef struct l2arc_dev l2arc_dev_t; + +typedef struct l2arc_buf_hdr { + /* protected by arc_buf_hdr mutex */ + l2arc_dev_t *b_dev; /* L2ARC device */ + uint64_t b_daddr; /* disk address, offset byte */ + /* real alloc'd buffer size depending on b_compress applied */ + int32_t b_asize; + list_node_t b_l2node; +} l2arc_buf_hdr_t; + +struct arc_buf_hdr { + /* protected by hash lock */ + dva_t b_dva; + uint64_t b_birth; + /* + * Even though this checksum is only set/verified when a buffer is in + * the L1 cache, it needs to be in the set of common fields because it + * must be preserved from the time before a buffer is written out to + * L2ARC until after it is read back in. + */ + zio_cksum_t *b_freeze_cksum; + + arc_buf_hdr_t *b_hash_next; + arc_flags_t b_flags; + + /* immutable */ + int32_t b_size; + uint64_t b_spa; + + /* L2ARC fields. Undefined when not in L2ARC. */ + l2arc_buf_hdr_t b_l2hdr; + /* L1ARC fields. Undefined when in l2arc_only state */ + l1arc_buf_hdr_t b_l1hdr; }; #ifdef _KERNEL @@ -678,22 +740,38 @@ static arc_buf_hdr_t arc_eviction_hdr; #define HDR_PREFETCH(hdr) ((hdr)->b_flags & ARC_FLAG_PREFETCH) #define HDR_FREED_IN_READ(hdr) ((hdr)->b_flags & ARC_FLAG_FREED_IN_READ) #define HDR_BUF_AVAILABLE(hdr) ((hdr)->b_flags & ARC_FLAG_BUF_AVAILABLE) -#define HDR_FREE_IN_PROGRESS(hdr) \ - ((hdr)->b_flags & ARC_FLAG_FREE_IN_PROGRESS) + #define HDR_L2CACHE(hdr) ((hdr)->b_flags & ARC_FLAG_L2CACHE) +#define HDR_L2COMPRESS(hdr) ((hdr)->b_flags & ARC_FLAG_L2COMPRESS) #define HDR_L2_READING(hdr) \ - ((hdr)->b_flags & ARC_FLAG_IO_IN_PROGRESS && \ - (hdr)->b_l2hdr != NULL) + (((hdr)->b_flags & ARC_FLAG_IO_IN_PROGRESS) && \ + ((hdr)->b_flags & ARC_FLAG_HAS_L2HDR)) #define HDR_L2_WRITING(hdr) ((hdr)->b_flags & ARC_FLAG_L2_WRITING) #define HDR_L2_EVICTED(hdr) ((hdr)->b_flags & ARC_FLAG_L2_EVICTED) #define HDR_L2_WRITE_HEAD(hdr) ((hdr)->b_flags & ARC_FLAG_L2_WRITE_HEAD) +#define HDR_ISTYPE_METADATA(hdr) \ + ((hdr)->b_flags & ARC_FLAG_BUFC_METADATA) +#define HDR_ISTYPE_DATA(hdr) (!HDR_ISTYPE_METADATA(hdr)) + +#define HDR_HAS_L1HDR(hdr) ((hdr)->b_flags & ARC_FLAG_HAS_L1HDR) +#define HDR_HAS_L2HDR(hdr) ((hdr)->b_flags & ARC_FLAG_HAS_L2HDR) + +/* For storing compression mode in b_flags */ +#define HDR_COMPRESS_OFFSET 24 +#define HDR_COMPRESS_NBITS 7 + +#define HDR_GET_COMPRESS(hdr) ((enum zio_compress)BF32_GET(hdr->b_flags, \ + HDR_COMPRESS_OFFSET, HDR_COMPRESS_NBITS)) +#define HDR_SET_COMPRESS(hdr, cmp) BF32_SET(hdr->b_flags, \ + HDR_COMPRESS_OFFSET, HDR_COMPRESS_NBITS, (cmp)) + /* * Other sizes */ -#define HDR_SIZE ((int64_t)sizeof (arc_buf_hdr_t)) -#define L2HDR_SIZE ((int64_t)sizeof (l2arc_buf_hdr_t)) +#define HDR_FULL_SIZE ((int64_t)sizeof (arc_buf_hdr_t)) +#define HDR_L2ONLY_SIZE ((int64_t)offsetof(arc_buf_hdr_t, b_l1hdr)) /* * Hash table routines @@ -817,7 +895,7 @@ SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, l2c_onl /* * L2ARC Internals */ -typedef struct l2arc_dev { +struct l2arc_dev { vdev_t *l2ad_vdev; /* vdev */ spa_t *l2ad_spa; /* spa */ uint64_t l2ad_hand; /* next write location */ @@ -826,15 +904,15 @@ typedef struct l2arc_dev { uint64_t l2ad_evict; /* last addr eviction reached */ boolean_t l2ad_first; /* first sweep through */ boolean_t l2ad_writing; /* currently writing */ - list_t *l2ad_buflist; /* buffer list */ + kmutex_t l2ad_mtx; /* lock for buffer list */ + list_t l2ad_buflist; /* buffer list */ list_node_t l2ad_node; /* device list node */ -} l2arc_dev_t; +}; static list_t L2ARC_dev_list; /* device list */ static list_t *l2arc_dev_list; /* device list pointer */ static kmutex_t l2arc_dev_mtx; /* device list mutex */ static l2arc_dev_t *l2arc_dev_last; /* last device used */ -static kmutex_t l2arc_buflist_mtx; /* mutex for all buflists */ static list_t L2ARC_free_on_write; /* free after write buf list */ static list_t *l2arc_free_on_write; /* free after write list ptr */ static kmutex_t l2arc_free_on_write_mtx; /* mutex for list */ @@ -854,18 +932,6 @@ typedef struct l2arc_write_callback { arc_buf_hdr_t *l2wcb_head; /* head of write buflist */ } l2arc_write_callback_t; -struct l2arc_buf_hdr { - /* protected by arc_buf_hdr mutex */ - l2arc_dev_t *b_dev; /* L2ARC device */ - uint64_t b_daddr; /* disk address, offset byte */ - /* compression applied to buffer data */ - enum zio_compress b_compress; - /* real alloc'd buffer size depending on b_compress applied */ - int b_asize; - /* temporary buffer holder for in-flight compressed data */ - void *b_tmp_cdata; -}; - typedef struct l2arc_data_free { /* protected by l2arc_free_on_write_mtx */ void *l2df_data; @@ -884,12 +950,13 @@ static int arc_evict_needed(arc_buf_cont static void arc_evict_ghost(arc_state_t *, uint64_t, int64_t); static void arc_buf_watch(arc_buf_t *); +static arc_buf_contents_t arc_buf_type(arc_buf_hdr_t *); +static uint32_t arc_bufc_to_flags(arc_buf_contents_t); + static boolean_t l2arc_write_eligible(uint64_t, arc_buf_hdr_t *); static void l2arc_read_done(zio_t *); -static void l2arc_hdr_stat_add(void); -static void l2arc_hdr_stat_remove(void); -static boolean_t l2arc_compress_buf(l2arc_buf_hdr_t *); +static boolean_t l2arc_compress_buf(arc_buf_hdr_t *); static void l2arc_decompress_zio(zio_t *, arc_buf_hdr_t *, enum zio_compress); static void l2arc_release_cdata_buf(arc_buf_hdr_t *); @@ -912,8 +979,7 @@ buf_hash(uint64_t spa, const dva_t *dva, #define BUF_EMPTY(buf) \ ((buf)->b_dva.dva_word[0] == 0 && \ - (buf)->b_dva.dva_word[1] == 0 && \ - (buf)->b_cksum0 == 0) + (buf)->b_dva.dva_word[1] == 0) #define BUF_EQUAL(spa, dva, birth, buf) \ ((buf)->b_dva.dva_word[0] == (dva)->dva_word[0]) && \ @@ -926,7 +992,6 @@ buf_discard_identity(arc_buf_hdr_t *hdr) hdr->b_dva.dva_word[0] = 0; hdr->b_dva.dva_word[1] = 0; hdr->b_birth = 0; - hdr->b_cksum0 = 0; } static arc_buf_hdr_t * @@ -956,6 +1021,7 @@ buf_hash_find(uint64_t spa, const blkptr * equal to elem in the hash table, then the already existing element * will be returned and the new element will not be inserted. * Otherwise returns NULL. + * If lockp == NULL, the caller is assumed to already hold the hash lock. */ static arc_buf_hdr_t * buf_hash_insert(arc_buf_hdr_t *hdr, kmutex_t **lockp) @@ -968,8 +1034,14 @@ buf_hash_insert(arc_buf_hdr_t *hdr, kmut ASSERT(!DVA_IS_EMPTY(&hdr->b_dva)); ASSERT(hdr->b_birth != 0); ASSERT(!HDR_IN_HASH_TABLE(hdr)); - *lockp = hash_lock; - mutex_enter(hash_lock); + + if (lockp != NULL) { + *lockp = hash_lock; + mutex_enter(hash_lock); + } else { + ASSERT(MUTEX_HELD(hash_lock)); + } + for (fhdr = buf_hash_table.ht_table[idx], i = 0; fhdr != NULL; fhdr = fhdr->b_hash_next, i++) { if (BUF_EQUAL(hdr->b_spa, &hdr->b_dva, hdr->b_birth, fhdr)) @@ -1024,7 +1096,8 @@ buf_hash_remove(arc_buf_hdr_t *hdr) /* * Global data structures and functions for the buf kmem cache. */ -static kmem_cache_t *hdr_cache; +static kmem_cache_t *hdr_full_cache; +static kmem_cache_t *hdr_l2only_cache; static kmem_cache_t *buf_cache; static void @@ -1036,7 +1109,8 @@ buf_fini(void) (buf_hash_table.ht_mask + 1) * sizeof (void *)); for (i = 0; i < BUF_LOCKS; i++) mutex_destroy(&buf_hash_table.ht_locks[i].ht_lock); - kmem_cache_destroy(hdr_cache); + kmem_cache_destroy(hdr_full_cache); + kmem_cache_destroy(hdr_l2only_cache); kmem_cache_destroy(buf_cache); } @@ -1046,15 +1120,27 @@ buf_fini(void) */ /* ARGSUSED */ static int -hdr_cons(void *vbuf, void *unused, int kmflag) +hdr_full_cons(void *vbuf, void *unused, int kmflag) +{ + arc_buf_hdr_t *hdr = vbuf; + + bzero(hdr, HDR_FULL_SIZE); + cv_init(&hdr->b_l1hdr.b_cv, NULL, CV_DEFAULT, NULL); + refcount_create(&hdr->b_l1hdr.b_refcnt); + mutex_init(&hdr->b_l1hdr.b_freeze_lock, NULL, MUTEX_DEFAULT, NULL); + arc_space_consume(HDR_FULL_SIZE, ARC_SPACE_HDRS); + + return (0); +} + +/* ARGSUSED */ +static int +hdr_l2only_cons(void *vbuf, void *unused, int kmflag) { arc_buf_hdr_t *hdr = vbuf; - bzero(hdr, sizeof (arc_buf_hdr_t)); - refcount_create(&hdr->b_refcnt); - cv_init(&hdr->b_cv, NULL, CV_DEFAULT, NULL); - mutex_init(&hdr->b_freeze_lock, NULL, MUTEX_DEFAULT, NULL); - arc_space_consume(sizeof (arc_buf_hdr_t), ARC_SPACE_HDRS); + bzero(hdr, HDR_L2ONLY_SIZE); + arc_space_consume(HDR_L2ONLY_SIZE, ARC_SPACE_L2HDRS); return (0); } @@ -1078,15 +1164,25 @@ buf_cons(void *vbuf, void *unused, int k */ /* ARGSUSED */ static void -hdr_dest(void *vbuf, void *unused) +hdr_full_dest(void *vbuf, void *unused) { arc_buf_hdr_t *hdr = vbuf; ASSERT(BUF_EMPTY(hdr)); - refcount_destroy(&hdr->b_refcnt); - cv_destroy(&hdr->b_cv); - mutex_destroy(&hdr->b_freeze_lock); - arc_space_return(sizeof (arc_buf_hdr_t), ARC_SPACE_HDRS); + cv_destroy(&hdr->b_l1hdr.b_cv); + refcount_destroy(&hdr->b_l1hdr.b_refcnt); + mutex_destroy(&hdr->b_l1hdr.b_freeze_lock); + arc_space_return(HDR_FULL_SIZE, ARC_SPACE_HDRS); +} + +/* ARGSUSED */ +static void +hdr_l2only_dest(void *vbuf, void *unused) +{ + arc_buf_hdr_t *hdr = vbuf; + + ASSERT(BUF_EMPTY(hdr)); + arc_space_return(HDR_L2ONLY_SIZE, ARC_SPACE_L2HDRS); } /* ARGSUSED */ @@ -1140,8 +1236,11 @@ retry: goto retry; } - hdr_cache = kmem_cache_create("arc_buf_hdr_t", sizeof (arc_buf_hdr_t), - 0, hdr_cons, hdr_dest, hdr_recl, NULL, NULL, 0); + hdr_full_cache = kmem_cache_create("arc_buf_hdr_t_full", HDR_FULL_SIZE, + 0, hdr_full_cons, hdr_full_dest, hdr_recl, NULL, NULL, 0); + hdr_l2only_cache = kmem_cache_create("arc_buf_hdr_t_l2only", + HDR_L2ONLY_SIZE, 0, hdr_l2only_cons, hdr_l2only_dest, hdr_recl, + NULL, NULL, 0); buf_cache = kmem_cache_create("arc_buf_t", sizeof (arc_buf_t), 0, buf_cons, buf_dest, NULL, NULL, NULL, 0); @@ -1155,6 +1254,81 @@ retry: } } +/* + * Transition between the two allocation states for the arc_buf_hdr struct. + * The arc_buf_hdr struct can be allocated with (hdr_full_cache) or without + * (hdr_l2only_cache) the fields necessary for the L1 cache - the smaller + * version is used when a cache buffer is only in the L2ARC in order to reduce + * memory usage. + */ +static arc_buf_hdr_t * +arc_hdr_realloc(arc_buf_hdr_t *hdr, kmem_cache_t *old, kmem_cache_t *new) +{ + ASSERT(HDR_HAS_L2HDR(hdr)); + + arc_buf_hdr_t *nhdr; + l2arc_dev_t *dev = hdr->b_l2hdr.b_dev; + + ASSERT((old == hdr_full_cache && new == hdr_l2only_cache) || + (old == hdr_l2only_cache && new == hdr_full_cache)); + + nhdr = kmem_cache_alloc(new, KM_PUSHPAGE); + + ASSERT(MUTEX_HELD(HDR_LOCK(hdr))); + buf_hash_remove(hdr); + + bcopy(hdr, nhdr, HDR_L2ONLY_SIZE); + if (new == hdr_full_cache) { + nhdr->b_flags |= ARC_FLAG_HAS_L1HDR; + /* + * arc_access and arc_change_state need to be aware that a + * header has just come out of L2ARC, so we set its state to + * l2c_only even though it's about to change. + */ + nhdr->b_l1hdr.b_state = arc_l2c_only; + } else { + ASSERT(hdr->b_l1hdr.b_buf == NULL); + ASSERT0(hdr->b_l1hdr.b_datacnt); + ASSERT(!list_link_active(&hdr->b_l1hdr.b_arc_node)); + /* + * We might be removing the L1hdr of a buffer which was just + * written out to L2ARC. If such a buffer is compressed then we + * need to free its b_tmp_cdata before destroying the header. + */ + if (hdr->b_l1hdr.b_tmp_cdata != NULL && + HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF) + l2arc_release_cdata_buf(hdr); + nhdr->b_flags &= ~ARC_FLAG_HAS_L1HDR; + } + /* + * The header has been reallocated so we need to re-insert it into any + * lists it was on. + */ + (void) buf_hash_insert(nhdr, NULL); + + ASSERT(list_link_active(&hdr->b_l2hdr.b_l2node)); + + mutex_enter(&dev->l2ad_mtx); + + /* + * We must place the realloc'ed header back into the list at + * the same spot. Otherwise, if it's placed earlier in the list, + * l2arc_write_buffers() could find it during the function's + * write phase, and try to write it out to the l2arc. + */ + list_insert_after(&dev->l2ad_buflist, hdr, nhdr); + list_remove(&dev->l2ad_buflist, hdr); + + mutex_exit(&dev->l2ad_mtx); + + buf_discard_identity(hdr); + hdr->b_freeze_cksum = NULL; + kmem_cache_free(old, hdr); + + return (nhdr); +} + + #define ARC_MINTIME (hz>>4) /* 62 ms */ static void @@ -1165,16 +1339,15 @@ arc_cksum_verify(arc_buf_t *buf) if (!(zfs_flags & ZFS_DEBUG_MODIFY)) return; - mutex_enter(&buf->b_hdr->b_freeze_lock); - if (buf->b_hdr->b_freeze_cksum == NULL || - (buf->b_hdr->b_flags & ARC_FLAG_IO_ERROR)) { - mutex_exit(&buf->b_hdr->b_freeze_lock); + mutex_enter(&buf->b_hdr->b_l1hdr.b_freeze_lock); + if (buf->b_hdr->b_freeze_cksum == NULL || HDR_IO_ERROR(buf->b_hdr)) { + mutex_exit(&buf->b_hdr->b_l1hdr.b_freeze_lock); return; } fletcher_2_native(buf->b_data, buf->b_hdr->b_size, &zc); if (!ZIO_CHECKSUM_EQUAL(*buf->b_hdr->b_freeze_cksum, zc)) panic("buffer modified while frozen!"); - mutex_exit(&buf->b_hdr->b_freeze_lock); + mutex_exit(&buf->b_hdr->b_l1hdr.b_freeze_lock); } static int @@ -1183,10 +1356,10 @@ arc_cksum_equal(arc_buf_t *buf) zio_cksum_t zc; int equal; - mutex_enter(&buf->b_hdr->b_freeze_lock); + mutex_enter(&buf->b_hdr->b_l1hdr.b_freeze_lock); fletcher_2_native(buf->b_data, buf->b_hdr->b_size, &zc); equal = ZIO_CHECKSUM_EQUAL(*buf->b_hdr->b_freeze_cksum, zc); - mutex_exit(&buf->b_hdr->b_freeze_lock); + mutex_exit(&buf->b_hdr->b_l1hdr.b_freeze_lock); return (equal); } @@ -1197,15 +1370,15 @@ arc_cksum_compute(arc_buf_t *buf, boolea if (!force && !(zfs_flags & ZFS_DEBUG_MODIFY)) return; - mutex_enter(&buf->b_hdr->b_freeze_lock); + mutex_enter(&buf->b_hdr->b_l1hdr.b_freeze_lock); if (buf->b_hdr->b_freeze_cksum != NULL) { - mutex_exit(&buf->b_hdr->b_freeze_lock); + mutex_exit(&buf->b_hdr->b_l1hdr.b_freeze_lock); return; } buf->b_hdr->b_freeze_cksum = kmem_alloc(sizeof (zio_cksum_t), KM_SLEEP); fletcher_2_native(buf->b_data, buf->b_hdr->b_size, buf->b_hdr->b_freeze_cksum); - mutex_exit(&buf->b_hdr->b_freeze_lock); + mutex_exit(&buf->b_hdr->b_l1hdr.b_freeze_lock); #ifdef illumos arc_buf_watch(buf); #endif @@ -1256,30 +1429,58 @@ arc_buf_watch(arc_buf_t *buf) } #endif /* illumos */ +static arc_buf_contents_t +arc_buf_type(arc_buf_hdr_t *hdr) +{ + if (HDR_ISTYPE_METADATA(hdr)) { + return (ARC_BUFC_METADATA); + } else { + return (ARC_BUFC_DATA); + } +} + +static uint32_t +arc_bufc_to_flags(arc_buf_contents_t type) +{ + switch (type) { + case ARC_BUFC_DATA: + /* metadata field is 0 if buffer contains normal data */ + return (0); + case ARC_BUFC_METADATA: + return (ARC_FLAG_BUFC_METADATA); + default: + break; + } + panic("undefined ARC buffer type!"); + return ((uint32_t)-1); +} + void arc_buf_thaw(arc_buf_t *buf) { if (zfs_flags & ZFS_DEBUG_MODIFY) { - if (buf->b_hdr->b_state != arc_anon) + if (buf->b_hdr->b_l1hdr.b_state != arc_anon) panic("modifying non-anon buffer!"); - if (buf->b_hdr->b_flags & ARC_FLAG_IO_IN_PROGRESS) + if (HDR_IO_IN_PROGRESS(buf->b_hdr)) panic("modifying buffer while i/o in progress!"); arc_cksum_verify(buf); } - mutex_enter(&buf->b_hdr->b_freeze_lock); + mutex_enter(&buf->b_hdr->b_l1hdr.b_freeze_lock); if (buf->b_hdr->b_freeze_cksum != NULL) { kmem_free(buf->b_hdr->b_freeze_cksum, sizeof (zio_cksum_t)); buf->b_hdr->b_freeze_cksum = NULL; } +#ifdef ZFS_DEBUG if (zfs_flags & ZFS_DEBUG_MODIFY) { - if (buf->b_hdr->b_thawed) - kmem_free(buf->b_hdr->b_thawed, 1); - buf->b_hdr->b_thawed = kmem_alloc(1, KM_SLEEP); + if (buf->b_hdr->b_l1hdr.b_thawed != NULL) + kmem_free(buf->b_hdr->b_l1hdr.b_thawed, 1); + buf->b_hdr->b_l1hdr.b_thawed = kmem_alloc(1, KM_SLEEP); } +#endif - mutex_exit(&buf->b_hdr->b_freeze_lock); + mutex_exit(&buf->b_hdr->b_l1hdr.b_freeze_lock); #ifdef illumos arc_buf_unwatch(buf); @@ -1298,7 +1499,7 @@ arc_buf_freeze(arc_buf_t *buf) mutex_enter(hash_lock); ASSERT(buf->b_hdr->b_freeze_cksum != NULL || - buf->b_hdr->b_state == arc_anon); + buf->b_hdr->b_l1hdr.b_state == arc_anon); arc_cksum_compute(buf, B_FALSE); mutex_exit(hash_lock); @@ -1309,7 +1510,7 @@ get_buf_info(arc_buf_hdr_t *hdr, arc_sta { uint64_t buf_hashid = buf_hash(hdr->b_spa, &hdr->b_dva, hdr->b_birth); - if (hdr->b_type == ARC_BUFC_METADATA) + if (arc_buf_type(hdr) == ARC_BUFC_METADATA) buf_hashid &= (ARC_BUFC_NUMMETADATALISTS - 1); else { buf_hashid &= (ARC_BUFC_NUMDATALISTS - 1); @@ -1324,32 +1525,36 @@ get_buf_info(arc_buf_hdr_t *hdr, arc_sta static void add_reference(arc_buf_hdr_t *hdr, kmutex_t *hash_lock, void *tag) { + ASSERT(HDR_HAS_L1HDR(hdr)); ASSERT(MUTEX_HELD(hash_lock)); + arc_state_t *state = hdr->b_l1hdr.b_state; - if ((refcount_add(&hdr->b_refcnt, tag) == 1) && - (hdr->b_state != arc_anon)) { - uint64_t delta = hdr->b_size * hdr->b_datacnt; - uint64_t *size = &hdr->b_state->arcs_lsize[hdr->b_type]; - list_t *list; - kmutex_t *lock; + if ((refcount_add(&hdr->b_l1hdr.b_refcnt, tag) == 1) && + (state != arc_anon)) { + /* We don't use the L2-only state list. */ + if (state != arc_l2c_only) { + uint64_t delta = hdr->b_size * hdr->b_l1hdr.b_datacnt; + uint64_t *size = &state->arcs_lsize[arc_buf_type(hdr)]; + list_t *list; + kmutex_t *lock; - get_buf_info(hdr, hdr->b_state, &list, &lock); - ASSERT(!MUTEX_HELD(lock)); - mutex_enter(lock); - ASSERT(list_link_active(&hdr->b_arc_node)); - list_remove(list, hdr); - if (GHOST_STATE(hdr->b_state)) { - ASSERT0(hdr->b_datacnt); - ASSERT3P(hdr->b_buf, ==, NULL); - delta = hdr->b_size; - } - ASSERT(delta > 0); - ASSERT3U(*size, >=, delta); - atomic_add_64(size, -delta); - mutex_exit(lock); + get_buf_info(hdr, state, &list, &lock); + ASSERT(!MUTEX_HELD(lock)); + mutex_enter(lock); + ASSERT(list_link_active(&hdr->b_l1hdr.b_arc_node)); + list_remove(list, hdr); + if (GHOST_STATE(state)) { + ASSERT0(hdr->b_l1hdr.b_datacnt); + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + delta = hdr->b_size; + } + ASSERT(delta > 0); + ASSERT3U(*size, >=, delta); + atomic_add_64(size, -delta); + mutex_exit(lock); + } /* remove the prefetch flag if we get a reference */ - if (hdr->b_flags & ARC_FLAG_PREFETCH) - hdr->b_flags &= ~ARC_FLAG_PREFETCH; + hdr->b_flags &= ~ARC_FLAG_PREFETCH; } } @@ -1357,24 +1562,30 @@ static int remove_reference(arc_buf_hdr_t *hdr, kmutex_t *hash_lock, void *tag) { int cnt; - arc_state_t *state = hdr->b_state; + arc_state_t *state = hdr->b_l1hdr.b_state; + ASSERT(HDR_HAS_L1HDR(hdr)); ASSERT(state == arc_anon || MUTEX_HELD(hash_lock)); ASSERT(!GHOST_STATE(state)); - if (((cnt = refcount_remove(&hdr->b_refcnt, tag)) == 0) && + /* + * arc_l2c_only counts as a ghost state so we don't need to explicitly + * check to prevent usage of the arc_l2c_only list. + */ + if (((cnt = refcount_remove(&hdr->b_l1hdr.b_refcnt, tag)) == 0) && (state != arc_anon)) { - uint64_t *size = &state->arcs_lsize[hdr->b_type]; + uint64_t *size = &state->arcs_lsize[arc_buf_type(hdr)]; list_t *list; kmutex_t *lock; get_buf_info(hdr, state, &list, &lock); ASSERT(!MUTEX_HELD(lock)); mutex_enter(lock); - ASSERT(!list_link_active(&hdr->b_arc_node)); + ASSERT(!list_link_active(&hdr->b_l1hdr.b_arc_node)); list_insert_head(list, hdr); - ASSERT(hdr->b_datacnt > 0); - atomic_add_64(size, hdr->b_size * hdr->b_datacnt); + ASSERT(hdr->b_l1hdr.b_datacnt > 0); + atomic_add_64(size, hdr->b_size * + hdr->b_l1hdr.b_datacnt); mutex_exit(lock); } return (cnt); @@ -1388,44 +1599,64 @@ static void arc_change_state(arc_state_t *new_state, arc_buf_hdr_t *hdr, kmutex_t *hash_lock) { - arc_state_t *old_state = hdr->b_state; - int64_t refcnt = refcount_count(&hdr->b_refcnt); + arc_state_t *old_state; + int64_t refcnt; + uint32_t datacnt; uint64_t from_delta, to_delta; + arc_buf_contents_t buftype = arc_buf_type(hdr); list_t *list; kmutex_t *lock; + /* + * We almost always have an L1 hdr here, since we call arc_hdr_realloc() + * in arc_read() when bringing a buffer out of the L2ARC. However, the + * L1 hdr doesn't always exist when we change state to arc_anon before + * destroying a header, in which case reallocating to add the L1 hdr is + * pointless. + */ + if (HDR_HAS_L1HDR(hdr)) { + old_state = hdr->b_l1hdr.b_state; + refcnt = refcount_count(&hdr->b_l1hdr.b_refcnt); + datacnt = hdr->b_l1hdr.b_datacnt; + } else { + old_state = arc_l2c_only; + refcnt = 0; + datacnt = 0; + } + ASSERT(MUTEX_HELD(hash_lock)); ASSERT3P(new_state, !=, old_state); - ASSERT(refcnt == 0 || hdr->b_datacnt > 0); - ASSERT(hdr->b_datacnt == 0 || !GHOST_STATE(new_state)); - ASSERT(hdr->b_datacnt <= 1 || old_state != arc_anon); + ASSERT(refcnt == 0 || datacnt > 0); + ASSERT(!GHOST_STATE(new_state) || datacnt == 0); + ASSERT(old_state != arc_anon || datacnt <= 1); - from_delta = to_delta = hdr->b_datacnt * hdr->b_size; + from_delta = to_delta = datacnt * hdr->b_size; /* * If this buffer is evictable, transfer it from the * old state list to the new state list. */ if (refcnt == 0) { - if (old_state != arc_anon) { + if (old_state != arc_anon && old_state != arc_l2c_only) { int use_mutex; - uint64_t *size = &old_state->arcs_lsize[hdr->b_type]; + uint64_t *size = &old_state->arcs_lsize[buftype]; get_buf_info(hdr, old_state, &list, &lock); use_mutex = !MUTEX_HELD(lock); if (use_mutex) mutex_enter(lock); - ASSERT(list_link_active(&hdr->b_arc_node)); + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT(list_link_active(&hdr->b_l1hdr.b_arc_node)); list_remove(list, hdr); /* * If prefetching out of the ghost cache, * we will have a non-zero datacnt. */ - if (GHOST_STATE(old_state) && hdr->b_datacnt == 0) { + if (GHOST_STATE(old_state) && datacnt == 0) { /* ghost elements have a ghost size */ - ASSERT(hdr->b_buf == NULL); + ASSERT(hdr->b_l1hdr.b_buf == NULL); from_delta = hdr->b_size; } ASSERT3U(*size, >=, from_delta); @@ -1434,10 +1665,17 @@ arc_change_state(arc_state_t *new_state, if (use_mutex) mutex_exit(lock); } - if (new_state != arc_anon) { + if (new_state != arc_anon && new_state != arc_l2c_only) { int use_mutex; - uint64_t *size = &new_state->arcs_lsize[hdr->b_type]; + uint64_t *size = &new_state->arcs_lsize[buftype]; + /* + * An L1 header always exists here, since if we're + * moving to some L1-cached state (i.e. not l2c_only or + * anonymous), we realloc the header to add an L1hdr + * beforehand. + */ + ASSERT(HDR_HAS_L1HDR(hdr)); get_buf_info(hdr, new_state, &list, &lock); use_mutex = !MUTEX_HELD(lock); if (use_mutex) @@ -1447,8 +1685,8 @@ arc_change_state(arc_state_t *new_state, /* ghost elements have a ghost size */ if (GHOST_STATE(new_state)) { - ASSERT(hdr->b_datacnt == 0); - ASSERT(hdr->b_buf == NULL); + ASSERT(datacnt == 0); + ASSERT(hdr->b_l1hdr.b_buf == NULL); to_delta = hdr->b_size; } atomic_add_64(size, to_delta); @@ -1462,20 +1700,22 @@ arc_change_state(arc_state_t *new_state, if (new_state == arc_anon && HDR_IN_HASH_TABLE(hdr)) buf_hash_remove(hdr); - /* adjust state sizes */ - if (to_delta) + /* adjust state sizes (ignore arc_l2c_only) */ + if (to_delta && new_state != arc_l2c_only) atomic_add_64(&new_state->arcs_size, to_delta); - if (from_delta) { + if (from_delta && old_state != arc_l2c_only) { ASSERT3U(old_state->arcs_size, >=, from_delta); atomic_add_64(&old_state->arcs_size, -from_delta); } - hdr->b_state = new_state; + if (HDR_HAS_L1HDR(hdr)) + hdr->b_l1hdr.b_state = new_state; - /* adjust l2arc hdr stats */ - if (new_state == arc_l2c_only) - l2arc_hdr_stat_add(); - else if (old_state == arc_l2c_only) - l2arc_hdr_stat_remove(); + /* + * L2 headers should never be on the L2 state list since they don't + * have L1 headers allocated. + */ + ASSERT(list_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_DATA]) && + list_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA])); } void @@ -1531,31 +1771,36 @@ arc_space_return(uint64_t space, arc_spa } arc_buf_t * -arc_buf_alloc(spa_t *spa, int size, void *tag, arc_buf_contents_t type) +arc_buf_alloc(spa_t *spa, int32_t size, void *tag, arc_buf_contents_t type) { arc_buf_hdr_t *hdr; arc_buf_t *buf; ASSERT3U(size, >, 0); - hdr = kmem_cache_alloc(hdr_cache, KM_PUSHPAGE); + hdr = kmem_cache_alloc(hdr_full_cache, KM_PUSHPAGE); ASSERT(BUF_EMPTY(hdr)); + ASSERT3P(hdr->b_freeze_cksum, ==, NULL); hdr->b_size = size; - hdr->b_type = type; hdr->b_spa = spa_load_guid(spa); - hdr->b_state = arc_anon; - hdr->b_arc_access = 0; + buf = kmem_cache_alloc(buf_cache, KM_PUSHPAGE); buf->b_hdr = hdr; buf->b_data = NULL; buf->b_efunc = NULL; buf->b_private = NULL; buf->b_next = NULL; - hdr->b_buf = buf; + + hdr->b_flags = arc_bufc_to_flags(type); + hdr->b_flags |= ARC_FLAG_HAS_L1HDR; + + hdr->b_l1hdr.b_buf = buf; + hdr->b_l1hdr.b_state = arc_anon; + hdr->b_l1hdr.b_arc_access = 0; + hdr->b_l1hdr.b_datacnt = 1; + arc_get_data_buf(buf); - hdr->b_datacnt = 1; - hdr->b_flags = 0; - ASSERT(refcount_is_zero(&hdr->b_refcnt)); - (void) refcount_add(&hdr->b_refcnt, tag); + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + (void) refcount_add(&hdr->b_l1hdr.b_refcnt, tag); return (buf); } @@ -1588,8 +1833,9 @@ arc_return_buf(arc_buf_t *buf, void *tag arc_buf_hdr_t *hdr = buf->b_hdr; ASSERT(buf->b_data != NULL); - (void) refcount_add(&hdr->b_refcnt, tag); - (void) refcount_remove(&hdr->b_refcnt, arc_onloan_tag); + ASSERT(HDR_HAS_L1HDR(hdr)); + (void) refcount_add(&hdr->b_l1hdr.b_refcnt, tag); + (void) refcount_remove(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag); atomic_add_64(&arc_loaned_bytes, -hdr->b_size); } @@ -1598,12 +1844,12 @@ arc_return_buf(arc_buf_t *buf, void *tag void arc_loan_inuse_buf(arc_buf_t *buf, void *tag) { - arc_buf_hdr_t *hdr; + arc_buf_hdr_t *hdr = buf->b_hdr; ASSERT(buf->b_data != NULL); - hdr = buf->b_hdr; - (void) refcount_add(&hdr->b_refcnt, arc_onloan_tag); - (void) refcount_remove(&hdr->b_refcnt, tag); + ASSERT(HDR_HAS_L1HDR(hdr)); + (void) refcount_add(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag); + (void) refcount_remove(&hdr->b_l1hdr.b_refcnt, tag); buf->b_efunc = NULL; buf->b_private = NULL; @@ -1617,15 +1863,16 @@ arc_buf_clone(arc_buf_t *from) arc_buf_hdr_t *hdr = from->b_hdr; uint64_t size = hdr->b_size; - ASSERT(hdr->b_state != arc_anon); + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT(hdr->b_l1hdr.b_state != arc_anon); buf = kmem_cache_alloc(buf_cache, KM_PUSHPAGE); buf->b_hdr = hdr; buf->b_data = NULL; buf->b_efunc = NULL; buf->b_private = NULL; - buf->b_next = hdr->b_buf; - hdr->b_buf = buf; + buf->b_next = hdr->b_l1hdr.b_buf; + hdr->b_l1hdr.b_buf = buf; arc_get_data_buf(buf); bcopy(from->b_data, buf->b_data, size); @@ -1635,11 +1882,11 @@ arc_buf_clone(arc_buf_t *from) * then track the size and number of duplicates. These stats will be * updated as duplicate buffers are created and destroyed. */ - if (hdr->b_type == ARC_BUFC_DATA) { + if (HDR_ISTYPE_DATA(hdr)) { ARCSTAT_BUMP(arcstat_duplicate_buffers); ARCSTAT_INCR(arcstat_duplicate_buffers_size, size); } - hdr->b_datacnt += 1; + hdr->b_l1hdr.b_datacnt += 1; return (buf); } @@ -1662,17 +1909,20 @@ arc_buf_add_ref(arc_buf_t *buf, void* ta hash_lock = HDR_LOCK(buf->b_hdr); mutex_enter(hash_lock); hdr = buf->b_hdr; + ASSERT(HDR_HAS_L1HDR(hdr)); ASSERT3P(hash_lock, ==, HDR_LOCK(hdr)); mutex_exit(&buf->b_evict_lock); - ASSERT(hdr->b_state == arc_mru || hdr->b_state == arc_mfu); + ASSERT(hdr->b_l1hdr.b_state == arc_mru || + hdr->b_l1hdr.b_state == arc_mfu); + add_reference(hdr, hash_lock, tag); DTRACE_PROBE1(arc__hit, arc_buf_hdr_t *, hdr); arc_access(hdr, hash_lock); mutex_exit(hash_lock); ARCSTAT_BUMP(arcstat_hits); - ARCSTAT_CONDSTAT(!(hdr->b_flags & ARC_FLAG_PREFETCH), - demand, prefetch, hdr->b_type != ARC_BUFC_METADATA, + ARCSTAT_CONDSTAT(!HDR_PREFETCH(hdr), + demand, prefetch, !HDR_ISTYPE_METADATA(hdr), data, metadata, hits); } @@ -1715,18 +1965,26 @@ arc_buf_data_free(arc_buf_t *buf, void ( static void arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr) { - l2arc_buf_hdr_t *l2hdr = hdr->b_l2hdr; + ASSERT(HDR_HAS_L2HDR(hdr)); + ASSERT(MUTEX_HELD(&hdr->b_l2hdr.b_dev->l2ad_mtx)); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Mon Aug 10 10:36:09 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B6049998ED6; Mon, 10 Aug 2015 10:36:09 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A640299A; Mon, 10 Aug 2015 10:36:09 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AAa94M074851; Mon, 10 Aug 2015 10:36:09 GMT (envelope-from brueffer@FreeBSD.org) Received: (from brueffer@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AAa9Ud074850; Mon, 10 Aug 2015 10:36:09 GMT (envelope-from brueffer@FreeBSD.org) Message-Id: <201508101036.t7AAa9Ud074850@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brueffer set sender to brueffer@FreeBSD.org using -f From: Christian Brueffer Date: Mon, 10 Aug 2015 10:36:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286571 - head/share/man/man4 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 10:36:09 -0000 Author: brueffer Date: Mon Aug 10 10:36:08 2015 New Revision: 286571 URL: https://svnweb.freebsd.org/changeset/base/286571 Log: Hook up iwm.4 and iwmfw.4 to the build. Modified: head/share/man/man4/Makefile Modified: head/share/man/man4/Makefile ============================================================================== --- head/share/man/man4/Makefile Mon Aug 10 10:34:23 2015 (r286570) +++ head/share/man/man4/Makefile Mon Aug 10 10:36:08 2015 (r286571) @@ -223,6 +223,8 @@ MAN= aac.4 \ ispfw.4 \ iwi.4 \ iwifw.4 \ + iwm.4 \ + iwmfw.4 \ iwn.4 \ iwnfw.4 \ ixgb.4 \ @@ -629,6 +631,7 @@ MLINKS+=ipfirewall.4 ipaccounting.4 \ MLINKS+=ipheth.4 if_ipheth.4 MLINKS+=ipw.4 if_ipw.4 MLINKS+=iwi.4 if_iwi.4 +MLINKS+=iwm.4 if_iwm.4 MLINKS+=iwn.4 if_iwn.4 MLINKS+=ixgb.4 if_ixgb.4 MLINKS+=ixgbe.4 ix.4 From owner-svn-src-head@freebsd.org Mon Aug 10 10:41:41 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6C06599E114; Mon, 10 Aug 2015 10:41:41 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5C3D6EB2; Mon, 10 Aug 2015 10:41:41 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AAffam078880; Mon, 10 Aug 2015 10:41:41 GMT (envelope-from brueffer@FreeBSD.org) Received: (from brueffer@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AAffRb078879; Mon, 10 Aug 2015 10:41:41 GMT (envelope-from brueffer@FreeBSD.org) Message-Id: <201508101041.t7AAffRb078879@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brueffer set sender to brueffer@FreeBSD.org using -f From: Christian Brueffer Date: Mon, 10 Aug 2015 10:41:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286572 - head/release/doc/en_US.ISO8859-1/hardware X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 10:41:41 -0000 Author: brueffer Date: Mon Aug 10 10:41:40 2015 New Revision: 286572 URL: https://svnweb.freebsd.org/changeset/base/286572 Log: Add iwm(4) to the hardware notes. Modified: head/release/doc/en_US.ISO8859-1/hardware/article.xml Modified: head/release/doc/en_US.ISO8859-1/hardware/article.xml ============================================================================== --- head/release/doc/en_US.ISO8859-1/hardware/article.xml Mon Aug 10 10:36:08 2015 (r286571) +++ head/release/doc/en_US.ISO8859-1/hardware/article.xml Mon Aug 10 10:41:40 2015 (r286572) @@ -997,6 +997,10 @@ 2200BG/2915ABG MiniPCI and 2225BG PCI network adapters (&man.iwi.4; driver) + [&arch.i386;, &arch.amd64;] Intel Dual Band Wireless AC + 3160/7260/7265 IEEE 802.11ac network adapters (&man.iwm.4; + driver) + [&arch.i386;, &arch.amd64;] Intel Wireless WiFi Link 4965AGN IEEE 802.11n PCI network adapters (&man.iwn.4; driver) From owner-svn-src-head@freebsd.org Mon Aug 10 10:54:36 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3E60999E3F3; Mon, 10 Aug 2015 10:54:36 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2EDAC1849; Mon, 10 Aug 2015 10:54:36 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AAsai3083218; Mon, 10 Aug 2015 10:54:36 GMT (envelope-from brueffer@FreeBSD.org) Received: (from brueffer@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AAsaAO083217; Mon, 10 Aug 2015 10:54:36 GMT (envelope-from brueffer@FreeBSD.org) Message-Id: <201508101054.t7AAsaAO083217@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brueffer set sender to brueffer@FreeBSD.org using -f From: Christian Brueffer Date: Mon, 10 Aug 2015 10:54:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286573 - head/share/man/man4 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 10:54:36 -0000 Author: brueffer Date: Mon Aug 10 10:54:35 2015 New Revision: 286573 URL: https://svnweb.freebsd.org/changeset/base/286573 Log: Xref iwm(4). Modified: head/share/man/man4/wlan.4 Modified: head/share/man/man4/wlan.4 ============================================================================== --- head/share/man/man4/wlan.4 Mon Aug 10 10:41:40 2015 (r286572) +++ head/share/man/man4/wlan.4 Mon Aug 10 10:54:35 2015 (r286573) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 16, 2015 +.Dd August 10, 2015 .Dt WLAN 4 .Os .Sh NAME @@ -177,6 +177,7 @@ may not interoperate. .Xr bwn 4 , .Xr ipw 4 , .Xr iwi 4 , +.Xr iwm 4 , .Xr iwn 4 , .Xr malo 4 , .Xr mwl 4 , From owner-svn-src-head@freebsd.org Mon Aug 10 11:00:00 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6E81799E478; Mon, 10 Aug 2015 11:00:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5D2F119E4; Mon, 10 Aug 2015 11:00:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AB0040083548; Mon, 10 Aug 2015 11:00:00 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AAxxdO083484; Mon, 10 Aug 2015 10:59:59 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508101059.t7AAxxdO083484@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 10:59:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286574 - in head/sys/cddl: compat/opensolaris/sys contrib/opensolaris/uts/common/fs/zfs contrib/opensolaris/uts/common/fs/zfs/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 11:00:00 -0000 Author: mav Date: Mon Aug 10 10:59:58 2015 New Revision: 286574 URL: https://svnweb.freebsd.org/changeset/base/286574 Log: MFV r277427: 5445 Add more visibility via arcstats; specifically arc_state_t stats and differentiate between "data" and "metadata" Reviewed by: Basil Crow Reviewed by: George Wilson Reviewed by: Matthew Ahrens Reviewed by: Bayard Bell Approved by: Robert Mustacchi Author: Prakash Surya illumos/illumos-gate@4076b1bf41cfd9f968a33ed54a7ae76d9e996fe8 Modified: head/sys/cddl/compat/opensolaris/sys/kstat.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h Modified: head/sys/cddl/compat/opensolaris/sys/kstat.h ============================================================================== --- head/sys/cddl/compat/opensolaris/sys/kstat.h Mon Aug 10 10:54:35 2015 (r286573) +++ head/sys/cddl/compat/opensolaris/sys/kstat.h Mon Aug 10 10:59:58 2015 (r286574) @@ -35,12 +35,17 @@ #define KSTAT_FLAG_VIRTUAL 0x01 +#define KSTAT_READ 0 +#define KSTAT_WRITE 1 + typedef struct kstat { void *ks_data; u_int ks_ndata; #ifdef _KERNEL struct sysctl_ctx_list ks_sysctl_ctx; struct sysctl_oid *ks_sysctl_root; + int (*ks_update)(struct kstat *, int); /* dynamic update */ + void *ks_private; /* arbitrary provider-private data */ #endif } kstat_t; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Aug 10 10:54:35 2015 (r286573) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Aug 10 10:59:58 2015 (r286574) @@ -384,9 +384,137 @@ typedef struct arc_stats { kstat_named_t arcstat_c_min; kstat_named_t arcstat_c_max; kstat_named_t arcstat_size; + /* + * Number of bytes consumed by internal ARC structures necessary + * for tracking purposes; these structures are not actually + * backed by ARC buffers. This includes arc_buf_hdr_t structures + * (allocated via arc_buf_hdr_t_full and arc_buf_hdr_t_l2only + * caches), and arc_buf_t structures (allocated via arc_buf_t + * cache). + */ kstat_named_t arcstat_hdr_size; + /* + * Number of bytes consumed by ARC buffers of type equal to + * ARC_BUFC_DATA. This is generally consumed by buffers backing + * on disk user data (e.g. plain file contents). + */ kstat_named_t arcstat_data_size; + /* + * Number of bytes consumed by ARC buffers of type equal to + * ARC_BUFC_METADATA. This is generally consumed by buffers + * backing on disk data that is used for internal ZFS + * structures (e.g. ZAP, dnode, indirect blocks, etc). + */ + kstat_named_t arcstat_metadata_size; + /* + * Number of bytes consumed by various buffers and structures + * not actually backed with ARC buffers. This includes bonus + * buffers (allocated directly via zio_buf_* functions), + * dmu_buf_impl_t structures (allocated via dmu_buf_impl_t + * cache), and dnode_t structures (allocated via dnode_t cache). + */ kstat_named_t arcstat_other_size; + /* + * Total number of bytes consumed by ARC buffers residing in the + * arc_anon state. This includes *all* buffers in the arc_anon + * state; e.g. data, metadata, evictable, and unevictable buffers + * are all included in this value. + */ + kstat_named_t arcstat_anon_size; + /* + * Number of bytes consumed by ARC buffers that meet the + * following criteria: backing buffers of type ARC_BUFC_DATA, + * residing in the arc_anon state, and are eligible for eviction + * (e.g. have no outstanding holds on the buffer). + */ + kstat_named_t arcstat_anon_evictable_data; + /* + * Number of bytes consumed by ARC buffers that meet the + * following criteria: backing buffers of type ARC_BUFC_METADATA, + * residing in the arc_anon state, and are eligible for eviction + * (e.g. have no outstanding holds on the buffer). + */ + kstat_named_t arcstat_anon_evictable_metadata; + /* + * Total number of bytes consumed by ARC buffers residing in the + * arc_mru state. This includes *all* buffers in the arc_mru + * state; e.g. data, metadata, evictable, and unevictable buffers + * are all included in this value. + */ + kstat_named_t arcstat_mru_size; + /* + * Number of bytes consumed by ARC buffers that meet the + * following criteria: backing buffers of type ARC_BUFC_DATA, + * residing in the arc_mru state, and are eligible for eviction + * (e.g. have no outstanding holds on the buffer). + */ + kstat_named_t arcstat_mru_evictable_data; + /* + * Number of bytes consumed by ARC buffers that meet the + * following criteria: backing buffers of type ARC_BUFC_METADATA, + * residing in the arc_mru state, and are eligible for eviction + * (e.g. have no outstanding holds on the buffer). + */ + kstat_named_t arcstat_mru_evictable_metadata; + /* + * Total number of bytes that *would have been* consumed by ARC + * buffers in the arc_mru_ghost state. The key thing to note + * here, is the fact that this size doesn't actually indicate + * RAM consumption. The ghost lists only consist of headers and + * don't actually have ARC buffers linked off of these headers. + * Thus, *if* the headers had associated ARC buffers, these + * buffers *would have* consumed this number of bytes. + */ + kstat_named_t arcstat_mru_ghost_size; + /* + * Number of bytes that *would have been* consumed by ARC + * buffers that are eligible for eviction, of type + * ARC_BUFC_DATA, and linked off the arc_mru_ghost state. + */ + kstat_named_t arcstat_mru_ghost_evictable_data; + /* + * Number of bytes that *would have been* consumed by ARC + * buffers that are eligible for eviction, of type + * ARC_BUFC_METADATA, and linked off the arc_mru_ghost state. + */ + kstat_named_t arcstat_mru_ghost_evictable_metadata; + /* + * Total number of bytes consumed by ARC buffers residing in the + * arc_mfu state. This includes *all* buffers in the arc_mfu + * state; e.g. data, metadata, evictable, and unevictable buffers + * are all included in this value. + */ + kstat_named_t arcstat_mfu_size; + /* + * Number of bytes consumed by ARC buffers that are eligible for + * eviction, of type ARC_BUFC_DATA, and reside in the arc_mfu + * state. + */ + kstat_named_t arcstat_mfu_evictable_data; + /* + * Number of bytes consumed by ARC buffers that are eligible for + * eviction, of type ARC_BUFC_METADATA, and reside in the + * arc_mfu state. + */ + kstat_named_t arcstat_mfu_evictable_metadata; + /* + * Total number of bytes that *would have been* consumed by ARC + * buffers in the arc_mfu_ghost state. See the comment above + * arcstat_mru_ghost_size for more details. + */ + kstat_named_t arcstat_mfu_ghost_size; + /* + * Number of bytes that *would have been* consumed by ARC + * buffers that are eligible for eviction, of type + * ARC_BUFC_DATA, and linked off the arc_mfu_ghost state. + */ + kstat_named_t arcstat_mfu_ghost_evictable_data; + /* + * Number of bytes that *would have been* consumed by ARC + * buffers that are eligible for eviction, of type + * ARC_BUFC_METADATA, and linked off the arc_mru_ghost state. + */ + kstat_named_t arcstat_mfu_ghost_evictable_metadata; kstat_named_t arcstat_l2_hits; kstat_named_t arcstat_l2_misses; kstat_named_t arcstat_l2_feeds; @@ -469,7 +597,23 @@ static arc_stats_t arc_stats = { { "size", KSTAT_DATA_UINT64 }, { "hdr_size", KSTAT_DATA_UINT64 }, { "data_size", KSTAT_DATA_UINT64 }, + { "metadata_size", KSTAT_DATA_UINT64 }, { "other_size", KSTAT_DATA_UINT64 }, + { "anon_size", KSTAT_DATA_UINT64 }, + { "anon_evictable_data", KSTAT_DATA_UINT64 }, + { "anon_evictable_metadata", KSTAT_DATA_UINT64 }, + { "mru_size", KSTAT_DATA_UINT64 }, + { "mru_evictable_data", KSTAT_DATA_UINT64 }, + { "mru_evictable_metadata", KSTAT_DATA_UINT64 }, + { "mru_ghost_size", KSTAT_DATA_UINT64 }, + { "mru_ghost_evictable_data", KSTAT_DATA_UINT64 }, + { "mru_ghost_evictable_metadata", KSTAT_DATA_UINT64 }, + { "mfu_size", KSTAT_DATA_UINT64 }, + { "mfu_evictable_data", KSTAT_DATA_UINT64 }, + { "mfu_evictable_metadata", KSTAT_DATA_UINT64 }, + { "mfu_ghost_size", KSTAT_DATA_UINT64 }, + { "mfu_ghost_evictable_data", KSTAT_DATA_UINT64 }, + { "mfu_ghost_evictable_metadata", KSTAT_DATA_UINT64 }, { "l2_hits", KSTAT_DATA_UINT64 }, { "l2_misses", KSTAT_DATA_UINT64 }, { "l2_feeds", KSTAT_DATA_UINT64 }, @@ -1727,6 +1871,9 @@ arc_space_consume(uint64_t space, arc_sp case ARC_SPACE_DATA: ARCSTAT_INCR(arcstat_data_size, space); break; + case ARC_SPACE_META: + ARCSTAT_INCR(arcstat_metadata_size, space); + break; case ARC_SPACE_OTHER: ARCSTAT_INCR(arcstat_other_size, space); break; @@ -1738,7 +1885,9 @@ arc_space_consume(uint64_t space, arc_sp break; } - ARCSTAT_INCR(arcstat_meta_used, space); + if (type != ARC_SPACE_DATA) + ARCSTAT_INCR(arcstat_meta_used, space); + atomic_add_64(&arc_size, space); } @@ -1751,6 +1900,9 @@ arc_space_return(uint64_t space, arc_spa case ARC_SPACE_DATA: ARCSTAT_INCR(arcstat_data_size, -space); break; + case ARC_SPACE_META: + ARCSTAT_INCR(arcstat_metadata_size, -space); + break; case ARC_SPACE_OTHER: ARCSTAT_INCR(arcstat_other_size, -space); break; @@ -1762,10 +1914,13 @@ arc_space_return(uint64_t space, arc_spa break; } - ASSERT(arc_meta_used >= space); - if (arc_meta_max < arc_meta_used) - arc_meta_max = arc_meta_used; - ARCSTAT_INCR(arcstat_meta_used, -space); + if (type != ARC_SPACE_DATA) { + ASSERT(arc_meta_used >= space); + if (arc_meta_max < arc_meta_used) + arc_meta_max = arc_meta_used; + ARCSTAT_INCR(arcstat_meta_used, -space); + } + ASSERT(arc_size >= space); atomic_add_64(&arc_size, -space); } @@ -2006,12 +2161,11 @@ arc_buf_destroy(arc_buf_t *buf, boolean_ if (!recycle) { if (type == ARC_BUFC_METADATA) { arc_buf_data_free(buf, zio_buf_free); - arc_space_return(size, ARC_SPACE_DATA); + arc_space_return(size, ARC_SPACE_META); } else { ASSERT(type == ARC_BUFC_DATA); arc_buf_data_free(buf, zio_data_buf_free); - ARCSTAT_INCR(arcstat_data_size, -size); - atomic_add_64(&arc_size, -size); + arc_space_return(size, ARC_SPACE_DATA); } } if (list_link_active(&buf->b_hdr->b_l1hdr.b_arc_node)) { @@ -3096,6 +3250,20 @@ arc_reclaim_thread(void *dummy __unused) } #endif + /* + * This is necessary in order for the mdb ::arc dcmd to + * show up to date information. Since the ::arc command + * does not call the kstat's update function, without + * this call, the command may show stale stats for the + * anon, mru, mru_ghost, mfu, and mfu_ghost lists. Even + * with this change, the data might be up to 1 second + * out of date; but that should suffice. The arc_state_t + * structures can be queried directly if more accurate + * information is needed. + */ + if (arc_ksp != NULL) + arc_ksp->ks_update(arc_ksp, KSTAT_READ); + /* block until needed, or one second, whichever is shorter */ CALLB_CPR_SAFE_BEGIN(&cpr); (void) cv_timedwait(&arc_reclaim_thr_cv, @@ -3233,12 +3401,11 @@ arc_get_data_buf(arc_buf_t *buf) if (!arc_evict_needed(type)) { if (type == ARC_BUFC_METADATA) { buf->b_data = zio_buf_alloc(size); - arc_space_consume(size, ARC_SPACE_DATA); + arc_space_consume(size, ARC_SPACE_META); } else { ASSERT(type == ARC_BUFC_DATA); buf->b_data = zio_data_buf_alloc(size); - ARCSTAT_INCR(arcstat_data_size, size); - atomic_add_64(&arc_size, size); + arc_space_consume(size, ARC_SPACE_DATA); } goto out; } @@ -3265,12 +3432,11 @@ arc_get_data_buf(arc_buf_t *buf) if ((buf->b_data = arc_evict(state, 0, size, TRUE, type)) == NULL) { if (type == ARC_BUFC_METADATA) { buf->b_data = zio_buf_alloc(size); - arc_space_consume(size, ARC_SPACE_DATA); + arc_space_consume(size, ARC_SPACE_META); } else { ASSERT(type == ARC_BUFC_DATA); buf->b_data = zio_data_buf_alloc(size); - ARCSTAT_INCR(arcstat_data_size, size); - atomic_add_64(&arc_size, size); + arc_space_consume(size, ARC_SPACE_DATA); } ARCSTAT_BUMP(arcstat_recycle_miss); } @@ -4431,6 +4597,48 @@ arc_memory_throttle(uint64_t reserve, ui return (0); } +static void +arc_kstat_update_state(arc_state_t *state, kstat_named_t *size, + kstat_named_t *evict_data, kstat_named_t *evict_metadata) +{ + size->value.ui64 = state->arcs_size; + evict_data->value.ui64 = state->arcs_lsize[ARC_BUFC_DATA]; + evict_metadata->value.ui64 = state->arcs_lsize[ARC_BUFC_METADATA]; +} + +static int +arc_kstat_update(kstat_t *ksp, int rw) +{ + arc_stats_t *as = ksp->ks_data; + + if (rw == KSTAT_WRITE) { + return (EACCES); + } else { + arc_kstat_update_state(arc_anon, + &as->arcstat_anon_size, + &as->arcstat_anon_evictable_data, + &as->arcstat_anon_evictable_metadata); + arc_kstat_update_state(arc_mru, + &as->arcstat_mru_size, + &as->arcstat_mru_evictable_data, + &as->arcstat_mru_evictable_metadata); + arc_kstat_update_state(arc_mru_ghost, + &as->arcstat_mru_ghost_size, + &as->arcstat_mru_ghost_evictable_data, + &as->arcstat_mru_ghost_evictable_metadata); + arc_kstat_update_state(arc_mfu, + &as->arcstat_mfu_size, + &as->arcstat_mfu_evictable_data, + &as->arcstat_mfu_evictable_metadata); + arc_kstat_update_state(arc_mfu_ghost, + &as->arcstat_mfu_ghost_size, + &as->arcstat_mfu_ghost_evictable_data, + &as->arcstat_mfu_ghost_evictable_metadata); + } + + return (0); +} + void arc_tempreserve_clear(uint64_t reserve) { @@ -4654,6 +4862,7 @@ arc_init(void) if (arc_ksp != NULL) { arc_ksp->ks_data = &arc_stats; + arc_ksp->ks_update = arc_kstat_update; kstat_install(arc_ksp); } Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h Mon Aug 10 10:54:35 2015 (r286573) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h Mon Aug 10 10:59:58 2015 (r286574) @@ -115,6 +115,7 @@ typedef enum arc_buf_contents { */ typedef enum arc_space_type { ARC_SPACE_DATA, + ARC_SPACE_META, ARC_SPACE_HDRS, ARC_SPACE_L2HDRS, ARC_SPACE_OTHER, From owner-svn-src-head@freebsd.org Mon Aug 10 11:30:10 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1DADF99EC52; Mon, 10 Aug 2015 11:30:10 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0C6DEDB7; Mon, 10 Aug 2015 11:30:10 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ABUAn5095592; Mon, 10 Aug 2015 11:30:10 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ABU7T0095580; Mon, 10 Aug 2015 11:30:07 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508101130.t7ABU7T0095580@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 11:30:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286575 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 11:30:10 -0000 Author: mav Date: Mon Aug 10 11:30:07 2015 New Revision: 286575 URL: https://svnweb.freebsd.org/changeset/base/286575 Log: MFV r277428: 5056 ZFS deadlock on db_mtx and dn_holds Reviewed by: Will Andrews Reviewed by: Matt Ahrens Reviewed by: George Wilson Approved by: Dan McDonald Author: Justin Gibbs illumos/illumos-gate@bc9014e6a81272073b9854d9f65dd59e18d18c35 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa_impl.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_leaf.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_sa.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Mon Aug 10 10:59:58 2015 (r286574) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Mon Aug 10 11:30:07 2015 (r286575) @@ -24,6 +24,7 @@ * Copyright (c) 2012, 2015 by Delphix. All rights reserved. * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. */ #include @@ -54,10 +55,16 @@ static void dbuf_destroy(dmu_buf_impl_t static boolean_t dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_t *tx); static void dbuf_write(dbuf_dirty_record_t *dr, arc_buf_t *data, dmu_tx_t *tx); +#ifndef __lint +extern inline void dmu_buf_init_user(dmu_buf_user_t *dbu, + dmu_buf_evict_func_t *evict_func, dmu_buf_t **clear_on_evict_dbufp); +#endif /* ! __lint */ + /* * Global data structures and functions for the dbuf cache. */ static kmem_cache_t *dbuf_cache; +static taskq_t *dbu_evict_taskq; /* ARGSUSED */ static int @@ -231,17 +238,72 @@ dbuf_hash_remove(dmu_buf_impl_t *db) static arc_evict_func_t dbuf_do_evict; +typedef enum { + DBVU_EVICTING, + DBVU_NOT_EVICTING +} dbvu_verify_type_t; + +static void +dbuf_verify_user(dmu_buf_impl_t *db, dbvu_verify_type_t verify_type) +{ +#ifdef ZFS_DEBUG + int64_t holds; + + if (db->db_user == NULL) + return; + + /* Only data blocks support the attachment of user data. */ + ASSERT(db->db_level == 0); + + /* Clients must resolve a dbuf before attaching user data. */ + ASSERT(db->db.db_data != NULL); + ASSERT3U(db->db_state, ==, DB_CACHED); + + holds = refcount_count(&db->db_holds); + if (verify_type == DBVU_EVICTING) { + /* + * Immediate eviction occurs when holds == dirtycnt. + * For normal eviction buffers, holds is zero on + * eviction, except when dbuf_fix_old_data() calls + * dbuf_clear_data(). However, the hold count can grow + * during eviction even though db_mtx is held (see + * dmu_bonus_hold() for an example), so we can only + * test the generic invariant that holds >= dirtycnt. + */ + ASSERT3U(holds, >=, db->db_dirtycnt); + } else { + if (db->db_immediate_evict == TRUE) + ASSERT3U(holds, >=, db->db_dirtycnt); + else + ASSERT3U(holds, >, 0); + } +#endif +} + static void dbuf_evict_user(dmu_buf_impl_t *db) { + dmu_buf_user_t *dbu = db->db_user; + ASSERT(MUTEX_HELD(&db->db_mtx)); - if (db->db_level != 0 || db->db_evict_func == NULL) + if (dbu == NULL) return; - db->db_evict_func(&db->db, db->db_user_ptr); - db->db_user_ptr = NULL; - db->db_evict_func = NULL; + dbuf_verify_user(db, DBVU_EVICTING); + db->db_user = NULL; + +#ifdef ZFS_DEBUG + if (dbu->dbu_clear_on_evict_dbufp != NULL) + *dbu->dbu_clear_on_evict_dbufp = NULL; +#endif + + /* + * Invoke the callback from a taskq to avoid lock order reversals + * and limit stack depth. + */ + taskq_dispatch_ent(dbu_evict_taskq, dbu->dbu_evict_func, dbu, 0, + &dbu->dbu_tqent); } boolean_t @@ -302,6 +364,12 @@ retry: for (i = 0; i < DBUF_MUTEXES; i++) mutex_init(&h->hash_mutexes[i], NULL, MUTEX_DEFAULT, NULL); + + /* + * All entries are queued via taskq_dispatch_ent(), so min/maxalloc + * configuration is not required. + */ + dbu_evict_taskq = taskq_create("dbu_evict", 1, minclsyspri, 0, 0, 0); } void @@ -314,6 +382,7 @@ dbuf_fini(void) mutex_destroy(&h->hash_mutexes[i]); kmem_free(h->hash_table, (h->hash_table_mask + 1) * sizeof (void *)); kmem_cache_destroy(dbuf_cache); + taskq_destroy(dbu_evict_taskq); } /* @@ -431,21 +500,27 @@ dbuf_verify(dmu_buf_impl_t *db) #endif static void +dbuf_clear_data(dmu_buf_impl_t *db) +{ + ASSERT(MUTEX_HELD(&db->db_mtx)); + dbuf_evict_user(db); + db->db_buf = NULL; + db->db.db_data = NULL; + if (db->db_state != DB_NOFILL) + db->db_state = DB_UNCACHED; +} + +static void dbuf_set_data(dmu_buf_impl_t *db, arc_buf_t *buf) { ASSERT(MUTEX_HELD(&db->db_mtx)); + ASSERT(buf != NULL); + db->db_buf = buf; - if (buf != NULL) { - ASSERT(buf->b_data != NULL); - db->db.db_data = buf->b_data; - if (!arc_released(buf)) - arc_set_callback(buf, dbuf_do_evict, db); - } else { - dbuf_evict_user(db); - db->db.db_data = NULL; - if (db->db_state != DB_NOFILL) - db->db_state = DB_UNCACHED; - } + ASSERT(buf->b_data != NULL); + db->db.db_data = buf->b_data; + if (!arc_released(buf)) + arc_set_callback(buf, dbuf_do_evict, db); } /* @@ -467,7 +542,7 @@ dbuf_loan_arcbuf(dmu_buf_impl_t *db) } else { abuf = db->db_buf; arc_loan_inuse_buf(abuf, db); - dbuf_set_data(db, NULL); + dbuf_clear_data(db); mutex_exit(&db->db_mtx); } return (abuf); @@ -703,7 +778,7 @@ dbuf_noread(dmu_buf_impl_t *db) dbuf_set_data(db, arc_buf_alloc(spa, db->db.db_size, db, type)); db->db_state = DB_FILL; } else if (db->db_state == DB_NOFILL) { - dbuf_set_data(db, NULL); + dbuf_clear_data(db); } else { ASSERT3U(db->db_state, ==, DB_CACHED); } @@ -759,7 +834,7 @@ dbuf_fix_old_data(dmu_buf_impl_t *db, ui dr->dt.dl.dr_data = arc_buf_alloc(spa, size, db, type); bcopy(db->db.db_data, dr->dt.dl.dr_data->b_data, size); } else { - dbuf_set_data(db, NULL); + dbuf_clear_data(db); } } @@ -810,7 +885,8 @@ void dbuf_free_range(dnode_t *dn, uint64_t start_blkid, uint64_t end_blkid, dmu_tx_t *tx) { - dmu_buf_impl_t *db, *db_next, db_search; + dmu_buf_impl_t db_search; + dmu_buf_impl_t *db, *db_next; uint64_t txg = tx->tx_txg; avl_index_t where; @@ -1388,7 +1464,7 @@ dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_ arc_buf_t *buf = db->db_buf; ASSERT(db->db_state == DB_NOFILL || arc_released(buf)); - dbuf_set_data(db, NULL); + dbuf_clear_data(db); VERIFY(arc_buf_remove_ref(buf, db)); dbuf_evict(db); return (B_TRUE); @@ -1728,8 +1804,7 @@ dbuf_create(dnode_t *dn, uint8_t level, db->db_parent = parent; db->db_blkptr = blkptr; - db->db_user_ptr = NULL; - db->db_evict_func = NULL; + db->db_user = NULL; db->db_immediate_evict = 0; db->db_freed_in_flight = 0; @@ -2195,7 +2270,7 @@ dbuf_rele_and_unlock(dmu_buf_impl_t *db, /* * This dbuf has anonymous data associated with it. */ - dbuf_set_data(db, NULL); + dbuf_clear_data(db); VERIFY(arc_buf_remove_ref(buf, db)); dbuf_evict(db); } else { @@ -2228,7 +2303,8 @@ dbuf_rele_and_unlock(dmu_buf_impl_t *db, } else { dbuf_clear(db); } - } else if (arc_buf_eviction_needed(db->db_buf)) { + } else if (db->db_objset->os_evicting || + arc_buf_eviction_needed(db->db_buf)) { dbuf_clear(db); } else { mutex_exit(&db->db_mtx); @@ -2247,51 +2323,57 @@ dbuf_refcount(dmu_buf_impl_t *db) } void * -dmu_buf_set_user(dmu_buf_t *db_fake, void *user_ptr, - dmu_buf_evict_func_t *evict_func) +dmu_buf_replace_user(dmu_buf_t *db_fake, dmu_buf_user_t *old_user, + dmu_buf_user_t *new_user) { - return (dmu_buf_update_user(db_fake, NULL, user_ptr, evict_func)); + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + + mutex_enter(&db->db_mtx); + dbuf_verify_user(db, DBVU_NOT_EVICTING); + if (db->db_user == old_user) + db->db_user = new_user; + else + old_user = db->db_user; + dbuf_verify_user(db, DBVU_NOT_EVICTING); + mutex_exit(&db->db_mtx); + + return (old_user); } void * -dmu_buf_set_user_ie(dmu_buf_t *db_fake, void *user_ptr, - dmu_buf_evict_func_t *evict_func) +dmu_buf_set_user(dmu_buf_t *db_fake, dmu_buf_user_t *user) { - dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; - - db->db_immediate_evict = TRUE; - return (dmu_buf_update_user(db_fake, NULL, user_ptr, evict_func)); + return (dmu_buf_replace_user(db_fake, NULL, user)); } void * -dmu_buf_update_user(dmu_buf_t *db_fake, void *old_user_ptr, void *user_ptr, - dmu_buf_evict_func_t *evict_func) +dmu_buf_set_user_ie(dmu_buf_t *db_fake, dmu_buf_user_t *user) { dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; - ASSERT(db->db_level == 0); - - ASSERT((user_ptr == NULL) == (evict_func == NULL)); - - mutex_enter(&db->db_mtx); - if (db->db_user_ptr == old_user_ptr) { - db->db_user_ptr = user_ptr; - db->db_evict_func = evict_func; - } else { - old_user_ptr = db->db_user_ptr; - } + db->db_immediate_evict = TRUE; + return (dmu_buf_set_user(db_fake, user)); +} - mutex_exit(&db->db_mtx); - return (old_user_ptr); +void * +dmu_buf_remove_user(dmu_buf_t *db_fake, dmu_buf_user_t *user) +{ + return (dmu_buf_replace_user(db_fake, user, NULL)); } void * dmu_buf_get_user(dmu_buf_t *db_fake) { dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; - ASSERT(!refcount_is_zero(&db->db_holds)); - return (db->db_user_ptr); + dbuf_verify_user(db, DBVU_NOT_EVICTING); + return (db->db_user); +} + +void +dmu_buf_user_evict_wait() +{ + taskq_wait(dbu_evict_taskq); } boolean_t Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Mon Aug 10 10:59:58 2015 (r286574) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Mon Aug 10 11:30:07 2015 (r286575) @@ -23,6 +23,7 @@ * Copyright (c) 2012, 2014 by Delphix. All rights reserved. * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. * Copyright 2015 Nexenta Systems, Inc. All rights reserved. */ @@ -357,7 +358,7 @@ dmu_objset_open_impl(spa_t *spa, dsl_dat zfs_prop_to_name(ZFS_PROP_SECONDARYCACHE), secondary_cache_changed_cb, os); } - if (!dsl_dataset_is_snapshot(ds)) { + if (!ds->ds_is_snapshot) { if (err == 0) { err = dsl_prop_register(ds, zfs_prop_to_name(ZFS_PROP_CHECKSUM), @@ -419,7 +420,7 @@ dmu_objset_open_impl(spa_t *spa, dsl_dat os->os_secondary_cache = ZFS_CACHE_ALL; } - if (ds == NULL || !dsl_dataset_is_snapshot(ds)) + if (ds == NULL || !ds->ds_is_snapshot) os->os_zil_header = os->os_phys->os_zil_header; os->os_zil = zil_alloc(os, &os->os_zil_header); @@ -438,16 +439,13 @@ dmu_objset_open_impl(spa_t *spa, dsl_dat mutex_init(&os->os_obj_lock, NULL, MUTEX_DEFAULT, NULL); mutex_init(&os->os_user_ptr_lock, NULL, MUTEX_DEFAULT, NULL); - DMU_META_DNODE(os) = dnode_special_open(os, - &os->os_phys->os_meta_dnode, DMU_META_DNODE_OBJECT, - &os->os_meta_dnode); + dnode_special_open(os, &os->os_phys->os_meta_dnode, + DMU_META_DNODE_OBJECT, &os->os_meta_dnode); if (arc_buf_size(os->os_phys_buf) >= sizeof (objset_phys_t)) { - DMU_USERUSED_DNODE(os) = dnode_special_open(os, - &os->os_phys->os_userused_dnode, DMU_USERUSED_OBJECT, - &os->os_userused_dnode); - DMU_GROUPUSED_DNODE(os) = dnode_special_open(os, - &os->os_phys->os_groupused_dnode, DMU_GROUPUSED_OBJECT, - &os->os_groupused_dnode); + dnode_special_open(os, &os->os_phys->os_userused_dnode, + DMU_USERUSED_OBJECT, &os->os_userused_dnode); + dnode_special_open(os, &os->os_phys->os_groupused_dnode, + DMU_GROUPUSED_OBJECT, &os->os_groupused_dnode); } *osp = os; @@ -535,7 +533,7 @@ dmu_objset_own(const char *name, dmu_obj } else if (type != DMU_OST_ANY && type != (*osp)->os_phys->os_type) { dsl_dataset_disown(ds, tag); return (SET_ERROR(EINVAL)); - } else if (!readonly && dsl_dataset_is_snapshot(ds)) { + } else if (!readonly && ds->ds_is_snapshot) { dsl_dataset_disown(ds, tag); return (SET_ERROR(EROFS)); } @@ -591,41 +589,53 @@ dmu_objset_disown(objset_t *os, void *ta void dmu_objset_evict_dbufs(objset_t *os) { + dnode_t dn_marker; dnode_t *dn; mutex_enter(&os->os_lock); - - /* process the mdn last, since the other dnodes have holds on it */ - list_remove(&os->os_dnodes, DMU_META_DNODE(os)); - list_insert_tail(&os->os_dnodes, DMU_META_DNODE(os)); - - /* - * Find the first dnode with holds. We have to do this dance - * because dnode_add_ref() only works if you already have a - * hold. If there are no holds then it has no dbufs so OK to - * skip. - */ - for (dn = list_head(&os->os_dnodes); - dn && !dnode_add_ref(dn, FTAG); - dn = list_next(&os->os_dnodes, dn)) - continue; - - while (dn) { - dnode_t *next_dn = dn; - - do { - next_dn = list_next(&os->os_dnodes, next_dn); - } while (next_dn && !dnode_add_ref(next_dn, FTAG)); - - mutex_exit(&os->os_lock); - dnode_evict_dbufs(dn); - dnode_rele(dn, FTAG); - mutex_enter(&os->os_lock); - dn = next_dn; + dn = list_head(&os->os_dnodes); + while (dn != NULL) { + /* + * Skip dnodes without holds. We have to do this dance + * because dnode_add_ref() only works if there is already a + * hold. If the dnode has no holds, then it has no dbufs. + */ + if (dnode_add_ref(dn, FTAG)) { + list_insert_after(&os->os_dnodes, dn, &dn_marker); + mutex_exit(&os->os_lock); + + dnode_evict_dbufs(dn); + dnode_rele(dn, FTAG); + + mutex_enter(&os->os_lock); + dn = list_next(&os->os_dnodes, &dn_marker); + list_remove(&os->os_dnodes, &dn_marker); + } else { + dn = list_next(&os->os_dnodes, dn); + } } mutex_exit(&os->os_lock); + + if (DMU_USERUSED_DNODE(os) != NULL) { + dnode_evict_dbufs(DMU_GROUPUSED_DNODE(os)); + dnode_evict_dbufs(DMU_USERUSED_DNODE(os)); + } + dnode_evict_dbufs(DMU_META_DNODE(os)); } +/* + * Objset eviction processing is split into into two pieces. + * The first marks the objset as evicting, evicts any dbufs that + * have a refcount of zero, and then queues up the objset for the + * second phase of eviction. Once os->os_dnodes has been cleared by + * dnode_buf_pageout()->dnode_destroy(), the second phase is executed. + * The second phase closes the special dnodes, dequeues the objset from + * the list of those undergoing eviction, and finally frees the objset. + * + * NOTE: Due to asynchronous eviction processing (invocation of + * dnode_buf_pageout()), it is possible for the meta dnode for the + * objset to have no holds even though os->os_dnodes is not empty. + */ void dmu_objset_evict(objset_t *os) { @@ -635,7 +645,7 @@ dmu_objset_evict(objset_t *os) ASSERT(!dmu_objset_is_dirty(os, t)); if (ds) { - if (!dsl_dataset_is_snapshot(ds)) { + if (!ds->ds_is_snapshot) { VERIFY0(dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_CHECKSUM), checksum_changed_cb, os)); @@ -672,8 +682,24 @@ dmu_objset_evict(objset_t *os) if (os->os_sa) sa_tear_down(os); + os->os_evicting = B_TRUE; dmu_objset_evict_dbufs(os); + mutex_enter(&os->os_lock); + spa_evicting_os_register(os->os_spa, os); + if (list_is_empty(&os->os_dnodes)) { + mutex_exit(&os->os_lock); + dmu_objset_evict_done(os); + } else { + mutex_exit(&os->os_lock); + } +} + +void +dmu_objset_evict_done(objset_t *os) +{ + ASSERT3P(list_head(&os->os_dnodes), ==, NULL); + dnode_special_close(&os->os_meta_dnode); if (DMU_USERUSED_DNODE(os)) { dnode_special_close(&os->os_userused_dnode); @@ -681,8 +707,6 @@ dmu_objset_evict(objset_t *os) } zil_free(os->os_zil); - ASSERT3P(list_head(&os->os_dnodes), ==, NULL); - VERIFY(arc_buf_remove_ref(os->os_phys_buf, &os->os_phys_buf)); /* @@ -697,6 +721,7 @@ dmu_objset_evict(objset_t *os) mutex_destroy(&os->os_lock); mutex_destroy(&os->os_obj_lock); mutex_destroy(&os->os_user_ptr_lock); + spa_evicting_os_deregister(os->os_spa, os); kmem_free(os, sizeof (objset_t)); } @@ -895,7 +920,7 @@ dmu_objset_clone_check(void *arg, dmu_tx return (error); /* You can only clone snapshots, not the head datasets. */ - if (!dsl_dataset_is_snapshot(origin)) { + if (!origin->ds_is_snapshot) { dsl_dataset_rele(origin, FTAG); return (SET_ERROR(EINVAL)); } @@ -1459,7 +1484,7 @@ int dmu_objset_is_snapshot(objset_t *os) { if (os->os_dsl_dataset != NULL) - return (dsl_dataset_is_snapshot(os->os_dsl_dataset)); + return (os->os_dsl_dataset->ds_is_snapshot); else return (B_FALSE); } Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Mon Aug 10 10:59:58 2015 (r286574) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Mon Aug 10 11:30:07 2015 (r286575) @@ -636,7 +636,7 @@ dmu_send_impl(void *tag, dsl_pool_t *dp, fromtxg = fromzb->zbm_creation_txg; } dsl_dataset_name(ds, drr->drr_u.drr_begin.drr_toname); - if (!dsl_dataset_is_snapshot(ds)) { + if (!ds->ds_is_snapshot) { (void) strlcat(drr->drr_u.drr_begin.drr_toname, "@--head--", sizeof (drr->drr_u.drr_begin.drr_toname)); } @@ -852,11 +852,11 @@ dmu_send_estimate(dsl_dataset_t *ds, dsl ASSERT(dsl_pool_config_held(dp)); /* tosnap must be a snapshot */ - if (!dsl_dataset_is_snapshot(ds)) + if (!ds->ds_is_snapshot) return (SET_ERROR(EINVAL)); /* fromsnap, if provided, must be a snapshot */ - if (fromds != NULL && !dsl_dataset_is_snapshot(fromds)) + if (fromds != NULL && !fromds->ds_is_snapshot) return (SET_ERROR(EINVAL)); /* @@ -1105,7 +1105,7 @@ dmu_recv_begin_check(void *arg, dmu_tx_t dsl_dataset_rele(ds, FTAG); return (error); } - if (!dsl_dataset_is_snapshot(origin)) { + if (!origin->ds_is_snapshot) { dsl_dataset_rele(origin, FTAG); dsl_dataset_rele(ds, FTAG); return (SET_ERROR(EINVAL)); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c Mon Aug 10 10:59:58 2015 (r286574) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c Mon Aug 10 11:30:07 2015 (r286575) @@ -534,7 +534,7 @@ traverse_impl(spa_t *spa, dsl_dataset_t cv_init(&pd.pd_cv, NULL, CV_DEFAULT, NULL); /* See comment on ZIL traversal in dsl_scan_visitds. */ - if (ds != NULL && !dsl_dataset_is_snapshot(ds) && !BP_IS_HOLE(rootbp)) { + if (ds != NULL && !ds->ds_is_snapshot && !BP_IS_HOLE(rootbp)) { arc_flags_t flags = ARC_FLAG_WAIT; objset_phys_t *osp; arc_buf_t *buf; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c Mon Aug 10 10:59:58 2015 (r286574) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c Mon Aug 10 11:30:07 2015 (r286575) @@ -21,6 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. */ #include @@ -405,8 +406,9 @@ static dnode_t * dnode_create(objset_t *os, dnode_phys_t *dnp, dmu_buf_impl_t *db, uint64_t object, dnode_handle_t *dnh) { - dnode_t *dn = kmem_cache_alloc(dnode_cache, KM_SLEEP); + dnode_t *dn; + dn = kmem_cache_alloc(dnode_cache, KM_SLEEP); ASSERT(!POINTER_IS_VALID(dn->dn_objset)); dn->dn_moved = 0; @@ -443,13 +445,31 @@ dnode_create(objset_t *os, dnode_phys_t ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); mutex_enter(&os->os_lock); - list_insert_head(&os->os_dnodes, dn); + if (dnh->dnh_dnode != NULL) { + /* Lost the allocation race. */ + mutex_exit(&os->os_lock); + kmem_cache_free(dnode_cache, dn); + return (dnh->dnh_dnode); + } + + /* + * Exclude special dnodes from os_dnodes so an empty os_dnodes + * signifies that the special dnodes have no references from + * their children (the entries in os_dnodes). This allows + * dnode_destroy() to easily determine if the last child has + * been removed and then complete eviction of the objset. + */ + if (!DMU_OBJECT_IS_SPECIAL(object)) + list_insert_head(&os->os_dnodes, dn); membar_producer(); + /* - * Everything else must be valid before assigning dn_objset makes the - * dnode eligible for dnode_move(). + * Everything else must be valid before assigning dn_objset + * makes the dnode eligible for dnode_move(). */ dn->dn_objset = os; + + dnh->dnh_dnode = dn; mutex_exit(&os->os_lock); arc_space_consume(sizeof (dnode_t), ARC_SPACE_OTHER); @@ -463,12 +483,18 @@ static void dnode_destroy(dnode_t *dn) { objset_t *os = dn->dn_objset; + boolean_t complete_os_eviction = B_FALSE; ASSERT((dn->dn_id_flags & DN_ID_NEW_EXIST) == 0); mutex_enter(&os->os_lock); POINTER_INVALIDATE(&dn->dn_objset); - list_remove(&os->os_dnodes, dn); + if (!DMU_OBJECT_IS_SPECIAL(dn->dn_object)) { + list_remove(&os->os_dnodes, dn); + complete_os_eviction = + list_is_empty(&os->os_dnodes) && + list_link_active(&os->os_evicting_node); + } mutex_exit(&os->os_lock); /* the dnode can no longer move, so we can release the handle */ @@ -503,6 +529,9 @@ dnode_destroy(dnode_t *dn) dmu_zfetch_rele(&dn->dn_zfetch); kmem_cache_free(dnode_cache, dn); arc_space_return(sizeof (dnode_t), ARC_SPACE_OTHER); + + if (complete_os_eviction) + dmu_objset_evict_done(os); } void @@ -971,33 +1000,32 @@ dnode_special_close(dnode_handle_t *dnh) */ while (refcount_count(&dn->dn_holds) > 0) delay(1); + ASSERT(dn->dn_dbuf == NULL || + dmu_buf_get_user(&dn->dn_dbuf->db) == NULL); zrl_add(&dnh->dnh_zrlock); dnode_destroy(dn); /* implicit zrl_remove() */ zrl_destroy(&dnh->dnh_zrlock); dnh->dnh_dnode = NULL; } -dnode_t * +void dnode_special_open(objset_t *os, dnode_phys_t *dnp, uint64_t object, dnode_handle_t *dnh) { - dnode_t *dn = dnode_create(os, dnp, NULL, object, dnh); - dnh->dnh_dnode = dn; + dnode_t *dn; + + dn = dnode_create(os, dnp, NULL, object, dnh); zrl_init(&dnh->dnh_zrlock); DNODE_VERIFY(dn); - return (dn); } static void -dnode_buf_pageout(dmu_buf_t *db, void *arg) +dnode_buf_pageout(void *dbu) { - dnode_children_t *children_dnodes = arg; + dnode_children_t *children_dnodes = dbu; int i; - int epb = db->db_size >> DNODE_SHIFT; - ASSERT(epb == children_dnodes->dnc_count); - - for (i = 0; i < epb; i++) { + for (i = 0; i < children_dnodes->dnc_count; i++) { dnode_handle_t *dnh = &children_dnodes->dnc_children[i]; dnode_t *dn; @@ -1027,7 +1055,7 @@ dnode_buf_pageout(dmu_buf_t *db, void *a dnh->dnh_dnode = NULL; } kmem_free(children_dnodes, sizeof (dnode_children_t) + - epb * sizeof (dnode_handle_t)); + children_dnodes->dnc_count * sizeof (dnode_handle_t)); } /* @@ -1117,10 +1145,11 @@ dnode_hold_impl(objset_t *os, uint64_t o dnh = &children_dnodes->dnc_children[0]; for (i = 0; i < epb; i++) { zrl_init(&dnh[i].dnh_zrlock); - dnh[i].dnh_dnode = NULL; } - if (winner = dmu_buf_set_user(&db->db, children_dnodes, - dnode_buf_pageout)) { + dmu_buf_init_user(&children_dnodes->dnc_dbu, + dnode_buf_pageout, NULL); + winner = dmu_buf_set_user(&db->db, &children_dnodes->dnc_dbu); + if (winner != NULL) { for (i = 0; i < epb; i++) { zrl_destroy(&dnh[i].dnh_zrlock); @@ -1135,17 +1164,11 @@ dnode_hold_impl(objset_t *os, uint64_t o dnh = &children_dnodes->dnc_children[idx]; zrl_add(&dnh->dnh_zrlock); - if ((dn = dnh->dnh_dnode) == NULL) { + dn = dnh->dnh_dnode; + if (dn == NULL) { dnode_phys_t *phys = (dnode_phys_t *)db->db.db_data+idx; - dnode_t *winner; dn = dnode_create(os, phys, db, object, dnh); - winner = atomic_cas_ptr(&dnh->dnh_dnode, NULL, dn); - if (winner != NULL) { - zrl_add(&dnh->dnh_zrlock); - dnode_destroy(dn); /* implicit zrl_remove() */ - dn = winner; - } } mutex_enter(&dn->dn_mtx); @@ -1159,10 +1182,10 @@ dnode_hold_impl(objset_t *os, uint64_t o dbuf_rele(db, FTAG); return (type == DMU_OT_NONE ? ENOENT : EEXIST); } - mutex_exit(&dn->dn_mtx); - if (refcount_add(&dn->dn_holds, tag) == 1) dbuf_add_ref(db, dnh); + mutex_exit(&dn->dn_mtx); + /* Now we can rely on the hold to prevent the dnode from moving. */ zrl_remove(&dnh->dnh_zrlock); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c Mon Aug 10 10:59:58 2015 (r286574) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c Mon Aug 10 11:30:07 2015 (r286575) @@ -22,6 +22,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. */ #include @@ -397,49 +398,37 @@ dnode_sync_free_range(void *arg, uint64_ void dnode_evict_dbufs(dnode_t *dn) { - int progress; - int pass = 0; + dmu_buf_impl_t db_marker; + dmu_buf_impl_t *db, *db_next; + + mutex_enter(&dn->dn_dbufs_mtx); + for (db = avl_first(&dn->dn_dbufs); db != NULL; db = db_next) { - do { - dmu_buf_impl_t *db, *db_next; - int evicting = FALSE; - - progress = FALSE; - mutex_enter(&dn->dn_dbufs_mtx); - for (db = avl_first(&dn->dn_dbufs); db != NULL; db = db_next) { - db_next = AVL_NEXT(&dn->dn_dbufs, db); #ifdef DEBUG - DB_DNODE_ENTER(db); - ASSERT3P(DB_DNODE(db), ==, dn); - DB_DNODE_EXIT(db); + DB_DNODE_ENTER(db); + ASSERT3P(DB_DNODE(db), ==, dn); + DB_DNODE_EXIT(db); #endif /* DEBUG */ - mutex_enter(&db->db_mtx); - if (db->db_state == DB_EVICTING) { - progress = TRUE; - evicting = TRUE; - mutex_exit(&db->db_mtx); - } else if (refcount_is_zero(&db->db_holds)) { - progress = TRUE; - dbuf_clear(db); /* exits db_mtx for us */ - } else { - mutex_exit(&db->db_mtx); - } + mutex_enter(&db->db_mtx); + if (db->db_state != DB_EVICTING && + refcount_is_zero(&db->db_holds)) { + db_marker.db_level = db->db_level; + db_marker.db_blkid = db->db_blkid; + db_marker.db_state = DB_SEARCH; + avl_insert_here(&dn->dn_dbufs, &db_marker, db, + AVL_BEFORE); + + dbuf_clear(db); + db_next = AVL_NEXT(&dn->dn_dbufs, &db_marker); + avl_remove(&dn->dn_dbufs, &db_marker); + } else { + mutex_exit(&db->db_mtx); + db_next = AVL_NEXT(&dn->dn_dbufs, db); } - /* - * NB: we need to drop dn_dbufs_mtx between passes so - * that any DB_EVICTING dbufs can make progress. - * Ideally, we would have some cv we could wait on, but - * since we don't, just wait a bit to give the other - * thread a chance to run. - */ - mutex_exit(&dn->dn_dbufs_mtx); - if (evicting) - delay(1); - pass++; - ASSERT(pass < 100); /* sanity check */ - } while (progress); + } + mutex_exit(&dn->dn_dbufs_mtx); dnode_evict_bonus(dn); } @@ -504,7 +493,6 @@ dnode_sync_free(dnode_t *dn, dmu_tx_t *t dnode_undirty_dbufs(&dn->dn_dirty_records[txgoff]); dnode_evict_dbufs(dn); ASSERT(avl_is_empty(&dn->dn_dbufs)); - ASSERT3P(dn->dn_bonus, ==, NULL); /* * XXX - It would be nice to assert this, but we may still Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c Mon Aug 10 10:59:58 2015 (r286574) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c Mon Aug 10 11:30:07 2015 (r286575) @@ -120,7 +120,7 @@ dsl_bookmark_create_check_impl(dsl_datas int error; zfs_bookmark_phys_t bmark_phys; - if (!dsl_dataset_is_snapshot(snapds)) + if (!snapds->ds_is_snapshot) return (SET_ERROR(EINVAL)); error = dsl_bookmark_hold_ds(dp, bookmark_name, Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Mon Aug 10 10:59:58 2015 (r286574) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Mon Aug 10 11:30:07 2015 (r286575) @@ -24,6 +24,7 @@ * Copyright (c) 2011, 2014 by Delphix. All rights reserved. * Copyright (c) 2014, Joyent, Inc. All rights reserved. * Copyright (c) 2014 RackTop Systems. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. */ #include @@ -77,7 +78,6 @@ SYSCTL_INT(_vfs_zfs, OID_AUTO, max_recor #define DS_REF_MAX (1ULL << 62) extern inline dsl_dataset_phys_t *dsl_dataset_phys(dsl_dataset_t *ds); -extern inline boolean_t dsl_dataset_is_snapshot(dsl_dataset_t *ds); /* * Figure out how much of this delta should be propogated to the dsl_dir @@ -161,7 +161,7 @@ dsl_dataset_block_kill(dsl_dataset_t *ds } ASSERT3P(tx->tx_pool, ==, ds->ds_dir->dd_pool); - ASSERT(!dsl_dataset_is_snapshot(ds)); + ASSERT(!ds->ds_is_snapshot); dmu_buf_will_dirty(ds->ds_dbuf, tx); if (bp->blk_birth > dsl_dataset_phys(ds)->ds_prev_snap_txg) { @@ -259,14 +259,15 @@ dsl_dataset_block_freeable(dsl_dataset_t return (B_TRUE); } -/* ARGSUSED */ static void -dsl_dataset_evict(dmu_buf_t *db, void *dsv) +dsl_dataset_evict(void *dbu) { - dsl_dataset_t *ds = dsv; + dsl_dataset_t *ds = dbu; ASSERT(ds->ds_owner == NULL); + ds->ds_dbuf = NULL; + unique_remove(ds->ds_fsid_guid); if (ds->ds_objset != NULL) @@ -278,10 +279,10 @@ dsl_dataset_evict(dmu_buf_t *db, void *d } bplist_destroy(&ds->ds_pending_deadlist); - if (dsl_dataset_phys(ds)->ds_deadlist_obj != 0) + if (ds->ds_deadlist.dl_os != NULL) dsl_deadlist_close(&ds->ds_deadlist); if (ds->ds_dir) - dsl_dir_rele(ds->ds_dir, ds); + dsl_dir_async_rele(ds->ds_dir, ds); ASSERT(!list_link_active(&ds->ds_synced_link)); @@ -417,6 +418,7 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin ds = kmem_zalloc(sizeof (dsl_dataset_t), KM_SLEEP); ds->ds_dbuf = dbuf; ds->ds_object = dsobj; + ds->ds_is_snapshot = dsl_dataset_phys(ds)->ds_num_children != 0; mutex_init(&ds->ds_lock, NULL, MUTEX_DEFAULT, NULL); mutex_init(&ds->ds_opening_lock, NULL, MUTEX_DEFAULT, NULL); @@ -456,7 +458,7 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin return (err); } - if (!dsl_dataset_is_snapshot(ds)) { + if (!ds->ds_is_snapshot) { ds->ds_snapname[0] = '\0'; if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { err = dsl_dataset_hold_obj(dp, @@ -483,7 +485,7 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin } } - if (err == 0 && !dsl_dataset_is_snapshot(ds)) { + if (err == 0 && !ds->ds_is_snapshot) { err = dsl_prop_get_int_ds(ds, zfs_prop_to_name(ZFS_PROP_REFRESERVATION), &ds->ds_reserved); @@ -496,8 +498,11 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin ds->ds_reserved = ds->ds_quota = 0; } - if (err != 0 || (winner = dmu_buf_set_user_ie(dbuf, ds, - dsl_dataset_evict)) != NULL) { + dmu_buf_init_user(&ds->ds_dbu, dsl_dataset_evict, &ds->ds_dbuf); + if (err == 0) + winner = dmu_buf_set_user_ie(dbuf, &ds->ds_dbu); + + if (err != 0 || winner != NULL) { bplist_destroy(&ds->ds_pending_deadlist); dsl_deadlist_close(&ds->ds_deadlist); if (ds->ds_prev) @@ -919,7 +924,7 @@ dsl_dataset_recalc_head_uniq(dsl_dataset uint64_t mrs_used; uint64_t dlused, dlcomp, dluncomp; - ASSERT(!dsl_dataset_is_snapshot(ds)); + ASSERT(!ds->ds_is_snapshot); if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) mrs_used = dsl_dataset_phys(ds->ds_prev)->ds_referenced_bytes; @@ -1675,7 +1680,7 @@ dsl_dataset_stats(dsl_dataset_t *ds, nvl dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_LOGICALREFERENCED, dsl_dataset_phys(ds)->ds_uncompressed_bytes); - if (dsl_dataset_is_snapshot(ds)) { + if (ds->ds_is_snapshot) { dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_COMPRESSRATIO, ratio); dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USED, dsl_dataset_phys(ds)->ds_unique_bytes); @@ -1743,7 +1748,7 @@ dsl_dataset_fast_stat(dsl_dataset_t *ds, dsl_dataset_phys(ds)->ds_flags & DS_FLAG_INCONSISTENT; stat->dds_guid = dsl_dataset_phys(ds)->ds_guid; stat->dds_origin[0] = '\0'; - if (dsl_dataset_is_snapshot(ds)) { + if (ds->ds_is_snapshot) { stat->dds_is_snapshot = B_TRUE; stat->dds_num_clones = dsl_dataset_phys(ds)->ds_num_children - 1; @@ -2023,7 +2028,7 @@ dsl_dataset_rollback_check(void *arg, dm return (error); /* must not be a snapshot */ - if (dsl_dataset_is_snapshot(ds)) { *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Mon Aug 10 11:52:55 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3014899E162; Mon, 10 Aug 2015 11:52:55 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1ACB4C2E; Mon, 10 Aug 2015 11:52:55 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ABqsI5007592; Mon, 10 Aug 2015 11:52:54 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ABqsFV007591; Mon, 10 Aug 2015 11:52:54 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508101152.t7ABqsFV007591@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 11:52:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286576 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 11:52:55 -0000 Author: mav Date: Mon Aug 10 11:52:54 2015 New Revision: 286576 URL: https://svnweb.freebsd.org/changeset/base/286576 Log: Fix r286570 build with debug. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Aug 10 11:30:07 2015 (r286575) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Aug 10 11:52:54 2015 (r286576) @@ -1858,8 +1858,10 @@ arc_change_state(arc_state_t *new_state, * L2 headers should never be on the L2 state list since they don't * have L1 headers allocated. */ +#ifdef illumos ASSERT(list_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_DATA]) && list_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA])); +#endif } void From owner-svn-src-head@freebsd.org Mon Aug 10 12:04:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3875199E8B6; Mon, 10 Aug 2015 12:04:01 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 27C91646; Mon, 10 Aug 2015 12:04:01 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AC41LA011883; Mon, 10 Aug 2015 12:04:01 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AC40vB011879; Mon, 10 Aug 2015 12:04:00 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201508101204.t7AC40vB011879@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Mon, 10 Aug 2015 12:04:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286577 - in head/sys: net netinet netinet6 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 12:04:01 -0000 Author: melifaro Date: Mon Aug 10 12:03:59 2015 New Revision: 286577 URL: https://svnweb.freebsd.org/changeset/base/286577 Log: Partially merge r274887,r275334,r275577,r275578,r275586 to minimize differences between projects/routing and HEAD. This commit tries to keep code logic the same while changing underlying code to use unified callbacks. * Add llt_foreach_entry method to traverse all entries in given llt * Add llt_dump_entry method to export particular lle entry in sysctl/rtsock format (code is not indented properly to minimize diff). Will be fixed in the next commits. * Add llt_link_entry/llt_unlink_entry methods to link/unlink particular lle. * Add llt_fill_sa_entry method to export address in the lle to sockaddr format. * Add llt_hash method to use in generic hash table support code. * Add llt_free_entry method which is used in llt_prefix_free code. * Prepare for fine-grained locking by separating lle unlink and deletion in lltable_free() and lltable_prefix_free(). * Provide lltable_get() functions to reduce direct 'struct lltable' access by external callers. * Remove @llt agrument from lle_free() lle callback since it was unused. * Temporarily add L3_CADDR() macro for 'const' sockaddr typecasting. * Switch to per-af hashing code. * Rename LLE_FREE_LOCKED() callback from in[6]_lltable_free() to in_[6]lltable_destroy() to avoid clashing with llt_free_entry() method. Update description from these functions. * Use unified lltable_free_entry() function instead of per-af one. Reviewed by: ae Modified: head/sys/net/if_llatbl.c head/sys/net/if_llatbl.h head/sys/netinet/in.c head/sys/netinet6/in6.c Modified: head/sys/net/if_llatbl.c ============================================================================== --- head/sys/net/if_llatbl.c Mon Aug 10 11:52:54 2015 (r286576) +++ head/sys/net/if_llatbl.c Mon Aug 10 12:03:59 2015 (r286577) @@ -70,6 +70,35 @@ static void vnet_lltable_init(void); struct rwlock lltable_rwlock; RW_SYSINIT(lltable_rwlock, &lltable_rwlock, "lltable_rwlock"); +static void llentries_unlink(struct lltable *llt, struct llentries *head); + +static void htable_unlink_entry(struct llentry *lle); +static void htable_link_entry(struct lltable *llt, struct llentry *lle); +static int htable_foreach_lle(struct lltable *llt, llt_foreach_cb_t *f, + void *farg); + +/* + * Dump lle state for a specific address family. + */ +static int +lltable_dump_af(struct lltable *llt, struct sysctl_req *wr) +{ + int error; + + LLTABLE_LOCK_ASSERT(); + + if (llt->llt_ifp->if_flags & IFF_LOOPBACK) + return (0); + error = 0; + + IF_AFDATA_RLOCK(llt->llt_ifp); + error = lltable_foreach_lle(llt, + (llt_foreach_cb_t *)llt->llt_dump_entry, wr); + IF_AFDATA_RUNLOCK(llt->llt_ifp); + + return (error); +} + /* * Dump arp state for a specific address family. */ @@ -82,7 +111,7 @@ lltable_sysctl_dumparp(int af, struct sy LLTABLE_RLOCK(); SLIST_FOREACH(llt, &V_lltables, llt_link) { if (llt->llt_af == af) { - error = llt->llt_dump(llt, wr); + error = lltable_dump_af(llt, wr); if (error != 0) goto done; } @@ -93,25 +122,136 @@ done: } /* - * Deletes an address from the address table. - * This function is called by the timer functions - * such as arptimer() and nd6_llinfo_timer(), and - * the caller does the locking. + * Common function helpers for chained hash table. + */ + +/* + * Runs specified callback for each entry in @llt. + * Caller does the locking. + * + */ +static int +htable_foreach_lle(struct lltable *llt, llt_foreach_cb_t *f, void *farg) +{ + struct llentry *lle, *next; + int i, error; + + error = 0; + + for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { + LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { + error = f(llt, lle, farg); + if (error != 0) + break; + } + } + + return (error); +} + +static void +htable_link_entry(struct lltable *llt, struct llentry *lle) +{ + struct llentries *lleh; + uint32_t hashidx; + + if ((lle->la_flags & LLE_LINKED) != 0) + return; + + IF_AFDATA_WLOCK_ASSERT(llt->llt_ifp); + + hashidx = llt->llt_hash(lle, LLTBL_HASHTBL_SIZE); + lleh = &llt->lle_head[hashidx]; + + lle->lle_tbl = llt; + lle->lle_head = lleh; + lle->la_flags |= LLE_LINKED; + LIST_INSERT_HEAD(lleh, lle, lle_next); +} + +static void +htable_unlink_entry(struct llentry *lle) +{ + + if ((lle->la_flags & LLE_LINKED) != 0) { + IF_AFDATA_WLOCK_ASSERT(lle->lle_tbl->llt_ifp); + LIST_REMOVE(lle, lle_next); + lle->la_flags &= ~(LLE_VALID | LLE_LINKED); +#if 0 + lle->lle_tbl = NULL; + lle->lle_head = NULL; +#endif + } +} + +struct prefix_match_data { + const struct sockaddr *prefix; + const struct sockaddr *mask; + struct llentries dchain; + u_int flags; +}; + +static int +htable_prefix_free_cb(struct lltable *llt, struct llentry *lle, void *farg) +{ + struct prefix_match_data *pmd; + + pmd = (struct prefix_match_data *)farg; + + if (llt->llt_match_prefix(pmd->prefix, pmd->mask, pmd->flags, lle)) { + LLE_WLOCK(lle); + LIST_INSERT_HEAD(&pmd->dchain, lle, lle_chain); + } + + return (0); +} + +static void +htable_prefix_free(struct lltable *llt, const struct sockaddr *prefix, + const struct sockaddr *mask, u_int flags) +{ + struct llentry *lle, *next; + struct prefix_match_data pmd; + + bzero(&pmd, sizeof(pmd)); + pmd.prefix = prefix; + pmd.mask = mask; + pmd.flags = flags; + LIST_INIT(&pmd.dchain); + + IF_AFDATA_WLOCK(llt->llt_ifp); + /* Push matching lles to chain */ + lltable_foreach_lle(llt, htable_prefix_free_cb, &pmd); + + llentries_unlink(llt, &pmd.dchain); + IF_AFDATA_WUNLOCK(llt->llt_ifp); + + LIST_FOREACH_SAFE(lle, &pmd.dchain, lle_chain, next) + llt->llt_free_entry(llt, lle); +} + +static void +llentries_unlink(struct lltable *llt, struct llentries *head) +{ + struct llentry *lle, *next; + + LIST_FOREACH_SAFE(lle, head, lle_chain, next) + llt->llt_unlink_entry(lle); +} + +/* + * Helper function used to drop all mbufs in hold queue. * * Returns the number of held packets, if any, that were dropped. */ size_t -llentry_free(struct llentry *lle) +lltable_drop_entry_queue(struct llentry *lle) { size_t pkts_dropped; struct mbuf *next; - IF_AFDATA_WLOCK_ASSERT(lle->lle_tbl->llt_ifp); LLE_WLOCK_ASSERT(lle); - LIST_REMOVE(lle, lle_next); - lle->la_flags &= ~(LLE_VALID | LLE_LINKED); - pkts_dropped = 0; while ((lle->la_numheld > 0) && (lle->la_hold != NULL)) { next = lle->la_hold->m_nextpkt; @@ -125,6 +265,34 @@ llentry_free(struct llentry *lle) ("%s: la_numheld %d > 0, pkts_droped %zd", __func__, lle->la_numheld, pkts_dropped)); + return (pkts_dropped); +} + +/* + * Deletes an address from the address table. + * This function is called by the timer functions + * such as arptimer() and nd6_llinfo_timer(), and + * the caller does the locking. + * + * Returns the number of held packets, if any, that were dropped. + */ +size_t +llentry_free(struct llentry *lle) +{ + struct lltable *llt; + size_t pkts_dropped; + + LLE_WLOCK_ASSERT(lle); + + if ((lle->la_flags & LLE_LINKED) != 0) { + llt = lle->lle_tbl; + + IF_AFDATA_WLOCK_ASSERT(llt->llt_ifp); + llt->llt_unlink_entry(lle); + } + + pkts_dropped = lltable_drop_entry_queue(lle); + LLE_FREE_LOCKED(lle); return (pkts_dropped); @@ -162,11 +330,28 @@ llentry_alloc(struct ifnet *ifp, struct /* * Free all entries from given table and free itself. */ + +static int +lltable_free_cb(struct lltable *llt, struct llentry *lle, void *farg) +{ + struct llentries *dchain; + + dchain = (struct llentries *)farg; + + LLE_WLOCK(lle); + LIST_INSERT_HEAD(dchain, lle, lle_chain); + + return (0); +} + +/* + * Free all entries from given table and free itself. + */ void lltable_free(struct lltable *llt) { struct llentry *lle, *next; - int i; + struct llentries dchain; KASSERT(llt != NULL, ("%s: llt is NULL", __func__)); @@ -174,17 +359,19 @@ lltable_free(struct lltable *llt) SLIST_REMOVE(&V_lltables, llt, lltable, llt_link); LLTABLE_WUNLOCK(); + LIST_INIT(&dchain); IF_AFDATA_WLOCK(llt->llt_ifp); - for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { - LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { - LLE_WLOCK(lle); - if (callout_stop(&lle->la_timer)) - LLE_REMREF(lle); - llentry_free(lle); - } - } + /* Push all lles to @dchain */ + lltable_foreach_lle(llt, lltable_free_cb, &dchain); + llentries_unlink(llt, &dchain); IF_AFDATA_WUNLOCK(llt->llt_ifp); + LIST_FOREACH_SAFE(lle, &dchain, lle_chain, next) { + if (callout_stop(&lle->la_timer)) + LLE_REMREF(lle); + llentry_free(lle); + } + free(llt, M_LLTABLE); } @@ -232,8 +419,6 @@ lltable_prefix_free(int af, struct socka LLTABLE_RUNLOCK(); } - - /* * Create a new lltable. */ @@ -250,6 +435,12 @@ lltable_init(struct ifnet *ifp, int af) for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) LIST_INIT(&llt->lle_head[i]); + /* Set some default callbacks */ + llt->llt_link_entry = htable_link_entry; + llt->llt_unlink_entry = htable_unlink_entry; + llt->llt_prefix_free = htable_prefix_free; + llt->llt_foreach_entry = htable_foreach_lle; + LLTABLE_WLOCK(); SLIST_INSERT_HEAD(&V_lltables, llt, llt_link); LLTABLE_WUNLOCK(); @@ -258,6 +449,54 @@ lltable_init(struct ifnet *ifp, int af) } /* + * External methods used by lltable consumers + */ + +int +lltable_foreach_lle(struct lltable *llt, llt_foreach_cb_t *f, void *farg) +{ + + return (llt->llt_foreach_entry(llt, f, farg)); +} + +void +lltable_link_entry(struct lltable *llt, struct llentry *lle) +{ + + llt->llt_link_entry(llt, lle); +} + +void +lltable_unlink_entry(struct lltable *llt, struct llentry *lle) +{ + + llt->llt_unlink_entry(lle); +} + +void +lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa) +{ + struct lltable *llt; + + llt = lle->lle_tbl; + llt->llt_fill_sa_entry(lle, sa); +} + +struct ifnet * +lltable_get_ifp(const struct lltable *llt) +{ + + return (llt->llt_ifp); +} + +int +lltable_get_af(const struct lltable *llt) +{ + + return (llt->llt_af); +} + +/* * Called in route_output when rtm_flags contains RTF_LLDATA. */ int Modified: head/sys/net/if_llatbl.h ============================================================================== --- head/sys/net/if_llatbl.h Mon Aug 10 11:52:54 2015 (r286576) +++ head/sys/net/if_llatbl.h Mon Aug 10 12:03:59 2015 (r286577) @@ -57,7 +57,7 @@ struct llentry { struct rwlock lle_lock; struct lltable *lle_tbl; struct llentries *lle_head; - void (*lle_free)(struct lltable *, struct llentry *); + void (*lle_free)(struct llentry *); struct mbuf *la_hold; int la_numheld; /* # of packets currently held */ time_t la_expire; @@ -76,6 +76,7 @@ struct llentry { uint8_t mac8[20]; /* IB needs 20 bytes. */ } ll_addr; + LIST_ENTRY(llentry) lle_chain; /* chain of deleted items */ /* XXX af-private? */ union { struct callout ln_timer_ch; @@ -114,7 +115,7 @@ struct llentry { #define LLE_FREE_LOCKED(lle) do { \ if ((lle)->lle_refcnt == 1) \ - (lle)->lle_free((lle)->lle_tbl, (lle)); \ + (lle)->lle_free(lle); \ else { \ LLE_REMREF(lle); \ LLE_WUNLOCK(lle); \ @@ -133,6 +134,7 @@ struct llentry { #define la_timer lle_timer.la_timer /* XXX bad name */ +#define L3_CADDR(lle) ((const struct sockaddr *)(&lle[1])) #define L3_ADDR(lle) ((struct sockaddr *)(&lle[1])) #define L3_ADDR_LEN(lle) (((struct sockaddr *)(&lle[1]))->sa_len) @@ -152,7 +154,18 @@ typedef int (llt_delete_t)(struct lltabl const struct sockaddr *l3addr); typedef void (llt_prefix_free_t)(struct lltable *, const struct sockaddr *prefix, const struct sockaddr *mask, u_int flags); -typedef int (llt_dump_t)(struct lltable *, struct sysctl_req *); +typedef int (llt_dump_entry_t)(struct lltable *, struct llentry *, + struct sysctl_req *); +typedef uint32_t (llt_hash_t)(const struct llentry *, uint32_t); +typedef int (llt_match_prefix_t)(const struct sockaddr *, + const struct sockaddr *, u_int, struct llentry *); +typedef void (llt_free_entry_t)(struct lltable *, struct llentry *); +typedef void (llt_fill_sa_entry_t)(const struct llentry *, struct sockaddr *); +typedef void (llt_link_entry_t)(struct lltable *, struct llentry *); +typedef void (llt_unlink_entry_t)(struct llentry *); + +typedef int (llt_foreach_cb_t)(struct lltable *, struct llentry *, void *); +typedef int (llt_foreach_entry_t)(struct lltable *, llt_foreach_cb_t *, void *); struct lltable { SLIST_ENTRY(lltable) llt_link; @@ -164,7 +177,14 @@ struct lltable { llt_create_t *llt_create; llt_delete_t *llt_delete; llt_prefix_free_t *llt_prefix_free; - llt_dump_t *llt_dump; + llt_dump_entry_t *llt_dump_entry; + llt_hash_t *llt_hash; + llt_match_prefix_t *llt_match_prefix; + llt_free_entry_t *llt_free_entry; + llt_foreach_entry_t *llt_foreach_entry; + llt_link_entry_t *llt_link_entry; + llt_unlink_entry_t *llt_unlink_entry; + llt_fill_sa_entry_t *llt_fill_sa_entry; }; MALLOC_DECLARE(M_LLTABLE); @@ -197,6 +217,19 @@ size_t llentry_free(struct llentry *); struct llentry *llentry_alloc(struct ifnet *, struct lltable *, struct sockaddr_storage *); +/* helper functions */ +size_t lltable_drop_entry_queue(struct llentry *); + +struct llentry *lltable_create_lle(struct lltable *llt, u_int flags, + const void *paddr); +void lltable_link_entry(struct lltable *llt, struct llentry *lle); +void lltable_unlink_entry(struct lltable *llt, struct llentry *lle); +void lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa); +struct ifnet *lltable_get_ifp(const struct lltable *llt); +int lltable_get_af(const struct lltable *llt); + +int lltable_foreach_lle(struct lltable *llt, llt_foreach_cb_t *f, + void *farg); /* * Generic link layer address lookup function. */ Modified: head/sys/netinet/in.c ============================================================================== --- head/sys/netinet/in.c Mon Aug 10 11:52:54 2015 (r286576) +++ head/sys/netinet/in.c Mon Aug 10 12:03:59 2015 (r286577) @@ -961,15 +961,19 @@ struct in_llentry { struct sockaddr_in l3_addr4; }; +#define IN_LLTBL_DEFAULT_HSIZE 32 +#define IN_LLTBL_HASH(k, h) \ + (((((((k >> 8) ^ k) >> 8) ^ k) >> 8) ^ k) & ((h) - 1)) + /* - * Deletes an address from the address table. - * This function is called by the timer functions - * such as arptimer() and nd6_llinfo_timer(), and - * the caller does the locking. + * Do actual deallocation of @lle. + * Called by LLE_FREE_LOCKED when number of references + * drops to zero. */ static void -in_lltable_free(struct lltable *llt, struct llentry *lle) +in_lltable_destroy_lle(struct llentry *lle) { + LLE_WUNLOCK(lle); LLE_LOCK_DESTROY(lle); free(lle, M_LLTABLE); @@ -991,7 +995,7 @@ in_lltable_new(const struct sockaddr *l3 lle->base.la_expire = time_uptime; /* mark expired */ lle->l3_addr4 = *(const struct sockaddr_in *)l3addr; lle->base.lle_refcnt = 1; - lle->base.lle_free = in_lltable_free; + lle->base.lle_free = in_lltable_destroy_lle; LLE_LOCK_INIT(&lle->base); callout_init(&lle->base.la_timer, 1); @@ -1001,37 +1005,48 @@ in_lltable_new(const struct sockaddr *l3 #define IN_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \ (((ntohl((d)->sin_addr.s_addr) ^ (a)->sin_addr.s_addr) & (m)->sin_addr.s_addr)) == 0 ) -static void -in_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix, - const struct sockaddr *mask, u_int flags) +static int +in_lltable_match_prefix(const struct sockaddr *prefix, + const struct sockaddr *mask, u_int flags, struct llentry *lle) { const struct sockaddr_in *pfx = (const struct sockaddr_in *)prefix; const struct sockaddr_in *msk = (const struct sockaddr_in *)mask; - struct llentry *lle, *next; - int i; - size_t pkts_dropped; - IF_AFDATA_WLOCK(llt->llt_ifp); - for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { - LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { - /* - * (flags & LLE_STATIC) means deleting all entries - * including static ARP entries. - */ - if (IN_ARE_MASKED_ADDR_EQUAL(satosin(L3_ADDR(lle)), - pfx, msk) && ((flags & LLE_STATIC) || - !(lle->la_flags & LLE_STATIC))) { - LLE_WLOCK(lle); - if (callout_stop(&lle->la_timer)) - LLE_REMREF(lle); - pkts_dropped = llentry_free(lle); - ARPSTAT_ADD(dropped, pkts_dropped); - } - } - } - IF_AFDATA_WUNLOCK(llt->llt_ifp); + /* + * (flags & LLE_STATIC) means deleting all entries + * including static ARP entries. + */ + if (IN_ARE_MASKED_ADDR_EQUAL(satosin(L3_ADDR(lle)), pfx, msk) && + ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) + return (1); + + return (0); } +static void +in_lltable_free_entry(struct lltable *llt, struct llentry *lle) +{ + struct ifnet *ifp; + size_t pkts_dropped; + + LLE_WLOCK_ASSERT(lle); + KASSERT(llt != NULL, ("lltable is NULL")); + + /* Unlink entry from table if not already */ + if ((lle->la_flags & LLE_LINKED) != 0) { + ifp = llt->llt_ifp; + IF_AFDATA_WLOCK_ASSERT(ifp); + lltable_unlink_entry(llt, lle); + } + + /* cancel timer */ + if (callout_stop(&lle->la_timer)) + LLE_REMREF(lle); + + /* Drop hold queue */ + pkts_dropped = llentry_free(lle); + ARPSTAT_ADD(dropped, pkts_dropped); +} static int in_lltable_rtcheck(struct ifnet *ifp, u_int flags, const struct sockaddr *l3addr) @@ -1107,16 +1122,45 @@ in_lltable_rtcheck(struct ifnet *ifp, u_ return (0); } +static inline uint32_t +in_lltable_hash_dst(const struct in_addr dst, uint32_t hsize) +{ + + return (IN_LLTBL_HASH(dst.s_addr, hsize)); +} + +static uint32_t +in_lltable_hash(const struct llentry *lle, uint32_t hsize) +{ + const struct sockaddr_in *sin; + + sin = (const struct sockaddr_in *)(L3_CADDR(lle)); + + return (in_lltable_hash_dst(sin->sin_addr, hsize)); +} + +static void +in_lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa) +{ + struct sockaddr_in *sin; + + sin = (struct sockaddr_in *)sa; + bzero(sin, sizeof(*sin)); + sin->sin_family = AF_INET; + sin->sin_len = sizeof(*sin); + sin->sin_addr = ((const struct sockaddr_in *)(L3_CADDR(lle)))->sin_addr; +} + static inline struct llentry * in_lltable_find_dst(struct lltable *llt, struct in_addr dst) { struct llentry *lle; struct llentries *lleh; struct sockaddr_in *sin; - u_int hashkey; + u_int hashidx; - hashkey = dst.s_addr; - lleh = &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)]; + hashidx = in_lltable_hash_dst(dst, LLTBL_HASHTBL_SIZE); + lleh = &llt->lle_head[hashidx]; LIST_FOREACH(lle, lleh, lle_next) { sin = satosin(L3_ADDR(lle)); if (lle->la_flags & LLE_DELETED) @@ -1169,8 +1213,6 @@ in_lltable_create(struct lltable *llt, u const struct sockaddr_in *sin = (const struct sockaddr_in *)l3addr; struct ifnet *ifp = llt->llt_ifp; struct llentry *lle; - struct llentries *lleh; - u_int hashkey; IF_AFDATA_WLOCK_ASSERT(ifp); KASSERT(l3addr->sa_family == AF_INET, @@ -1205,13 +1247,7 @@ in_lltable_create(struct lltable *llt, u lle->la_flags |= (LLE_VALID | LLE_STATIC); } - hashkey = sin->sin_addr.s_addr; - lleh = &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)]; - - lle->lle_tbl = llt; - lle->lle_head = lleh; - lle->la_flags |= LLE_LINKED; - LIST_INSERT_HEAD(lleh, lle, lle_next); + lltable_link_entry(llt, lle); LLE_WLOCK(lle); return (lle); @@ -1226,22 +1262,11 @@ in_lltable_lookup(struct lltable *llt, u { const struct sockaddr_in *sin = (const struct sockaddr_in *)l3addr; struct llentry *lle; - struct llentries *lleh; - u_int hashkey; IF_AFDATA_LOCK_ASSERT(llt->llt_ifp); KASSERT(l3addr->sa_family == AF_INET, ("sin_family %d", l3addr->sa_family)); - - hashkey = sin->sin_addr.s_addr; - lleh = &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)]; - LIST_FOREACH(lle, lleh, lle_next) { - struct sockaddr_in *sa2 = satosin(L3_ADDR(lle)); - if (lle->la_flags & LLE_DELETED) - continue; - if (sa2->sin_addr.s_addr == sin->sin_addr.s_addr) - break; - } + lle = in_lltable_find_dst(llt, sin->sin_addr); if (lle == NULL) return (NULL); @@ -1255,47 +1280,39 @@ in_lltable_lookup(struct lltable *llt, u } static int -in_lltable_dump(struct lltable *llt, struct sysctl_req *wr) +in_lltable_dump_entry(struct lltable *llt, struct llentry *lle, + struct sysctl_req *wr) { -#define SIN(lle) ((struct sockaddr_in *) L3_ADDR(lle)) struct ifnet *ifp = llt->llt_ifp; - struct llentry *lle; /* XXX stack use */ struct { struct rt_msghdr rtm; struct sockaddr_in sin; struct sockaddr_dl sdl; } arpc; - int error, i; - - LLTABLE_LOCK_ASSERT(); - - error = 0; - for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { - LIST_FOREACH(lle, &llt->lle_head[i], lle_next) { - struct sockaddr_dl *sdl; + struct sockaddr_dl *sdl; + int error; + bzero(&arpc, sizeof(arpc)); /* skip deleted entries */ if ((lle->la_flags & LLE_DELETED) == LLE_DELETED) - continue; + return (0); /* Skip if jailed and not a valid IP of the prison. */ - if (prison_if(wr->td->td_ucred, L3_ADDR(lle)) != 0) - continue; + lltable_fill_sa_entry(lle,(struct sockaddr *)&arpc.sin); + if (prison_if(wr->td->td_ucred, + (struct sockaddr *)&arpc.sin) != 0) + return (0); /* * produce a msg made of: * struct rt_msghdr; * struct sockaddr_in; (IPv4) * struct sockaddr_dl; */ - bzero(&arpc, sizeof(arpc)); arpc.rtm.rtm_msglen = sizeof(arpc); arpc.rtm.rtm_version = RTM_VERSION; arpc.rtm.rtm_type = RTM_GET; arpc.rtm.rtm_flags = RTF_UP; arpc.rtm.rtm_addrs = RTA_DST | RTA_GATEWAY; - arpc.sin.sin_family = AF_INET; - arpc.sin.sin_len = sizeof(arpc.sin); - arpc.sin.sin_addr.s_addr = SIN(lle)->sin_addr.s_addr; /* publish */ if (lle->la_flags & LLE_PUB) @@ -1321,12 +1338,8 @@ in_lltable_dump(struct lltable *llt, str arpc.rtm.rtm_flags |= RTF_STATIC; arpc.rtm.rtm_index = ifp->if_index; error = SYSCTL_OUT(wr, &arpc, sizeof(arpc)); - if (error) - break; - } - } - return error; -#undef SIN + + return (error); } void * @@ -1339,11 +1352,14 @@ in_domifattach(struct ifnet *ifp) llt = lltable_init(ifp, AF_INET); if (llt != NULL) { - llt->llt_prefix_free = in_lltable_prefix_free; llt->llt_lookup = in_lltable_lookup; llt->llt_create = in_lltable_create; llt->llt_delete = in_lltable_delete; - llt->llt_dump = in_lltable_dump; + llt->llt_dump_entry = in_lltable_dump_entry; + llt->llt_hash = in_lltable_hash; + llt->llt_fill_sa_entry = in_lltable_fill_sa_entry; + llt->llt_free_entry = in_lltable_free_entry; + llt->llt_match_prefix = in_lltable_match_prefix; } ii->ii_llt = llt; Modified: head/sys/netinet6/in6.c ============================================================================== --- head/sys/netinet6/in6.c Mon Aug 10 11:52:54 2015 (r286576) +++ head/sys/netinet6/in6.c Mon Aug 10 12:03:59 2015 (r286577) @@ -2050,15 +2050,19 @@ struct in6_llentry { struct sockaddr_in6 l3_addr6; }; +#define IN6_LLTBL_DEFAULT_HSIZE 32 +#define IN6_LLTBL_HASH(k, h) \ + (((((((k >> 8) ^ k) >> 8) ^ k) >> 8) ^ k) & ((h) - 1)) + /* - * Deletes an address from the address table. - * This function is called by the timer functions - * such as arptimer() and nd6_llinfo_timer(), and - * the caller does the locking. + * Do actual deallocation of @lle. + * Called by LLE_FREE_LOCKED when number of references + * drops to zero. */ static void -in6_lltable_free(struct lltable *llt, struct llentry *lle) +in6_lltable_destroy_lle(struct llentry *lle) { + LLE_WUNLOCK(lle); LLE_LOCK_DESTROY(lle); free(lle, M_LLTABLE); @@ -2075,42 +2079,48 @@ in6_lltable_new(const struct sockaddr *l lle->l3_addr6 = *(const struct sockaddr_in6 *)l3addr; lle->base.lle_refcnt = 1; - lle->base.lle_free = in6_lltable_free; + lle->base.lle_free = in6_lltable_destroy_lle; LLE_LOCK_INIT(&lle->base); callout_init(&lle->base.ln_timer_ch, 1); return (&lle->base); } -static void -in6_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix, - const struct sockaddr *mask, u_int flags) +static int +in6_lltable_match_prefix(const struct sockaddr *prefix, + const struct sockaddr *mask, u_int flags, struct llentry *lle) { const struct sockaddr_in6 *pfx = (const struct sockaddr_in6 *)prefix; const struct sockaddr_in6 *msk = (const struct sockaddr_in6 *)mask; - struct llentry *lle, *next; - int i; - /* - * (flags & LLE_STATIC) means deleting all entries - * including static ND6 entries. - */ - IF_AFDATA_WLOCK(llt->llt_ifp); - for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { - LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { - if (IN6_ARE_MASKED_ADDR_EQUAL( - &satosin6(L3_ADDR(lle))->sin6_addr, - &pfx->sin6_addr, &msk->sin6_addr) && - ((flags & LLE_STATIC) || - !(lle->la_flags & LLE_STATIC))) { - LLE_WLOCK(lle); - if (callout_stop(&lle->la_timer)) - LLE_REMREF(lle); - llentry_free(lle); - } - } + if (IN6_ARE_MASKED_ADDR_EQUAL(&satosin6(L3_ADDR(lle))->sin6_addr, + &pfx->sin6_addr, &msk->sin6_addr) && + ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) + return (1); + + return (0); +} + +static void +in6_lltable_free_entry(struct lltable *llt, struct llentry *lle) +{ + struct ifnet *ifp; + + LLE_WLOCK_ASSERT(lle); + KASSERT(llt != NULL, ("lltable is NULL")); + + /* Unlink entry from table */ + if ((lle->la_flags & LLE_LINKED) != 0) { + + ifp = llt->llt_ifp; + IF_AFDATA_WLOCK_ASSERT(ifp); + lltable_unlink_entry(llt, lle); } - IF_AFDATA_WUNLOCK(llt->llt_ifp); + + if (callout_stop(&lle->la_timer)) + LLE_REMREF(lle); + + llentry_free(lle); } static int @@ -2152,18 +2162,47 @@ in6_lltable_rtcheck(struct ifnet *ifp, return 0; } +static inline uint32_t +in6_lltable_hash_dst(const struct in6_addr *dst, uint32_t hsize) +{ + + return (IN6_LLTBL_HASH(dst->s6_addr32[3], hsize)); +} + +static uint32_t +in6_lltable_hash(const struct llentry *lle, uint32_t hsize) +{ + const struct sockaddr_in6 *sin6; + + sin6 = (const struct sockaddr_in6 *)L3_CADDR(lle); + + return (in6_lltable_hash_dst(&sin6->sin6_addr, hsize)); +} + +static void +in6_lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa) +{ + struct sockaddr_in6 *sin6; + + sin6 = (struct sockaddr_in6 *)sa; + bzero(sin6, sizeof(*sin6)); + sin6->sin6_family = AF_INET6; + sin6->sin6_len = sizeof(*sin6); + sin6->sin6_addr =((const struct sockaddr_in6*)L3_CADDR(lle))->sin6_addr; +} + static inline struct llentry * in6_lltable_find_dst(struct lltable *llt, const struct in6_addr *dst) { struct llentry *lle; struct llentries *lleh; const struct sockaddr_in6 *sin6; - u_int hashkey; + u_int hashidx; - hashkey = dst->s6_addr32[3]; - lleh = &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)]; + hashidx = in6_lltable_hash_dst(dst, LLTBL_HASHTBL_SIZE); + lleh = &llt->lle_head[hashidx]; LIST_FOREACH(lle, lleh, lle_next) { - sin6 = (const struct sockaddr_in6 *)L3_ADDR(lle); + sin6 = (const struct sockaddr_in6 *)L3_CADDR(lle); if (lle->la_flags & LLE_DELETED) continue; if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, dst)) @@ -2212,8 +2251,6 @@ in6_lltable_create(struct lltable *llt, const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)l3addr; struct ifnet *ifp = llt->llt_ifp; struct llentry *lle; - struct llentries *lleh; - u_int hashkey; IF_AFDATA_WLOCK_ASSERT(ifp); KASSERT(l3addr->sa_family == AF_INET6, @@ -2246,13 +2283,7 @@ in6_lltable_create(struct lltable *llt, lle->la_flags |= (LLE_VALID | LLE_STATIC); } - hashkey = sin6->sin6_addr.s6_addr32[3]; - lleh = &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)]; - - lle->lle_tbl = llt; - lle->lle_head = lleh; - lle->la_flags |= LLE_LINKED; - LIST_INSERT_HEAD(lleh, lle, lle_next); + lltable_link_entry(llt, lle); LLE_WLOCK(lle); return (lle); @@ -2282,10 +2313,10 @@ in6_lltable_lookup(struct lltable *llt, } static int -in6_lltable_dump(struct lltable *llt, struct sysctl_req *wr) +in6_lltable_dump_entry(struct lltable *llt, struct llentry *lle, + struct sysctl_req *wr) { struct ifnet *ifp = llt->llt_ifp; - struct llentry *lle; /* XXX stack use */ struct { struct rt_msghdr rtm; @@ -2298,39 +2329,30 @@ in6_lltable_dump(struct lltable *llt, st #endif struct sockaddr_dl sdl; } ndpc; - int i, error; - - if (ifp->if_flags & IFF_LOOPBACK) - return 0; + struct sockaddr_dl *sdl; + int error; - LLTABLE_LOCK_ASSERT(); - - error = 0; - for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { - LIST_FOREACH(lle, &llt->lle_head[i], lle_next) { - struct sockaddr_dl *sdl; - - /* skip deleted or invalid entries */ + bzero(&ndpc, sizeof(ndpc)); + /* skip invalid entries */ if ((lle->la_flags & (LLE_DELETED|LLE_VALID)) != LLE_VALID) - continue; + return (0); /* Skip if jailed and not a valid IP of the prison. */ - if (prison_if(wr->td->td_ucred, L3_ADDR(lle)) != 0) - continue; + lltable_fill_sa_entry(lle, + (struct sockaddr *)&ndpc.sin6); + if (prison_if(wr->td->td_ucred, + (struct sockaddr *)&ndpc.sin6) != 0) + return (0); /* * produce a msg made of: * struct rt_msghdr; * struct sockaddr_in6 (IPv6) * struct sockaddr_dl; */ - bzero(&ndpc, sizeof(ndpc)); ndpc.rtm.rtm_msglen = sizeof(ndpc); ndpc.rtm.rtm_version = RTM_VERSION; ndpc.rtm.rtm_type = RTM_GET; ndpc.rtm.rtm_flags = RTF_UP; ndpc.rtm.rtm_addrs = RTA_DST | RTA_GATEWAY; - ndpc.sin6.sin6_family = AF_INET6; - ndpc.sin6.sin6_len = sizeof(ndpc.sin6); - bcopy(L3_ADDR(lle), &ndpc.sin6, L3_ADDR_LEN(lle)); if (V_deembed_scopeid) sa6_recoverscope(&ndpc.sin6); @@ -2352,11 +2374,8 @@ in6_lltable_dump(struct lltable *llt, st ndpc.rtm.rtm_flags |= RTF_STATIC; ndpc.rtm.rtm_index = ifp->if_index; error = SYSCTL_OUT(wr, &ndpc, sizeof(ndpc)); - if (error) - break; - } - } *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Mon Aug 10 12:20:57 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C186799ECA0; Mon, 10 Aug 2015 12:20:57 +0000 (UTC) (envelope-from melifaro@ipfw.ru) Received: from forward20h.cmail.yandex.net (forward20h.cmail.yandex.net [87.250.230.162]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "forwards.mail.yandex.net", Issuer "Certum Level IV CA" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 79D58CCB; Mon, 10 Aug 2015 12:20:57 +0000 (UTC) (envelope-from melifaro@ipfw.ru) Received: from web2h.yandex.ru (web2h.yandex.ru [84.201.186.31]) by forward20h.cmail.yandex.net (Yandex) with ESMTP id 493CB212C6; Mon, 10 Aug 2015 15:20:47 +0300 (MSK) Received: from 127.0.0.1 (localhost [127.0.0.1]) by web2h.yandex.ru (Yandex) with ESMTP id 5885146C1A5A; Mon, 10 Aug 2015 15:20:46 +0300 (MSK) Received: by web2h.yandex.ru with HTTP; Mon, 10 Aug 2015 15:20:45 +0300 From: Alexander V. Chernikov Envelope-From: melifaro@ipfw.ru To: Julian Elischer , "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" In-Reply-To: <55C858DD.7060202@freebsd.org> References: <201508081815.t78IF0xJ081015@repo.freebsd.org> <55C858DD.7060202@freebsd.org> Subject: Re: svn commit: r286458 - in head/sys: net netinet netinet6 Message-Id: <2074401439209245@web2h.yandex.ru> X-Mailer: Yamail [ http://yandex.ru ] 5.0 Date: Mon, 10 Aug 2015 15:20:45 +0300 MIME-Version: 1.0 Content-Type: text/plain; charset="koi8-r" X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 12:20:57 -0000 From owner-svn-src-head@freebsd.org Mon Aug 10 12:25:27 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2FA7899EE48; Mon, 10 Aug 2015 12:25:27 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 20E4615C; Mon, 10 Aug 2015 12:25:27 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ACPQc9020313; Mon, 10 Aug 2015 12:25:26 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ACPQUi020312; Mon, 10 Aug 2015 12:25:26 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508101225.t7ACPQUi020312@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 12:25:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286578 - head/sys/cddl/compat/opensolaris/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 12:25:27 -0000 Author: mav Date: Mon Aug 10 12:25:26 2015 New Revision: 286578 URL: https://svnweb.freebsd.org/changeset/base/286578 Log: Fix r286574 build in user-space. Modified: head/sys/cddl/compat/opensolaris/sys/kstat.h Modified: head/sys/cddl/compat/opensolaris/sys/kstat.h ============================================================================== --- head/sys/cddl/compat/opensolaris/sys/kstat.h Mon Aug 10 12:03:59 2015 (r286577) +++ head/sys/cddl/compat/opensolaris/sys/kstat.h Mon Aug 10 12:25:26 2015 (r286578) @@ -44,9 +44,9 @@ typedef struct kstat { #ifdef _KERNEL struct sysctl_ctx_list ks_sysctl_ctx; struct sysctl_oid *ks_sysctl_root; +#endif int (*ks_update)(struct kstat *, int); /* dynamic update */ void *ks_private; /* arbitrary provider-private data */ -#endif } kstat_t; typedef struct kstat_named { From owner-svn-src-head@freebsd.org Mon Aug 10 12:39:12 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 23DDB99D189; Mon, 10 Aug 2015 12:39:12 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 08931A40; Mon, 10 Aug 2015 12:39:12 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ACdBG4024747; Mon, 10 Aug 2015 12:39:11 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ACdBFU024744; Mon, 10 Aug 2015 12:39:11 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508101239.t7ACdBFU024744@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 12:39:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286579 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 12:39:12 -0000 Author: mav Date: Mon Aug 10 12:39:10 2015 New Revision: 286579 URL: https://svnweb.freebsd.org/changeset/base/286579 Log: MFV r277430: 5313 Allow I/Os to be aggregated across ZIO priority classes Reviewed by: Andriy Gapon Reviewed by: Will Andrews Reviewed by: Matt Ahrens Reviewed by: George Wilson Approved by: Robert Mustacchi Author: Justin T. Gibbs illumos/illumos-gate@fe319232d24f4ae183730a5a24a09423d8ab4429 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h Mon Aug 10 12:25:26 2015 (r286578) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h Mon Aug 10 12:39:10 2015 (r286579) @@ -113,6 +113,8 @@ struct vdev_queue { vdev_t *vq_vdev; vdev_queue_class_t vq_class[ZIO_PRIORITY_NUM_QUEUEABLE]; avl_tree_t vq_active_tree; + avl_tree_t vq_read_offset_tree; + avl_tree_t vq_write_offset_tree; uint64_t vq_last_offset; hrtime_t vq_io_complete_ts; /* time last i/o completed */ kmutex_t vq_lock; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h Mon Aug 10 12:25:26 2015 (r286578) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h Mon Aug 10 12:39:10 2015 (r286579) @@ -458,6 +458,7 @@ struct zio { uint64_t io_offset; hrtime_t io_timestamp; avl_node_t io_queue_node; + avl_node_t io_offset_node; /* Internal pipeline state */ enum zio_flag io_flags; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c Mon Aug 10 12:25:26 2015 (r286578) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c Mon Aug 10 12:39:10 2015 (r286579) @@ -290,6 +290,22 @@ vdev_queue_offset_compare(const void *x1 return (0); } +static inline avl_tree_t * +vdev_queue_class_tree(vdev_queue_t *vq, zio_priority_t p) +{ + return (&vq->vq_class[p].vqc_queued_tree); +} + +static inline avl_tree_t * +vdev_queue_type_tree(vdev_queue_t *vq, zio_type_t t) +{ + ASSERT(t == ZIO_TYPE_READ || t == ZIO_TYPE_WRITE); + if (t == ZIO_TYPE_READ) + return (&vq->vq_read_offset_tree); + else + return (&vq->vq_write_offset_tree); +} + int vdev_queue_timestamp_compare(const void *x1, const void *x2) { @@ -324,19 +340,27 @@ vdev_queue_init(vdev_t *vd) avl_create(&vq->vq_active_tree, vdev_queue_offset_compare, sizeof (zio_t), offsetof(struct zio, io_queue_node)); + avl_create(vdev_queue_type_tree(vq, ZIO_TYPE_READ), + vdev_queue_offset_compare, sizeof (zio_t), + offsetof(struct zio, io_offset_node)); + avl_create(vdev_queue_type_tree(vq, ZIO_TYPE_WRITE), + vdev_queue_offset_compare, sizeof (zio_t), + offsetof(struct zio, io_offset_node)); for (zio_priority_t p = 0; p < ZIO_PRIORITY_NUM_QUEUEABLE; p++) { + int (*compfn) (const void *, const void *); + /* - * The synchronous i/o queues are FIFO rather than LBA ordered. - * This provides more consistent latency for these i/os, and - * they tend to not be tightly clustered anyway so there is - * little to no throughput loss. + * The synchronous i/o queues are dispatched in FIFO rather + * than LBA order. This provides more consistent latency for + * these i/os. */ - boolean_t fifo = (p == ZIO_PRIORITY_SYNC_READ || - p == ZIO_PRIORITY_SYNC_WRITE); - avl_create(&vq->vq_class[p].vqc_queued_tree, - fifo ? vdev_queue_timestamp_compare : - vdev_queue_offset_compare, + if (p == ZIO_PRIORITY_SYNC_READ || p == ZIO_PRIORITY_SYNC_WRITE) + compfn = vdev_queue_timestamp_compare; + else + compfn = vdev_queue_offset_compare; + + avl_create(vdev_queue_class_tree(vq, p), compfn, sizeof (zio_t), offsetof(struct zio, io_queue_node)); } @@ -349,8 +373,10 @@ vdev_queue_fini(vdev_t *vd) vdev_queue_t *vq = &vd->vdev_queue; for (zio_priority_t p = 0; p < ZIO_PRIORITY_NUM_QUEUEABLE; p++) - avl_destroy(&vq->vq_class[p].vqc_queued_tree); + avl_destroy(vdev_queue_class_tree(vq, p)); avl_destroy(&vq->vq_active_tree); + avl_destroy(vdev_queue_type_tree(vq, ZIO_TYPE_READ)); + avl_destroy(vdev_queue_type_tree(vq, ZIO_TYPE_WRITE)); mutex_destroy(&vq->vq_lock); } @@ -361,7 +387,8 @@ vdev_queue_io_add(vdev_queue_t *vq, zio_ spa_t *spa = zio->io_spa; ASSERT(MUTEX_HELD(&vq->vq_lock)); ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE); - avl_add(&vq->vq_class[zio->io_priority].vqc_queued_tree, zio); + avl_add(vdev_queue_class_tree(vq, zio->io_priority), zio); + avl_add(vdev_queue_type_tree(vq, zio->io_type), zio); #ifdef illumos mutex_enter(&spa->spa_iokstat_lock); @@ -378,7 +405,8 @@ vdev_queue_io_remove(vdev_queue_t *vq, z spa_t *spa = zio->io_spa; ASSERT(MUTEX_HELD(&vq->vq_lock)); ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE); - avl_remove(&vq->vq_class[zio->io_priority].vqc_queued_tree, zio); + avl_remove(vdev_queue_class_tree(vq, zio->io_priority), zio); + avl_remove(vdev_queue_type_tree(vq, zio->io_type), zio); #ifdef illumos mutex_enter(&spa->spa_iokstat_lock); @@ -551,7 +579,7 @@ vdev_queue_class_to_issue(vdev_queue_t * /* find a queue that has not reached its minimum # outstanding i/os */ for (p = 0; p < ZIO_PRIORITY_NUM_QUEUEABLE; p++) { - if (avl_numnodes(&vq->vq_class[p].vqc_queued_tree) > 0 && + if (avl_numnodes(vdev_queue_class_tree(vq, p)) > 0 && vq->vq_class[p].vqc_active < vdev_queue_class_min_active(p)) return (p); @@ -562,7 +590,7 @@ vdev_queue_class_to_issue(vdev_queue_t * * maximum # outstanding i/os. */ for (p = 0; p < ZIO_PRIORITY_NUM_QUEUEABLE; p++) { - if (avl_numnodes(&vq->vq_class[p].vqc_queued_tree) > 0 && + if (avl_numnodes(vdev_queue_class_tree(vq, p)) > 0 && vq->vq_class[p].vqc_active < vdev_queue_class_max_active(spa, p)) return (p); @@ -630,7 +658,7 @@ vdev_queue_aggregate(vdev_queue_t *vq, z * recording the last non-option I/O. */ flags = zio->io_flags & ZIO_FLAG_AGG_INHERIT; - t = &vq->vq_class[zio->io_priority].vqc_queued_tree; + t = vdev_queue_type_tree(vq, zio->io_type); while ((dio = AVL_PREV(t, first)) != NULL && (dio->io_flags & ZIO_FLAG_AGG_INHERIT) == flags && IO_SPAN(dio, last) <= zfs_vdev_aggregation_limit && @@ -739,7 +767,7 @@ vdev_queue_io_to_issue(vdev_queue_t *vq) zio_t *zio, *aio; zio_priority_t p; avl_index_t idx; - vdev_queue_class_t *vqc; + avl_tree_t *tree; zio_t search; again: @@ -758,13 +786,13 @@ again: * * For FIFO queues (sync), issue the i/o with the lowest timestamp. */ - vqc = &vq->vq_class[p]; + tree = vdev_queue_class_tree(vq, p); search.io_timestamp = 0; search.io_offset = vq->vq_last_offset + 1; - VERIFY3P(avl_find(&vqc->vqc_queued_tree, &search, &idx), ==, NULL); - zio = avl_nearest(&vqc->vqc_queued_tree, idx, AVL_AFTER); + VERIFY3P(avl_find(tree, &search, &idx), ==, NULL); + zio = avl_nearest(tree, idx, AVL_AFTER); if (zio == NULL) - zio = avl_first(&vqc->vqc_queued_tree); + zio = avl_first(tree); ASSERT3U(zio->io_priority, ==, p); aio = vdev_queue_aggregate(vq, zio); From owner-svn-src-head@freebsd.org Mon Aug 10 12:40:18 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D562799D217; Mon, 10 Aug 2015 12:40:18 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebius.int.ru (glebius.int.ru [81.19.69.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebius.int.ru", Issuer "cell.glebius.int.ru" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 62F9CBB2; Mon, 10 Aug 2015 12:40:17 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebius.int.ru (localhost [127.0.0.1]) by cell.glebius.int.ru (8.15.2/8.15.2) with ESMTPS id t7ACe8Rw076955 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 10 Aug 2015 15:40:08 +0300 (MSK) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebius.int.ru (8.15.2/8.15.2/Submit) id t7ACe89f076954; Mon, 10 Aug 2015 15:40:08 +0300 (MSK) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebius.int.ru: glebius set sender to glebius@FreeBSD.org using -f Date: Mon, 10 Aug 2015 15:40:08 +0300 From: Gleb Smirnoff To: Rui Paulo Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286441 - in head: share/man/man4 sys/contrib/dev/iwm sys/dev/iwm sys/modules/iwm sys/modules/iwmfw sys/modules/iwmfw/iwm3160fw sys/modules/iwmfw/iwm7260fw sys/modules/iwmfw/iwm7265fw Message-ID: <20150810124008.GB75813@FreeBSD.org> References: <201508080606.t7866nw0072494@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201508080606.t7866nw0072494@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 12:40:18 -0000 On Sat, Aug 08, 2015 at 06:06:49AM +0000, Rui Paulo wrote: R> Author: rpaulo R> Date: Sat Aug 8 06:06:48 2015 R> New Revision: 286441 R> URL: https://svnweb.freebsd.org/changeset/base/286441 R> R> Log: R> Import OpenBSD's iwm WiFi driver for Intel 3160/7260/7265. R> R> There are still several bugs, but I've been using it for a while now. R> Thanks to all the testers and to Adrian for his help with this R> driver. R> R> This driver isn't connected to the build yet, but it will be soon. R> R> There's no MFC planned because the driver isn't very stable yet. R> R> Reviewed by: adrian R> Obtained from: https://github.com/rpaulo/iwm R> Tested by: adrian, gjb, dumbbell (others that I forgot). Converting the driver to new KPI, I noticed that iwm_media_change() expects the "parent ifnet" to be its argument: static int iwm_media_change(struct ifnet *ifp) { struct iwm_softc *sc = ifp->if_softc; I believe this is wrong, its argument is "vap ifnet", so the code should be: struct ieee80211vap *vap = ifp->if_softc; struct ieee80211com *ic = vap->iv_ic; struct wi_softc *sc = ic->ic_softc; The fact that it didn't panic is probably explained by the fact that this function was never executed. P.S. And this is an illustration on how convoluted the current KPI is :) P.P.S. I plan to be ready with retry of KPI patch today. Including iwm, and all ath debug fixes. -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Mon Aug 10 14:03:40 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 719E899E527; Mon, 10 Aug 2015 14:03:40 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5711694C; Mon, 10 Aug 2015 14:03:40 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AE3eoF061340; Mon, 10 Aug 2015 14:03:40 GMT (envelope-from cem@FreeBSD.org) Received: (from cem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AE3eTI061339; Mon, 10 Aug 2015 14:03:40 GMT (envelope-from cem@FreeBSD.org) Message-Id: <201508101403.t7AE3eTI061339@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cem set sender to cem@FreeBSD.org using -f From: "Conrad E. Meyer" Date: Mon, 10 Aug 2015 14:03:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286580 - head/sys/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 14:03:40 -0000 Author: cem Date: Mon Aug 10 14:03:39 2015 New Revision: 286580 URL: https://svnweb.freebsd.org/changeset/base/286580 Log: files.amd64: Build ntb_hw.o if if_ntb OR ntb_hw Approved by: markj (mentor) Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D3349 Modified: head/sys/conf/files.amd64 Modified: head/sys/conf/files.amd64 ============================================================================== --- head/sys/conf/files.amd64 Mon Aug 10 12:39:10 2015 (r286579) +++ head/sys/conf/files.amd64 Mon Aug 10 14:03:39 2015 (r286580) @@ -277,7 +277,7 @@ dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c dev/kbd/kbd.c optional atkbd | sc | ukbd | vt dev/nfe/if_nfe.c optional nfe pci dev/ntb/if_ntb/if_ntb.c optional if_ntb -dev/ntb/ntb_hw/ntb_hw.c optional if_ntb ntb_hw +dev/ntb/ntb_hw/ntb_hw.c optional if_ntb | ntb_hw dev/nvd/nvd.c optional nvd nvme dev/nvme/nvme.c optional nvme dev/nvme/nvme_ctrlr.c optional nvme From owner-svn-src-head@freebsd.org Mon Aug 10 16:32:48 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5562B99E956; Mon, 10 Aug 2015 16:32:48 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 45C73DE7; Mon, 10 Aug 2015 16:32:48 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AGWmeb023015; Mon, 10 Aug 2015 16:32:48 GMT (envelope-from rpaulo@FreeBSD.org) Received: (from rpaulo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AGWmS1023014; Mon, 10 Aug 2015 16:32:48 GMT (envelope-from rpaulo@FreeBSD.org) Message-Id: <201508101632.t7AGWmS1023014@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rpaulo set sender to rpaulo@FreeBSD.org using -f From: Rui Paulo Date: Mon, 10 Aug 2015 16:32:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286581 - head/sys/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 16:32:48 -0000 Author: rpaulo Date: Mon Aug 10 16:32:47 2015 New Revision: 286581 URL: https://svnweb.freebsd.org/changeset/base/286581 Log: Fix a comment for iwm. Submitted by: brueffer Modified: head/sys/conf/options Modified: head/sys/conf/options ============================================================================== --- head/sys/conf/options Mon Aug 10 14:03:39 2015 (r286580) +++ head/sys/conf/options Mon Aug 10 16:32:47 2015 (r286581) @@ -851,7 +851,7 @@ MWL_DIAGAPI opt_mwl.h MWL_AGGR_SIZE opt_mwl.h MWL_TX_NODROP opt_mwl.h -# Options for the Intel 802.11n wireless driver +# Options for the Intel 802.11ac wireless driver IWM_DEBUG opt_iwm.h # Options for the Intel 802.11n wireless driver From owner-svn-src-head@freebsd.org Mon Aug 10 17:02:44 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 21DC899E044; Mon, 10 Aug 2015 17:02:44 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EC9F7284; Mon, 10 Aug 2015 17:02:43 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AH2hC4035537; Mon, 10 Aug 2015 17:02:43 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AH2hak035535; Mon, 10 Aug 2015 17:02:43 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201508101702.t7AH2hak035535@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Mon, 10 Aug 2015 17:02:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286582 - head/lib/libthr/thread X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 17:02:44 -0000 Author: kib Date: Mon Aug 10 17:02:42 2015 New Revision: 286582 URL: https://svnweb.freebsd.org/changeset/base/286582 Log: Pre-resolve symbols required for the deferred signal processing. This avoids recursion into rtld when leaving libthr critical section for the deferred signal delivery. For the same reason, use syscall(2) instead of referencing __sys_sigreturn(2). Syscall() is already pre-resolved for fork() interceptor. Tested by: Andre Meiser Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/lib/libthr/thread/thr_rtld.c head/lib/libthr/thread/thr_sig.c Modified: head/lib/libthr/thread/thr_rtld.c ============================================================================== --- head/lib/libthr/thread/thr_rtld.c Mon Aug 10 16:32:47 2015 (r286581) +++ head/lib/libthr/thread/thr_rtld.c Mon Aug 10 17:02:42 2015 (r286582) @@ -185,7 +185,9 @@ _thr_rtld_init(void) { struct RtldLockInfo li; struct pthread *curthread; + ucontext_t *uc; long dummy = -1; + int uc_len; curthread = _get_curthread(); @@ -231,4 +233,9 @@ _thr_rtld_init(void) _thr_signal_block(curthread); _rtld_thread_init(&li); _thr_signal_unblock(curthread); + + uc_len = __getcontextx_size(); + uc = alloca(uc_len); + getcontext(uc); + __fillcontextx2((char *)uc); } Modified: head/lib/libthr/thread/thr_sig.c ============================================================================== --- head/lib/libthr/thread/thr_sig.c Mon Aug 10 16:32:47 2015 (r286581) +++ head/lib/libthr/thread/thr_sig.c Mon Aug 10 17:02:42 2015 (r286582) @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -257,7 +258,7 @@ handle_signal(struct sigaction *actp, in /* reschedule cancellation */ check_cancel(curthread, &uc2); errno = err; - __sys_sigreturn(&uc2); + syscall(SYS_sigreturn, &uc2); } void From owner-svn-src-head@freebsd.org Mon Aug 10 17:16:49 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EC83599E45B; Mon, 10 Aug 2015 17:16:49 +0000 (UTC) (envelope-from zbb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DD483D3F; Mon, 10 Aug 2015 17:16:49 +0000 (UTC) (envelope-from zbb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AHGnr1040221; Mon, 10 Aug 2015 17:16:49 GMT (envelope-from zbb@FreeBSD.org) Received: (from zbb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AHGnUB040220; Mon, 10 Aug 2015 17:16:49 GMT (envelope-from zbb@FreeBSD.org) Message-Id: <201508101716.t7AHGnUB040220@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: zbb set sender to zbb@FreeBSD.org using -f From: Zbigniew Bodek Date: Mon, 10 Aug 2015 17:16:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286583 - head/sys/vm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 17:16:50 -0000 Author: zbb Date: Mon Aug 10 17:16:49 2015 New Revision: 286583 URL: https://svnweb.freebsd.org/changeset/base/286583 Log: Avoid sign extension of value passed to kva_alloc from uma_zone_reserve_kva Fixes "panic: vm_radix_reserve_kva: unable to reserve KVA" caused by sign extention of "pages * UMA_SLAB_SIZE" value passed to kva_alloc() which takes unsigned long argument. In the erroneus case that triggered this bug, the number of pages to allocate in uma_zone_reserve_kva() was 0x8ebe6, that gave the total number of bytes to allocate equal to 0x8ebe6000 (int). This was then sign extended in kva_alloc() to 0xffffffff8ebe6000 (unsigned long). Reviewed by: alc, kib Submitted by: Zbigniew Bodek Obtained from: Semihalf Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D3346 Modified: head/sys/vm/uma_core.c Modified: head/sys/vm/uma_core.c ============================================================================== --- head/sys/vm/uma_core.c Mon Aug 10 17:02:42 2015 (r286582) +++ head/sys/vm/uma_core.c Mon Aug 10 17:16:49 2015 (r286583) @@ -3126,7 +3126,7 @@ uma_zone_reserve_kva(uma_zone_t zone, in { uma_keg_t keg; vm_offset_t kva; - int pages; + u_int pages; keg = zone_first_keg(zone); if (keg == NULL) @@ -3141,7 +3141,7 @@ uma_zone_reserve_kva(uma_zone_t zone, in #else if (1) { #endif - kva = kva_alloc(pages * UMA_SLAB_SIZE); + kva = kva_alloc((vm_size_t)pages * UMA_SLAB_SIZE); if (kva == 0) return (0); } else From owner-svn-src-head@freebsd.org Mon Aug 10 17:18:29 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E84EC99E4C1; Mon, 10 Aug 2015 17:18:29 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D5958ECE; Mon, 10 Aug 2015 17:18:29 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AHITDW040356; Mon, 10 Aug 2015 17:18:29 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AHIMZw040328; Mon, 10 Aug 2015 17:18:22 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201508101718.t7AHIMZw040328@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Mon, 10 Aug 2015 17:18:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286584 - in head/sys: amd64/amd64 arm/arm arm/at91 arm/cavium/cns11xx arm/include arm/samsung/s3c2xx0 arm/xscale/i80321 arm/xscale/i8134x arm/xscale/ixp425 arm/xscale/pxa ddb i386/i386... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 17:18:30 -0000 Author: kib Date: Mon Aug 10 17:18:21 2015 New Revision: 286584 URL: https://svnweb.freebsd.org/changeset/base/286584 Log: Make kstack_pages a tunable on arm, x86, and powepc. On i386, the initial thread stack is not adjusted by the tunable, the stack is allocated too early to get access to the kernel environment. See TD0_KSTACK_PAGES for the thread0 stack sizing on i386. The tunable was tested on x86 only. From the visual inspection, it seems that it might work on arm and powerpc. The arm USPACE_SVC_STACK_TOP and powerpc USPACE macros seems to be already incorrect for the threads with non-default kstack size. I only changed the macros to use variable instead of constant, since I cannot test. On arm64, mips and sparc64, some static data structures are sized by KSTACK_PAGES, so the tunable is disabled. Sponsored by: The FreeBSD Foundation MFC after: 2 week Modified: head/sys/amd64/amd64/genassym.c head/sys/amd64/amd64/machdep.c head/sys/amd64/amd64/mp_machdep.c head/sys/arm/arm/machdep.c head/sys/arm/at91/at91_machdep.c head/sys/arm/cavium/cns11xx/econa_machdep.c head/sys/arm/include/param.h head/sys/arm/samsung/s3c2xx0/s3c24x0_machdep.c head/sys/arm/xscale/i80321/ep80219_machdep.c head/sys/arm/xscale/i80321/iq31244_machdep.c head/sys/arm/xscale/i8134x/crb_machdep.c head/sys/arm/xscale/ixp425/avila_machdep.c head/sys/arm/xscale/pxa/pxa_machdep.c head/sys/ddb/db_ps.c head/sys/i386/i386/genassym.c head/sys/i386/i386/mp_machdep.c head/sys/i386/i386/sys_machdep.c head/sys/kern/kern_fork.c head/sys/kern/subr_param.c head/sys/powerpc/aim/mmu_oea.c head/sys/powerpc/aim/mmu_oea64.c head/sys/powerpc/booke/pmap.c head/sys/powerpc/include/param.h head/sys/vm/vm_glue.c head/sys/x86/xen/pv.c Modified: head/sys/amd64/amd64/genassym.c ============================================================================== --- head/sys/amd64/amd64/genassym.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/amd64/amd64/genassym.c Mon Aug 10 17:18:21 2015 (r286584) @@ -93,7 +93,6 @@ ASSYM(TDP_KTHREAD, TDP_KTHREAD); ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap)); ASSYM(V_SYSCALL, offsetof(struct vmmeter, v_syscall)); ASSYM(V_INTR, offsetof(struct vmmeter, v_intr)); -ASSYM(KSTACK_PAGES, KSTACK_PAGES); ASSYM(PAGE_SIZE, PAGE_SIZE); ASSYM(NPTEPG, NPTEPG); ASSYM(NPDEPG, NPDEPG); Modified: head/sys/amd64/amd64/machdep.c ============================================================================== --- head/sys/amd64/amd64/machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/amd64/amd64/machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -1516,12 +1516,6 @@ hammer_time(u_int64_t modulep, u_int64_t char *env; size_t kstack0_sz; - thread0.td_kstack = physfree + KERNBASE; - thread0.td_kstack_pages = KSTACK_PAGES; - kstack0_sz = thread0.td_kstack_pages * PAGE_SIZE; - bzero((void *)thread0.td_kstack, kstack0_sz); - physfree += kstack0_sz; - /* * This may be done better later if it gets more high level * components in it. If so just link td->td_proc here. @@ -1533,6 +1527,12 @@ hammer_time(u_int64_t modulep, u_int64_t /* Init basic tunables, hz etc */ init_param1(); + thread0.td_kstack = physfree + KERNBASE; + thread0.td_kstack_pages = kstack_pages; + kstack0_sz = thread0.td_kstack_pages * PAGE_SIZE; + bzero((void *)thread0.td_kstack, kstack0_sz); + physfree += kstack0_sz; + /* * make gdt memory segments */ Modified: head/sys/amd64/amd64/mp_machdep.c ============================================================================== --- head/sys/amd64/amd64/mp_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/amd64/amd64/mp_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -348,7 +348,7 @@ native_start_all_aps(void) /* allocate and set up an idle stack data page */ bootstacks[cpu] = (void *)kmem_malloc(kernel_arena, - KSTACK_PAGES * PAGE_SIZE, M_WAITOK | M_ZERO); + kstack_pages * PAGE_SIZE, M_WAITOK | M_ZERO); doublefault_stack = (char *)kmem_malloc(kernel_arena, PAGE_SIZE, M_WAITOK | M_ZERO); nmi_stack = (char *)kmem_malloc(kernel_arena, PAGE_SIZE, @@ -356,7 +356,7 @@ native_start_all_aps(void) dpcpu = (void *)kmem_malloc(kernel_arena, DPCPU_SIZE, M_WAITOK | M_ZERO); - bootSTK = (char *)bootstacks[cpu] + KSTACK_PAGES * PAGE_SIZE - 8; + bootSTK = (char *)bootstacks[cpu] + kstack_pages * PAGE_SIZE - 8; bootAP = cpu; /* attempt to start the Application Processor */ Modified: head/sys/arm/arm/machdep.c ============================================================================== --- head/sys/arm/arm/machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/arm/machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -1066,7 +1066,7 @@ init_proc0(vm_offset_t kstack) proc_linkup0(&proc0, &thread0); thread0.td_kstack = kstack; thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; + (thread0.td_kstack + kstack_pages * PAGE_SIZE) - 1; thread0.td_pcb->pcb_flags = 0; thread0.td_pcb->pcb_vfpcpu = -1; thread0.td_pcb->pcb_vfpstate.fpscr = VFPSCR_DN | VFPSCR_FZ; @@ -1360,7 +1360,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE * MAXCPU); valloc_pages(abtstack, ABT_STACK_SIZE * MAXCPU); valloc_pages(undstack, UND_STACK_SIZE * MAXCPU); - valloc_pages(kernelstack, KSTACK_PAGES * MAXCPU); + valloc_pages(kernelstack, kstack_pages * MAXCPU); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); /* @@ -1614,7 +1614,7 @@ initarm(struct arm_boot_params *abp) irqstack = pmap_preboot_get_vpages(IRQ_STACK_SIZE * MAXCPU); abtstack = pmap_preboot_get_vpages(ABT_STACK_SIZE * MAXCPU); undstack = pmap_preboot_get_vpages(UND_STACK_SIZE * MAXCPU ); - kernelstack = pmap_preboot_get_vpages(KSTACK_PAGES * MAXCPU); + kernelstack = pmap_preboot_get_vpages(kstack_pages * MAXCPU); /* Allocate message buffer. */ msgbufp = (void *)pmap_preboot_get_vpages( Modified: head/sys/arm/at91/at91_machdep.c ============================================================================== --- head/sys/arm/at91/at91_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/at91/at91_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -512,7 +512,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE * MAXCPU); valloc_pages(abtstack, ABT_STACK_SIZE * MAXCPU); valloc_pages(undstack, UND_STACK_SIZE * MAXCPU); - valloc_pages(kernelstack, KSTACK_PAGES * MAXCPU); + valloc_pages(kernelstack, kstack_pages * MAXCPU); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); /* @@ -553,7 +553,7 @@ initarm(struct arm_boot_params *abp) pmap_map_chunk(l1pagetable, undstack.pv_va, undstack.pv_pa, UND_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); pmap_map_chunk(l1pagetable, kernelstack.pv_va, kernelstack.pv_pa, - KSTACK_PAGES * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); + kstack_pages * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); pmap_map_chunk(l1pagetable, kernel_l1pt.pv_va, kernel_l1pt.pv_pa, L1_TABLE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE); Modified: head/sys/arm/cavium/cns11xx/econa_machdep.c ============================================================================== --- head/sys/arm/cavium/cns11xx/econa_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/cavium/cns11xx/econa_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -222,7 +222,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE); valloc_pages(abtstack, ABT_STACK_SIZE); valloc_pages(undstack, UND_STACK_SIZE); - valloc_pages(kernelstack, KSTACK_PAGES); + valloc_pages(kernelstack, kstack_pages); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); /* @@ -260,7 +260,7 @@ initarm(struct arm_boot_params *abp) pmap_map_chunk(l1pagetable, undstack.pv_va, undstack.pv_pa, UND_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); pmap_map_chunk(l1pagetable, kernelstack.pv_va, kernelstack.pv_pa, - KSTACK_PAGES * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); + kstack_pages * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); pmap_map_chunk(l1pagetable, kernel_l1pt.pv_va, kernel_l1pt.pv_pa, L1_TABLE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE); Modified: head/sys/arm/include/param.h ============================================================================== --- head/sys/arm/include/param.h Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/include/param.h Mon Aug 10 17:18:21 2015 (r286584) @@ -131,7 +131,7 @@ #define KSTACK_GUARD_PAGES 1 #endif /* !KSTACK_GUARD_PAGES */ -#define USPACE_SVC_STACK_TOP (KSTACK_PAGES * PAGE_SIZE) +#define USPACE_SVC_STACK_TOP (kstack_pages * PAGE_SIZE) /* * Mach derived conversion macros Modified: head/sys/arm/samsung/s3c2xx0/s3c24x0_machdep.c ============================================================================== --- head/sys/arm/samsung/s3c2xx0/s3c24x0_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/samsung/s3c2xx0/s3c24x0_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -271,7 +271,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE); valloc_pages(abtstack, ABT_STACK_SIZE); valloc_pages(undstack, UND_STACK_SIZE); - valloc_pages(kernelstack, KSTACK_PAGES); + valloc_pages(kernelstack, kstack_pages); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); /* * Now we start construction of the L1 page table @@ -307,7 +307,7 @@ initarm(struct arm_boot_params *abp) pmap_map_chunk(l1pagetable, undstack.pv_va, undstack.pv_pa, UND_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); pmap_map_chunk(l1pagetable, kernelstack.pv_va, kernelstack.pv_pa, - KSTACK_PAGES * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); + kstack_pages * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); pmap_map_chunk(l1pagetable, kernel_l1pt.pv_va, kernel_l1pt.pv_pa, L1_TABLE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE); Modified: head/sys/arm/xscale/i80321/ep80219_machdep.c ============================================================================== --- head/sys/arm/xscale/i80321/ep80219_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/xscale/i80321/ep80219_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -225,7 +225,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE); valloc_pages(abtstack, ABT_STACK_SIZE); valloc_pages(undstack, UND_STACK_SIZE); - valloc_pages(kernelstack, KSTACK_PAGES); + valloc_pages(kernelstack, kstack_pages); alloc_pages(minidataclean.pv_pa, 1); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); /* Modified: head/sys/arm/xscale/i80321/iq31244_machdep.c ============================================================================== --- head/sys/arm/xscale/i80321/iq31244_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/xscale/i80321/iq31244_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -226,7 +226,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE); valloc_pages(abtstack, ABT_STACK_SIZE); valloc_pages(undstack, UND_STACK_SIZE); - valloc_pages(kernelstack, KSTACK_PAGES); + valloc_pages(kernelstack, kstack_pages); alloc_pages(minidataclean.pv_pa, 1); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); /* Modified: head/sys/arm/xscale/i8134x/crb_machdep.c ============================================================================== --- head/sys/arm/xscale/i8134x/crb_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/xscale/i8134x/crb_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -225,7 +225,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE); valloc_pages(abtstack, ABT_STACK_SIZE); valloc_pages(undstack, UND_STACK_SIZE); - valloc_pages(kernelstack, KSTACK_PAGES); + valloc_pages(kernelstack, kstack_pages); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); /* * Now we start construction of the L1 page table Modified: head/sys/arm/xscale/ixp425/avila_machdep.c ============================================================================== --- head/sys/arm/xscale/ixp425/avila_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/xscale/ixp425/avila_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -295,7 +295,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE); valloc_pages(abtstack, ABT_STACK_SIZE); valloc_pages(undstack, UND_STACK_SIZE); - valloc_pages(kernelstack, KSTACK_PAGES); + valloc_pages(kernelstack, kstack_pages); alloc_pages(minidataclean.pv_pa, 1); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); Modified: head/sys/arm/xscale/pxa/pxa_machdep.c ============================================================================== --- head/sys/arm/xscale/pxa/pxa_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/arm/xscale/pxa/pxa_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -206,7 +206,7 @@ initarm(struct arm_boot_params *abp) valloc_pages(irqstack, IRQ_STACK_SIZE); valloc_pages(abtstack, ABT_STACK_SIZE); valloc_pages(undstack, UND_STACK_SIZE); - valloc_pages(kernelstack, KSTACK_PAGES); + valloc_pages(kernelstack, kstack_pages); alloc_pages(minidataclean.pv_pa, 1); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); /* Modified: head/sys/ddb/db_ps.c ============================================================================== --- head/sys/ddb/db_ps.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/ddb/db_ps.c Mon Aug 10 17:18:21 2015 (r286584) @@ -462,7 +462,7 @@ db_findstack_cmd(db_expr_t addr, bool ha for (ks_ce = kstack_cache; ks_ce != NULL; ks_ce = ks_ce->next_ks_entry) { if ((vm_offset_t)ks_ce <= saddr && saddr < (vm_offset_t)ks_ce + - PAGE_SIZE * KSTACK_PAGES) { + PAGE_SIZE * kstack_pages) { db_printf("Cached stack %p\n", ks_ce); return; } Modified: head/sys/i386/i386/genassym.c ============================================================================== --- head/sys/i386/i386/genassym.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/i386/i386/genassym.c Mon Aug 10 17:18:21 2015 (r286584) @@ -101,8 +101,6 @@ ASSYM(TDF_NEEDRESCHED, TDF_NEEDRESCHED); ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap)); ASSYM(V_SYSCALL, offsetof(struct vmmeter, v_syscall)); ASSYM(V_INTR, offsetof(struct vmmeter, v_intr)); -/* ASSYM(UPAGES, UPAGES);*/ -ASSYM(KSTACK_PAGES, KSTACK_PAGES); ASSYM(TD0_KSTACK_PAGES, TD0_KSTACK_PAGES); ASSYM(PAGE_SIZE, PAGE_SIZE); ASSYM(NPTEPG, NPTEPG); Modified: head/sys/i386/i386/mp_machdep.c ============================================================================== --- head/sys/i386/i386/mp_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/i386/i386/mp_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -348,7 +348,7 @@ start_all_aps(void) /* allocate and set up a boot stack data page */ bootstacks[cpu] = - (char *)kmem_malloc(kernel_arena, KSTACK_PAGES * PAGE_SIZE, + (char *)kmem_malloc(kernel_arena, kstack_pages * PAGE_SIZE, M_WAITOK | M_ZERO); dpcpu = (void *)kmem_malloc(kernel_arena, DPCPU_SIZE, M_WAITOK | M_ZERO); @@ -360,7 +360,8 @@ start_all_aps(void) outb(CMOS_DATA, BIOS_WARM); /* 'warm-start' */ #endif - bootSTK = (char *)bootstacks[cpu] + KSTACK_PAGES * PAGE_SIZE - 4; + bootSTK = (char *)bootstacks[cpu] + kstack_pages * + PAGE_SIZE - 4; bootAP = cpu; /* attempt to start the Application Processor */ Modified: head/sys/i386/i386/sys_machdep.c ============================================================================== --- head/sys/i386/i386/sys_machdep.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/i386/i386/sys_machdep.c Mon Aug 10 17:18:21 2015 (r286584) @@ -275,7 +275,7 @@ i386_extend_pcb(struct thread *td) ext = (struct pcb_ext *)kmem_malloc(kernel_arena, ctob(IOPAGES+1), M_WAITOK | M_ZERO); /* -16 is so we can convert a trapframe into vm86trapframe inplace */ - ext->ext_tss.tss_esp0 = td->td_kstack + ctob(KSTACK_PAGES) - + ext->ext_tss.tss_esp0 = td->td_kstack + ctob(td->td_kstack_pages) - sizeof(struct pcb) - 16; ext->ext_tss.tss_ss0 = GSEL(GDATA_SEL, SEL_KPL); /* Modified: head/sys/kern/kern_fork.c ============================================================================== --- head/sys/kern/kern_fork.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/kern/kern_fork.c Mon Aug 10 17:18:21 2015 (r286584) @@ -832,7 +832,7 @@ fork1(struct thread *td, int flags, int mem_charged = 0; vm2 = NULL; if (pages == 0) - pages = KSTACK_PAGES; + pages = kstack_pages; /* Allocate new proc. */ newproc = uma_zalloc(proc_zone, M_WAITOK); td2 = FIRST_THREAD_IN_PROC(newproc); Modified: head/sys/kern/subr_param.c ============================================================================== --- head/sys/kern/subr_param.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/kern/subr_param.c Mon Aug 10 17:18:21 2015 (r286584) @@ -159,6 +159,9 @@ void init_param1(void) { +#if !defined(__mips__) && !defined(__arm64__) && !defined(__sparc64__) + TUNABLE_INT_FETCH("kern.kstack_pages", &kstack_pages); +#endif hz = -1; TUNABLE_INT_FETCH("kern.hz", &hz); if (hz == -1) Modified: head/sys/powerpc/aim/mmu_oea.c ============================================================================== --- head/sys/powerpc/aim/mmu_oea.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/powerpc/aim/mmu_oea.c Mon Aug 10 17:18:21 2015 (r286584) @@ -932,13 +932,13 @@ moea_bootstrap(mmu_t mmup, vm_offset_t k * Allocate a kernel stack with a guard page for thread0 and map it * into the kernel page map. */ - pa = moea_bootstrap_alloc(KSTACK_PAGES * PAGE_SIZE, PAGE_SIZE); + pa = moea_bootstrap_alloc(kstack_pages * PAGE_SIZE, PAGE_SIZE); va = virtual_avail + KSTACK_GUARD_PAGES * PAGE_SIZE; - virtual_avail = va + KSTACK_PAGES * PAGE_SIZE; + virtual_avail = va + kstack_pages * PAGE_SIZE; CTR2(KTR_PMAP, "moea_bootstrap: kstack0 at %#x (%#x)", pa, va); thread0.td_kstack = va; - thread0.td_kstack_pages = KSTACK_PAGES; - for (i = 0; i < KSTACK_PAGES; i++) { + thread0.td_kstack_pages = kstack_pages; + for (i = 0; i < kstack_pages; i++) { moea_kenter(mmup, va, pa); pa += PAGE_SIZE; va += PAGE_SIZE; Modified: head/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- head/sys/powerpc/aim/mmu_oea64.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/powerpc/aim/mmu_oea64.c Mon Aug 10 17:18:21 2015 (r286584) @@ -917,13 +917,13 @@ moea64_late_bootstrap(mmu_t mmup, vm_off * Allocate a kernel stack with a guard page for thread0 and map it * into the kernel page map. */ - pa = moea64_bootstrap_alloc(KSTACK_PAGES * PAGE_SIZE, PAGE_SIZE); + pa = moea64_bootstrap_alloc(kstack_pages * PAGE_SIZE, PAGE_SIZE); va = virtual_avail + KSTACK_GUARD_PAGES * PAGE_SIZE; - virtual_avail = va + KSTACK_PAGES * PAGE_SIZE; + virtual_avail = va + kstack_pages * PAGE_SIZE; CTR2(KTR_PMAP, "moea64_bootstrap: kstack0 at %#x (%#x)", pa, va); thread0.td_kstack = va; - thread0.td_kstack_pages = KSTACK_PAGES; - for (i = 0; i < KSTACK_PAGES; i++) { + thread0.td_kstack_pages = kstack_pages; + for (i = 0; i < kstack_pages; i++) { moea64_kenter(mmup, va, pa); pa += PAGE_SIZE; va += PAGE_SIZE; Modified: head/sys/powerpc/booke/pmap.c ============================================================================== --- head/sys/powerpc/booke/pmap.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/powerpc/booke/pmap.c Mon Aug 10 17:18:21 2015 (r286584) @@ -1207,7 +1207,7 @@ mmu_booke_bootstrap(mmu_t mmu, vm_offset /* Steal physical memory for kernel stack from the end */ /* of the first avail region */ /*******************************************************/ - kstack0_sz = KSTACK_PAGES * PAGE_SIZE; + kstack0_sz = kstack_pages * PAGE_SIZE; kstack0_phys = availmem_regions[0].mr_start + availmem_regions[0].mr_size; kstack0_phys -= kstack0_sz; @@ -1312,7 +1312,7 @@ mmu_booke_bootstrap(mmu_t mmu, vm_offset /* Enter kstack0 into kernel map, provide guard page */ kstack0 = virtual_avail + KSTACK_GUARD_PAGES * PAGE_SIZE; thread0.td_kstack = kstack0; - thread0.td_kstack_pages = KSTACK_PAGES; + thread0.td_kstack_pages = kstack_pages; debugf("kstack_sz = 0x%08x\n", kstack0_sz); debugf("kstack0_phys at 0x%08x - 0x%08x\n", @@ -1320,7 +1320,7 @@ mmu_booke_bootstrap(mmu_t mmu, vm_offset debugf("kstack0 at 0x%08x - 0x%08x\n", kstack0, kstack0 + kstack0_sz); virtual_avail += KSTACK_GUARD_PAGES * PAGE_SIZE + kstack0_sz; - for (i = 0; i < KSTACK_PAGES; i++) { + for (i = 0; i < kstack_pages; i++) { mmu_booke_kenter(mmu, kstack0, kstack0_phys); kstack0 += PAGE_SIZE; kstack0_phys += PAGE_SIZE; Modified: head/sys/powerpc/include/param.h ============================================================================== --- head/sys/powerpc/include/param.h Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/powerpc/include/param.h Mon Aug 10 17:18:21 2015 (r286584) @@ -111,7 +111,7 @@ #endif #endif #define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */ -#define USPACE (KSTACK_PAGES * PAGE_SIZE) /* total size of pcb */ +#define USPACE (kstack_pages * PAGE_SIZE) /* total size of pcb */ /* * Mach derived conversion macros Modified: head/sys/vm/vm_glue.c ============================================================================== --- head/sys/vm/vm_glue.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/vm/vm_glue.c Mon Aug 10 17:18:21 2015 (r286584) @@ -327,11 +327,11 @@ vm_thread_new(struct thread *td, int pag /* Bounds check */ if (pages <= 1) - pages = KSTACK_PAGES; + pages = kstack_pages; else if (pages > KSTACK_MAX_PAGES) pages = KSTACK_MAX_PAGES; - if (pages == KSTACK_PAGES) { + if (pages == kstack_pages) { mtx_lock(&kstack_cache_mtx); if (kstack_cache != NULL) { ks_ce = kstack_cache; @@ -340,7 +340,7 @@ vm_thread_new(struct thread *td, int pag td->td_kstack_obj = ks_ce->ksobj; td->td_kstack = (vm_offset_t)ks_ce; - td->td_kstack_pages = KSTACK_PAGES; + td->td_kstack_pages = kstack_pages; return (1); } mtx_unlock(&kstack_cache_mtx); @@ -444,7 +444,7 @@ vm_thread_dispose(struct thread *td) ks = td->td_kstack; td->td_kstack = 0; td->td_kstack_pages = 0; - if (pages == KSTACK_PAGES && kstacks <= kstack_cache_size) { + if (pages == kstack_pages && kstacks <= kstack_cache_size) { ks_ce = (struct kstack_cache_entry *)ks; ks_ce->ksobj = ksobj; mtx_lock(&kstack_cache_mtx); @@ -471,7 +471,7 @@ vm_thread_stack_lowmem(void *nulll) ks_ce = ks_ce->next_ks_entry; vm_thread_stack_dispose(ks_ce1->ksobj, (vm_offset_t)ks_ce1, - KSTACK_PAGES); + kstack_pages); } } Modified: head/sys/x86/xen/pv.c ============================================================================== --- head/sys/x86/xen/pv.c Mon Aug 10 17:16:49 2015 (r286583) +++ head/sys/x86/xen/pv.c Mon Aug 10 17:18:21 2015 (r286584) @@ -215,7 +215,7 @@ start_xen_ap(int cpu) { struct vcpu_guest_context *ctxt; int ms, cpus = mp_naps; - const size_t stacksize = KSTACK_PAGES * PAGE_SIZE; + const size_t stacksize = kstack_pages * PAGE_SIZE; /* allocate and set up an idle stack data page */ bootstacks[cpu] = @@ -227,7 +227,7 @@ start_xen_ap(int cpu) dpcpu = (void *)kmem_malloc(kernel_arena, DPCPU_SIZE, M_WAITOK | M_ZERO); - bootSTK = (char *)bootstacks[cpu] + KSTACK_PAGES * PAGE_SIZE - 8; + bootSTK = (char *)bootstacks[cpu] + kstack_pages * PAGE_SIZE - 8; bootAP = cpu; ctxt = malloc(sizeof(*ctxt), M_TEMP, M_WAITOK | M_ZERO); From owner-svn-src-head@freebsd.org Mon Aug 10 18:01:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6368699EE77 for ; Mon, 10 Aug 2015 18:01:31 +0000 (UTC) (envelope-from jbeich@freebsd.org) Received: from vfemail.net (ninezero.vfemail.net [96.30.253.190]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 24863B50 for ; Mon, 10 Aug 2015 18:01:30 +0000 (UTC) (envelope-from jbeich@freebsd.org) Received: (qmail 71683 invoked by uid 89); 10 Aug 2015 18:01:28 -0000 Received: from localhost (HELO freequeue.vfemail.net) (127.0.0.1) by localhost with (DHE-RSA-AES256-SHA encrypted) SMTP; 10 Aug 2015 18:01:28 -0000 Received: (qmail 71663 invoked by uid 89); 10 Aug 2015 18:01:10 -0000 Received: by simscan 1.3.1 ppid: 71655, pid: 71659, t: 0.0040s scanners:none Received: from unknown (HELO smtp102-2.vfemail.net) (172.16.100.62) by FreeQueue with SMTP; 10 Aug 2015 18:01:10 -0000 Received: (qmail 32462 invoked by uid 89); 10 Aug 2015 18:01:10 -0000 Received: by simscan 1.4.0 ppid: 32438, pid: 32458, t: 0.7414s scanners:none Received: from unknown (HELO nil) (amJlaWNoQHZmZW1haWwubmV0@172.16.100.27) by 172.16.100.62 with ESMTPA; 10 Aug 2015 18:01:09 -0000 From: Jan Beich To: Mark Johnston Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r278934 - in head: cddl/contrib/opensolaris/lib/libdtrace/common share/mk References: <201502180354.t1I3stA4009326@svn.freebsd.org> Date: Mon, 10 Aug 2015 20:00:57 +0200 In-Reply-To: <201502180354.t1I3stA4009326@svn.freebsd.org> (Mark Johnston's message of "Wed, 18 Feb 2015 03:54:55 +0000 (UTC)") Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 18:01:31 -0000 --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Mark Johnston writes: > Author: markj > Date: Wed Feb 18 03:54:54 2015 > New Revision: 278934 > URL: https://svnweb.freebsd.org/changeset/base/278934 > > Log: > Remove drti.o's dependency on libelf. This makes it possible to add DTr= ace > probes to userland programs and libraries without also needing to link > libelf. >=20=20=20 > dtrace -G places the __SUNW_dof symbol at the beginning of the DOF (DTr= ace > probe and provider metdata) section in the generated object file; drti.o > now just uses this symbol to locate the section. A complication occurs > when multiple dtrace-generated object files are linked together, since = the > __SUNW_dof symbol defined in each file is global. This is handled by > using objcopy(1) to convert __SUNW_dof to a local symbol once drti.o has > been linked with the generated object file. Upstream, this is done usin= g a > linker feature not present in GNU ld. >=20=20=20 > Differential Revision: https://reviews.freebsd.org/D1757 > Reviewed by: rpaulo > MFC after: 1 month > Relnotes: yes Any reason this wasn't MFC'd yet? It would serve as incentive to *not* add FreeBSD-specific conditionals for building dtrace probes in various upstream projects. --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQF8BAEBCgBmBQJVyObZXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXREQjQ0MzY3NEM3RDIzNTc4NkUxNDkyQ0VF NEM3Nzg4MzQ3OURCRERCAAoJEOTHeINHnb3b04cH/jc3L7hpUyLIHzJbJsr2O0dT BMkxB+APNPSQ1WX+g71mwDWXulQrWRoh9NRkfeY+A+PBBeNPi/gi2I4eYi5jp8A3 2ftQzSdLLniZxetVaCQvBrmo2t+7dzkkVYuG43QALFepUUSzZvl/sBG5wMBJ7wWr uejXE47qzOE6wifX91Tbp3d1cevR2yUdwBefLoPZcrpYPbwXEud+zzMBfirt4fmd pvDgunmkx6/7E1JnIb6aYX/OmbajBN2JUjbxQTE1Ng3aBBtP3vgUt0TmGTqQzHVU dl7QzZjLHWQuq2xrvKCRQxXSQjovLWCKbZSjx3tfLUj24sDwj8ivK+zeRBAJ8SY= =W9xz -----END PGP SIGNATURE----- --=-=-=-- From owner-svn-src-head@freebsd.org Mon Aug 10 19:33:00 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3C42799E2E1; Mon, 10 Aug 2015 19:33:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2A892679; Mon, 10 Aug 2015 19:33:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AJX0Tu098639; Mon, 10 Aug 2015 19:33:00 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AJWxtq098610; Mon, 10 Aug 2015 19:32:59 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508101932.t7AJWxtq098610@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 19:32:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286587 - in head: cddl/contrib/opensolaris/cmd/zstreamdump cddl/contrib/opensolaris/lib/libzfs/common sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/co... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 19:33:00 -0000 Author: mav Date: Mon Aug 10 19:32:58 2015 New Revision: 286587 URL: https://svnweb.freebsd.org/changeset/base/286587 Log: MFV 286586: 5746 more checksumming in zfs send Reviewed by: Christopher Siden Reviewed by: George Wilson Reviewed by: Bayard Bell Approved by: Albert Lee Author: Matthew Ahrens illumos/illumos-gate@98110f08fa182032082d98be2ddb9391fcd62bf1 Modified: head/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_checksum.h Modified: head/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c Mon Aug 10 19:32:30 2015 (r286586) +++ head/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c Mon Aug 10 19:32:58 2015 (r286587) @@ -25,7 +25,7 @@ */ /* - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2013, 2014 by Delphix. All rights reserved. */ #include @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -83,7 +84,6 @@ safe_malloc(size_t size) * * Read while computing incremental checksum */ - static size_t ssread(void *buf, size_t len, zio_cksum_t *cksum) { @@ -92,7 +92,7 @@ ssread(void *buf, size_t len, zio_cksum_ if ((outlen = fread(buf, len, 1, send_stream)) == 0) return (0); - if (do_cksum && cksum) { + if (do_cksum) { if (do_byteswap) fletcher_4_incremental_byteswap(buf, len, cksum); else @@ -102,6 +102,34 @@ ssread(void *buf, size_t len, zio_cksum_ return (outlen); } +static size_t +read_hdr(dmu_replay_record_t *drr, zio_cksum_t *cksum) +{ + ASSERT3U(offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), + ==, sizeof (dmu_replay_record_t) - sizeof (zio_cksum_t)); + size_t r = ssread(drr, sizeof (*drr) - sizeof (zio_cksum_t), cksum); + if (r == 0) + return (0); + zio_cksum_t saved_cksum = *cksum; + r = ssread(&drr->drr_u.drr_checksum.drr_checksum, + sizeof (zio_cksum_t), cksum); + if (r == 0) + return (0); + if (!ZIO_CHECKSUM_IS_ZERO(&drr->drr_u.drr_checksum.drr_checksum) && + !ZIO_CHECKSUM_EQUAL(saved_cksum, + drr->drr_u.drr_checksum.drr_checksum)) { + fprintf(stderr, "invalid checksum\n"); + (void) printf("Incorrect checksum in record header.\n"); + (void) printf("Expected checksum = %llx/%llx/%llx/%llx\n", + saved_cksum.zc_word[0], + saved_cksum.zc_word[1], + saved_cksum.zc_word[2], + saved_cksum.zc_word[3]); + exit(1); + } + return (sizeof (*drr)); +} + /* * Print part of a block in ASCII characters */ @@ -183,8 +211,10 @@ main(int argc, char *argv[]) struct drr_free *drrf = &thedrr.drr_u.drr_free; struct drr_spill *drrs = &thedrr.drr_u.drr_spill; struct drr_write_embedded *drrwe = &thedrr.drr_u.drr_write_embedded; + struct drr_checksum *drrc = &thedrr.drr_u.drr_checksum; char c; boolean_t verbose = B_FALSE; + boolean_t very_verbose = B_FALSE; boolean_t first = B_TRUE; /* * dump flag controls whether the contents of any modified data blocks @@ -202,11 +232,14 @@ main(int argc, char *argv[]) do_cksum = B_FALSE; break; case 'v': + if (verbose) + very_verbose = B_TRUE; verbose = B_TRUE; break; case 'd': dump = B_TRUE; verbose = B_TRUE; + very_verbose = B_TRUE; break; case ':': (void) fprintf(stderr, @@ -230,7 +263,7 @@ main(int argc, char *argv[]) send_stream = stdin; pcksum = zc; - while (ssread(drr, sizeof (dmu_replay_record_t), &zc)) { + while (read_hdr(drr, &zc)) { /* * If this is the first DMU record being processed, check for @@ -432,7 +465,7 @@ main(int argc, char *argv[]) if (verbose) { (void) printf("WRITE object = %llu type = %u " "checksum type = %u\n" - "offset = %llu length = %llu " + " offset = %llu length = %llu " "props = %llx\n", (u_longlong_t)drrw->drr_object, drrw->drr_type, @@ -476,9 +509,9 @@ main(int argc, char *argv[]) if (verbose) { (void) printf("WRITE_BYREF object = %llu " "checksum type = %u props = %llx\n" - "offset = %llu length = %llu\n" + " offset = %llu length = %llu\n" "toguid = %llx refguid = %llx\n" - "refobject = %llu refoffset = %llu\n", + " refobject = %llu refoffset = %llu\n", (u_longlong_t)drrwbr->drr_object, drrwbr->drr_checksumtype, (u_longlong_t)drrwbr->drr_key.ddk_prop, @@ -538,7 +571,7 @@ main(int argc, char *argv[]) if (verbose) { (void) printf("WRITE_EMBEDDED object = %llu " "offset = %llu length = %llu\n" - "toguid = %llx comp = %u etype = %u " + " toguid = %llx comp = %u etype = %u " "lsize = %u psize = %u\n", (u_longlong_t)drrwe->drr_object, (u_longlong_t)drrwe->drr_offset, @@ -553,6 +586,13 @@ main(int argc, char *argv[]) P2ROUNDUP(drrwe->drr_psize, 8), &zc); break; } + if (drr->drr_type != DRR_BEGIN && very_verbose) { + (void) printf(" checksum = %llx/%llx/%llx/%llx\n", + (longlong_t)drrc->drr_checksum.zc_word[0], + (longlong_t)drrc->drr_checksum.zc_word[1], + (longlong_t)drrc->drr_checksum.zc_word[2], + (longlong_t)drrc->drr_checksum.zc_word[3]); + } pcksum = zc; } free(buf); Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c ============================================================================== --- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c Mon Aug 10 19:32:30 2015 (r286586) +++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c Mon Aug 10 19:32:58 2015 (r286587) @@ -188,10 +188,28 @@ ddt_update(libzfs_handle_t *hdl, dedup_t } static int -cksum_and_write(const void *buf, uint64_t len, zio_cksum_t *zc, int outfd) +dump_record(dmu_replay_record_t *drr, void *payload, int payload_len, + zio_cksum_t *zc, int outfd) { - fletcher_4_incremental_native(buf, len, zc); - return (write(outfd, buf, len)); + ASSERT3U(offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), + ==, sizeof (dmu_replay_record_t) - sizeof (zio_cksum_t)); + fletcher_4_incremental_native(drr, + offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), zc); + if (drr->drr_type != DRR_BEGIN) { + ASSERT(ZIO_CHECKSUM_IS_ZERO(&drr->drr_u. + drr_checksum.drr_checksum)); + drr->drr_u.drr_checksum.drr_checksum = *zc; + } + fletcher_4_incremental_native(&drr->drr_u.drr_checksum.drr_checksum, + sizeof (zio_cksum_t), zc); + if (write(outfd, drr, sizeof (*drr)) == -1) + return (errno); + if (payload_len != 0) { + fletcher_4_incremental_native(payload, payload_len, zc); + if (write(outfd, payload, payload_len) == -1) + return (errno); + } + return (0); } /* @@ -218,26 +236,18 @@ cksummer(void *arg) char *buf = zfs_alloc(dda->dedup_hdl, SPA_MAXBLOCKSIZE); dmu_replay_record_t thedrr; dmu_replay_record_t *drr = &thedrr; - struct drr_begin *drrb = &thedrr.drr_u.drr_begin; - struct drr_end *drre = &thedrr.drr_u.drr_end; - struct drr_object *drro = &thedrr.drr_u.drr_object; - struct drr_write *drrw = &thedrr.drr_u.drr_write; - struct drr_spill *drrs = &thedrr.drr_u.drr_spill; - struct drr_write_embedded *drrwe = &thedrr.drr_u.drr_write_embedded; FILE *ofp; int outfd; - dmu_replay_record_t wbr_drr = {0}; - struct drr_write_byref *wbr_drrr = &wbr_drr.drr_u.drr_write_byref; dedup_table_t ddt; zio_cksum_t stream_cksum; uint64_t physmem = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE); uint64_t numbuckets; ddt.max_ddt_size = - MAX((physmem * MAX_DDT_PHYSMEM_PERCENT)/100, - SMALLEST_POSSIBLE_MAX_DDT_MB<<20); + MAX((physmem * MAX_DDT_PHYSMEM_PERCENT) / 100, + SMALLEST_POSSIBLE_MAX_DDT_MB << 20); - numbuckets = ddt.max_ddt_size/(sizeof (dedup_entry_t)); + numbuckets = ddt.max_ddt_size / (sizeof (dedup_entry_t)); /* * numbuckets must be a power of 2. Increase number to @@ -253,32 +263,29 @@ cksummer(void *arg) ddt.numhashbits = high_order_bit(numbuckets) - 1; ddt.ddt_full = B_FALSE; - /* Initialize the write-by-reference block. */ - wbr_drr.drr_type = DRR_WRITE_BYREF; - wbr_drr.drr_payloadlen = 0; - outfd = dda->outputfd; ofp = fdopen(dda->inputfd, "r"); - while (ssread(drr, sizeof (dmu_replay_record_t), ofp) != 0) { + while (ssread(drr, sizeof (*drr), ofp) != 0) { switch (drr->drr_type) { case DRR_BEGIN: { - int fflags; + struct drr_begin *drrb = &drr->drr_u.drr_begin; + int fflags; + int sz = 0; ZIO_SET_CHECKSUM(&stream_cksum, 0, 0, 0, 0); + ASSERT3U(drrb->drr_magic, ==, DMU_BACKUP_MAGIC); + /* set the DEDUP feature flag for this stream */ fflags = DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo); fflags |= (DMU_BACKUP_FEATURE_DEDUP | DMU_BACKUP_FEATURE_DEDUPPROPS); DMU_SET_FEATUREFLAGS(drrb->drr_versioninfo, fflags); - if (cksum_and_write(drr, sizeof (dmu_replay_record_t), - &stream_cksum, outfd) == -1) - goto out; if (DMU_GET_STREAM_HDRTYPE(drrb->drr_versioninfo) == DMU_COMPOUNDSTREAM && drr->drr_payloadlen != 0) { - int sz = drr->drr_payloadlen; + sz = drr->drr_payloadlen; if (sz > SPA_MAXBLOCKSIZE) { buf = zfs_realloc(dda->dedup_hdl, buf, @@ -287,64 +294,60 @@ cksummer(void *arg) (void) ssread(buf, sz, ofp); if (ferror(stdin)) perror("fread"); - if (cksum_and_write(buf, sz, &stream_cksum, - outfd) == -1) - goto out; } + if (dump_record(drr, buf, sz, &stream_cksum, + outfd) != 0) + goto out; break; } case DRR_END: { + struct drr_end *drre = &drr->drr_u.drr_end; /* use the recalculated checksum */ - ZIO_SET_CHECKSUM(&drre->drr_checksum, - stream_cksum.zc_word[0], stream_cksum.zc_word[1], - stream_cksum.zc_word[2], stream_cksum.zc_word[3]); - if ((write(outfd, drr, - sizeof (dmu_replay_record_t))) == -1) + drre->drr_checksum = stream_cksum; + if (dump_record(drr, NULL, 0, &stream_cksum, + outfd) != 0) goto out; break; } case DRR_OBJECT: { - if (cksum_and_write(drr, sizeof (dmu_replay_record_t), - &stream_cksum, outfd) == -1) - goto out; + struct drr_object *drro = &drr->drr_u.drr_object; if (drro->drr_bonuslen > 0) { (void) ssread(buf, P2ROUNDUP((uint64_t)drro->drr_bonuslen, 8), ofp); - if (cksum_and_write(buf, - P2ROUNDUP((uint64_t)drro->drr_bonuslen, 8), - &stream_cksum, outfd) == -1) - goto out; } + if (dump_record(drr, buf, + P2ROUNDUP((uint64_t)drro->drr_bonuslen, 8), + &stream_cksum, outfd) != 0) + goto out; break; } case DRR_SPILL: { - if (cksum_and_write(drr, sizeof (dmu_replay_record_t), - &stream_cksum, outfd) == -1) - goto out; + struct drr_spill *drrs = &drr->drr_u.drr_spill; (void) ssread(buf, drrs->drr_length, ofp); - if (cksum_and_write(buf, drrs->drr_length, - &stream_cksum, outfd) == -1) + if (dump_record(drr, buf, drrs->drr_length, + &stream_cksum, outfd) != 0) goto out; break; } case DRR_FREEOBJECTS: { - if (cksum_and_write(drr, sizeof (dmu_replay_record_t), - &stream_cksum, outfd) == -1) + if (dump_record(drr, NULL, 0, &stream_cksum, + outfd) != 0) goto out; break; } case DRR_WRITE: { + struct drr_write *drrw = &drr->drr_u.drr_write; dataref_t dataref; (void) ssread(buf, drrw->drr_length, ofp); @@ -382,7 +385,13 @@ cksummer(void *arg) if (ddt_update(dda->dedup_hdl, &ddt, &drrw->drr_key.ddk_cksum, drrw->drr_key.ddk_prop, &dataref)) { + dmu_replay_record_t wbr_drr = {0}; + struct drr_write_byref *wbr_drrr = + &wbr_drr.drr_u.drr_write_byref; + /* block already present in stream */ + wbr_drr.drr_type = DRR_WRITE_BYREF; + wbr_drrr->drr_object = drrw->drr_object; wbr_drrr->drr_offset = drrw->drr_offset; wbr_drrr->drr_length = drrw->drr_length; @@ -402,19 +411,13 @@ cksummer(void *arg) wbr_drrr->drr_key.ddk_prop = drrw->drr_key.ddk_prop; - if (cksum_and_write(&wbr_drr, - sizeof (dmu_replay_record_t), &stream_cksum, - outfd) == -1) + if (dump_record(&wbr_drr, NULL, 0, + &stream_cksum, outfd) != 0) goto out; } else { /* block not previously seen */ - if (cksum_and_write(drr, - sizeof (dmu_replay_record_t), &stream_cksum, - outfd) == -1) - goto out; - if (cksum_and_write(buf, - drrw->drr_length, - &stream_cksum, outfd) == -1) + if (dump_record(drr, buf, drrw->drr_length, + &stream_cksum, outfd) != 0) goto out; } break; @@ -422,28 +425,27 @@ cksummer(void *arg) case DRR_WRITE_EMBEDDED: { - if (cksum_and_write(drr, sizeof (dmu_replay_record_t), - &stream_cksum, outfd) == -1) - goto out; + struct drr_write_embedded *drrwe = + &drr->drr_u.drr_write_embedded; (void) ssread(buf, P2ROUNDUP((uint64_t)drrwe->drr_psize, 8), ofp); - if (cksum_and_write(buf, + if (dump_record(drr, buf, P2ROUNDUP((uint64_t)drrwe->drr_psize, 8), - &stream_cksum, outfd) == -1) + &stream_cksum, outfd) != 0) goto out; break; } case DRR_FREE: { - if (cksum_and_write(drr, sizeof (dmu_replay_record_t), - &stream_cksum, outfd) == -1) + if (dump_record(drr, NULL, 0, &stream_cksum, + outfd) != 0) goto out; break; } default: - (void) printf("INVALID record type 0x%x\n", + (void) fprintf(stderr, "INVALID record type 0x%x\n", drr->drr_type); /* should never happen, so assert */ assert(B_FALSE); @@ -1470,18 +1472,11 @@ zfs_send(zfs_handle_t *zhp, const char * sizeof (drr.drr_u.drr_begin.drr_toname), "%s@%s", zhp->zfs_name, tosnap); drr.drr_payloadlen = buflen; - err = cksum_and_write(&drr, sizeof (drr), &zc, outfd); - /* write header nvlist */ - if (err != -1 && packbuf != NULL) { - err = cksum_and_write(packbuf, buflen, &zc, - outfd); - } + err = dump_record(&drr, packbuf, buflen, &zc, outfd); free(packbuf); - if (err == -1) { - err = errno; + if (err != 0) goto stderr_out; - } /* write end record */ bzero(&drr, sizeof (drr)); @@ -1714,6 +1709,8 @@ recv_read(libzfs_handle_t *hdl, int fd, int rv; int len = ilen; + assert(ilen <= SPA_MAXBLOCKSIZE); + do { rv = read(fd, cp, len); cp += rv; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Mon Aug 10 19:32:30 2015 (r286586) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Mon Aug 10 19:32:58 2015 (r286587) @@ -73,7 +73,6 @@ dump_bytes(dmu_sendarg_t *dsp, void *buf struct iovec aiov; ASSERT0(len % 8); - fletcher_4_incremental_native(buf, len, &dsp->dsa_zc); aiov.iov_base = buf; aiov.iov_len = len; auio.uio_iov = &aiov; @@ -99,6 +98,38 @@ dump_bytes(dmu_sendarg_t *dsp, void *buf return (dsp->dsa_err); } +/* + * For all record types except BEGIN, fill in the checksum (overlaid in + * drr_u.drr_checksum.drr_checksum). The checksum verifies everything + * up to the start of the checksum itself. + */ +static int +dump_record(dmu_sendarg_t *dsp, void *payload, int payload_len) +{ + ASSERT3U(offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), + ==, sizeof (dmu_replay_record_t) - sizeof (zio_cksum_t)); + fletcher_4_incremental_native(dsp->dsa_drr, + offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), + &dsp->dsa_zc); + if (dsp->dsa_drr->drr_type != DRR_BEGIN) { + ASSERT(ZIO_CHECKSUM_IS_ZERO(&dsp->dsa_drr->drr_u. + drr_checksum.drr_checksum)); + dsp->dsa_drr->drr_u.drr_checksum.drr_checksum = dsp->dsa_zc; + } + fletcher_4_incremental_native(&dsp->dsa_drr-> + drr_u.drr_checksum.drr_checksum, + sizeof (zio_cksum_t), &dsp->dsa_zc); + if (dump_bytes(dsp, dsp->dsa_drr, sizeof (dmu_replay_record_t)) != 0) + return (SET_ERROR(EINTR)); + if (payload_len != 0) { + fletcher_4_incremental_native(payload, payload_len, + &dsp->dsa_zc); + if (dump_bytes(dsp, payload, payload_len) != 0) + return (SET_ERROR(EINTR)); + } + return (0); +} + static int dump_free(dmu_sendarg_t *dsp, uint64_t object, uint64_t offset, uint64_t length) @@ -143,8 +174,7 @@ dump_free(dmu_sendarg_t *dsp, uint64_t o */ if (dsp->dsa_pending_op != PENDING_NONE && dsp->dsa_pending_op != PENDING_FREE) { - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (SET_ERROR(EINTR)); dsp->dsa_pending_op = PENDING_NONE; } @@ -167,8 +197,7 @@ dump_free(dmu_sendarg_t *dsp, uint64_t o return (0); } else { /* not a continuation. Push out pending record */ - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (SET_ERROR(EINTR)); dsp->dsa_pending_op = PENDING_NONE; } @@ -181,8 +210,7 @@ dump_free(dmu_sendarg_t *dsp, uint64_t o drrf->drr_length = length; drrf->drr_toguid = dsp->dsa_toguid; if (length == -1ULL) { - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (SET_ERROR(EINTR)); } else { dsp->dsa_pending_op = PENDING_FREE; @@ -214,12 +242,11 @@ dump_write(dmu_sendarg_t *dsp, dmu_objec * of different types. */ if (dsp->dsa_pending_op != PENDING_NONE) { - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (SET_ERROR(EINTR)); dsp->dsa_pending_op = PENDING_NONE; } - /* write a DATA record */ + /* write a WRITE record */ bzero(dsp->dsa_drr, sizeof (dmu_replay_record_t)); dsp->dsa_drr->drr_type = DRR_WRITE; drrw->drr_object = object; @@ -245,9 +272,7 @@ dump_write(dmu_sendarg_t *dsp, dmu_objec drrw->drr_key.ddk_cksum = bp->blk_cksum; } - if (dump_bytes(dsp, dsp->dsa_drr, sizeof (dmu_replay_record_t)) != 0) - return (SET_ERROR(EINTR)); - if (dump_bytes(dsp, data, blksz) != 0) + if (dump_record(dsp, data, blksz) != 0) return (SET_ERROR(EINTR)); return (0); } @@ -261,8 +286,7 @@ dump_write_embedded(dmu_sendarg_t *dsp, &(dsp->dsa_drr->drr_u.drr_write_embedded); if (dsp->dsa_pending_op != PENDING_NONE) { - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (EINTR); dsp->dsa_pending_op = PENDING_NONE; } @@ -282,9 +306,7 @@ dump_write_embedded(dmu_sendarg_t *dsp, decode_embedded_bp_compressed(bp, buf); - if (dump_bytes(dsp, dsp->dsa_drr, sizeof (dmu_replay_record_t)) != 0) - return (EINTR); - if (dump_bytes(dsp, buf, P2ROUNDUP(drrw->drr_psize, 8)) != 0) + if (dump_record(dsp, buf, P2ROUNDUP(drrw->drr_psize, 8)) != 0) return (EINTR); return (0); } @@ -295,8 +317,7 @@ dump_spill(dmu_sendarg_t *dsp, uint64_t struct drr_spill *drrs = &(dsp->dsa_drr->drr_u.drr_spill); if (dsp->dsa_pending_op != PENDING_NONE) { - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (SET_ERROR(EINTR)); dsp->dsa_pending_op = PENDING_NONE; } @@ -308,9 +329,7 @@ dump_spill(dmu_sendarg_t *dsp, uint64_t drrs->drr_length = blksz; drrs->drr_toguid = dsp->dsa_toguid; - if (dump_bytes(dsp, dsp->dsa_drr, sizeof (dmu_replay_record_t))) - return (SET_ERROR(EINTR)); - if (dump_bytes(dsp, data, blksz)) + if (dump_record(dsp, data, blksz) != 0) return (SET_ERROR(EINTR)); return (0); } @@ -333,8 +352,7 @@ dump_freeobjects(dmu_sendarg_t *dsp, uin */ if (dsp->dsa_pending_op != PENDING_NONE && dsp->dsa_pending_op != PENDING_FREEOBJECTS) { - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (SET_ERROR(EINTR)); dsp->dsa_pending_op = PENDING_NONE; } @@ -348,8 +366,7 @@ dump_freeobjects(dmu_sendarg_t *dsp, uin return (0); } else { /* can't be aggregated. Push out pending record */ - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (SET_ERROR(EINTR)); dsp->dsa_pending_op = PENDING_NONE; } @@ -376,8 +393,7 @@ dump_dnode(dmu_sendarg_t *dsp, uint64_t return (dump_freeobjects(dsp, object, 1)); if (dsp->dsa_pending_op != PENDING_NONE) { - if (dump_bytes(dsp, dsp->dsa_drr, - sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) return (SET_ERROR(EINTR)); dsp->dsa_pending_op = PENDING_NONE; } @@ -398,11 +414,10 @@ dump_dnode(dmu_sendarg_t *dsp, uint64_t drro->drr_blksz > SPA_OLD_MAXBLOCKSIZE) drro->drr_blksz = SPA_OLD_MAXBLOCKSIZE; - if (dump_bytes(dsp, dsp->dsa_drr, sizeof (dmu_replay_record_t)) != 0) - return (SET_ERROR(EINTR)); - - if (dump_bytes(dsp, DN_BONUS(dnp), P2ROUNDUP(dnp->dn_bonuslen, 8)) != 0) + if (dump_record(dsp, DN_BONUS(dnp), + P2ROUNDUP(dnp->dn_bonuslen, 8)) != 0) { return (SET_ERROR(EINTR)); + } /* Free anything past the end of the file. */ if (dump_free(dsp, object, (dnp->dn_maxblkid + 1) * @@ -651,7 +666,6 @@ dmu_send_impl(void *tag, dsl_pool_t *dp, dsp->dsa_os = os; dsp->dsa_off = off; dsp->dsa_toguid = dsl_dataset_phys(ds)->ds_guid; - ZIO_SET_CHECKSUM(&dsp->dsa_zc, 0, 0, 0, 0); dsp->dsa_pending_op = PENDING_NONE; dsp->dsa_incremental = (fromzb != NULL); dsp->dsa_featureflags = featureflags; @@ -663,7 +677,7 @@ dmu_send_impl(void *tag, dsl_pool_t *dp, dsl_dataset_long_hold(ds, FTAG); dsl_pool_rele(dp, tag); - if (dump_bytes(dsp, drr, sizeof (dmu_replay_record_t)) != 0) { + if (dump_record(dsp, NULL, 0) != 0) { err = dsp->dsa_err; goto out; } @@ -672,7 +686,7 @@ dmu_send_impl(void *tag, dsl_pool_t *dp, backup_cb, dsp); if (dsp->dsa_pending_op != PENDING_NONE) - if (dump_bytes(dsp, drr, sizeof (dmu_replay_record_t)) != 0) + if (dump_record(dsp, NULL, 0) != 0) err = SET_ERROR(EINTR); if (err != 0) { @@ -686,7 +700,7 @@ dmu_send_impl(void *tag, dsl_pool_t *dp, drr->drr_u.drr_end.drr_checksum = dsp->dsa_zc; drr->drr_u.drr_end.drr_toguid = dsp->dsa_toguid; - if (dump_bytes(dsp, drr, sizeof (dmu_replay_record_t)) != 0) { + if (dump_record(dsp, NULL, 0) != 0) { err = dsp->dsa_err; goto out; } @@ -1251,14 +1265,20 @@ dmu_recv_begin(char *tofs, char *tosnap, } struct restorearg { + objset_t *os; int err; boolean_t byteswap; kthread_t *td; struct file *fp; - char *buf; uint64_t voff; int bufsize; /* amount of memory allocated for buf */ + + dmu_replay_record_t *drr; + dmu_replay_record_t *next_drr; + char *buf; zio_cksum_t cksum; + zio_cksum_t prev_cksum; + avl_tree_t *guid_to_ds_map; }; @@ -1323,14 +1343,11 @@ restore_bytes(struct restorearg *ra, voi return (error); } -static void * -restore_read(struct restorearg *ra, int len, char *buf) +static int +restore_read(struct restorearg *ra, int len, void *buf) { int done = 0; - if (buf == NULL) - buf = ra->buf; - /* some things will require 8-byte alignment, so everything must */ ASSERT0(len % 8); ASSERT3U(len, <=, ra->bufsize); @@ -1346,24 +1363,21 @@ restore_read(struct restorearg *ra, int ra->voff += len - done - resid; done = len - resid; if (ra->err != 0) - return (NULL); + return (ra->err); } ASSERT3U(done, ==, len); - if (ra->byteswap) - fletcher_4_incremental_byteswap(buf, len, &ra->cksum); - else - fletcher_4_incremental_native(buf, len, &ra->cksum); - return (buf); + return (0); } static void -backup_byteswap(dmu_replay_record_t *drr) +byteswap_record(dmu_replay_record_t *drr) { #define DO64(X) (drr->drr_u.X = BSWAP_64(drr->drr_u.X)) #define DO32(X) (drr->drr_u.X = BSWAP_32(drr->drr_u.X)) drr->drr_type = BSWAP_32(drr->drr_type); drr->drr_payloadlen = BSWAP_32(drr->drr_payloadlen); + switch (drr->drr_type) { case DRR_BEGIN: DO64(drr_begin.drr_magic); @@ -1393,10 +1407,7 @@ backup_byteswap(dmu_replay_record_t *drr DO64(drr_write.drr_offset); DO64(drr_write.drr_length); DO64(drr_write.drr_toguid); - DO64(drr_write.drr_key.ddk_cksum.zc_word[0]); - DO64(drr_write.drr_key.ddk_cksum.zc_word[1]); - DO64(drr_write.drr_key.ddk_cksum.zc_word[2]); - DO64(drr_write.drr_key.ddk_cksum.zc_word[3]); + ZIO_CHECKSUM_BSWAP(&drr->drr_u.drr_write.drr_key.ddk_cksum); DO64(drr_write.drr_key.ddk_prop); break; case DRR_WRITE_BYREF: @@ -1407,10 +1418,8 @@ backup_byteswap(dmu_replay_record_t *drr DO64(drr_write_byref.drr_refguid); DO64(drr_write_byref.drr_refobject); DO64(drr_write_byref.drr_refoffset); - DO64(drr_write_byref.drr_key.ddk_cksum.zc_word[0]); - DO64(drr_write_byref.drr_key.ddk_cksum.zc_word[1]); - DO64(drr_write_byref.drr_key.ddk_cksum.zc_word[2]); - DO64(drr_write_byref.drr_key.ddk_cksum.zc_word[3]); + ZIO_CHECKSUM_BSWAP(&drr->drr_u.drr_write_byref. + drr_key.ddk_cksum); DO64(drr_write_byref.drr_key.ddk_prop); break; case DRR_WRITE_EMBEDDED: @@ -1433,13 +1442,15 @@ backup_byteswap(dmu_replay_record_t *drr DO64(drr_spill.drr_toguid); break; case DRR_END: - DO64(drr_end.drr_checksum.zc_word[0]); - DO64(drr_end.drr_checksum.zc_word[1]); - DO64(drr_end.drr_checksum.zc_word[2]); - DO64(drr_end.drr_checksum.zc_word[3]); DO64(drr_end.drr_toguid); + ZIO_CHECKSUM_BSWAP(&drr->drr_u.drr_end.drr_checksum); break; } + + if (drr->drr_type != DRR_BEGIN) { + ZIO_CHECKSUM_BSWAP(&drr->drr_u.drr_checksum.drr_checksum); + } + #undef DO64 #undef DO32 } @@ -1456,11 +1467,10 @@ deduce_nblkptr(dmu_object_type_t bonus_t } static int -restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro) +restore_object(struct restorearg *ra, struct drr_object *drro, void *data) { dmu_object_info_t doi; dmu_tx_t *tx; - void *data = NULL; uint64_t object; int err; @@ -1471,23 +1481,17 @@ restore_object(struct restorearg *ra, ob drro->drr_compress >= ZIO_COMPRESS_FUNCTIONS || P2PHASE(drro->drr_blksz, SPA_MINBLOCKSIZE) || drro->drr_blksz < SPA_MINBLOCKSIZE || - drro->drr_blksz > spa_maxblocksize(dmu_objset_spa(os)) || + drro->drr_blksz > spa_maxblocksize(dmu_objset_spa(ra->os)) || drro->drr_bonuslen > DN_MAX_BONUSLEN) { return (SET_ERROR(EINVAL)); } - err = dmu_object_info(os, drro->drr_object, &doi); + err = dmu_object_info(ra->os, drro->drr_object, &doi); if (err != 0 && err != ENOENT) return (SET_ERROR(EINVAL)); object = err == 0 ? drro->drr_object : DMU_NEW_OBJECT; - if (drro->drr_bonuslen) { - data = restore_read(ra, P2ROUNDUP(drro->drr_bonuslen, 8), NULL); - if (ra->err != 0) - return (ra->err); - } - /* * If we are losing blkptrs or changing the block size this must * be a new file instance. We must clear out the previous file @@ -1501,14 +1505,14 @@ restore_object(struct restorearg *ra, ob if (drro->drr_blksz != doi.doi_data_block_size || nblkptr < doi.doi_nblkptr) { - err = dmu_free_long_range(os, drro->drr_object, + err = dmu_free_long_range(ra->os, drro->drr_object, 0, DMU_OBJECT_END); if (err != 0) return (SET_ERROR(EINVAL)); } } - tx = dmu_tx_create(os); + tx = dmu_tx_create(ra->os); dmu_tx_hold_bonus(tx, object); err = dmu_tx_assign(tx, TXG_WAIT); if (err != 0) { @@ -1518,7 +1522,7 @@ restore_object(struct restorearg *ra, ob if (object == DMU_NEW_OBJECT) { /* currently free, want to be allocated */ - err = dmu_object_claim(os, drro->drr_object, + err = dmu_object_claim(ra->os, drro->drr_object, drro->drr_type, drro->drr_blksz, drro->drr_bonustype, drro->drr_bonuslen, tx); } else if (drro->drr_type != doi.doi_type || @@ -1526,7 +1530,7 @@ restore_object(struct restorearg *ra, ob drro->drr_bonustype != doi.doi_bonus_type || drro->drr_bonuslen != doi.doi_bonus_size) { /* currently allocated, but with different properties */ - err = dmu_object_reclaim(os, drro->drr_object, + err = dmu_object_reclaim(ra->os, drro->drr_object, drro->drr_type, drro->drr_blksz, drro->drr_bonustype, drro->drr_bonuslen, tx); } @@ -1535,14 +1539,15 @@ restore_object(struct restorearg *ra, ob return (SET_ERROR(EINVAL)); } - dmu_object_set_checksum(os, drro->drr_object, drro->drr_checksumtype, - tx); - dmu_object_set_compress(os, drro->drr_object, drro->drr_compress, tx); + dmu_object_set_checksum(ra->os, drro->drr_object, + drro->drr_checksumtype, tx); + dmu_object_set_compress(ra->os, drro->drr_object, + drro->drr_compress, tx); if (data != NULL) { dmu_buf_t *db; - VERIFY(0 == dmu_bonus_hold(os, drro->drr_object, FTAG, &db)); + VERIFY0(dmu_bonus_hold(ra->os, drro->drr_object, FTAG, &db)); dmu_buf_will_dirty(db, tx); ASSERT3U(db->db_size, >=, drro->drr_bonuslen); @@ -1561,7 +1566,7 @@ restore_object(struct restorearg *ra, ob /* ARGSUSED */ static int -restore_freeobjects(struct restorearg *ra, objset_t *os, +restore_freeobjects(struct restorearg *ra, struct drr_freeobjects *drrfo) { uint64_t obj; @@ -1571,13 +1576,13 @@ restore_freeobjects(struct restorearg *r for (obj = drrfo->drr_firstobj; obj < drrfo->drr_firstobj + drrfo->drr_numobjs; - (void) dmu_object_next(os, &obj, FALSE, 0)) { + (void) dmu_object_next(ra->os, &obj, FALSE, 0)) { int err; - if (dmu_object_info(os, obj, NULL) != 0) + if (dmu_object_info(ra->os, obj, NULL) != 0) continue; - err = dmu_free_long_object(os, obj); + err = dmu_free_long_object(ra->os, obj); if (err != 0) return (err); } @@ -1585,49 +1590,37 @@ restore_freeobjects(struct restorearg *r } static int -restore_write(struct restorearg *ra, objset_t *os, - struct drr_write *drrw) +restore_write(struct restorearg *ra, struct drr_write *drrw, arc_buf_t *abuf) { dmu_tx_t *tx; - void *data; int err; if (drrw->drr_offset + drrw->drr_length < drrw->drr_offset || !DMU_OT_IS_VALID(drrw->drr_type)) return (SET_ERROR(EINVAL)); - if (dmu_object_info(os, drrw->drr_object, NULL) != 0) + if (dmu_object_info(ra->os, drrw->drr_object, NULL) != 0) return (SET_ERROR(EINVAL)); - dmu_buf_t *bonus; - if (dmu_bonus_hold(os, drrw->drr_object, FTAG, &bonus) != 0) - return (SET_ERROR(EINVAL)); - - arc_buf_t *abuf = dmu_request_arcbuf(bonus, drrw->drr_length); - - data = restore_read(ra, drrw->drr_length, abuf->b_data); - if (data == NULL) { - dmu_return_arcbuf(abuf); - dmu_buf_rele(bonus, FTAG); - return (ra->err); - } - - tx = dmu_tx_create(os); + tx = dmu_tx_create(ra->os); dmu_tx_hold_write(tx, drrw->drr_object, drrw->drr_offset, drrw->drr_length); err = dmu_tx_assign(tx, TXG_WAIT); if (err != 0) { - dmu_return_arcbuf(abuf); - dmu_buf_rele(bonus, FTAG); dmu_tx_abort(tx); return (err); } if (ra->byteswap) { dmu_object_byteswap_t byteswap = DMU_OT_BYTESWAP(drrw->drr_type); - dmu_ot_byteswap[byteswap].ob_func(data, drrw->drr_length); + dmu_ot_byteswap[byteswap].ob_func(abuf->b_data, + drrw->drr_length); } + + dmu_buf_t *bonus; + if (dmu_bonus_hold(ra->os, drrw->drr_object, FTAG, &bonus) != 0) + return (SET_ERROR(EINVAL)); dmu_assign_arcbuf(bonus, drrw->drr_offset, abuf, tx); dmu_tx_commit(tx); dmu_buf_rele(bonus, FTAG); @@ -1642,8 +1635,7 @@ restore_write(struct restorearg *ra, obj * data from the stream to fulfill this write. */ static int -restore_write_byref(struct restorearg *ra, objset_t *os, - struct drr_write_byref *drrwbr) +restore_write_byref(struct restorearg *ra, struct drr_write_byref *drrwbr) { dmu_tx_t *tx; int err; @@ -1669,7 +1661,7 @@ restore_write_byref(struct restorearg *r if (dmu_objset_from_ds(gmep->gme_ds, &ref_os)) return (SET_ERROR(EINVAL)); } else { - ref_os = os; + ref_os = ra->os; } err = dmu_buf_hold(ref_os, drrwbr->drr_refobject, @@ -1677,7 +1669,7 @@ restore_write_byref(struct restorearg *r if (err != 0) return (err); - tx = dmu_tx_create(os); + tx = dmu_tx_create(ra->os); dmu_tx_hold_write(tx, drrwbr->drr_object, drrwbr->drr_offset, drrwbr->drr_length); @@ -1686,7 +1678,7 @@ restore_write_byref(struct restorearg *r dmu_tx_abort(tx); return (err); } - dmu_write(os, drrwbr->drr_object, + dmu_write(ra->os, drrwbr->drr_object, drrwbr->drr_offset, drrwbr->drr_length, dbp->db_data, tx); dmu_buf_rele(dbp, FTAG); dmu_tx_commit(tx); @@ -1694,12 +1686,11 @@ restore_write_byref(struct restorearg *r } *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Mon Aug 10 19:38:08 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 10D6099E440; Mon, 10 Aug 2015 19:38:08 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E99D4A9D; Mon, 10 Aug 2015 19:38:07 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AJc7Zm099060; Mon, 10 Aug 2015 19:38:07 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AJc7dE099059; Mon, 10 Aug 2015 19:38:07 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508101938.t7AJc7dE099059@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 19:38:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286589 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 19:38:08 -0000 Author: mav Date: Mon Aug 10 19:38:07 2015 New Revision: 286589 URL: https://svnweb.freebsd.org/changeset/base/286589 Log: MFV 286588: 5820 verify failed in zio_done(): BP_EQUAL(bp, io_bp_orig) Reviewed by: Alex Reece Reviewed by: George Wilson Reviewed by: Steven Hartland Approved by: Garrett D'Amore Author: Matthew Ahrens illumod/illumos-gate@34e8acef009195effafdcf6417aec385e241796e Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Mon Aug 10 19:37:43 2015 (r286588) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Mon Aug 10 19:38:07 2015 (r286589) @@ -1652,19 +1652,32 @@ dmu_sync(zio_t *pio, uint64_t txg, dmu_s ASSERT(dr->dr_next == NULL || dr->dr_next->dr_txg < txg); /* - * Assume the on-disk data is X, the current syncing data is Y, - * and the current in-memory data is Z (currently in dmu_sync). - * X and Z are identical but Y is has been modified. Normally, - * when X and Z are the same we will perform a nopwrite but if Y - * is different we must disable nopwrite since the resulting write - * of Y to disk can free the block containing X. If we allowed a - * nopwrite to occur the block pointing to Z would reference a freed - * block. Since this is a rare case we simplify this by disabling - * nopwrite if the current dmu_sync-ing dbuf has been modified in - * a previous transaction. + * Assume the on-disk data is X, the current syncing data (in + * txg - 1) is Y, and the current in-memory data is Z (currently + * in dmu_sync). + * + * We usually want to perform a nopwrite if X and Z are the + * same. However, if Y is different (i.e. the BP is going to + * change before this write takes effect), then a nopwrite will + * be incorrect - we would override with X, which could have + * been freed when Y was written. + * + * (Note that this is not a concern when we are nop-writing from + * syncing context, because X and Y must be identical, because + * all previous txgs have been synced.) + * + * Therefore, we disable nopwrite if the current BP could change + * before this TXG. There are two ways it could change: by + * being dirty (dr_next is non-NULL), or by being freed + * (dnode_block_freed()). This behavior is verified by + * zio_done(), which VERIFYs that the override BP is identical + * to the on-disk BP. */ - if (dr->dr_next) + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + if (dr->dr_next != NULL || dnode_block_freed(dn, db->db_blkid)) zp.zp_nopwrite = B_FALSE; + DB_DNODE_EXIT(db); ASSERT(dr->dr_txg == txg); if (dr->dt.dl.dr_override_state == DR_IN_DMU_SYNC || From owner-svn-src-head@freebsd.org Mon Aug 10 19:41:32 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7A59399E56B; Mon, 10 Aug 2015 19:41:32 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6BE83E8D; Mon, 10 Aug 2015 19:41:32 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AJfWRv002601; Mon, 10 Aug 2015 19:41:32 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AJfWRG002600; Mon, 10 Aug 2015 19:41:32 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508101941.t7AJfWRG002600@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Mon, 10 Aug 2015 19:41:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286590 - head/usr.bin X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 19:41:32 -0000 Author: emaste Date: Mon Aug 10 19:41:31 2015 New Revision: 286590 URL: https://svnweb.freebsd.org/changeset/base/286590 Log: Remove ${_subdir}s that are never set The MK_NIS subdirs were leftovers from r212558 and kdump/truss were introduced in r240404. Sponsored by: The FreeBSD Foundation Modified: head/usr.bin/Makefile Modified: head/usr.bin/Makefile ============================================================================== --- head/usr.bin/Makefile Mon Aug 10 19:38:07 2015 (r286589) +++ head/usr.bin/Makefile Mon Aug 10 19:41:31 2015 (r286590) @@ -69,7 +69,6 @@ SUBDIR= ${_addr2line} \ ipcs \ join \ jot \ - ${_kdump} \ keylogin \ keylogout \ killall \ @@ -175,7 +174,6 @@ SUBDIR= ${_addr2line} \ tr \ true \ truncate \ - ${_truss} \ tset \ tsort \ tty \ @@ -202,10 +200,7 @@ SUBDIR= ${_addr2line} \ xo \ xz \ xzdec \ - yes \ - ${_ypcat} \ - ${_ypmatch} \ - ${_ypwhich} + yes # NB: keep these sorted by MK_* knobs From owner-svn-src-head@freebsd.org Mon Aug 10 20:08:10 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C0AE199ED15; Mon, 10 Aug 2015 20:08:10 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A7B593D4; Mon, 10 Aug 2015 20:08:10 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AK8AAj012342; Mon, 10 Aug 2015 20:08:10 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AK89xT012339; Mon, 10 Aug 2015 20:08:09 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508102008.t7AK89xT012339@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Mon, 10 Aug 2015 20:08:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286591 - in head: share/man/man4 sys/dev/uart X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 20:08:11 -0000 Author: ian Date: Mon Aug 10 20:08:09 2015 New Revision: 286591 URL: https://svnweb.freebsd.org/changeset/base/286591 Log: Allow the choice of PPS signal captured by uart(4) to be runtime-configured, eliminating the need to build a custom kernel to use the CTS signal. The historical UART_PPS_ON_CTS kernel option is still honored, but now it can be overridden at runtime using a tunable to configure all uart devices (hw.uart.pps_mode) or specific devices (dev.uart.#.pps_mode). The per- device config is both a tunable and a writable sysctl. This syncs the PPS capabilities of uart(4) with the enhancements recently recently added to ucom(4) for capturing from USB serial devices. Relnotes: yes Modified: head/share/man/man4/uart.4 head/sys/dev/uart/uart_bus.h head/sys/dev/uart/uart_core.c Modified: head/share/man/man4/uart.4 ============================================================================== --- head/share/man/man4/uart.4 Mon Aug 10 19:41:31 2015 (r286590) +++ head/share/man/man4/uart.4 Mon Aug 10 20:08:09 2015 (r286591) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 12, 2008 +.Dd August 10, 2015 .Dt UART 4 .Os .Sh NAME @@ -151,6 +151,39 @@ SCC: serial communications controllers s device driver. .El .\" +.Sh Pulse Per Second (PPS) Timing Interface +The +.Nm +driver can capture PPS timing information as defined in RFC 2783. +The API, accessed via +.Xr ioctl 8 , +is available on the tty device. +To use the PPS capture feature with +.Xr ntpd 8 , +symlink the tty device to +.Va /dev/pps0. +.Pp +The +.Va hw.uart.pps_mode +tunable configures the PPS capture mode for all uart devices; +it can be set in +.Xr loader.conf 5 . +The +.Va dev.uart.0.pps_mode +sysctl configures the PPS capture mode for a specific uart device; +it can be set in +.Xr loader.conf 5 +or +.Xr sysctl.conf 5 . +The following capture modes are available: +.Bl -tag -compact -offset "mmmm" -width "mmmm" +.It 0 +Capture disabled. +.It 1 +Capture pulses on the CTS line. +.It 2 +Capture pulses on the DCD line (default). +.El .Sh FILES .Bl -tag -width ".Pa /dev/ttyu?.init" -compact .It Pa /dev/ttyu? Modified: head/sys/dev/uart/uart_bus.h ============================================================================== --- head/sys/dev/uart/uart_bus.h Mon Aug 10 19:41:31 2015 (r286590) +++ head/sys/dev/uart/uart_bus.h Mon Aug 10 20:08:09 2015 (r286591) @@ -48,14 +48,6 @@ #define UART_STAT_OVERRUN 0x0400 #define UART_STAT_PARERR 0x0800 -#ifdef UART_PPS_ON_CTS -#define UART_SIG_DPPS SER_DCTS -#define UART_SIG_PPS SER_CTS -#else -#define UART_SIG_DPPS SER_DDCD -#define UART_SIG_PPS SER_DCD -#endif - /* UART_IOCTL() requests */ #define UART_IOCTL_BREAK 1 #define UART_IOCTL_IFLOW 2 @@ -120,6 +112,7 @@ struct uart_softc { /* Pulse capturing support (PPS). */ struct pps_state sc_pps; + int sc_pps_mode; /* Upper layer data. */ void *sc_softih; Modified: head/sys/dev/uart/uart_core.c ============================================================================== --- head/sys/dev/uart/uart_core.c Mon Aug 10 19:41:31 2015 (r286590) +++ head/sys/dev/uart/uart_core.c Mon Aug 10 20:08:09 2015 (r286591) @@ -70,6 +70,111 @@ static int uart_force_poll; SYSCTL_INT(_debug, OID_AUTO, uart_force_poll, CTLFLAG_RDTUN, &uart_force_poll, 0, "Force UART polling"); +#define PPS_MODE_DISABLED 0 +#define PPS_MODE_CTS 1 +#define PPS_MODE_DCD 2 + +static inline int +uart_pps_signal(int pps_mode) +{ + + switch(pps_mode) + { + case PPS_MODE_CTS: + return (SER_CTS); + case PPS_MODE_DCD: + return (SER_DCD); + } + return (0); +} +static inline int +uart_pps_mode_valid(int pps_mode) +{ + + switch(pps_mode) + { + case PPS_MODE_DISABLED: + case PPS_MODE_CTS: + case PPS_MODE_DCD: + return (true); + } + return (false); +} + +static const char * +uart_pps_mode_name(int pps_mode) +{ + switch(pps_mode) + { + case PPS_MODE_DISABLED: + return ("disabled"); + case PPS_MODE_CTS: + return ("CTS"); + case PPS_MODE_DCD: + return ("DCD"); + } + return ("invalid"); +} + +static int +uart_pps_mode_sysctl(SYSCTL_HANDLER_ARGS) +{ + struct uart_softc *sc; + int err, tmp; + + sc = arg1; + tmp = sc->sc_pps_mode; + err = sysctl_handle_int(oidp, &tmp, 0, req); + if (err != 0 || req->newptr == NULL) + return (err); + if (!uart_pps_mode_valid(tmp)) + return (EINVAL); + sc->sc_pps_mode = tmp; + return(0); +} + +static void +uart_pps_init(struct uart_softc *sc) +{ + struct sysctl_ctx_list *ctx; + struct sysctl_oid *tree; + + ctx = device_get_sysctl_ctx(sc->sc_dev); + tree = device_get_sysctl_tree(sc->sc_dev); + + /* + * The historical default for pps capture mode is either DCD or CTS, + * depending on the UART_PPS_ON_CTS kernel option. Start with that, + * then try to fetch the tunable that overrides the mode for all uart + * devices, then try to fetch the sysctl-tunable that overrides the mode + * for one specific device. + */ +#ifdef UART_PPS_ON_CTS + sc->sc_pps_mode = PPS_MODE_CTS; +#else + sc->sc_pps_mode = PPS_MODE_DCD; +#endif + TUNABLE_INT_FETCH("hw.uart.pps_mode", &sc->sc_pps_mode); + SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "pps_mode", + CTLTYPE_INT | CTLFLAG_RWTUN, sc, 0, uart_pps_mode_sysctl, "I", + "pulse capturing mode - 0/1/2 - disabled/CTS/DCD"); + + if (!uart_pps_mode_valid(sc->sc_pps_mode)) { + device_printf(sc->sc_dev, + "Invalid pps_mode %d configured; disabling PPS capture\n", + sc->sc_pps_mode); + sc->sc_pps_mode = PPS_MODE_DISABLED; + } else if (bootverbose) { + device_printf(sc->sc_dev, "PPS capture mode %d (%s)\n", + sc->sc_pps_mode, uart_pps_mode_name(sc->sc_pps_mode)); + } + + sc->sc_pps.ppscap = PPS_CAPTUREBOTH; + sc->sc_pps.driver_mtx = uart_tty_getlock(sc); + sc->sc_pps.driver_abi = PPS_ABI_VERSION; + pps_init_abi(&sc->sc_pps); +} + void uart_add_sysdev(struct uart_devinfo *di) { @@ -211,14 +316,15 @@ static __inline int uart_intr_sigchg(void *arg) { struct uart_softc *sc = arg; - int new, old, sig; + int new, old, pps_sig, sig; sig = UART_GETSIG(sc); if (sc->sc_pps.ppsparam.mode & PPS_CAPTUREBOTH) { - if (sig & UART_SIG_DPPS) { + pps_sig = uart_pps_signal(sc->sc_pps_mode); + if (sig & SER_DELTA(pps_sig)) { pps_capture(&sc->sc_pps); - pps_event(&sc->sc_pps, (sig & UART_SIG_PPS) ? + pps_event(&sc->sc_pps, (sig & pps_sig) ? PPS_CAPTUREASSERT : PPS_CAPTURECLEAR); } } @@ -571,10 +677,7 @@ uart_bus_attach(device_t dev) } else { if ((error = uart_tty_attach(sc)) != 0) goto fail; - sc->sc_pps.ppscap = PPS_CAPTUREBOTH; - sc->sc_pps.driver_mtx = uart_tty_getlock(sc); - sc->sc_pps.driver_abi = PPS_ABI_VERSION; - pps_init_abi(&sc->sc_pps); + uart_pps_init(sc); } if (sc->sc_sysdev != NULL) From owner-svn-src-head@freebsd.org Mon Aug 10 20:19:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 46A3999EF4F; Mon, 10 Aug 2015 20:19:11 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2B64AB99; Mon, 10 Aug 2015 20:19:11 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AKJBcG016549; Mon, 10 Aug 2015 20:19:11 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AKJBji016548; Mon, 10 Aug 2015 20:19:11 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508102019.t7AKJBji016548@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Mon, 10 Aug 2015 20:19:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286592 - head/usr.bin X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 20:19:11 -0000 Author: emaste Date: Mon Aug 10 20:19:10 2015 New Revision: 286592 URL: https://svnweb.freebsd.org/changeset/base/286592 Log: Use consistent style for optional subdirectories Reviewed by: imp Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D3356 Modified: head/usr.bin/Makefile Modified: head/usr.bin/Makefile ============================================================================== --- head/usr.bin/Makefile Mon Aug 10 20:08:09 2015 (r286591) +++ head/usr.bin/Makefile Mon Aug 10 20:19:10 2015 (r286592) @@ -9,8 +9,7 @@ # Moved to secure: bdes # -SUBDIR= ${_addr2line} \ - alias \ +SUBDIR= alias \ apply \ asa \ awk \ @@ -24,7 +23,6 @@ SUBDIR= ${_addr2line} \ chat \ chpass \ cksum \ - ${_clang} \ cmp \ col \ colldef \ @@ -36,12 +34,10 @@ SUBDIR= ${_addr2line} \ csplit \ ctlstat \ cut \ - ${_cxxfilt} \ dirname \ dpv \ du \ elf2aout \ - ${_elfcopy} \ elfdump \ enigma \ env \ @@ -62,7 +58,6 @@ SUBDIR= ${_addr2line} \ gzip \ head \ hexdump \ - ${_iconv} \ id \ ident \ ipcrm \ @@ -94,15 +89,11 @@ SUBDIR= ${_addr2line} \ lsvfs \ lzmainfo \ m4 \ - ${_makewhatis} \ - ${_man} \ mandoc \ mesg \ minigzip \ ministat \ - ${_mkcsmapper} \ mkdep \ - ${_mkesdb} \ mkfifo \ mkimg \ mklocale \ @@ -116,7 +107,6 @@ SUBDIR= ${_addr2line} \ nfsstat \ nice \ nl \ - ${_nm} \ numactl \ nohup \ opieinfo \ @@ -134,7 +124,6 @@ SUBDIR= ${_addr2line} \ procstat \ protect \ rctl \ - ${_readelf} \ renice \ rev \ revoke \ @@ -149,14 +138,12 @@ SUBDIR= ${_addr2line} \ seq \ shar \ showmount \ - ${_size} \ sockstat \ soelim \ sort \ split \ stat \ stdbuf \ - ${_strings} \ su \ systat \ tabs \ @@ -164,7 +151,6 @@ SUBDIR= ${_addr2line} \ tar \ tcopy \ tee \ - ${_tests} \ time \ timeout \ tip \ @@ -225,7 +211,7 @@ SUBDIR+= calendar .endif .if ${MK_CLANG} != "no" -_clang= clang +SUBDIR+= clang .endif .if ${MK_EE} != "no" @@ -233,13 +219,13 @@ SUBDIR+= ee .endif .if ${MK_ELFTOOLCHAIN_TOOLS} != "no" -_addr2line= addr2line -_cxxfilt= cxxfilt -_elfcopy= elfcopy -_nm= nm -_readelf= readelf -_size= size -_strings= strings +SUBDIR+= addr2line +SUBDIR+= cxxfilt +SUBDIR+= elfcopy +SUBDIR+= nm +SUBDIR+= readelf +SUBDIR+= size +SUBDIR+= strings .endif .if ${MK_FILE} != "no" @@ -267,9 +253,9 @@ SUBDIR+= hesinfo .endif .if ${MK_ICONV} != "no" -_iconv= iconv -_mkcsmapper= mkcsmapper -_mkesdb= mkesdb +SUBDIR+= iconv +SUBDIR+= mkcsmapper +SUBDIR+= mkesdb .endif .if ${MK_ISCSI} != "no" @@ -311,9 +297,9 @@ SUBDIR+= bmake .if ${MK_MAN_UTILS} != "no" SUBDIR+= catman .if ${MK_MANDOCDB} == "no" -_makewhatis= makewhatis +SUBDIR+= makewhatis .endif -_man= man +SUBDIR+= man .endif .if ${MK_NETCAT} != "no" @@ -361,7 +347,7 @@ SUBDIR+= telnet .endif .if ${MK_TESTS} != "no" -_tests= tests +SUBDIR+= tests .endif .if ${MK_TEXTPROC} != "no" From owner-svn-src-head@freebsd.org Mon Aug 10 20:34:47 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5D19A99D4CE; Mon, 10 Aug 2015 20:34:47 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4226166A; Mon, 10 Aug 2015 20:34:47 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AKYlOe025149; Mon, 10 Aug 2015 20:34:47 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AKYl4f025148; Mon, 10 Aug 2015 20:34:47 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508102034.t7AKYl4f025148@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 20:34:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286593 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 20:34:47 -0000 Author: mav Date: Mon Aug 10 20:34:46 2015 New Revision: 286593 URL: https://svnweb.freebsd.org/changeset/base/286593 Log: Local addition and mismerge fix for r286579. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c Mon Aug 10 20:19:10 2015 (r286592) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c Mon Aug 10 20:34:46 2015 (r286593) @@ -299,11 +299,12 @@ vdev_queue_class_tree(vdev_queue_t *vq, static inline avl_tree_t * vdev_queue_type_tree(vdev_queue_t *vq, zio_type_t t) { - ASSERT(t == ZIO_TYPE_READ || t == ZIO_TYPE_WRITE); if (t == ZIO_TYPE_READ) return (&vq->vq_read_offset_tree); - else + else if (t == ZIO_TYPE_WRITE) return (&vq->vq_write_offset_tree); + else + return (NULL); } int @@ -385,10 +386,13 @@ static void vdev_queue_io_add(vdev_queue_t *vq, zio_t *zio) { spa_t *spa = zio->io_spa; + avl_tree_t *qtt; ASSERT(MUTEX_HELD(&vq->vq_lock)); ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE); avl_add(vdev_queue_class_tree(vq, zio->io_priority), zio); - avl_add(vdev_queue_type_tree(vq, zio->io_type), zio); + qtt = vdev_queue_type_tree(vq, zio->io_type); + if (qtt) + avl_add(qtt, zio); #ifdef illumos mutex_enter(&spa->spa_iokstat_lock); @@ -403,10 +407,13 @@ static void vdev_queue_io_remove(vdev_queue_t *vq, zio_t *zio) { spa_t *spa = zio->io_spa; + avl_tree_t *qtt; ASSERT(MUTEX_HELD(&vq->vq_lock)); ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE); avl_remove(vdev_queue_class_tree(vq, zio->io_priority), zio); - avl_remove(vdev_queue_type_tree(vq, zio->io_type), zio); + qtt = vdev_queue_type_tree(vq, zio->io_type); + if (qtt) + avl_remove(qtt, zio); #ifdef illumos mutex_enter(&spa->spa_iokstat_lock); @@ -624,15 +631,6 @@ vdev_queue_aggregate(vdev_queue_t *vq, z if (zio->io_flags & ZIO_FLAG_DONT_AGGREGATE) return (NULL); - /* - * The synchronous i/o queues are not sorted by LBA, so we can't - * find adjacent i/os. These i/os tend to not be tightly clustered, - * or too large to aggregate, so this has little impact on performance. - */ - if (zio->io_priority == ZIO_PRIORITY_SYNC_READ || - zio->io_priority == ZIO_PRIORITY_SYNC_WRITE) - return (NULL); - first = last = zio; if (zio->io_type == ZIO_TYPE_READ) @@ -659,7 +657,7 @@ vdev_queue_aggregate(vdev_queue_t *vq, z */ flags = zio->io_flags & ZIO_FLAG_AGG_INHERIT; t = vdev_queue_type_tree(vq, zio->io_type); - while ((dio = AVL_PREV(t, first)) != NULL && + while (t != NULL && (dio = AVL_PREV(t, first)) != NULL && (dio->io_flags & ZIO_FLAG_AGG_INHERIT) == flags && IO_SPAN(dio, last) <= zfs_vdev_aggregation_limit && IO_GAP(dio, first) <= maxgap) { From owner-svn-src-head@freebsd.org Mon Aug 10 20:50:33 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BDE4A99D857; Mon, 10 Aug 2015 20:50:33 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AE85DE50; Mon, 10 Aug 2015 20:50:33 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AKoXUl030787; Mon, 10 Aug 2015 20:50:33 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AKoWdG030780; Mon, 10 Aug 2015 20:50:32 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201508102050.t7AKoWdG030780@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Mon, 10 Aug 2015 20:50:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286594 - in head/sys: net netinet netinet6 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 20:50:33 -0000 Author: melifaro Date: Mon Aug 10 20:50:31 2015 New Revision: 286594 URL: https://svnweb.freebsd.org/changeset/base/286594 Log: Rename rt_foreach_fib() to rt_foreach_fib_walk(). Suggested by: julian Modified: head/sys/net/route.c head/sys/net/route.h head/sys/netinet/in_rmx.c head/sys/netinet6/in6_rmx.c head/sys/netinet6/nd6_rtr.c Modified: head/sys/net/route.c ============================================================================== --- head/sys/net/route.c Mon Aug 10 20:34:46 2015 (r286593) +++ head/sys/net/route.c Mon Aug 10 20:50:31 2015 (r286594) @@ -813,8 +813,16 @@ rtrequest_fib(int req, } +/* + * Iterates over all existing fibs in system calling + * @setwa_f function prior to traversing each fib. + * Calls @wa_f function for each element in current fib. + * If af is not AF_UNSPEC, iterates over fibs in particular + * address family. + */ void -rt_foreach_fib(int af, rt_setwarg_t *setwa_f, rt_walktree_f_t *wa_f, void *arg) +rt_foreach_fib_walk(int af, rt_setwarg_t *setwa_f, rt_walktree_f_t *wa_f, + void *arg) { struct radix_node_head *rnh; uint32_t fibnum; @@ -899,7 +907,7 @@ void rt_flushifroutes(struct ifnet *ifp) { - rt_foreach_fib(AF_UNSPEC, NULL, rt_ifdelroute, ifp); + rt_foreach_fib_walk(AF_UNSPEC, NULL, rt_ifdelroute, ifp); } /* Modified: head/sys/net/route.h ============================================================================== --- head/sys/net/route.h Mon Aug 10 20:34:46 2015 (r286593) +++ head/sys/net/route.h Mon Aug 10 20:50:31 2015 (r286594) @@ -382,7 +382,7 @@ void rt_updatemtu(struct ifnet *); typedef int rt_walktree_f_t(struct rtentry *, void *); typedef void rt_setwarg_t(struct radix_node_head *, uint32_t, int, void *); -void rt_foreach_fib(int af, rt_setwarg_t *, rt_walktree_f_t *, void *); +void rt_foreach_fib_walk(int af, rt_setwarg_t *, rt_walktree_f_t *, void *); void rt_flushifroutes(struct ifnet *ifp); /* XXX MRT COMPAT VERSIONS THAT SET UNIVERSE to 0 */ Modified: head/sys/netinet/in_rmx.c ============================================================================== --- head/sys/netinet/in_rmx.c Mon Aug 10 20:34:46 2015 (r286593) +++ head/sys/netinet/in_rmx.c Mon Aug 10 20:50:31 2015 (r286594) @@ -213,7 +213,7 @@ in_ifadown(struct ifaddr *ifa, int delet arg.ifa = ifa; arg.del = delete; - rt_foreach_fib(AF_INET, in_setifarnh, in_ifadownkill, &arg); + rt_foreach_fib_walk(AF_INET, in_setifarnh, in_ifadownkill, &arg); ifa->ifa_flags &= ~IFA_ROUTE; /* XXXlocking? */ } Modified: head/sys/netinet6/in6_rmx.c ============================================================================== --- head/sys/netinet6/in6_rmx.c Mon Aug 10 20:34:46 2015 (r286593) +++ head/sys/netinet6/in6_rmx.c Mon Aug 10 20:50:31 2015 (r286594) @@ -207,7 +207,8 @@ in6_mtuexpire(struct rtentry *rt, void * #define MTUTIMO_DEFAULT (60*1) static void -in6_mtutimo_setwa(struct radix_node_head *rnh, uint32_t fibum, int af, void *_arg) +in6_mtutimo_setwa(struct radix_node_head *rnh, uint32_t fibum, int af, + void *_arg) { struct mtuex_arg *arg; @@ -223,7 +224,7 @@ in6_mtutimo(void *rock) struct timeval atv; struct mtuex_arg arg; - rt_foreach_fib(AF_INET6, in6_mtutimo_setwa, in6_mtuexpire, &arg); + rt_foreach_fib_walk(AF_INET6, in6_mtutimo_setwa, in6_mtuexpire, &arg); atv.tv_sec = MTUTIMO_DEFAULT; atv.tv_usec = 0; Modified: head/sys/netinet6/nd6_rtr.c ============================================================================== --- head/sys/netinet6/nd6_rtr.c Mon Aug 10 20:34:46 2015 (r286593) +++ head/sys/netinet6/nd6_rtr.c Mon Aug 10 20:50:31 2015 (r286594) @@ -2073,7 +2073,7 @@ rt6_flush(struct in6_addr *gateway, stru return; /* XXX Do we really need to walk any but the default FIB? */ - rt_foreach_fib(AF_INET6, NULL, rt6_deleteroute, (void *)gateway); + rt_foreach_fib_walk(AF_INET6, NULL, rt6_deleteroute, (void *)gateway); } static int From owner-svn-src-head@freebsd.org Mon Aug 10 20:54:04 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 39E6799D96C; Mon, 10 Aug 2015 20:54:04 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2BB5F232; Mon, 10 Aug 2015 20:54:04 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AKs49R033911; Mon, 10 Aug 2015 20:54:04 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AKs4gh033910; Mon, 10 Aug 2015 20:54:04 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508102054.t7AKs4gh033910@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Mon, 10 Aug 2015 20:54:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286595 - head/sys/dev/uart X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 20:54:04 -0000 Author: ian Date: Mon Aug 10 20:54:03 2015 New Revision: 286595 URL: https://svnweb.freebsd.org/changeset/base/286595 Log: Correct the polarity of the PPS assert and clear events with respect to the electrical signals on the serial port. Virtually all devices which output a PPS signal generate a brief higher-voltage pulse, the leading edge of which is the on-time point. Both DCD and CTS are active-low signals on the wire, meaning the assertion of their status bits in the modem status register corresponds to the lower voltage level on the wire. So when the status bit transitions to not-set, create a PPS assert event; when the status bit transitions to set, create a PPS clear event. Modified: head/sys/dev/uart/uart_core.c Modified: head/sys/dev/uart/uart_core.c ============================================================================== --- head/sys/dev/uart/uart_core.c Mon Aug 10 20:50:31 2015 (r286594) +++ head/sys/dev/uart/uart_core.c Mon Aug 10 20:54:03 2015 (r286595) @@ -320,12 +320,18 @@ uart_intr_sigchg(void *arg) sig = UART_GETSIG(sc); + /* + * Time pulse counting support. Note that both CTS and DCD are + * active-low signals. The status bit is high to indicate that + * the signal on the line is low, which corresponds to a PPS + * clear event. + */ if (sc->sc_pps.ppsparam.mode & PPS_CAPTUREBOTH) { pps_sig = uart_pps_signal(sc->sc_pps_mode); if (sig & SER_DELTA(pps_sig)) { pps_capture(&sc->sc_pps); pps_event(&sc->sc_pps, (sig & pps_sig) ? - PPS_CAPTUREASSERT : PPS_CAPTURECLEAR); + PPS_CAPTURECLEAR : PPS_CAPTUREASSERT); } } From owner-svn-src-head@freebsd.org Mon Aug 10 21:09:06 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F1B8099DCC2; Mon, 10 Aug 2015 21:09:06 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E37ADE0F; Mon, 10 Aug 2015 21:09:06 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AL96x4038439; Mon, 10 Aug 2015 21:09:06 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AL96No038438; Mon, 10 Aug 2015 21:09:06 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508102109.t7AL96No038438@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Mon, 10 Aug 2015 21:09:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286596 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 21:09:07 -0000 Author: ian Date: Mon Aug 10 21:09:06 2015 New Revision: 286596 URL: https://svnweb.freebsd.org/changeset/base/286596 Log: Document the change in polarity of the uart(4) PPS capture. Modified: head/UPDATING Modified: head/UPDATING ============================================================================== --- head/UPDATING Mon Aug 10 20:54:03 2015 (r286595) +++ head/UPDATING Mon Aug 10 21:09:06 2015 (r286596) @@ -31,6 +31,20 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11 disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20150810: + The polarity of Pulse Per Second (PPS) capture events with the + uart(4) driver has been corrected. Prior to this change the PPS + "assert" event corresponded to the trailing edge of a positive PPS + pulse and the "clear" event was the leading edge of the next pulse. + + As the width of a PPS pulse in a typical GPS receiver is on the + order of 1 millisecond, most users will not notice any significant + difference with this change. + + Anyone who has compensated for the historical polarity reversal by + configuring a negative offset equal to the pulse width will need to + remove that workaround. + 20150809: The default group assigned to /dev/dri entries has been changed from 'wheel' to 'video' with the id of '44'. If you want to have From owner-svn-src-head@freebsd.org Mon Aug 10 21:14:00 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 17C9599DE9E; Mon, 10 Aug 2015 21:14:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0821C840; Mon, 10 Aug 2015 21:14:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ALDx2k042636; Mon, 10 Aug 2015 21:13:59 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ALDx0R042635; Mon, 10 Aug 2015 21:13:59 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508102113.t7ALDx0R042635@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 21:13:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286598 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 21:14:00 -0000 Author: mav Date: Mon Aug 10 21:13:59 2015 New Revision: 286598 URL: https://svnweb.freebsd.org/changeset/base/286598 Log: MFV 286597: 5701 zpool list reports incorrect "alloc" value for cache devices Reviewed by: Matthew Ahrens Reviewed by: George Wilson Reviewed by: Alek Pinchuk Approved by: Dan McDonald Author: Prakash Surya illumos/illumos-gate@a52fc310ba80fa3b2006110936198de7f828cd94 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Aug 10 21:13:31 2015 (r286597) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Aug 10 21:13:59 2015 (r286598) @@ -962,6 +962,16 @@ uint64_t zfs_crc64_table[256]; #define L2ARC_FEED_SECS 1 /* caching interval secs */ #define L2ARC_FEED_MIN_MS 200 /* min caching interval ms */ +/* + * Used to distinguish headers that are being process by + * l2arc_write_buffers(), but have yet to be assigned to a l2arc disk + * address. This can happen when the header is added to the l2arc's list + * of buffers to write in the first stage of l2arc_write_buffers(), but + * has not yet been written out which happens in the second stage of + * l2arc_write_buffers(). + */ +#define L2ARC_ADDR_UNSET ((uint64_t)(-1)) + #define l2arc_writes_sent ARCSTAT(arcstat_l2_writes_sent) #define l2arc_writes_done ARCSTAT(arcstat_l2_writes_done) @@ -1045,12 +1055,12 @@ struct l2arc_dev { uint64_t l2ad_hand; /* next write location */ uint64_t l2ad_start; /* first addr on device */ uint64_t l2ad_end; /* last addr on device */ - uint64_t l2ad_evict; /* last addr eviction reached */ boolean_t l2ad_first; /* first sweep through */ boolean_t l2ad_writing; /* currently writing */ kmutex_t l2ad_mtx; /* lock for buffer list */ list_t l2ad_buflist; /* buffer list */ list_node_t l2ad_node; /* device list node */ + refcount_t l2ad_alloc; /* allocated bytes */ }; static list_t L2ARC_dev_list; /* device list */ @@ -1422,6 +1432,7 @@ arc_hdr_realloc(arc_buf_hdr_t *hdr, kmem buf_hash_remove(hdr); bcopy(hdr, nhdr, HDR_L2ONLY_SIZE); + if (new == hdr_full_cache) { nhdr->b_flags |= ARC_FLAG_HAS_L1HDR; /* @@ -1465,6 +1476,20 @@ arc_hdr_realloc(arc_buf_hdr_t *hdr, kmem mutex_exit(&dev->l2ad_mtx); + /* + * Since we're using the pointer address as the tag when + * incrementing and decrementing the l2ad_alloc refcount, we + * must remove the old pointer (that we're about to destroy) and + * add the new pointer to the refcount. Otherwise we'd remove + * the wrong pointer address when calling arc_hdr_destroy() later. + */ + + (void) refcount_remove_many(&dev->l2ad_alloc, + hdr->b_l2hdr.b_asize, hdr); + + (void) refcount_add_many(&dev->l2ad_alloc, + nhdr->b_l2hdr.b_asize, nhdr); + buf_discard_identity(hdr); hdr->b_freeze_cksum = NULL; kmem_cache_free(old, hdr); @@ -2216,6 +2241,57 @@ arc_buf_destroy(arc_buf_t *buf, boolean_ } static void +arc_hdr_l2hdr_destroy(arc_buf_hdr_t *hdr) +{ + l2arc_buf_hdr_t *l2hdr = &hdr->b_l2hdr; + l2arc_dev_t *dev = l2hdr->b_dev; + + ASSERT(MUTEX_HELD(&dev->l2ad_mtx)); + ASSERT(HDR_HAS_L2HDR(hdr)); + + list_remove(&dev->l2ad_buflist, hdr); + + /* + * We don't want to leak the b_tmp_cdata buffer that was + * allocated in l2arc_write_buffers() + */ + arc_buf_l2_cdata_free(hdr); + + /* + * If the l2hdr's b_daddr is equal to L2ARC_ADDR_UNSET, then + * this header is being processed by l2arc_write_buffers() (i.e. + * it's in the first stage of l2arc_write_buffers()). + * Re-affirming that truth here, just to serve as a reminder. If + * b_daddr does not equal L2ARC_ADDR_UNSET, then the header may or + * may not have its HDR_L2_WRITING flag set. (the write may have + * completed, in which case HDR_L2_WRITING will be false and the + * b_daddr field will point to the address of the buffer on disk). + */ + IMPLY(l2hdr->b_daddr == L2ARC_ADDR_UNSET, HDR_L2_WRITING(hdr)); + + /* + * If b_daddr is equal to L2ARC_ADDR_UNSET, we're racing with + * l2arc_write_buffers(). Since we've just removed this header + * from the l2arc buffer list, this header will never reach the + * second stage of l2arc_write_buffers(), which increments the + * accounting stats for this header. Thus, we must be careful + * not to decrement them for this header either. + */ + if (l2hdr->b_daddr != L2ARC_ADDR_UNSET) { + ARCSTAT_INCR(arcstat_l2_asize, -l2hdr->b_asize); + ARCSTAT_INCR(arcstat_l2_size, -hdr->b_size); + + vdev_space_update(dev->l2ad_vdev, + -l2hdr->b_asize, 0, 0); + + (void) refcount_remove_many(&dev->l2ad_alloc, + l2hdr->b_asize, hdr); + } + + hdr->b_flags &= ~ARC_FLAG_HAS_L2HDR; +} + +static void arc_hdr_destroy(arc_buf_hdr_t *hdr) { if (HDR_HAS_L1HDR(hdr)) { @@ -2228,31 +2304,29 @@ arc_hdr_destroy(arc_buf_hdr_t *hdr) ASSERT(!HDR_IN_HASH_TABLE(hdr)); if (HDR_HAS_L2HDR(hdr)) { - l2arc_buf_hdr_t *l2hdr = &hdr->b_l2hdr; - boolean_t buflist_held = MUTEX_HELD(&l2hdr->b_dev->l2ad_mtx); - - if (!buflist_held) { - mutex_enter(&l2hdr->b_dev->l2ad_mtx); - l2hdr = &hdr->b_l2hdr; - } + l2arc_dev_t *dev = hdr->b_l2hdr.b_dev; + boolean_t buflist_held = MUTEX_HELD(&dev->l2ad_mtx); - trim_map_free(l2hdr->b_dev->l2ad_vdev, l2hdr->b_daddr, - l2hdr->b_asize, 0); - list_remove(&l2hdr->b_dev->l2ad_buflist, hdr); + if (!buflist_held) + mutex_enter(&dev->l2ad_mtx); /* - * We don't want to leak the b_tmp_cdata buffer that was - * allocated in l2arc_write_buffers() - */ - arc_buf_l2_cdata_free(hdr); - - ARCSTAT_INCR(arcstat_l2_size, -hdr->b_size); - ARCSTAT_INCR(arcstat_l2_asize, -l2hdr->b_asize); + * Even though we checked this conditional above, we + * need to check this again now that we have the + * l2ad_mtx. This is because we could be racing with + * another thread calling l2arc_evict() which might have + * destroyed this header's L2 portion as we were waiting + * to acquire the l2ad_mtx. If that happens, we don't + * want to re-destroy the header's L2 portion. + */ + if (HDR_HAS_L2HDR(hdr)) { + trim_map_free(dev->l2ad_vdev, hdr->b_l2hdr.b_daddr, + hdr->b_l2hdr.b_asize, 0); + arc_hdr_l2hdr_destroy(hdr); + } if (!buflist_held) - mutex_exit(&l2hdr->b_dev->l2ad_mtx); - - hdr->b_flags &= ~ARC_FLAG_HAS_L2HDR; + mutex_exit(&dev->l2ad_mtx); } if (!BUF_EMPTY(hdr)) @@ -4271,23 +4345,23 @@ arc_release(arc_buf_t *buf, void *tag) ASSERT(refcount_count(&hdr->b_l1hdr.b_refcnt) > 0); if (HDR_HAS_L2HDR(hdr)) { - ARCSTAT_INCR(arcstat_l2_asize, -hdr->b_l2hdr.b_asize); - ARCSTAT_INCR(arcstat_l2_size, -hdr->b_size); - mutex_enter(&hdr->b_l2hdr.b_dev->l2ad_mtx); - trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev, - hdr->b_l2hdr.b_daddr, hdr->b_l2hdr.b_asize, 0); - list_remove(&hdr->b_l2hdr.b_dev->l2ad_buflist, hdr); /* - * We don't want to leak the b_tmp_cdata buffer that was - * allocated in l2arc_write_buffers() + * We have to recheck this conditional again now that + * we're holding the l2ad_mtx to prevent a race with + * another thread which might be concurrently calling + * l2arc_evict(). In that case, l2arc_evict() might have + * destroyed the header's L2 portion as we were waiting + * to acquire the l2ad_mtx. */ - arc_buf_l2_cdata_free(hdr); + if (HDR_HAS_L2HDR(hdr)) { + trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev, + hdr->b_l2hdr.b_daddr, hdr->b_l2hdr.b_asize, 0); + arc_hdr_l2hdr_destroy(hdr); + } mutex_exit(&hdr->b_l2hdr.b_dev->l2ad_mtx); - - hdr->b_flags &= ~ARC_FLAG_HAS_L2HDR; } /* @@ -5355,6 +5429,10 @@ l2arc_write_done(zio_t *zio) ARCSTAT_INCR(arcstat_l2_asize, -hdr->b_l2hdr.b_asize); ARCSTAT_INCR(arcstat_l2_size, -hdr->b_size); + + bytes_dropped += hdr->b_l2hdr.b_asize; + (void) refcount_remove_many(&dev->l2ad_alloc, + hdr->b_l2hdr.b_asize, hdr); } /* @@ -5511,7 +5589,6 @@ l2arc_evict(l2arc_dev_t *dev, uint64_t d arc_buf_hdr_t *hdr, *hdr_prev; kmutex_t *hash_lock; uint64_t taddr; - int64_t bytes_evicted = 0; buflist = &dev->l2ad_buflist; @@ -5596,21 +5673,11 @@ top: hdr->b_flags |= ARC_FLAG_L2_EVICTED; } - /* Tell ARC this no longer exists in L2ARC. */ - ARCSTAT_INCR(arcstat_l2_asize, -hdr->b_l2hdr.b_asize); - ARCSTAT_INCR(arcstat_l2_size, -hdr->b_size); - hdr->b_flags &= ~ARC_FLAG_HAS_L2HDR; - list_remove(buflist, hdr); - - /* This may have been leftover after a failed write. */ - hdr->b_flags &= ~ARC_FLAG_L2_WRITING; + arc_hdr_l2hdr_destroy(hdr); } mutex_exit(hash_lock); } mutex_exit(&dev->l2ad_mtx); - - vdev_space_update(dev->l2ad_vdev, -bytes_evicted, 0, 0); - dev->l2ad_evict = taddr; } /* @@ -5762,6 +5829,29 @@ l2arc_write_buffers(spa_t *spa, l2arc_de hdr->b_l2hdr.b_asize = hdr->b_size; hdr->b_l1hdr.b_tmp_cdata = hdr->b_l1hdr.b_buf->b_data; + /* + * Explicitly set the b_daddr field to a known + * value which means "invalid address". This + * enables us to differentiate which stage of + * l2arc_write_buffers() the particular header + * is in (e.g. this loop, or the one below). + * ARC_FLAG_L2_WRITING is not enough to make + * this distinction, and we need to know in + * order to do proper l2arc vdev accounting in + * arc_release() and arc_hdr_destroy(). + * + * Note, we can't use a new flag to distinguish + * the two stages because we don't hold the + * header's hash_lock below, in the second stage + * of this function. Thus, we can't simply + * change the b_flags field to denote that the + * IO has been sent. We can change the b_daddr + * field of the L2 portion, though, since we'll + * be holding the l2ad_mtx; which is why we're + * using it to denote the header's state change. + */ + hdr->b_l2hdr.b_daddr = L2ARC_ADDR_UNSET; + buf_sz = hdr->b_size; hdr->b_flags |= ARC_FLAG_HAS_L2HDR; @@ -5838,6 +5928,13 @@ l2arc_write_buffers(spa_t *spa, l2arc_de if (!L2ARC_IS_VALID_COMPRESS(HDR_GET_COMPRESS(hdr))) hdr->b_l1hdr.b_tmp_cdata = NULL; + /* + * We need to do this regardless if buf_sz is zero or + * not, otherwise, when this l2hdr is evicted we'll + * remove a reference that was never added. + */ + (void) refcount_add_many(&dev->l2ad_alloc, buf_sz, hdr); + /* Compression may have squashed the buffer to zero length. */ if (buf_sz != 0) { uint64_t buf_p_sz; @@ -5852,6 +5949,7 @@ l2arc_write_buffers(spa_t *spa, l2arc_de (void) zio_nowait(wzio); write_asize += buf_sz; + /* * Keep the clock hand suitably device-aligned. */ @@ -5876,7 +5974,6 @@ l2arc_write_buffers(spa_t *spa, l2arc_de */ if (dev->l2ad_hand >= (dev->l2ad_end - target_sz)) { dev->l2ad_hand = dev->l2ad_start; - dev->l2ad_evict = dev->l2ad_start; dev->l2ad_first = B_FALSE; } @@ -6183,7 +6280,6 @@ l2arc_add_vdev(spa_t *spa, vdev_t *vd) adddev->l2ad_start = VDEV_LABEL_START_SIZE; adddev->l2ad_end = VDEV_LABEL_START_SIZE + vdev_get_min_asize(vd); adddev->l2ad_hand = adddev->l2ad_start; - adddev->l2ad_evict = adddev->l2ad_start; adddev->l2ad_first = B_TRUE; adddev->l2ad_writing = B_FALSE; @@ -6196,6 +6292,7 @@ l2arc_add_vdev(spa_t *spa, vdev_t *vd) offsetof(arc_buf_hdr_t, b_l2hdr.b_l2node)); vdev_space_update(vd, 0, 0, adddev->l2ad_end - adddev->l2ad_hand); + refcount_create(&adddev->l2ad_alloc); /* * Add device to global list @@ -6241,6 +6338,7 @@ l2arc_remove_vdev(vdev_t *vd) l2arc_evict(remdev, 0, B_TRUE); list_destroy(&remdev->l2ad_buflist); mutex_destroy(&remdev->l2ad_mtx); + refcount_destroy(&remdev->l2ad_alloc); kmem_free(remdev, sizeof (l2arc_dev_t)); } From owner-svn-src-head@freebsd.org Mon Aug 10 21:19:43 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4764999E014; Mon, 10 Aug 2015 21:19:43 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 389C7C1F; Mon, 10 Aug 2015 21:19:43 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ALJhtE042951; Mon, 10 Aug 2015 21:19:43 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ALJhO7042950; Mon, 10 Aug 2015 21:19:43 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508102119.t7ALJhO7042950@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 21:19:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286600 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 21:19:43 -0000 Author: mav Date: Mon Aug 10 21:19:42 2015 New Revision: 286600 URL: https://svnweb.freebsd.org/changeset/base/286600 Log: MFV 286599: 5808 spa_check_logs is not necessary on readonly pools Reviewed by: George Wilson Reviewed by: Paul Dagnelie Reviewed by: Simon Klinkert Reviewed by: Will Andrews Approved by: Gordon Ross Author: Matthew Ahrens illumos/illumos-gate@23367a2f2caec1ccb4d918bdd0f2fc2c9cadcd06 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Mon Aug 10 21:19:16 2015 (r286599) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Mon Aug 10 21:19:42 2015 (r286600) @@ -2755,7 +2755,7 @@ spa_load_impl(spa_t *spa, uint64_t pool_ if (rvd->vdev_state <= VDEV_STATE_CANT_OPEN) return (SET_ERROR(ENXIO)); - if (spa_check_logs(spa)) { + if (spa_writeable(spa) && spa_check_logs(spa)) { *ereport = FM_EREPORT_ZFS_LOG_REPLAY; return (spa_vdev_err(rvd, VDEV_AUX_BAD_LOG, ENXIO)); } From owner-svn-src-head@freebsd.org Mon Aug 10 21:31:51 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2BDC499E2E5; Mon, 10 Aug 2015 21:31:51 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1D3E736F; Mon, 10 Aug 2015 21:31:51 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ALVo4N050736; Mon, 10 Aug 2015 21:31:50 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ALVo5J050735; Mon, 10 Aug 2015 21:31:50 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201508102131.t7ALVo5J050735@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Mon, 10 Aug 2015 21:31:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286601 - head/usr.bin/patch X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 21:31:51 -0000 Author: delphij Date: Mon Aug 10 21:31:50 2015 New Revision: 286601 URL: https://svnweb.freebsd.org/changeset/base/286601 Log: use posix_spawn(3) instead of fork() and exec() manually as suggested by jmg@. Reviewed By: pfg MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D3353 Modified: head/usr.bin/patch/inp.c Modified: head/usr.bin/patch/inp.c ============================================================================== --- head/usr.bin/patch/inp.c Mon Aug 10 21:19:42 2015 (r286600) +++ head/usr.bin/patch/inp.c Mon Aug 10 21:31:50 2015 (r286601) @@ -36,6 +36,8 @@ #include #include #include +#include +#include #include #include #include @@ -135,14 +137,13 @@ reallocate_lines(size_t *lines_allocated static bool plan_a(const char *filename) { - int ifd, statfailed, devnull, pstat; + int ifd, statfailed, pstat; char *p, *s, lbuf[INITLINELEN]; struct stat filestat; ptrdiff_t sz; size_t i; size_t iline, lines_allocated; pid_t pid; - char *argp[4] = {NULL}; #ifdef DEBUGGING if (debug & 8) @@ -179,7 +180,9 @@ plan_a(const char *filename) ((filestat.st_mode & 0022) == 0 && filestat.st_uid != getuid())) { char *filebase, *filedir; struct stat cstat; - char *tmp_filename1, *tmp_filename2; + char *tmp_filename1, *tmp_filename2; + char *argp[4] = { NULL }; + posix_spawn_file_actions_t file_actions; tmp_filename1 = strdup(filename); tmp_filename2 = strdup(filename); @@ -189,6 +192,8 @@ plan_a(const char *filename) filebase = basename(tmp_filename1); filedir = dirname(tmp_filename2); + memset(argp, 0, sizeof(argp)); + #define try(f, a1, a2, a3) \ (snprintf(lbuf, sizeof(lbuf), f, a1, a2, a3), stat(lbuf, &cstat) == 0) @@ -214,50 +219,44 @@ plan_a(const char *filename) say("Comparing file %s to default " "RCS version...\n", filename); - switch (pid = fork()) { - case -1: - fatal("can't fork: %s\n", - strerror(errno)); - case 0: - devnull = open("/dev/null", O_RDONLY); - if (devnull == -1) { - fatal("can't open /dev/null: %s", - strerror(errno)); - } - (void)dup2(devnull, STDOUT_FILENO); - argp[0] = strdup(RCSDIFF); - argp[1] = strdup(filename); - execv(RCSDIFF, argp); - exit(127); - } - pid = waitpid(pid, &pstat, 0); - if (pid == -1 || WEXITSTATUS(pstat) != 0) { - fatal("can't check out file %s: " - "differs from default RCS version\n", - filename); - } + argp[0] = strdup(RCSDIFF); + argp[1] = strdup(filename); + posix_spawn_file_actions_init(&file_actions); + posix_spawn_file_actions_addopen(&file_actions, + STDOUT_FILENO, _PATH_DEVNULL, O_WRONLY, 0); + if (posix_spawn(&pid, RCSDIFF, &file_actions, + NULL, argp, NULL) == 0) { + pid = waitpid(pid, &pstat, 0); + if (pid == -1 || WEXITSTATUS(pstat) != 0) + fatal("can't check out file %s: " + "differs from default RCS version\n", + filename); + } else + fatal("posix_spawn: %s\n", strerror(errno)); + posix_spawn_file_actions_destroy(&file_actions); + free(argp[1]); + free(argp[0]); } if (verbose) say("Checking out file %s from RCS...\n", filename); - switch (pid = fork()) { - case -1: - fatal("can't fork: %s\n", strerror(errno)); - case 0: - argp[0] = strdup(CHECKOUT); - argp[1] = strdup("-l"); - argp[2] = strdup(filename); - execv(CHECKOUT, argp); - exit(127); - } - pid = waitpid(pid, &pstat, 0); - if (pid == -1 || WEXITSTATUS(pstat) != 0 || - stat(filename, &filestat)) { - fatal("can't check out file %s from RCS\n", - filename); - } + argp[0] = strdup(CHECKOUT); + argp[1] = strdup("-l"); + argp[2] = strdup(filename); + if (posix_spawn(&pid, CHECKOUT, NULL, NULL, argp, + NULL) == 0) { + pid = waitpid(pid, &pstat, 0); + if (pid == -1 || WEXITSTATUS(pstat) != 0 || + stat(filename, &filestat)) + fatal("can't check out file %s from RCS\n", + filename); + } else + fatal("posix_spawn: %s\n", strerror(errno)); + free(argp[2]); + free(argp[1]); + free(argp[0]); } else if (statfailed) { fatal("can't find %s\n", filename); } From owner-svn-src-head@freebsd.org Mon Aug 10 21:32:42 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E982F99E39F; Mon, 10 Aug 2015 21:32:41 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CE27F9BD; Mon, 10 Aug 2015 21:32:41 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ALWf7L050871; Mon, 10 Aug 2015 21:32:41 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ALWfDJ050868; Mon, 10 Aug 2015 21:32:41 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508102132.t7ALWfDJ050868@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 21:32:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286603 - in head: cddl/contrib/opensolaris/cmd/zdb sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 21:32:42 -0000 Author: mav Date: Mon Aug 10 21:32:40 2015 New Revision: 286603 URL: https://svnweb.freebsd.org/changeset/base/286603 Log: MFV 286602: 5810 zdb should print details of bpobj Reviewed by: Prakash Surya Reviewed by: Alex Reece Reviewed by: George Wilson Reviewed by: Will Andrews Reviewed by: Simon Klinkert Approved by: Gordon Ross Author: Matthew Ahrens illumos/illumos-gate@732885fca09e11183dd0ea69aaaab5588fb7dbff Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bpobj.h Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Mon Aug 10 21:32:07 2015 (r286602) +++ head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Mon Aug 10 21:32:40 2015 (r286603) @@ -95,6 +95,8 @@ static int zopt_objects = 0; static libzfs_handle_t *g_zfs; static uint64_t max_inflight = 1000; +static void snprintf_blkptr_compact(char *, size_t, const blkptr_t *); + /* * These libumem hooks provide a reasonable set of defaults for the allocator's * debugging facilities. @@ -418,6 +420,79 @@ dump_zap(objset_t *os, uint64_t object, zap_cursor_fini(&zc); } +static void +dump_bpobj(objset_t *os, uint64_t object, void *data, size_t size) +{ + bpobj_phys_t *bpop = data; + char bytes[32], comp[32], uncomp[32]; + + if (bpop == NULL) + return; + + zdb_nicenum(bpop->bpo_bytes, bytes); + zdb_nicenum(bpop->bpo_comp, comp); + zdb_nicenum(bpop->bpo_uncomp, uncomp); + + (void) printf("\t\tnum_blkptrs = %llu\n", + (u_longlong_t)bpop->bpo_num_blkptrs); + (void) printf("\t\tbytes = %s\n", bytes); + if (size >= BPOBJ_SIZE_V1) { + (void) printf("\t\tcomp = %s\n", comp); + (void) printf("\t\tuncomp = %s\n", uncomp); + } + if (size >= sizeof (*bpop)) { + (void) printf("\t\tsubobjs = %llu\n", + (u_longlong_t)bpop->bpo_subobjs); + (void) printf("\t\tnum_subobjs = %llu\n", + (u_longlong_t)bpop->bpo_num_subobjs); + } + + if (dump_opt['d'] < 5) + return; + + for (uint64_t i = 0; i < bpop->bpo_num_blkptrs; i++) { + char blkbuf[BP_SPRINTF_LEN]; + blkptr_t bp; + + int err = dmu_read(os, object, + i * sizeof (bp), sizeof (bp), &bp, 0); + if (err != 0) { + (void) printf("got error %u from dmu_read\n", err); + break; + } + snprintf_blkptr_compact(blkbuf, sizeof (blkbuf), &bp); + (void) printf("\t%s\n", blkbuf); + } +} + +/* ARGSUSED */ +static void +dump_bpobj_subobjs(objset_t *os, uint64_t object, void *data, size_t size) +{ + dmu_object_info_t doi; + + VERIFY0(dmu_object_info(os, object, &doi)); + uint64_t *subobjs = kmem_alloc(doi.doi_max_offset, KM_SLEEP); + + int err = dmu_read(os, object, 0, doi.doi_max_offset, subobjs, 0); + if (err != 0) { + (void) printf("got error %u from dmu_read\n", err); + kmem_free(subobjs, doi.doi_max_offset); + return; + } + + int64_t last_nonzero = -1; + for (uint64_t i = 0; i < doi.doi_max_offset / 8; i++) { + if (subobjs[i] != 0) + last_nonzero = i; + } + + for (int64_t i = 0; i <= last_nonzero; i++) { + (void) printf("\t%llu\n", (longlong_t)subobjs[i]); + } + kmem_free(subobjs, doi.doi_max_offset); +} + /*ARGSUSED*/ static void dump_ddt_zap(objset_t *os, uint64_t object, void *data, size_t size) @@ -1397,7 +1472,7 @@ dump_bpobj_cb(void *arg, const blkptr_t } static void -dump_bpobj(bpobj_t *bpo, char *name, int indent) +dump_full_bpobj(bpobj_t *bpo, char *name, int indent) { char bytes[32]; char comp[32]; @@ -1411,11 +1486,12 @@ dump_bpobj(bpobj_t *bpo, char *name, int zdb_nicenum(bpo->bpo_phys->bpo_comp, comp); zdb_nicenum(bpo->bpo_phys->bpo_uncomp, uncomp); (void) printf(" %*s: object %llu, %llu local blkptrs, " - "%llu subobjs, %s (%s/%s comp)\n", + "%llu subobjs in object %llu, %s (%s/%s comp)\n", indent * 8, name, (u_longlong_t)bpo->bpo_object, (u_longlong_t)bpo->bpo_phys->bpo_num_blkptrs, (u_longlong_t)bpo->bpo_phys->bpo_num_subobjs, + (u_longlong_t)bpo->bpo_phys->bpo_subobjs, bytes, comp, uncomp); for (uint64_t i = 0; i < bpo->bpo_phys->bpo_num_subobjs; i++) { @@ -1432,7 +1508,7 @@ dump_bpobj(bpobj_t *bpo, char *name, int error, (u_longlong_t)subobj); continue; } - dump_bpobj(&subbpo, "subobj", indent + 1); + dump_full_bpobj(&subbpo, "subobj", indent + 1); bpobj_close(&subbpo); } } else { @@ -1466,7 +1542,7 @@ dump_deadlist(dsl_deadlist_t *dl) return; if (dl->dl_oldfmt) { - dump_bpobj(&dl->dl_bpobj, "old-format deadlist", 0); + dump_full_bpobj(&dl->dl_bpobj, "old-format deadlist", 0); return; } @@ -1491,7 +1567,7 @@ dump_deadlist(dsl_deadlist_t *dl) (void) snprintf(buf, sizeof (buf), "mintxg %llu -> " "obj %llu", (longlong_t)dle->dle_mintxg, (longlong_t)dle->dle_bpobj.bpo_object); - dump_bpobj(&dle->dle_bpobj, buf, 0); + dump_full_bpobj(&dle->dle_bpobj, buf, 0); } else { (void) printf("mintxg %llu -> obj %llu\n", (longlong_t)dle->dle_mintxg, @@ -1682,8 +1758,8 @@ static object_viewer_t *object_viewer[DM dump_uint64, /* object array */ dump_none, /* packed nvlist */ dump_packed_nvlist, /* packed nvlist size */ - dump_none, /* bplist */ - dump_none, /* bplist header */ + dump_none, /* bpobj */ + dump_bpobj, /* bpobj header */ dump_none, /* SPA space map header */ dump_none, /* SPA space map */ dump_none, /* ZIL intent log */ @@ -1730,7 +1806,7 @@ static object_viewer_t *object_viewer[DM dump_zap, /* deadlist */ dump_none, /* deadlist hdr */ dump_zap, /* dsl clones */ - dump_none, /* bpobj subobjs */ + dump_bpobj_subobjs, /* bpobj subobjs */ dump_unknown, /* Unknown type, must be last */ }; @@ -2959,10 +3035,11 @@ dump_zpool(spa_t *spa) uint64_t refcount; dump_dir(dp->dp_meta_objset); if (dump_opt['d'] >= 3) { - dump_bpobj(&spa->spa_deferred_bpobj, + dump_full_bpobj(&spa->spa_deferred_bpobj, "Deferred frees", 0); if (spa_version(spa) >= SPA_VERSION_DEADLISTS) { - dump_bpobj(&spa->spa_dsl_pool->dp_free_bpobj, + dump_full_bpobj( + &spa->spa_dsl_pool->dp_free_bpobj, "Pool snapshot frees", 0); } Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c Mon Aug 10 21:32:07 2015 (r286602) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c Mon Aug 10 21:32:40 2015 (r286603) @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. */ #include @@ -256,9 +256,8 @@ bpobj_iterate_impl(bpobj_t *bpo, bpobj_i dbuf = NULL; } if (free) { - i++; VERIFY3U(0, ==, dmu_free_range(bpo->bpo_os, bpo->bpo_object, - i * sizeof (blkptr_t), -1ULL, tx)); + (i + 1) * sizeof (blkptr_t), -1ULL, tx)); } if (err || !bpo->bpo_havesubobj || bpo->bpo_phys->bpo_subobjs == 0) goto out; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bpobj.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bpobj.h Mon Aug 10 21:32:07 2015 (r286602) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bpobj.h Mon Aug 10 21:32:40 2015 (r286603) @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. */ #ifndef _SYS_BPOBJ_H @@ -77,7 +77,6 @@ void bpobj_close(bpobj_t *bpo); int bpobj_iterate(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx); int bpobj_iterate_nofree(bpobj_t *bpo, bpobj_itor_t func, void *, dmu_tx_t *); -int bpobj_iterate_dbg(bpobj_t *bpo, uint64_t *itorp, blkptr_t *bp); void bpobj_enqueue_subobj(bpobj_t *bpo, uint64_t subobj, dmu_tx_t *tx); void bpobj_enqueue(bpobj_t *bpo, const blkptr_t *bp, dmu_tx_t *tx); From owner-svn-src-head@freebsd.org Mon Aug 10 21:36:52 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EB74999E561; Mon, 10 Aug 2015 21:36:51 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DBE35EA1; Mon, 10 Aug 2015 21:36:51 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ALapGi051301; Mon, 10 Aug 2015 21:36:51 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ALapvU051300; Mon, 10 Aug 2015 21:36:51 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508102136.t7ALapvU051300@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 10 Aug 2015 21:36:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286605 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 21:36:52 -0000 Author: mav Date: Mon Aug 10 21:36:51 2015 New Revision: 286605 URL: https://svnweb.freebsd.org/changeset/base/286605 Log: MFV 286604: 5812 assertion failed in zrl_tryenter(): zr_owner==NULL Reviewed by: George Wilson Reviewed by: Alex Reece Reviewed by: Will Andrews Approved by: Gordon Ross Author: Matthew Ahrens illumos/illumos-gate@8df173054ca442cd8845a7364c3edad9d6822351 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zrlock.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zrlock.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zrlock.c Mon Aug 10 21:36:10 2015 (r286604) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zrlock.c Mon Aug 10 21:36:51 2015 (r286605) @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014 by Delphix. All rights reserved. */ /* @@ -42,7 +43,7 @@ * A ZRL can be locked only while there are zero references, so ZRL_LOCKED is * treated as zero references. */ -#define ZRL_LOCKED ((uint32_t)-1) +#define ZRL_LOCKED -1 #define ZRL_DESTROYED -2 void @@ -60,7 +61,7 @@ zrl_init(zrlock_t *zrl) void zrl_destroy(zrlock_t *zrl) { - ASSERT(zrl->zr_refcount == 0); + ASSERT0(zrl->zr_refcount); mutex_destroy(&zrl->zr_mtx); zrl->zr_refcount = ZRL_DESTROYED; @@ -80,7 +81,7 @@ zrl_add(zrlock_t *zrl) uint32_t cas = atomic_cas_32( (uint32_t *)&zrl->zr_refcount, n, n + 1); if (cas == n) { - ASSERT((int32_t)n >= 0); + ASSERT3S((int32_t)n, >=, 0); #ifdef ZFS_DEBUG if (zrl->zr_owner == curthread) { DTRACE_PROBE2(zrlock__reentry, @@ -98,7 +99,7 @@ zrl_add(zrlock_t *zrl) while (zrl->zr_refcount == ZRL_LOCKED) { cv_wait(&zrl->zr_cv, &zrl->zr_mtx); } - ASSERT(zrl->zr_refcount >= 0); + ASSERT3S(zrl->zr_refcount, >=, 0); zrl->zr_refcount++; #ifdef ZFS_DEBUG zrl->zr_owner = curthread; @@ -112,14 +113,14 @@ zrl_remove(zrlock_t *zrl) { uint32_t n; - n = atomic_dec_32_nv((uint32_t *)&zrl->zr_refcount); - ASSERT((int32_t)n >= 0); #ifdef ZFS_DEBUG if (zrl->zr_owner == curthread) { zrl->zr_owner = NULL; zrl->zr_caller = NULL; } #endif + n = atomic_dec_32_nv((uint32_t *)&zrl->zr_refcount); + ASSERT3S((int32_t)n, >=, 0); } int @@ -132,14 +133,14 @@ zrl_tryenter(zrlock_t *zrl) (uint32_t *)&zrl->zr_refcount, 0, ZRL_LOCKED); if (cas == 0) { #ifdef ZFS_DEBUG - ASSERT(zrl->zr_owner == NULL); + ASSERT3P(zrl->zr_owner, ==, NULL); zrl->zr_owner = curthread; #endif return (1); } } - ASSERT((int32_t)n > ZRL_DESTROYED); + ASSERT3S((int32_t)n, >, ZRL_DESTROYED); return (0); } @@ -147,11 +148,11 @@ zrl_tryenter(zrlock_t *zrl) void zrl_exit(zrlock_t *zrl) { - ASSERT(zrl->zr_refcount == ZRL_LOCKED); + ASSERT3S(zrl->zr_refcount, ==, ZRL_LOCKED); mutex_enter(&zrl->zr_mtx); #ifdef ZFS_DEBUG - ASSERT(zrl->zr_owner == curthread); + ASSERT3P(zrl->zr_owner, ==, curthread); zrl->zr_owner = NULL; membar_producer(); /* make sure the owner store happens first */ #endif @@ -163,7 +164,7 @@ zrl_exit(zrlock_t *zrl) int zrl_refcount(zrlock_t *zrl) { - ASSERT(zrl->zr_refcount > ZRL_DESTROYED); + ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED); int n = (int)zrl->zr_refcount; return (n <= 0 ? 0 : n); @@ -172,7 +173,7 @@ zrl_refcount(zrlock_t *zrl) int zrl_is_zero(zrlock_t *zrl) { - ASSERT(zrl->zr_refcount > ZRL_DESTROYED); + ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED); return (zrl->zr_refcount <= 0); } @@ -180,7 +181,7 @@ zrl_is_zero(zrlock_t *zrl) int zrl_is_locked(zrlock_t *zrl) { - ASSERT(zrl->zr_refcount > ZRL_DESTROYED); + ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED); return (zrl->zr_refcount == ZRL_LOCKED); } From owner-svn-src-head@freebsd.org Mon Aug 10 21:40:32 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 79AF899E638 for ; Mon, 10 Aug 2015 21:40:32 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-oi0-f41.google.com (mail-oi0-f41.google.com [209.85.218.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BE1814E for ; Mon, 10 Aug 2015 21:40:32 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by oio137 with SMTP id 137so92694057oio.0 for ; Mon, 10 Aug 2015 14:40:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=r66z6o6hYhoy9AuwhRT35kofItzDLJlwdL5Y0a+63hI=; b=jeRFunkPFOgjH+8+lVIFDGDKrvlQildWniE7Fw2rpwDo8lvZSZc/6ES8q0Huy/M1/1 pewomDfWCaUPhC7umBsRBZ8buAjgvH054BI32WjvoAyqWvvVcUEtx5wK258Ys/u9YOnQ /7XkbhZZAwGQkk5KJ9BU2sW790agcuO+IXXATk1X6WARsBu4gmoVxiEN6lREtox3nfbF t5mXRjhkjmYkceVhLDtncpYjGaZUyzyhOOMVUhVh8r3EGtrrVgW/Bf1sene85nq0AqcR vYLpzyGGB0NOaOGQy+QfDr+mrC5JXmSEXtgEtwu6JsjdNS2RVofoaJXQhMNwKvTvSIuc CUbw== X-Gm-Message-State: ALoCoQl8auGejFE4zijAk0MFetISjx33x4zspfz5jsi+KZKGU38zvj5y1F0K7jHX0KBaOLBFRcrf MIME-Version: 1.0 X-Received: by 10.202.229.204 with SMTP id c195mr6301369oih.113.1439242825085; Mon, 10 Aug 2015 14:40:25 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Mon, 10 Aug 2015 14:40:25 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508102131.t7ALVo5J050735@repo.freebsd.org> References: <201508102131.t7ALVo5J050735@repo.freebsd.org> Date: Mon, 10 Aug 2015 23:40:25 +0200 Message-ID: Subject: Re: svn commit: r286601 - head/usr.bin/patch From: Ed Schouten To: Xin LI Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 21:40:32 -0000 Hi Xin, 2015-08-10 23:31 GMT+02:00 Xin LI : > + argp[0] = strdup(RCSDIFF); > + argp[1] = strdup(filename); > ... > + free(argp[1]); > + free(argp[0]); > + argp[0] = strdup(CHECKOUT); > + argp[1] = strdup("-l"); > + argp[2] = strdup(filename); > ... > + free(argp[2]); > + free(argp[1]); > + free(argp[0]); There's no need to call strdup() here, right? As far as I know, execve() and posix_spawn() don't modify the arguments/environment. These functions should use "const char *const *" as its argument type, but that cannot be used, as it would cause compiler errors if "char **" is passed in. See the table close to the bottom of this article: http://pubs.opengroup.org/onlinepubs/9699919799/functions/execve.html -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Mon Aug 10 21:42:57 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D2A1699E7BA for ; Mon, 10 Aug 2015 21:42:57 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-ob0-f169.google.com (mail-ob0-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A54EF7A1 for ; Mon, 10 Aug 2015 21:42:57 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by obbfr1 with SMTP id fr1so97348059obb.1 for ; Mon, 10 Aug 2015 14:42:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=Zq9WR8L/TMLjaJqVw55Pjm2BrdYmuaSnh1ew0oNy7+s=; b=lTWUrLLrmsvb9f7ultkvem9QjbyvW4qypMHARGLksZn0wPIXp+De6nhB2+VdvKmE7k Quyshnwmwbs7cpqK1Gf1jIhM31k3gHF1PhsWUshRpF3NTQhDKPyLWg+eJGu5yMwn1wRd 4OqMFR7/IszWTsZJI+qHyzQLxgQFdDdMMQws7yKBaXGuteTjeQDhchCITTgXiBHjMnmM BJE7OVxPJEf16VV+UUDbt3JOYZbwyHW9G3kFSblvEaisqq81/Hcn4+1Mj4LJdyBjVnJD JVCdgNEX5cWXhxeN7gpbFe3q4KRzEhfE42bGKE66hAn2NzP62IbANa9LvBHi7f49LBY6 InfA== X-Gm-Message-State: ALoCoQlU4k/OAMs8vZHePdU7X2dTB9x2MGubyClaN92zkWOI66FpT6KVzyF1dnlNjQ7VR8PmIA/k MIME-Version: 1.0 X-Received: by 10.60.98.211 with SMTP id ek19mr7849046oeb.78.1439242971500; Mon, 10 Aug 2015 14:42:51 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Mon, 10 Aug 2015 14:42:51 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508102131.t7ALVo5J050735@repo.freebsd.org> References: <201508102131.t7ALVo5J050735@repo.freebsd.org> Date: Mon, 10 Aug 2015 23:42:51 +0200 Message-ID: Subject: Re: svn commit: r286601 - head/usr.bin/patch From: Ed Schouten To: Xin LI Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 21:42:57 -0000 Hi Xin, Something I forgot to mention in my previous email: 2015-08-10 23:31 GMT+02:00 Xin LI : > + argp[0] = strdup(RCSDIFF); > + argp[1] = strdup(filename); > + argp[0] = strdup(CHECKOUT); > + argp[1] = strdup("-l"); > + argp[2] = strdup(filename); While we're at it, should we also add "--" before the filename, or can we be sure in this context that they don't start with a dash? -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Mon Aug 10 22:02:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DF9B399ED7E; Mon, 10 Aug 2015 22:02:01 +0000 (UTC) (envelope-from feld@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CEF1DA8A; Mon, 10 Aug 2015 22:02:01 +0000 (UTC) (envelope-from feld@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7AM21JB063838; Mon, 10 Aug 2015 22:02:01 GMT (envelope-from feld@FreeBSD.org) Received: (from feld@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7AM21Jj063837; Mon, 10 Aug 2015 22:02:01 GMT (envelope-from feld@FreeBSD.org) Message-Id: <201508102202.t7AM21Jj063837@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: feld set sender to feld@FreeBSD.org using -f From: Mark Felder Date: Mon, 10 Aug 2015 22:02:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286606 - head/sbin/ipfw X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 22:02:02 -0000 Author: feld (ports committer) Date: Mon Aug 10 22:02:01 2015 New Revision: 286606 URL: https://svnweb.freebsd.org/changeset/base/286606 Log: sbin/ipfw fix typo: info -> into example: DEPRECATED: inserting data into non-existent table sshguard. (auto-created) Approved by: bdrewery Modified: head/sbin/ipfw/tables.c Modified: head/sbin/ipfw/tables.c ============================================================================== --- head/sbin/ipfw/tables.c Mon Aug 10 21:36:51 2015 (r286605) +++ head/sbin/ipfw/tables.c Mon Aug 10 22:02:01 2015 (r286606) @@ -930,7 +930,7 @@ table_modify_record(ipfw_obj_header *oh, xi.vmask = vmask; strlcpy(xi.tablename, oh->ntlv.name, sizeof(xi.tablename)); - fprintf(stderr, "DEPRECATED: inserting data info " + fprintf(stderr, "DEPRECATED: inserting data into " "non-existent table %s. (auto-created)\n", xi.tablename); table_do_create(oh, &xi); From owner-svn-src-head@freebsd.org Mon Aug 10 23:20:48 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7DCF699E1AF; Mon, 10 Aug 2015 23:20:48 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from anubis.delphij.net (anubis.delphij.net [IPv6:2001:470:1:117::25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "anubis.delphij.net", Issuer "StartCom Class 1 Primary Intermediate Server CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 61CAEA13; Mon, 10 Aug 2015 23:20:48 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from zeta.ixsystems.com (unknown [12.229.62.2]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by anubis.delphij.net (Postfix) with ESMTPSA id 940EB12A97; Mon, 10 Aug 2015 16:20:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=delphij.net; s=anubis; t=1439248847; x=1439263247; bh=9UBZGGI/6RC3TgpceVcW8SBuiB5Ddct45Fp5rpZlcLM=; h=Reply-To:Subject:References:To:Cc:From:Date:In-Reply-To; b=e42HWr5deXbMeQPGpJJbdDZ++E0buLqM4xnXxjT7pxm8Hb7v4fGJI8T9qDIbYG5Nb 8r/LOu3eY1Kf0WqZ+l/xS653bnVn69kstyV4Qcj0oukHnOdipmP4VZhkysxDr960iV 7otjj+yA6tejspSqaSQEp2L/baTOpgg0HY2wU3Vs= Reply-To: d@delphij.net Subject: Re: svn commit: r286601 - head/usr.bin/patch References: <201508102131.t7ALVo5J050735@repo.freebsd.org> To: Ed Schouten , Xin LI Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org From: Xin Li X-Enigmail-Draft-Status: N1210 Organization: The FreeBSD Project Message-ID: <55C931CE.3030806@delphij.net> Date: Mon, 10 Aug 2015 16:20:46 -0700 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="2m1pghCR1O71M73RtjH9Obr4q41dvStdR" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 23:20:48 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --2m1pghCR1O71M73RtjH9Obr4q41dvStdR Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 08/10/15 14:40, Ed Schouten wrote: > Hi Xin, >=20 > 2015-08-10 23:31 GMT+02:00 Xin LI : >> + argp[0] =3D strdup(RCSDIFF); >> + argp[1] =3D strdup(filename); >> ... >> + free(argp[1]); >> + free(argp[0]); >=20 >> + argp[0] =3D strdup(CHECKOUT); >> + argp[1] =3D strdup("-l"); >> + argp[2] =3D strdup(filename); >> ... >> + free(argp[2]); >> + free(argp[1]); >> + free(argp[0]); >=20 > There's no need to call strdup() here, right? As far as I know, > execve() and posix_spawn() don't modify the arguments/environment. > These functions should use "const char *const *" as its argument type, > but that cannot be used, as it would cause compiler errors if "char > **" is passed in. >=20 > See the table close to the bottom of this article: >=20 > http://pubs.opengroup.org/onlinepubs/9699919799/functions/execve.html Do you have a better solution for this? No, this is not ideal but I didn't find a better alternative (or maybe I have missed something obviou= s?) I think with the current POSIX definition of the interface, we have only two options: either strdup() or cast away const (I'd rather hide this kind of uglyness in the library), no? Cheers, --=20 Xin LI https://www.delphij.net/ FreeBSD - The Power to Serve! Live free or die --2m1pghCR1O71M73RtjH9Obr4q41dvStdR Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.1.6 (FreeBSD) iQIcBAEBCgAGBQJVyTHPAAoJEJW2GBstM+nscR0P/3PcbThFReBG/GUM8Nof6VlW 00UoCwKvJAN400k81W86RxPphOEe7TJicsgHBmRpFtzrgf4NzST+vxK5evANQZdT WVWKUPoe5z+nDkAutB0CTmOjMdcegOwus/6lvm1IwZCJT7Qg0JOxn7MSR8CCjt+V WEgL0qlFA/PqAZMUKiPRG9AEYj1NnT85LZ0KbBJCKh/ziZYTlL5A72vhQ1XaTjgN KYOrM9gYqM/8sJM1oWvC7j8Dw3d9yL3HA4M1GxgvcnOAG408OyiFAweLGmhGfYSF AbDuDB0GeEV7Q0JIppzIaMV/oRzWpJqDaBcZhjAX4ITAITl94pYPlzcwOubBvYsi 3dS8VdgBkVDtwwA+cJNX9Sn7S2gxqzRVb9W0AutU3LIB6bkKquPXspJJ5aZ6h6EI GhJ+lbdM1odcihoL6PLssszw/k5hl1KXV0WRn742J0oj8bJErwgREW0PqysW7LWj Y5O3fNIEdsXcHOZS6yjVb4ieDn1LxzxpAWCtODT2rooXQ4jTBlHC3tsZjoVtr7vN mI0SeKbgz7I6qVR2hx62WID25uYaTiszUSc87u/A3cMexBmFzt3TcfXuwjtNCLV6 Wd7eNDYVqZ8T/Qop59Xi1gBzxwQvjul+0LeRLzZDIPDDbec1jpJKJNt6EUfQAhWe qnwwojBWSjZ9GFtrZBt2 =1p1Q -----END PGP SIGNATURE----- --2m1pghCR1O71M73RtjH9Obr4q41dvStdR-- From owner-svn-src-head@freebsd.org Mon Aug 10 23:30:40 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B4F0299E4B1; Mon, 10 Aug 2015 23:30:40 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from anubis.delphij.net (anubis.delphij.net [64.62.153.212]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "anubis.delphij.net", Issuer "StartCom Class 1 Primary Intermediate Server CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 9AECEBA; Mon, 10 Aug 2015 23:30:40 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from zeta.ixsystems.com (unknown [12.229.62.2]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by anubis.delphij.net (Postfix) with ESMTPSA id D8B8612B17; Mon, 10 Aug 2015 16:30:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=delphij.net; s=anubis; t=1439249432; x=1439263832; bh=u8wMhO3rTaRSYDRJDv9xjQm4mfzJaWMeAfMz6VmS/8s=; h=Reply-To:Subject:References:To:Cc:From:Date:In-Reply-To; b=pi/j0cLhTGzy2J6Z6Wq3DOLCplNJKh6kyz2bBMdYiD7JDskh4nqbJXuLBf737I8Ni C7Lq+36JIyjWF5iyU4uu7XEEet11M8OrMtzPyLNS7ACruUC0TTK4t2F+Y+lxTvmVit s6F0m3SH7hSc8rybLd400jwDmlbdYxwJZY0G/cYg= Reply-To: d@delphij.net Subject: Re: svn commit: r286601 - head/usr.bin/patch References: <201508102131.t7ALVo5J050735@repo.freebsd.org> To: Ed Schouten , Xin LI Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org From: Xin Li X-Enigmail-Draft-Status: N1110 Organization: The FreeBSD Project Message-ID: <55C93417.80008@delphij.net> Date: Mon, 10 Aug 2015 16:30:31 -0700 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="QReuH7qSJF5SOArNGMsfhBnWBBsh33GCL" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Aug 2015 23:30:40 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --QReuH7qSJF5SOArNGMsfhBnWBBsh33GCL Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 08/10/15 14:42, Ed Schouten wrote: > Hi Xin, >=20 > Something I forgot to mention in my previous email: >=20 > 2015-08-10 23:31 GMT+02:00 Xin LI : >> + argp[0] =3D strdup(RCSDIFF); >> + argp[1] =3D strdup(filename); >=20 >> + argp[0] =3D strdup(CHECKOUT); >> + argp[1] =3D strdup("-l"); >> + argp[2] =3D strdup(filename); >=20 > While we're at it, should we also add "--" before the filename, or can > we be sure in this context that they don't start with a dash? We can't be sure. However, neither co nor rcsdiff supports "--", so it won't make a difference. Cheers, --=20 Xin LI https://www.delphij.net/ FreeBSD - The Power to Serve! Live free or die --QReuH7qSJF5SOArNGMsfhBnWBBsh33GCL Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.1.6 (FreeBSD) iQIcBAEBCgAGBQJVyTQXAAoJEJW2GBstM+ns1LsP/28+tIsZfUJvrk+55a/sHjbc vUwe+FvFVDnlykjnF9Yk6k7ONZdPTUzhx90EU/63+daxTspi61vk2PA6RbjKoD2b IKT3DSUskUKOcUqkFMFMTuPwI5VykgbxzQ9dVL6dG1x3fMjFnN/oxBRqBb4hN/Ro ykbH6hHQds/8blh/ELDUrzHkaWOKEcuk2Ws9pkZH3RX4TM0gO/JI7LloxSINm8BQ udL2q6n55vUDo3qHlFU87w+CyEwRZ7s6x/5XoqFrlq+6tb7iIA73XKgOwooMBBRU v3YV2yqNsh3bEbGhAtco0dno3TR1qyMC2CL5UhVKv98TCLPzfzbeLXr+KyCccbv1 Gc/LWCzT7MEai+ZM3mKUnnTBVNvCjW2AfWDieyTbgdas3W6XxoOdvk3eaXpCpf6d W5wndZ4B/s9u0d6YjlcjHIz89yhuFcVplZaG4zdq7HbEyf2w9UIO9bNyCqM4Z/FI 6/EaNOwC3QHPa7L3V7WBLL0RSfklX9EBELoNj227wEQuXFQh7Wy/pmklXIuXvyMi QD//EZwKxGaa4mdG/x5dOc25kP8Yz+ARLkL9fhFYBmxyTQMrVr5ucOH4limPfxne +YYhSTPJRmmD+vUvvSlWWHJLs9FI6iNYpzSi4IHkTysfs7JFzjNAZdhJIBLL344G CHKEpyPNq6L5XLbf6L/E =m/95 -----END PGP SIGNATURE----- --QReuH7qSJF5SOArNGMsfhBnWBBsh33GCL-- From owner-svn-src-head@freebsd.org Tue Aug 11 01:02:18 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DC712998BA7; Tue, 11 Aug 2015 01:02:18 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B2623FFA; Tue, 11 Aug 2015 01:02:18 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B12ICe038998; Tue, 11 Aug 2015 01:02:18 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B12InB038997; Tue, 11 Aug 2015 01:02:18 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508110102.t7B12InB038997@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Tue, 11 Aug 2015 01:02:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286609 - head/usr.bin/ypmatch X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 01:02:19 -0000 Author: araujo Date: Tue Aug 11 01:02:17 2015 New Revision: 286609 URL: https://svnweb.freebsd.org/changeset/base/286609 Log: More style(9) fixes. No functional changes. Differential Revision: D3350 Reviewed by: ed Approved by: bapt (mentor) Modified: head/usr.bin/ypmatch/ypmatch.c Modified: head/usr.bin/ypmatch/ypmatch.c ============================================================================== --- head/usr.bin/ypmatch/ypmatch.c Mon Aug 10 22:30:13 2015 (r286608) +++ head/usr.bin/ypmatch/ypmatch.c Tue Aug 11 01:02:17 2015 (r286609) @@ -68,12 +68,6 @@ usage(void) fprintf(stderr, "%s\n%s\n", "usage: ypmatch [-kt] [-d domainname] key ... mapname", " ypmatch -x"); - fprintf(stderr, - "where\n" - "\tmapname may be either a mapname or a nickname for a map.\n" - "\t-k prints keys as well as values.\n" - "\t-t inhibits map nickname translation.\n" - "\t-x dumps the map nickname translation table.\n"); exit(1); } @@ -87,10 +81,10 @@ main(int argc, char *argv[]) domainname = NULL; notrans = key = 0; - while ((c=getopt(argc, argv, "xd:kt")) != -1) + while ((c = getopt(argc, argv, "xd:kt")) != -1) switch (c) { case 'x': - for (i=0; i Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 866FC99D395; Tue, 11 Aug 2015 01:33:37 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 69DBBD68; Tue, 11 Aug 2015 01:33:37 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B1XbjT051067; Tue, 11 Aug 2015 01:33:37 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B1XaGU051065; Tue, 11 Aug 2015 01:33:36 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508110133.t7B1XaGU051065@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Tue, 11 Aug 2015 01:33:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286610 - head/usr.sbin/ypset X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 01:33:37 -0000 Author: araujo Date: Tue Aug 11 01:33:36 2015 New Revision: 286610 URL: https://svnweb.freebsd.org/changeset/base/286610 Log: Sync the code with OpenBSD. Remove 3rd BSD clause. Differential Revision: D3289 Approved by: bapt (mentor) Obtained from: OpenBSD Modified: head/usr.sbin/ypset/ypset.8 head/usr.sbin/ypset/ypset.c Modified: head/usr.sbin/ypset/ypset.8 ============================================================================== --- head/usr.sbin/ypset/ypset.8 Tue Aug 11 01:02:17 2015 (r286609) +++ head/usr.sbin/ypset/ypset.8 Tue Aug 11 01:33:36 2015 (r286610) @@ -31,7 +31,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 25, 1994 +.Dd August 04, 2015 .Dt YPSET 8 .Os .Sh NAME @@ -68,15 +68,15 @@ the local network supplying YP maps. .Pp The options are as follows: .Bl -tag -width indent -.It Fl h Ar host -Set the YP binding on -.Ar host -instead of the local machine. .It Fl d Ar domain Use the YP domain .Ar domain instead of the default domain as returned by .Xr domainname 1 . +.It Fl h Ar host +Set the YP binding on +.Ar host +instead of the local machine. .El .Sh SEE ALSO .Xr domainname 1 , Modified: head/usr.sbin/ypset/ypset.c ============================================================================== --- head/usr.sbin/ypset/ypset.c Tue Aug 11 01:02:17 2015 (r286609) +++ head/usr.sbin/ypset/ypset.c Tue Aug 11 01:33:36 2015 (r286610) @@ -1,5 +1,8 @@ +/* $OpenBSD: ypset.c,v 1.20 2015/01/16 06:40:23 deraadt Exp $ */ +/* $NetBSD: ypset.c,v 1.8 1996/05/13 02:46:33 thorpej Exp $ */ + /* - * Copyright (c) 1992/3 Theo de Raadt + * Copyright (c) 1992, 1993 Theo de Raadt * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,9 +13,6 @@ * 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. The name of the author may not 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 @@ -30,61 +30,58 @@ #include __FBSDID("$FreeBSD$"); +#include +#include +#include + #include #include #include #include #include #include -#include -#include -#include + #include #include #include #include #include -extern bool_t xdr_domainname(); - static void usage(void) { - fprintf(stderr, "usage: ypset [-h host] [-d domain] server\n"); + fprintf(stderr, "usage: ypset [-d domain] [-h host] server\n"); exit(1); } -int +static int bind_tohost(struct sockaddr_in *sin, char *dom, char *server) { struct ypbind_setdom ypsd; - struct timeval tv; + struct in_addr iaddr; struct hostent *hp; + struct timeval tv; CLIENT *client; - int sock, port; - int r; - unsigned long server_addr; + int sock, port, r; - if ((port = htons(getrpcport(server, YPPROG, YPPROC_NULL, IPPROTO_UDP))) == 0) + port = getrpcport(server, YPPROG, YPPROC_NULL, IPPROTO_UDP); + if (port == 0) errx(1, "%s not running ypserv", server); + port = htons(port); - bzero(&ypsd, sizeof ypsd); - - if ((hp = gethostbyname (server)) != NULL) { - /* is this the most compatible way?? */ - bcopy (hp->h_addr_list[0], - (u_long *)&ypsd.ypsetdom_binding.ypbind_binding_addr, - sizeof (unsigned long)); - } else if ((server_addr = inet_addr(server)) == INADDR_NONE) { - errx(1, "can't find address for %s", server); - } else - bcopy (&server_addr, - (u_long *)&ypsd.ypsetdom_binding.ypbind_binding_addr, - sizeof (server_addr)); + memset(&ypsd, 0, sizeof ypsd); -/* strncpy(ypsd.ypsetdom_domain, dom, sizeof ypsd.ypsetdom_domain); */ + if (inet_aton(server, &iaddr) == 0) { + hp = gethostbyname(server); + if (hp == NULL) + errx(1, "can't find address for %s", server); + memmove(&iaddr.s_addr, hp->h_addr, sizeof(iaddr.s_addr)); + } ypsd.ypsetdom_domain = dom; - *(u_long *)&ypsd.ypsetdom_binding.ypbind_binding_port = port; + bcopy(&iaddr.s_addr, &ypsd.ypsetdom_binding.ypbind_binding_addr, + sizeof(ypsd.ypsetdom_binding.ypbind_binding_addr)); + bcopy(&port, &ypsd.ypsetdom_binding.ypbind_binding_port, + sizeof(ypsd.ypsetdom_binding.ypbind_binding_port)); ypsd.ypsetdom_vers = YPVERS; tv.tv_sec = 15; @@ -101,7 +98,9 @@ bind_tohost(struct sockaddr_in *sin, cha (xdrproc_t)xdr_ypbind_setdom, &ypsd, (xdrproc_t)xdr_void, NULL, tv); if (r) { - warnx("sorry, cannot ypset for domain %s on host - make sure ypbind was started with -ypset or -ypsetme", dom); + warnx("cannot ypset for domain %s on host %s: %s" + " - make sure ypbind was started with -ypset or -ypsetme", dom, + server, clnt_sperrno(r)); clnt_destroy(client); return (YPERR_YPBIND); } @@ -124,18 +123,17 @@ main(int argc, char *argv[]) sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); while ((c = getopt(argc, argv, "h:d:")) != -1) - switch (c) { + switch(c) { case 'd': domainname = optarg; break; case 'h': - if ((sin.sin_addr.s_addr = inet_addr(optarg)) == - INADDR_NONE) { + if (inet_aton(optarg, &sin.sin_addr) == 0) { hent = gethostbyname(optarg); if (hent == NULL) - errx(1, "host %s unknown", optarg); - bcopy(hent->h_addr_list[0], &sin.sin_addr, - sizeof sin.sin_addr); + errx(1, "host %s unknown\n", optarg); + bcopy(hent->h_addr, &sin.sin_addr, + sizeof(sin.sin_addr)); } break; default: From owner-svn-src-head@freebsd.org Tue Aug 11 01:45:18 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CE6E699D5EE; Tue, 11 Aug 2015 01:45:18 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BE50C271; Tue, 11 Aug 2015 01:45:18 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B1jIwa055199; Tue, 11 Aug 2015 01:45:18 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B1jIEl055198; Tue, 11 Aug 2015 01:45:18 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508110145.t7B1jIEl055198@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Tue, 11 Aug 2015 01:45:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286611 - head/usr.sbin/ypset X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 01:45:18 -0000 Author: araujo Date: Tue Aug 11 01:45:17 2015 New Revision: 286611 URL: https://svnweb.freebsd.org/changeset/base/286611 Log: style(9) requires a space here. Modified: head/usr.sbin/ypset/ypset.c Modified: head/usr.sbin/ypset/ypset.c ============================================================================== --- head/usr.sbin/ypset/ypset.c Tue Aug 11 01:33:36 2015 (r286610) +++ head/usr.sbin/ypset/ypset.c Tue Aug 11 01:45:17 2015 (r286611) @@ -123,7 +123,7 @@ main(int argc, char *argv[]) sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); while ((c = getopt(argc, argv, "h:d:")) != -1) - switch(c) { + switch (c) { case 'd': domainname = optarg; break; From owner-svn-src-head@freebsd.org Tue Aug 11 02:30:55 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9E1B399F1A5; Tue, 11 Aug 2015 02:30:55 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8A36ABB4; Tue, 11 Aug 2015 02:30:55 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B2UtUr073999; Tue, 11 Aug 2015 02:30:55 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B2Utxd073998; Tue, 11 Aug 2015 02:30:55 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508110230.t7B2Utxd073998@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Tue, 11 Aug 2015 02:30:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286613 - head/sys/dev/uart X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 02:30:55 -0000 Author: ian Date: Tue Aug 11 02:30:54 2015 New Revision: 286613 URL: https://svnweb.freebsd.org/changeset/base/286613 Log: Style fix, no functional changes -- do the braces for switches correctly. Modified: head/sys/dev/uart/uart_core.c Modified: head/sys/dev/uart/uart_core.c ============================================================================== --- head/sys/dev/uart/uart_core.c Tue Aug 11 01:51:38 2015 (r286612) +++ head/sys/dev/uart/uart_core.c Tue Aug 11 02:30:54 2015 (r286613) @@ -78,8 +78,7 @@ static inline int uart_pps_signal(int pps_mode) { - switch(pps_mode) - { + switch(pps_mode) { case PPS_MODE_CTS: return (SER_CTS); case PPS_MODE_DCD: @@ -91,8 +90,7 @@ static inline int uart_pps_mode_valid(int pps_mode) { - switch(pps_mode) - { + switch(pps_mode) { case PPS_MODE_DISABLED: case PPS_MODE_CTS: case PPS_MODE_DCD: @@ -104,8 +102,7 @@ uart_pps_mode_valid(int pps_mode) static const char * uart_pps_mode_name(int pps_mode) { - switch(pps_mode) - { + switch(pps_mode) { case PPS_MODE_DISABLED: return ("disabled"); case PPS_MODE_CTS: From owner-svn-src-head@freebsd.org Tue Aug 11 02:58:36 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B718999F515; Tue, 11 Aug 2015 02:58:36 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9D007662; Tue, 11 Aug 2015 02:58:36 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B2waSP084357; Tue, 11 Aug 2015 02:58:36 GMT (envelope-from pfg@FreeBSD.org) Received: (from pfg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B2wYtZ084346; Tue, 11 Aug 2015 02:58:34 GMT (envelope-from pfg@FreeBSD.org) Message-Id: <201508110258.t7B2wYtZ084346@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: pfg set sender to pfg@FreeBSD.org using -f From: "Pedro F. Giffuni" Date: Tue, 11 Aug 2015 02:58:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286614 - in head/usr.bin/xlint: lint1 lint2 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 02:58:36 -0000 Author: pfg Date: Tue Aug 11 02:58:33 2015 New Revision: 286614 URL: https://svnweb.freebsd.org/changeset/base/286614 Log: xlint(1): Fix some typos in comments and translate some german No functional change. Obtained from: OpenBSD (where xlint is no more) Modified: head/usr.bin/xlint/lint1/decl.c head/usr.bin/xlint/lint1/func.c head/usr.bin/xlint/lint1/init.c head/usr.bin/xlint/lint1/lint.h head/usr.bin/xlint/lint1/lint1.h head/usr.bin/xlint/lint1/scan.l head/usr.bin/xlint/lint1/tree.c head/usr.bin/xlint/lint2/read.c Modified: head/usr.bin/xlint/lint1/decl.c ============================================================================== --- head/usr.bin/xlint/lint1/decl.c Tue Aug 11 02:30:54 2015 (r286613) +++ head/usr.bin/xlint/lint1/decl.c Tue Aug 11 02:58:33 2015 (r286614) @@ -127,7 +127,7 @@ initdecl(void) /* * Returns a shared type structure vor arithmetic types and void. * - * It's important do duplicate this structure (using duptyp() or tdupdyp()) + * It's important to duplicate this structure (using duptyp() or tdupdyp()) * if it is to be modified (adding qualifiers or anything else). */ type_t * @@ -803,7 +803,7 @@ length(type_t *tp, const char *name) } /* - * Get the alignment of the given Type in bits. + * Get the alignment of the given type in bits. */ int getbound(type_t *tp) @@ -984,8 +984,8 @@ decl1str(sym_t *dsym) /* * bit field * - * only unsigned und signed int are protable bit-field types - *(at least in ANSI C, in traditional C only unsigned int) + * only unsigned and signed int are portable bit-field types + * (at least in ANSI C, in traditional C only unsigned int) */ if (t == CHAR || t == UCHAR || t == SCHAR || t == SHORT || t == USHORT || t == ENUM) { @@ -1173,7 +1173,7 @@ mergepq(pqinf_t *p1, pqinf_t *p2) * Followint 3 functions extend the type of a declarator with * pointer, function and array types. * - * The current type is the Type built by deftyp() (dcs->d_type) and + * The current type is the type built by deftyp() (dcs->d_type) and * pointer, function and array types already added for this * declarator. The new type extension is inserted between both. */ @@ -1559,7 +1559,7 @@ mktag(sym_t *tag, tspec_t kind, int decl tp->t_enum = getblk(sizeof (enum_t)); tp->t_enum->etag = tag; } - /* ist unvollstaendiger Typ */ + /* is incomplete type */ setcompl(tp, 1); } @@ -1769,7 +1769,7 @@ decl1ext(sym_t *dsym, int initflg) if (plibflg && llibflg && dsym->s_type->t_tspec == FUNC && dsym->s_type->t_proto) { /* - * With both LINTLIBRARY and PROTOLIB the prototyp is + * With both LINTLIBRARY and PROTOLIB the prototype is * written as a function definition to the output file. */ rval = dsym->s_type->t_subt->t_tspec != VOID; @@ -1800,7 +1800,7 @@ decl1ext(sym_t *dsym, int initflg) } /* - * Overtake the rememberd params if the new symbol + * Overtake the remembered params if the new symbol * is not a prototype. */ if (rdsym->s_osdef && !dsym->s_type->t_proto) { @@ -1912,7 +1912,7 @@ isredec(sym_t *dsym, int *warn) return(0); if (rsym->s_scl == EXTERN && rsym->s_def == DEF) { /* - * All cases except "int a = 1; static int a;" are catched + * All cases except "int a = 1; static int a;" are caught * above with or without a warning */ /* redeclaration of %s */ @@ -2125,7 +2125,7 @@ chkosdef(sym_t *rdsym, sym_t *dsym) } /* - * Complets a type by copying the dimension and prototype information + * Completes a type by copying the dimension and prototype information * from a second compatible type. * * Following lines are legal: @@ -2150,7 +2150,7 @@ compltyp(sym_t *dsym, sym_t *ssym) if (dst->t_dim == 0 && src->t_dim != 0) { *dstp = dst = duptyp(dst); dst->t_dim = src->t_dim; - /* now a complete Typ */ + /* now a complete type */ setcompl(dst, 0); } } else if (dst->t_tspec == FUNC) { @@ -2229,7 +2229,7 @@ decl1arg(sym_t *sym, int initflg) * Does some checks for lint directives which apply to functions. * Processes arguments in old style function definitions which default * to int. - * Checks compatiblility of old style function definition with previous + * Checks compatibility of old style function definition with previous * prototype. */ void @@ -2300,7 +2300,7 @@ cluparg(void) } /* - * print a warning for each argument off an old style function + * print a warning for each argument of an old style function * definition which defaults to int */ for (arg = args; arg != NULL; arg = arg->s_nxt) { @@ -2657,7 +2657,7 @@ globclup(void) mblklev = 0; /* - * remove all informations about pending lint directives without + * remove all information about pending lint directives without * warnings. */ glclup(1); Modified: head/usr.bin/xlint/lint1/func.c ============================================================================== --- head/usr.bin/xlint/lint1/func.c Tue Aug 11 02:30:54 2015 (r286613) +++ head/usr.bin/xlint/lint1/func.c Tue Aug 11 02:58:33 2015 (r286614) @@ -652,7 +652,7 @@ switch2(void) if (cstk->c_break) { /* - * end of switch alway reached (c_break is only set if the + * end of switch always reached (c_break is only set if the * break statement can be reached). */ reached = 1; Modified: head/usr.bin/xlint/lint1/init.c ============================================================================== --- head/usr.bin/xlint/lint1/init.c Tue Aug 11 02:30:54 2015 (r286613) +++ head/usr.bin/xlint/lint1/init.c Tue Aug 11 02:58:33 2015 (r286614) @@ -544,7 +544,7 @@ mkinit(tnode_t *tn) goto end; /* - * Store the tree memory. This is nessesary because otherwise + * Store the tree memory. This is necessary because otherwise * expr() would free it. */ tmem = tsave(); Modified: head/usr.bin/xlint/lint1/lint.h ============================================================================== --- head/usr.bin/xlint/lint1/lint.h Tue Aug 11 02:30:54 2015 (r286613) +++ head/usr.bin/xlint/lint1/lint.h Tue Aug 11 02:58:33 2015 (r286614) @@ -29,6 +29,8 @@ * 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 @@ -82,7 +84,7 @@ typedef struct { u_int tt_isftyp : 1; /* 1 if floating point type */ u_int tt_isatyp : 1; /* 1 if arithmetic type */ u_int tt_issclt : 1; /* 1 if scalar type */ - char *tt_name; /* Bezeichnung des Typs */ + char *tt_name; /* type name */ } ttab_t; #define size(t) (ttab[t].tt_sz) Modified: head/usr.bin/xlint/lint1/lint1.h ============================================================================== --- head/usr.bin/xlint/lint1/lint1.h Tue Aug 11 02:30:54 2015 (r286613) +++ head/usr.bin/xlint/lint1/lint1.h Tue Aug 11 02:58:33 2015 (r286614) @@ -273,7 +273,7 @@ typedef struct tnode { op_t tn_op; /* operator */ type_t *tn_type; /* type */ u_int tn_lvalue : 1; /* node is lvalue */ - u_int tn_cast : 1; /* if tn_op == CVT its an explizit cast */ + u_int tn_cast : 1; /* if tn_op == CVT its an explicit cast */ u_int tn_parn : 1; /* node parenthesized */ union { struct { Modified: head/usr.bin/xlint/lint1/scan.l ============================================================================== --- head/usr.bin/xlint/lint1/scan.l Tue Aug 11 02:30:54 2015 (r286613) +++ head/usr.bin/xlint/lint1/scan.l Tue Aug 11 02:58:33 2015 (r286614) @@ -259,7 +259,7 @@ uint64_t qumasks[sizeof(uint64_t) * CHAR /* free list for sbuf structures */ static sbuf_t *sbfrlst; -/* Typ of next expected symbol */ +/* type of next expected symbol */ symt_t symtyp; @@ -518,7 +518,7 @@ icon(int base) warning(252); /* - * If the value is to big for the current type, we must choose + * If the value is too big for the current type, we must choose * another type. */ ansiu = 0; Modified: head/usr.bin/xlint/lint1/tree.c ============================================================================== --- head/usr.bin/xlint/lint1/tree.c Tue Aug 11 02:30:54 2015 (r286613) +++ head/usr.bin/xlint/lint1/tree.c Tue Aug 11 02:58:33 2015 (r286614) @@ -559,7 +559,7 @@ build(op_t op, tnode_t *ln, tnode_t *rn) /* * Apply class conversions to the left operand, but only if its - * value is needed or it is compaired with null. + * value is needed or it is compared with null. */ if (mp->m_vctx || mp->m_tctx) ln = cconv(ln); @@ -616,7 +616,7 @@ build(op_t op, tnode_t *ln, tnode_t *rn) /* * Check types for compatibility with the operation and mutual - * compatibility. Return if there are serios problems. + * compatibility. Return if there are serious problems. */ if (!typeok(op, 0, ln, rn)) return (NULL); @@ -733,7 +733,7 @@ cconv(tnode_t *tn) */ if (tn->tn_type->t_tspec == ARRAY) { if (!tn->tn_lvalue) { - /* %soperand of '%s' must be lvalue */ + /* operand of '%s' must be lvalue */ /* XXX print correct operator */ (void)gnuism(114, "", modtab[AMPER].m_name); } @@ -761,7 +761,7 @@ cconv(tnode_t *tn) /* * Perform most type checks. First the types are checked using - * informations from modtab[]. After that it is done by hand for + * information from modtab[]. After that it is done by hand for * more complicated operators and type combinations. * * If the types are ok, typeok() returns 1, otherwise 0. @@ -790,7 +790,7 @@ typeok(op_t op, int arg, tnode_t *ln, tn } if (mp->m_rqint) { - /* integertypes required */ + /* integer types required */ if (!isityp(lt) || (mp->m_binary && !isityp(rt))) { incompat(op, lt, rt); return (0); @@ -826,11 +826,11 @@ typeok(op_t op, int arg, tnode_t *ln, tn case POINT: /* * Most errors required by ANSI C are reported in strmemb(). - * Here we only must check for totaly wrong things. + * Here we only must check for totally wrong things. */ if (lt == FUNC || lt == VOID || ltp->t_isfield || ((lt != STRUCT && lt != UNION) && !ln->tn_lvalue)) { - /* Without tflag we got already an error */ + /* Without tflag we already got an error */ if (tflag) /* unacceptable operand of %s */ error(111, mp->m_name); @@ -842,7 +842,7 @@ typeok(op_t op, int arg, tnode_t *ln, tn if (lt != PTR && !(tflag && isityp(lt))) { /* Without tflag we got already an error */ if (tflag) - /* unacceptabel operand of %s */ + /* unacceptable operand of %s */ error(111, mp->m_name); return (0); } @@ -858,11 +858,11 @@ typeok(op_t op, int arg, tnode_t *ln, tn /* a cast does not yield an lvalue */ error(163); } - /* %soperand of %s must be lvalue */ + /* operand of %s must be lvalue */ error(114, "", mp->m_name); return (0); } else if (ltp->t_const) { - /* %soperand of %s must be modifiable lvalue */ + /* operand of %s must be modifiable lvalue */ if (!tflag) warning(115, "", mp->m_name); } @@ -1584,7 +1584,7 @@ promote(op_t op, int farg, tnode_t *tn) /* * Insert conversions which are necessary to give both operands the same - * type. This is done in different ways for traditional C and ANIS C. + * type. This is done in different ways for traditional C and ANSI C. */ static void balance(op_t op, tnode_t **lnp, tnode_t **rnp) @@ -1760,7 +1760,7 @@ ptconv(int arg, tspec_t nt, tspec_t ot, } /* - * Print warnings for conversions of integer types which my cause + * Print warnings for conversions of integer types which may cause * problems. */ /* ARGSUSED */ @@ -1819,7 +1819,7 @@ piconv(op_t op, tspec_t nt, type_t *tp, return; if (op != CVT) { - /* We got already an error. */ + /* We already got an error. */ return; } @@ -1844,7 +1844,7 @@ ppconv(op_t op, tnode_t *tn, type_t *tp) const char *nts, *ots; /* - * We got already an error (pointers of different types + * We already got an error (pointers of different types * without a cast) or we will not get a warning. */ if (op != CVT) @@ -1890,7 +1890,7 @@ ppconv(op_t op, tnode_t *tn, type_t *tp) * * op operator which requires conversion * arg if op is FARG, # of argument - * tp type in which to convert the constant + * tp type to which convert the constant * nv new constant * v old constant */ @@ -1938,7 +1938,7 @@ cvtcon(op_t op, int arg, type_t *tp, val case DOUBLE: max = DBL_MAX; min = -DBL_MAX; break; case PTR: - /* Got already an error because of float --> ptr */ + /* Already got an error because of float --> ptr */ case LDOUBLE: max = LDBL_MAX; min = -LDBL_MAX; break; default: @@ -2566,7 +2566,7 @@ bldcol(tnode_t *ln, tnode_t *rn) LERROR("bldcol()"); /* * XXX For now we simply take the left type. This is - * probably wrong, if one type contains a functionprototype + * probably wrong, if one type contains a function prototype * and the other one, at the same place, only an old style * declaration. */ @@ -3676,7 +3676,7 @@ chkmisc(tnode_t *tn, int vctx, int tctx, /* * Checks the range of array indices, if possible. * amper is set if only the address of the element is used. This - * means that the index is allowd to refere to the first element + * means that the index is allowed to refer to the first element * after the array. */ static void @@ -3795,7 +3795,7 @@ chkcomp(op_t op, tnode_t *ln, tnode_t *r } /* - * Takes an expression an returns 0 if this expression can be used + * Takes an expression and returns 0 if this expression can be used * for static initialisation, otherwise -1. * * Constant initialisation expressions must be constant or an address Modified: head/usr.bin/xlint/lint2/read.c ============================================================================== --- head/usr.bin/xlint/lint2/read.c Tue Aug 11 02:30:54 2015 (r286613) +++ head/usr.bin/xlint/lint2/read.c Tue Aug 11 02:58:33 2015 (r286614) @@ -143,7 +143,7 @@ readfile(const char *name) /* line number in csrcfile */ cline = (int)strtol(cp, &eptr, 10); if (cp == eptr) { - cline = -1; + cline = -1; } else { cp = eptr; } From owner-svn-src-head@freebsd.org Tue Aug 11 03:12:12 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AF20099F825; Tue, 11 Aug 2015 03:12:12 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9CC64F5C; Tue, 11 Aug 2015 03:12:12 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B3CC6Y093205; Tue, 11 Aug 2015 03:12:12 GMT (envelope-from pfg@FreeBSD.org) Received: (from pfg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B3CAwb093198; Tue, 11 Aug 2015 03:12:10 GMT (envelope-from pfg@FreeBSD.org) Message-Id: <201508110312.t7B3CAwb093198@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: pfg set sender to pfg@FreeBSD.org using -f From: "Pedro F. Giffuni" Date: Tue, 11 Aug 2015 03:12:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286615 - in head: sys/arm/ti sys/arm64/arm64 sys/geom/raid usr.bin/wc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 03:12:12 -0000 Author: pfg Date: Tue Aug 11 03:12:09 2015 New Revision: 286615 URL: https://svnweb.freebsd.org/changeset/base/286615 Log: Clean out some externally visible "more then" grammar MFC after: 3 days Modified: head/sys/arm/ti/ti_hwmods.c head/sys/arm64/arm64/trap.c head/sys/geom/raid/md_intel.c head/sys/geom/raid/md_jmicron.c head/sys/geom/raid/md_nvidia.c head/sys/geom/raid/md_sii.c head/usr.bin/wc/wc.1 Modified: head/sys/arm/ti/ti_hwmods.c ============================================================================== --- head/sys/arm/ti/ti_hwmods.c Tue Aug 11 02:58:33 2015 (r286614) +++ head/sys/arm/ti/ti_hwmods.c Tue Aug 11 03:12:09 2015 (r286615) @@ -129,7 +129,7 @@ ti_hwmods_get_clock(device_t dev) } if (len > 0) - device_printf(dev, "WARNING: more then one ti,hwmod \n"); + device_printf(dev, "WARNING: more than one ti,hwmod \n"); free(buf, M_OFWPROP); return (clk); Modified: head/sys/arm64/arm64/trap.c ============================================================================== --- head/sys/arm64/arm64/trap.c Tue Aug 11 02:58:33 2015 (r286614) +++ head/sys/arm64/arm64/trap.c Tue Aug 11 03:12:09 2015 (r286615) @@ -119,7 +119,7 @@ cpu_fetch_syscall_args(struct thread *td sa->narg = sa->callp->sy_narg; memcpy(sa->args, ap, nap * sizeof(register_t)); if (sa->narg > nap) - panic("ARM64TODO: Could we have more then 8 args?"); + panic("ARM64TODO: Could we have more than 8 args?"); td->td_retval[0] = 0; td->td_retval[1] = 0; Modified: head/sys/geom/raid/md_intel.c ============================================================================== --- head/sys/geom/raid/md_intel.c Tue Aug 11 02:58:33 2015 (r286614) +++ head/sys/geom/raid/md_intel.c Tue Aug 11 03:12:09 2015 (r286615) @@ -991,7 +991,7 @@ nofit: if (olddisk == NULL) panic("No disk at position %d!", disk_pos); if (olddisk->d_state != G_RAID_DISK_S_OFFLINE) { - G_RAID_DEBUG1(1, sc, "More then one disk for pos %d", + G_RAID_DEBUG1(1, sc, "More than one disk for pos %d", disk_pos); g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); return (0); Modified: head/sys/geom/raid/md_jmicron.c ============================================================================== --- head/sys/geom/raid/md_jmicron.c Tue Aug 11 02:58:33 2015 (r286614) +++ head/sys/geom/raid/md_jmicron.c Tue Aug 11 03:12:09 2015 (r286615) @@ -494,7 +494,7 @@ nofit: if (olddisk == NULL) panic("No disk at position %d!", disk_pos); if (olddisk->d_state != G_RAID_DISK_S_OFFLINE) { - G_RAID_DEBUG1(1, sc, "More then one disk for pos %d", + G_RAID_DEBUG1(1, sc, "More than one disk for pos %d", disk_pos); g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); return (0); Modified: head/sys/geom/raid/md_nvidia.c ============================================================================== --- head/sys/geom/raid/md_nvidia.c Tue Aug 11 02:58:33 2015 (r286614) +++ head/sys/geom/raid/md_nvidia.c Tue Aug 11 03:12:09 2015 (r286615) @@ -498,7 +498,7 @@ nofit: if (olddisk == NULL) panic("No disk at position %d!", disk_pos); if (olddisk->d_state != G_RAID_DISK_S_OFFLINE) { - G_RAID_DEBUG1(1, sc, "More then one disk for pos %d", + G_RAID_DEBUG1(1, sc, "More than one disk for pos %d", disk_pos); g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); return (0); Modified: head/sys/geom/raid/md_sii.c ============================================================================== --- head/sys/geom/raid/md_sii.c Tue Aug 11 02:58:33 2015 (r286614) +++ head/sys/geom/raid/md_sii.c Tue Aug 11 03:12:09 2015 (r286615) @@ -549,7 +549,7 @@ nofit: if (olddisk == NULL) panic("No disk at position %d!", disk_pos); if (olddisk->d_state != G_RAID_DISK_S_OFFLINE) { - G_RAID_DEBUG1(1, sc, "More then one disk for pos %d", + G_RAID_DEBUG1(1, sc, "More than one disk for pos %d", disk_pos); g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); return (0); Modified: head/usr.bin/wc/wc.1 ============================================================================== --- head/usr.bin/wc/wc.1 Tue Aug 11 02:58:33 2015 (r286614) +++ head/usr.bin/wc/wc.1 Tue Aug 11 03:12:09 2015 (r286615) @@ -31,7 +31,7 @@ .\" @(#)wc.1 8.2 (Berkeley) 4/19/94 .\" $FreeBSD$ .\" -.Dd November 4, 2014 +.Dd August 24, 2015 .Dt WC 1 .Os .Sh NAME @@ -71,7 +71,7 @@ The following options are available: .It Fl L The number of characters in the longest input line is written to the standard output. -When more then one +When more than one .Ar file argument is specified, the longest input line of .Em all From owner-svn-src-head@freebsd.org Tue Aug 11 05:51:02 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 22FC799D160; Tue, 11 Aug 2015 05:51:02 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 075E7FAE; Tue, 11 Aug 2015 05:51:02 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B5p1Zi056811; Tue, 11 Aug 2015 05:51:01 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B5p0bV056807; Tue, 11 Aug 2015 05:51:00 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201508110551.t7B5p0bV056807@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Tue, 11 Aug 2015 05:51:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286616 - in head/sys: net netinet netinet6 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 05:51:02 -0000 Author: melifaro Date: Tue Aug 11 05:51:00 2015 New Revision: 286616 URL: https://svnweb.freebsd.org/changeset/base/286616 Log: MFP r276712. * Split lltable_init() into lltable_allocate_htbl() (alloc hash table with default callbacks) and lltable_link() ( links any lltable to the list). * Switch from LLTBL_HASHTBL_SIZE to per-lltable hash size field. * Move lltable setup to separate functions in in[6]_domifattach. Modified: head/sys/net/if_llatbl.c head/sys/net/if_llatbl.h head/sys/netinet/in.c head/sys/netinet6/in6.c Directory Properties: head/sys/ (props changed) Modified: head/sys/net/if_llatbl.c ============================================================================== --- head/sys/net/if_llatbl.c Tue Aug 11 03:12:09 2015 (r286615) +++ head/sys/net/if_llatbl.c Tue Aug 11 05:51:00 2015 (r286616) @@ -70,6 +70,7 @@ static void vnet_lltable_init(void); struct rwlock lltable_rwlock; RW_SYSINIT(lltable_rwlock, &lltable_rwlock, "lltable_rwlock"); +static void lltable_unlink(struct lltable *llt); static void llentries_unlink(struct lltable *llt, struct llentries *head); static void htable_unlink_entry(struct llentry *lle); @@ -138,7 +139,7 @@ htable_foreach_lle(struct lltable *llt, error = 0; - for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { + for (i = 0; i < llt->llt_hsize; i++) { LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { error = f(llt, lle, farg); if (error != 0) @@ -160,7 +161,7 @@ htable_link_entry(struct lltable *llt, s IF_AFDATA_WLOCK_ASSERT(llt->llt_ifp); - hashidx = llt->llt_hash(lle, LLTBL_HASHTBL_SIZE); + hashidx = llt->llt_hash(lle, llt->llt_hsize); lleh = &llt->lle_head[hashidx]; lle->lle_tbl = llt; @@ -231,6 +232,14 @@ htable_prefix_free(struct lltable *llt, } static void +htable_free_tbl(struct lltable *llt) +{ + + free(llt->lle_head, M_LLTABLE); + free(llt, M_LLTABLE); +} + +static void llentries_unlink(struct lltable *llt, struct llentries *head) { struct llentry *lle, *next; @@ -355,9 +364,7 @@ lltable_free(struct lltable *llt) KASSERT(llt != NULL, ("%s: llt is NULL", __func__)); - LLTABLE_WLOCK(); - SLIST_REMOVE(&V_lltables, llt, lltable, llt_link); - LLTABLE_WUNLOCK(); + lltable_unlink(llt); LIST_INIT(&dchain); IF_AFDATA_WLOCK(llt->llt_ifp); @@ -372,7 +379,7 @@ lltable_free(struct lltable *llt) llentry_free(lle); } - free(llt, M_LLTABLE); + llt->llt_free_tbl(llt); } #if 0 @@ -388,7 +395,7 @@ lltable_drain(int af) if (llt->llt_af != af) continue; - for (i=0; i < LLTBL_HASHTBL_SIZE; i++) { + for (i=0; i < llt->llt_hsize; i++) { LIST_FOREACH(lle, &llt->lle_head[i], lle_next) { LLE_WLOCK(lle); if (lle->la_hold) { @@ -419,20 +426,18 @@ lltable_prefix_free(int af, struct socka LLTABLE_RUNLOCK(); } -/* - * Create a new lltable. - */ struct lltable * -lltable_init(struct ifnet *ifp, int af) +lltable_allocate_htbl(uint32_t hsize) { struct lltable *llt; - register int i; + int i; - llt = malloc(sizeof(struct lltable), M_LLTABLE, M_WAITOK); + llt = malloc(sizeof(struct lltable), M_LLTABLE, M_WAITOK | M_ZERO); + llt->llt_hsize = hsize; + llt->lle_head = malloc(sizeof(struct llentries) * hsize, + M_LLTABLE, M_WAITOK | M_ZERO); - llt->llt_af = af; - llt->llt_ifp = ifp; - for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) + for (i = 0; i < llt->llt_hsize; i++) LIST_INIT(&llt->lle_head[i]); /* Set some default callbacks */ @@ -440,12 +445,31 @@ lltable_init(struct ifnet *ifp, int af) llt->llt_unlink_entry = htable_unlink_entry; llt->llt_prefix_free = htable_prefix_free; llt->llt_foreach_entry = htable_foreach_lle; + llt->llt_free_tbl = htable_free_tbl; + + return (llt); +} + +/* + * Links lltable to global llt list. + */ +void +lltable_link(struct lltable *llt) +{ LLTABLE_WLOCK(); SLIST_INSERT_HEAD(&V_lltables, llt, llt_link); LLTABLE_WUNLOCK(); +} + +static void +lltable_unlink(struct lltable *llt) +{ + + LLTABLE_WLOCK(); + SLIST_REMOVE(&V_lltables, llt, lltable, llt_link); + LLTABLE_WUNLOCK(); - return (llt); } /* @@ -685,7 +709,7 @@ llatbl_llt_show(struct lltable *llt) db_printf("llt=%p llt_af=%d llt_ifp=%p\n", llt, llt->llt_af, llt->llt_ifp); - for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { + for (i = 0; i < llt->llt_hsize; i++) { LIST_FOREACH(lle, &llt->lle_head[i], lle_next) { llatbl_lle_show((struct llentry_sa *)lle); Modified: head/sys/net/if_llatbl.h ============================================================================== --- head/sys/net/if_llatbl.h Tue Aug 11 03:12:09 2015 (r286615) +++ head/sys/net/if_llatbl.h Tue Aug 11 05:51:00 2015 (r286616) @@ -138,14 +138,6 @@ struct llentry { #define L3_ADDR(lle) ((struct sockaddr *)(&lle[1])) #define L3_ADDR_LEN(lle) (((struct sockaddr *)(&lle[1]))->sa_len) -#ifndef LLTBL_HASHTBL_SIZE -#define LLTBL_HASHTBL_SIZE 32 /* default 32 ? */ -#endif - -#ifndef LLTBL_HASHMASK -#define LLTBL_HASHMASK (LLTBL_HASHTBL_SIZE - 1) -#endif - typedef struct llentry *(llt_lookup_t)(struct lltable *, u_int flags, const struct sockaddr *l3addr); typedef struct llentry *(llt_create_t)(struct lltable *, u_int flags, @@ -161,6 +153,7 @@ typedef int (llt_match_prefix_t)(const s const struct sockaddr *, u_int, struct llentry *); typedef void (llt_free_entry_t)(struct lltable *, struct llentry *); typedef void (llt_fill_sa_entry_t)(const struct llentry *, struct sockaddr *); +typedef void (llt_free_tbl_t)(struct lltable *); typedef void (llt_link_entry_t)(struct lltable *, struct llentry *); typedef void (llt_unlink_entry_t)(struct llentry *); @@ -169,8 +162,9 @@ typedef int (llt_foreach_entry_t)(struct struct lltable { SLIST_ENTRY(lltable) llt_link; - struct llentries lle_head[LLTBL_HASHTBL_SIZE]; int llt_af; + int llt_hsize; + struct llentries *lle_head; struct ifnet *llt_ifp; llt_lookup_t *llt_lookup; @@ -185,6 +179,7 @@ struct lltable { llt_link_entry_t *llt_link_entry; llt_unlink_entry_t *llt_unlink_entry; llt_fill_sa_entry_t *llt_fill_sa_entry; + llt_free_tbl_t *llt_free_tbl; }; MALLOC_DECLARE(M_LLTABLE); @@ -204,8 +199,9 @@ MALLOC_DECLARE(M_LLTABLE); #define LLATBL_HASH(key, mask) \ (((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask) -struct lltable *lltable_init(struct ifnet *, int); +struct lltable *lltable_allocate_htbl(uint32_t hsize); void lltable_free(struct lltable *); +void lltable_link(struct lltable *llt); void lltable_prefix_free(int, struct sockaddr *, struct sockaddr *, u_int); #if 0 Modified: head/sys/netinet/in.c ============================================================================== --- head/sys/netinet/in.c Tue Aug 11 03:12:09 2015 (r286615) +++ head/sys/netinet/in.c Tue Aug 11 05:51:00 2015 (r286616) @@ -1159,7 +1159,7 @@ in_lltable_find_dst(struct lltable *llt, struct sockaddr_in *sin; u_int hashidx; - hashidx = in_lltable_hash_dst(dst, LLTBL_HASHTBL_SIZE); + hashidx = in_lltable_hash_dst(dst, llt->llt_hsize); lleh = &llt->lle_head[hashidx]; LIST_FOREACH(lle, lleh, lle_next) { sin = satosin(L3_ADDR(lle)); @@ -1342,30 +1342,39 @@ in_lltable_dump_entry(struct lltable *ll return (error); } +static struct lltable * +in_lltattach(struct ifnet *ifp) +{ + struct lltable *llt; + + llt = lltable_allocate_htbl(IN_LLTBL_DEFAULT_HSIZE); + llt->llt_af = AF_INET; + llt->llt_ifp = ifp; + + llt->llt_lookup = in_lltable_lookup; + llt->llt_create = in_lltable_create; + llt->llt_delete = in_lltable_delete; + llt->llt_dump_entry = in_lltable_dump_entry; + llt->llt_hash = in_lltable_hash; + llt->llt_fill_sa_entry = in_lltable_fill_sa_entry; + llt->llt_free_entry = in_lltable_free_entry; + llt->llt_match_prefix = in_lltable_match_prefix; + lltable_link(llt); + + return (llt); +} + void * in_domifattach(struct ifnet *ifp) { struct in_ifinfo *ii; - struct lltable *llt; ii = malloc(sizeof(struct in_ifinfo), M_IFADDR, M_WAITOK|M_ZERO); - llt = lltable_init(ifp, AF_INET); - if (llt != NULL) { - llt->llt_lookup = in_lltable_lookup; - llt->llt_create = in_lltable_create; - llt->llt_delete = in_lltable_delete; - llt->llt_dump_entry = in_lltable_dump_entry; - llt->llt_hash = in_lltable_hash; - llt->llt_fill_sa_entry = in_lltable_fill_sa_entry; - llt->llt_free_entry = in_lltable_free_entry; - llt->llt_match_prefix = in_lltable_match_prefix; - } - ii->ii_llt = llt; - + ii->ii_llt = in_lltattach(ifp); ii->ii_igmp = igmp_domifattach(ifp); - return ii; + return (ii); } void Modified: head/sys/netinet6/in6.c ============================================================================== --- head/sys/netinet6/in6.c Tue Aug 11 03:12:09 2015 (r286615) +++ head/sys/netinet6/in6.c Tue Aug 11 05:51:00 2015 (r286616) @@ -2199,7 +2199,7 @@ in6_lltable_find_dst(struct lltable *llt const struct sockaddr_in6 *sin6; u_int hashidx; - hashidx = in6_lltable_hash_dst(dst, LLTBL_HASHTBL_SIZE); + hashidx = in6_lltable_hash_dst(dst, llt->llt_hsize); lleh = &llt->lle_head[hashidx]; LIST_FOREACH(lle, lleh, lle_next) { sin6 = (const struct sockaddr_in6 *)L3_CADDR(lle); @@ -2378,6 +2378,28 @@ in6_lltable_dump_entry(struct lltable *l return (error); } +static struct lltable * +in6_lltattach(struct ifnet *ifp) +{ + struct lltable *llt; + + llt = lltable_allocate_htbl(IN6_LLTBL_DEFAULT_HSIZE); + llt->llt_af = AF_INET6; + llt->llt_ifp = ifp; + + llt->llt_lookup = in6_lltable_lookup; + llt->llt_create = in6_lltable_create; + llt->llt_delete = in6_lltable_delete; + llt->llt_dump_entry = in6_lltable_dump_entry; + llt->llt_hash = in6_lltable_hash; + llt->llt_fill_sa_entry = in6_lltable_fill_sa_entry; + llt->llt_free_entry = in6_lltable_free_entry; + llt->llt_match_prefix = in6_lltable_match_prefix; + lltable_link(llt); + + return (llt); +} + void * in6_domifattach(struct ifnet *ifp) { @@ -2406,17 +2428,7 @@ in6_domifattach(struct ifnet *ifp) ext->nd_ifinfo = nd6_ifattach(ifp); ext->scope6_id = scope6_ifattach(ifp); - ext->lltable = lltable_init(ifp, AF_INET6); - if (ext->lltable != NULL) { - ext->lltable->llt_lookup = in6_lltable_lookup; - ext->lltable->llt_create = in6_lltable_create; - ext->lltable->llt_delete = in6_lltable_delete; - ext->lltable->llt_dump_entry = in6_lltable_dump_entry; - ext->lltable->llt_hash = in6_lltable_hash; - ext->lltable->llt_fill_sa_entry = in6_lltable_fill_sa_entry; - ext->lltable->llt_free_entry = in6_lltable_free_entry; - ext->lltable->llt_match_prefix = in6_lltable_match_prefix; - } + ext->lltable = in6_lltattach(ifp); ext->mld_ifinfo = mld_domifattach(ifp); From owner-svn-src-head@freebsd.org Tue Aug 11 05:51:17 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 298FA99D196 for ; Tue, 11 Aug 2015 05:51:17 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-ob0-f175.google.com (mail-ob0-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EF31319F for ; Tue, 11 Aug 2015 05:51:16 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by obbfr1 with SMTP id fr1so103813533obb.1 for ; Mon, 10 Aug 2015 22:51:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=JVj1it7nb99GZtR4QaHbHo7hktLh39ULU5+ivh8yoak=; b=fZIldOEjaFf4RjbqH8P+f9SyP1Damq4m2GBuq5D0OumWp6BkpfcL2jsHQkMjr3ZiAz xqCjI5IIqoSDKRD3mRw/GdoSg+aJpJ7iqLBCoOa7a5FwvfmKeaC0f715IxGOVoYXUyW0 Zkc/xPBOK8+x8ttxkaeZ31RcQottJYt5zd+ofSXAepYya9N+/e0D7zgGJSwOoRV6Gx6o G6Q0oJZgvCNgimhyH/hkRfHuLB65cZRwtnKQPeOHNPy+UaJDxAQ1gscbmSMZg08SCgRZ CavaYG9hanvn5nLj9+fqfqS9xrTmBvHLxg5h36LhghNCc+58s/UK/wldK4ufubHo2kAF 2XqQ== X-Gm-Message-State: ALoCoQntF5joWUQYie2MqDMvDbi395hgMjQVF3McEOTwUWXRTMoxLN+PF8PKtFqffi6s7fBO4BAi MIME-Version: 1.0 X-Received: by 10.60.84.143 with SMTP id z15mr22793656oey.55.1439272270260; Mon, 10 Aug 2015 22:51:10 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Mon, 10 Aug 2015 22:51:10 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <55C931CE.3030806@delphij.net> References: <201508102131.t7ALVo5J050735@repo.freebsd.org> <55C931CE.3030806@delphij.net> Date: Tue, 11 Aug 2015 07:51:10 +0200 Message-ID: Subject: Re: svn commit: r286601 - head/usr.bin/patch From: Ed Schouten To: d@delphij.net Cc: Xin LI , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 05:51:17 -0000 2015-08-11 1:20 GMT+02:00 Xin Li : > Do you have a better solution for this? No, this is not ideal but I > didn't find a better alternative (or maybe I have missed something obvious?) > > I think with the current POSIX definition of the interface, we have only > two options: either strdup() or cast away const (I'd rather hide this > kind of uglyness in the library), no? Casting const away should be all right in this case. -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Tue Aug 11 05:58:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 20AC799D34E; Tue, 11 Aug 2015 05:58:34 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 11C1A6E5; Tue, 11 Aug 2015 05:58:34 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B5wXLu058163; Tue, 11 Aug 2015 05:58:33 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B5wXYc058162; Tue, 11 Aug 2015 05:58:33 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201508110558.t7B5wXYc058162@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Tue, 11 Aug 2015 05:58:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286617 - head/usr.bin/patch X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 05:58:34 -0000 Author: delphij Date: Tue Aug 11 05:58:33 2015 New Revision: 286617 URL: https://svnweb.freebsd.org/changeset/base/286617 Log: Use __DECONST instead of doing strdup/free. Suggested by: ed MFC after: 2 weeks Modified: head/usr.bin/patch/inp.c Modified: head/usr.bin/patch/inp.c ============================================================================== --- head/usr.bin/patch/inp.c Tue Aug 11 05:51:00 2015 (r286616) +++ head/usr.bin/patch/inp.c Tue Aug 11 05:58:33 2015 (r286617) @@ -219,8 +219,8 @@ plan_a(const char *filename) say("Comparing file %s to default " "RCS version...\n", filename); - argp[0] = strdup(RCSDIFF); - argp[1] = strdup(filename); + argp[0] = __DECONST(char *, RCSDIFF); + argp[1] = __DECONST(char *, filename); posix_spawn_file_actions_init(&file_actions); posix_spawn_file_actions_addopen(&file_actions, STDOUT_FILENO, _PATH_DEVNULL, O_WRONLY, 0); @@ -234,17 +234,15 @@ plan_a(const char *filename) } else fatal("posix_spawn: %s\n", strerror(errno)); posix_spawn_file_actions_destroy(&file_actions); - free(argp[1]); - free(argp[0]); } if (verbose) say("Checking out file %s from RCS...\n", filename); - argp[0] = strdup(CHECKOUT); - argp[1] = strdup("-l"); - argp[2] = strdup(filename); + argp[0] = __DECONST(char *, CHECKOUT); + argp[1] = __DECONST(char *, "-l"); + argp[2] = __DECONST(char *, filename); if (posix_spawn(&pid, CHECKOUT, NULL, NULL, argp, NULL) == 0) { pid = waitpid(pid, &pstat, 0); @@ -254,9 +252,6 @@ plan_a(const char *filename) filename); } else fatal("posix_spawn: %s\n", strerror(errno)); - free(argp[2]); - free(argp[1]); - free(argp[0]); } else if (statfailed) { fatal("can't find %s\n", filename); } From owner-svn-src-head@freebsd.org Tue Aug 11 06:00:53 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C1FED99D421; Tue, 11 Aug 2015 06:00:53 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from anubis.delphij.net (anubis.delphij.net [64.62.153.212]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "anubis.delphij.net", Issuer "StartCom Class 1 Primary Intermediate Server CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id A9F699D9; Tue, 11 Aug 2015 06:00:53 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from Xins-MBP.home.us.delphij.net (c-71-202-112-39.hsd1.ca.comcast.net [71.202.112.39]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by anubis.delphij.net (Postfix) with ESMTPSA id 4F1361282D; Mon, 10 Aug 2015 23:00:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=delphij.net; s=anubis; t=1439272846; x=1439287246; bh=sm8vGl9CqoaO4cbVDz4mjN3AUGNcKKgRwbDFR/Rlpbk=; h=Subject:To:References:Cc:From:Date:In-Reply-To; b=trWWtETQYqFtuSfcJolAtvu5SQB72yOSWQB/42o0CIxWh5NlIMTzvC81bcOYRcQI4 u84Fk6kKzv6oOqWaCRwGNSlWiEfgxrAKedTGvk9x3dnQL/r5WvDKYcuml88SiQy6dZ 3GyJ5knh7UluA3dWbldkTckaj/ld+YHv5+oQizvU= Subject: Re: svn commit: r286601 - head/usr.bin/patch To: Ed Schouten , d@delphij.net References: <201508102131.t7ALVo5J050735@repo.freebsd.org> <55C931CE.3030806@delphij.net> Cc: Xin LI , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org From: Xin Li Message-ID: <55C98F8B.4020103@delphij.net> Date: Mon, 10 Aug 2015 23:00:43 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 06:00:53 -0000 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 On 8/10/15 22:51, Ed Schouten wrote: > 2015-08-11 1:20 GMT+02:00 Xin Li : >> Do you have a better solution for this? No, this is not ideal >> but I didn't find a better alternative (or maybe I have missed >> something obvious?) >> >> I think with the current POSIX definition of the interface, we >> have only two options: either strdup() or cast away const (I'd >> rather hide this kind of uglyness in the library), no? > > Casting const away should be all right in this case. Committed as r286617, please let me know if you want other changes, etc. Perhaps we should convert the tree over time to use __DECONST instead then? Cheers, -----BEGIN PGP SIGNATURE----- iQIbBAEBCgAGBQJVyY+KAAoJEJW2GBstM+nsI4MP+LG3zqlTe2UvL+AL03K2LECM 3qXdiDjkFEhlmyTJ4lQIO2BgqOfQSvxkxaeCs8mMYuOSyPFVmk9tYgS57QKkcoPq rqDCD+w8P0njzvC+PhD5FNBaY0PEq3uapyoqAMvbSMWKS6n4d1Mw5nHrWm3frkS4 filVI5ZBiP+FvxEYZIraqi/D9GFwsGDiaJoQFkn8KN/SjCq4nu01MMWXs9uwYFn7 dsf6xBiXw2XS5ugCQoJvE73EqtUQKNYXFLpqWFDfOroKPN+vILaZRgYeXERJazNh Sx8FWU97BioZhujn9XCS+68MLezS+5tN/ky6PAkcDpih3oW5z5q8E0wKHPR6UTKl 651d1NMfiP9bHYLErA2K8zl5iZ3LsIUikxeJE5nh33Mw02tgjlKkXbXq9AMen9Au Pcl7q09FYXf9RYmBbWrMfGaZdAlWpbP1DMKsVrKabXIXiKbieY+GF8knxJuuEdtS ZqxGlgXeMCWgRDix84ZYYqDSrJsEc0/0EyrlabLuTtf84Ax2xmtUGxt24O0y2S5u 8gJyji39ed0PneRAlPztFz0jiK++KmyLJOAI+cU3oNWoE+tIT+NwKWe7btZuR6A6 Oo0kGrTLX3VQkGOzRYiNd8NYOAGRzGppvuGsEEesAJF1NxX/Yu1rW9Cr7GQ9juWj 7/2k0+Nzy4p7i58Gkn4= =LyPN -----END PGP SIGNATURE----- From owner-svn-src-head@freebsd.org Tue Aug 11 07:36:00 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3C0DC99E8FD; Tue, 11 Aug 2015 07:36:00 +0000 (UTC) (envelope-from melifaro@ipfw.ru) Received: from forward16j.cmail.yandex.net (forward16j.cmail.yandex.net [IPv6:2a02:6b8:0:1630::f3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "forwards.mail.yandex.net", Issuer "Certum Level IV CA" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E64A9F5F; Tue, 11 Aug 2015 07:35:59 +0000 (UTC) (envelope-from melifaro@ipfw.ru) Received: from web10j.yandex.ru (web10j.yandex.ru [IPv6:2a02:6b8:0:1619::310]) by forward16j.cmail.yandex.net (Yandex) with ESMTP id 3F866215C6; Tue, 11 Aug 2015 10:35:24 +0300 (MSK) Received: from 127.0.0.1 (localhost [127.0.0.1]) by web10j.yandex.ru (Yandex) with ESMTP id 40D1556C01C7; Tue, 11 Aug 2015 10:35:23 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfw.ru; s=mail; t=1439278523; bh=7eccHHm51/plTGI3soFFzkTzVNAPkArFSDzLqnBQGnk=; h=From:To:In-Reply-To:References:Subject:Date; b=QNJPJ+BsiJPlRDgj4GsPtTUYpY0cML1Ajz4e8REibTulTmUkuEwlZR4uyl6UVh7Hi uwmBiJNeK22fE4sZKw+YJlUXPm4hrTZGcSfsEE8Snfm57dhUV4kQSNM/KlrjrPSJ7O Kh6bFi8+Y9EjUZEuoAsB1uWLgVluHBBJaSLl48y4= Received: by web10j.yandex.ru with HTTP; Tue, 11 Aug 2015 10:35:20 +0300 From: Alexander V. Chernikov To: Julian Elischer , "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" In-Reply-To: <2074401439209245@web2h.yandex.ru> References: <201508081815.t78IF0xJ081015@repo.freebsd.org> <55C858DD.7060202@freebsd.org> <2074401439209245@web2h.yandex.ru> Subject: Re: svn commit: r286458 - in head/sys: net netinet netinet6 MIME-Version: 1.0 Message-Id: <2838151439278520@web10j.yandex.ru> X-Mailer: Yamail [ http://yandex.ru ] 5.0 Date: Tue, 11 Aug 2015 10:35:20 +0300 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=koi8-r X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 07:36:00 -0000 10.08.2015, 15:20, "Alexander V. Chernikov" : > 10.08.2015, 10:55, "Julian Elischer" : >> On 8/9/15 2:15 AM, Alexander V. Chernikov wrote: >>> šAuthor: melifaro >>> šDate: Sat Aug 8 18:14:59 2015 >>> šNew Revision: 286458 >>> šURL: https://svnweb.freebsd.org/changeset/base/286458 >>> >>> šLog: >>> ššššMFP r274295: >>> >>> šššš* Move interface route cleanup to route.c:rt_flushifroutes() >>> šššš* Convert most of "for (fibnum = 0; fibnum < rt_numfibs; fibnum++)" users >>> ššššššto use new rt_foreach_fib() instead of hand-rolling cycles. >> >> I think rt_foreach_fib() is poorly named. My expectation is that it >> would call a function for each fib, >> or be a macro that just iterates fibs, rather than actually walking >> the tree. > Yes, you're right. > Thanks for the hint, I'll rename it to rt_foreach_fib_walk(). Committed as r286594. > >> rt_foreach_fib_walk() maybe. >> >>> šMod From owner-svn-src-head@freebsd.org Tue Aug 11 08:43:51 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6CF7499FBC3; Tue, 11 Aug 2015 08:43:51 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 54C07C6B; Tue, 11 Aug 2015 08:43:51 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B8hpnJ026666; Tue, 11 Aug 2015 08:43:51 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B8hov6026664; Tue, 11 Aug 2015 08:43:50 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508110843.t7B8hov6026664@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Tue, 11 Aug 2015 08:43:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286618 - in head/sys: kern sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 08:43:51 -0000 Author: ed Date: Tue Aug 11 08:43:50 2015 New Revision: 286618 URL: https://svnweb.freebsd.org/changeset/base/286618 Log: Introduce kern_cap_rights_limit(). The existing sys_cap_rights_limit() expects that a cap_rights_t object lives in userspace. It is therefore hard to call into it from kernelspace. Move the interesting bits of sys_cap_rights_limit() into kern_cap_rights_limit(), so that we can call into it from the CloudABI compatibility layer. Obtained from: https://github.com/NuxiNL/freebsd Differential Revision: https://reviews.freebsd.org/D3314 Modified: head/sys/kern/sys_capability.c head/sys/sys/syscallsubr.h Modified: head/sys/kern/sys_capability.c ============================================================================== --- head/sys/kern/sys_capability.c Tue Aug 11 05:58:33 2015 (r286617) +++ head/sys/kern/sys_capability.c Tue Aug 11 08:43:50 2015 (r286618) @@ -213,15 +213,41 @@ cap_rights(struct filedesc *fdp, int fd) return (cap_rights_fde(&fdp->fd_ofiles[fd])); } +int +kern_cap_rights_limit(struct thread *td, int fd, cap_rights_t *rights) +{ + struct filedesc *fdp; + int error; + + fdp = td->td_proc->p_fd; + FILEDESC_XLOCK(fdp); + if (fget_locked(fdp, fd) == NULL) { + FILEDESC_XUNLOCK(fdp); + return (EBADF); + } + error = _cap_check(cap_rights(fdp, fd), rights, CAPFAIL_INCREASE); + if (error == 0) { + fdp->fd_ofiles[fd].fde_rights = *rights; + if (!cap_rights_is_set(rights, CAP_IOCTL)) { + free(fdp->fd_ofiles[fd].fde_ioctls, M_FILECAPS); + fdp->fd_ofiles[fd].fde_ioctls = NULL; + fdp->fd_ofiles[fd].fde_nioctls = 0; + } + if (!cap_rights_is_set(rights, CAP_FCNTL)) + fdp->fd_ofiles[fd].fde_fcntls = 0; + } + FILEDESC_XUNLOCK(fdp); + return (error); +} + /* * System call to limit rights of the given capability. */ int sys_cap_rights_limit(struct thread *td, struct cap_rights_limit_args *uap) { - struct filedesc *fdp; cap_rights_t rights; - int error, fd, version; + int error, version; cap_rights_init(&rights); @@ -252,30 +278,9 @@ sys_cap_rights_limit(struct thread *td, ktrcaprights(&rights); #endif - fd = uap->fd; - - AUDIT_ARG_FD(fd); + AUDIT_ARG_FD(uap->fd); AUDIT_ARG_RIGHTS(&rights); - - fdp = td->td_proc->p_fd; - FILEDESC_XLOCK(fdp); - if (fget_locked(fdp, fd) == NULL) { - FILEDESC_XUNLOCK(fdp); - return (EBADF); - } - error = _cap_check(cap_rights(fdp, fd), &rights, CAPFAIL_INCREASE); - if (error == 0) { - fdp->fd_ofiles[fd].fde_rights = rights; - if (!cap_rights_is_set(&rights, CAP_IOCTL)) { - free(fdp->fd_ofiles[fd].fde_ioctls, M_FILECAPS); - fdp->fd_ofiles[fd].fde_ioctls = NULL; - fdp->fd_ofiles[fd].fde_nioctls = 0; - } - if (!cap_rights_is_set(&rights, CAP_FCNTL)) - fdp->fd_ofiles[fd].fde_fcntls = 0; - } - FILEDESC_XUNLOCK(fdp); - return (error); + return (kern_cap_rights_limit(td, uap->fd, &rights)); } /* Modified: head/sys/sys/syscallsubr.h ============================================================================== --- head/sys/sys/syscallsubr.h Tue Aug 11 05:58:33 2015 (r286617) +++ head/sys/sys/syscallsubr.h Tue Aug 11 08:43:50 2015 (r286618) @@ -74,6 +74,7 @@ int kern_alternate_path(struct thread *t int kern_bindat(struct thread *td, int dirfd, int fd, struct sockaddr *sa); int kern_cap_ioctls_limit(struct thread *td, int fd, u_long *cmds, size_t ncmds); +int kern_cap_rights_limit(struct thread *td, int fd, cap_rights_t *rights); int kern_chdir(struct thread *td, char *path, enum uio_seg pathseg); int kern_clock_getcpuclockid2(struct thread *td, id_t id, int which, clockid_t *clk_id); From owner-svn-src-head@freebsd.org Tue Aug 11 08:44:20 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4640199FCB1; Tue, 11 Aug 2015 08:44:20 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 37AFFDDA; Tue, 11 Aug 2015 08:44:20 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B8iKSc026753; Tue, 11 Aug 2015 08:44:20 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B8iKfo026752; Tue, 11 Aug 2015 08:44:20 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508110844.t7B8iKfo026752@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Tue, 11 Aug 2015 08:44:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286619 - head/sys/compat/cloudabi X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 08:44:20 -0000 Author: ed Date: Tue Aug 11 08:44:19 2015 New Revision: 286619 URL: https://svnweb.freebsd.org/changeset/base/286619 Log: Make cap_rights_limit() work for CloudABI processes. Call into the recently introduced kern_cap_rights_limit() function to restrict rights. Modified: head/sys/compat/cloudabi/cloudabi_fd.c Modified: head/sys/compat/cloudabi/cloudabi_fd.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_fd.c Tue Aug 11 08:43:50 2015 (r286618) +++ head/sys/compat/cloudabi/cloudabi_fd.c Tue Aug 11 08:44:19 2015 (r286619) @@ -523,6 +523,7 @@ cloudabi_sys_fd_stat_put(struct thread * struct cloudabi_sys_fd_stat_put_args *uap) { cloudabi_fdstat_t fsb; + cap_rights_t rights; int error, oflags; error = copyin(uap->buf, &fsb, sizeof(fsb)); @@ -540,6 +541,13 @@ cloudabi_sys_fd_stat_put(struct thread * CLOUDABI_FDFLAG_DSYNC | CLOUDABI_FDFLAG_RSYNC)) oflags |= O_SYNC; return (kern_fcntl(td, uap->fd, F_SETFL, oflags)); + } else if (uap->flags == CLOUDABI_FDSTAT_RIGHTS) { + /* Convert rights. */ + error = cloudabi_convert_rights( + fsb.fs_rights_base | fsb.fs_rights_inheriting, &rights); + if (error != 0) + return (error); + return (kern_cap_rights_limit(td, uap->fd, &rights)); } return (EINVAL); } From owner-svn-src-head@freebsd.org Tue Aug 11 08:50:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B689799FE59 for ; Tue, 11 Aug 2015 08:50:01 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-ob0-f173.google.com (mail-ob0-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8912A142 for ; Tue, 11 Aug 2015 08:50:01 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by obbfr1 with SMTP id fr1so106315739obb.1 for ; Tue, 11 Aug 2015 01:50:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=bA0DSGZ4vQCoNsuN+vZqtYA90FjGKkO/x0CdVS8/HAI=; b=VPqs6IGt+MalhLfNvwnKoLk9/YBrIuSYw6sMoGT9DLUtxshhylDlnUx8geH4Utq7zt AHCe6MBY8CgspHPLXEn0ZEpXbQNAYSrmCnkONfdThqB3q67WHWmUjCcxTy8XrvcvgxSz duUpAfs80+aU5bIEOkeYMVhelajZsbTMrDtBsonKb/EtfNljEa189SL+zExbNXVrMaOJ 7pbj/fgNvTbZIbDYJnRsYSQANJ66eNqLqfouAxSehc6cMm+yyLr4+y2QqsCthfnhTfo4 zejDiMkmLBeiPdy9yWtd9hJs17+517vthnMxTj0cr+SCv6m4YGWnYfZmDd4FxojKs1gx b90g== X-Gm-Message-State: ALoCoQnIv86p7LVl3mHc3/MD3wy+dnKT+qFzlTdGEbSaLe07wiyRznyyeEP/GjGcdhehH3vt0tsO MIME-Version: 1.0 X-Received: by 10.60.98.211 with SMTP id ek19mr9783249oeb.78.1439281321801; Tue, 11 Aug 2015 01:22:01 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Tue, 11 Aug 2015 01:22:01 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508110558.t7B5wXYc058162@repo.freebsd.org> References: <201508110558.t7B5wXYc058162@repo.freebsd.org> Date: Tue, 11 Aug 2015 10:22:01 +0200 Message-ID: Subject: Re: svn commit: r286617 - head/usr.bin/patch From: Ed Schouten To: Xin LI Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 08:50:01 -0000 2015-08-11 7:58 GMT+02:00 Xin LI : > Log: > Use __DECONST instead of doing strdup/free. Thanks! :-) -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Tue Aug 11 08:55:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1434599D08F; Tue, 11 Aug 2015 08:55:34 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail110.syd.optusnet.com.au (mail110.syd.optusnet.com.au [211.29.132.97]) by mx1.freebsd.org (Postfix) with ESMTP id CCAEF830; Tue, 11 Aug 2015 08:55:33 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from c211-30-166-197.carlnfd1.nsw.optusnet.com.au (c211-30-166-197.carlnfd1.nsw.optusnet.com.au [211.30.166.197]) by mail110.syd.optusnet.com.au (Postfix) with ESMTPS id CB6A57818B5; Tue, 11 Aug 2015 18:55:26 +1000 (AEST) Date: Tue, 11 Aug 2015 18:55:21 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Xin Li cc: Ed Schouten , d@delphij.net, Xin LI , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286601 - head/usr.bin/patch In-Reply-To: <55C98F8B.4020103@delphij.net> Message-ID: <20150811182726.I2033@besplex.bde.org> References: <201508102131.t7ALVo5J050735@repo.freebsd.org> <55C931CE.3030806@delphij.net> <55C98F8B.4020103@delphij.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=XMDNMlVE c=1 sm=1 tr=0 a=KA6XNC2GZCFrdESI5ZmdjQ==:117 a=PO7r1zJSAAAA:8 a=JzwRw_2MAAAA:8 a=kj9zAlcOel0A:10 a=SWg00rOMAAAA:8 a=Y93YNYS4GYCrfHJej2oA:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 08:55:34 -0000 On Mon, 10 Aug 2015, Xin Li wrote: > On 8/10/15 22:51, Ed Schouten wrote: >> 2015-08-11 1:20 GMT+02:00 Xin Li : >>> Do you have a better solution for this? No, this is not ideal >>> but I didn't find a better alternative (or maybe I have missed >>> something obvious?) >>> >>> I think with the current POSIX definition of the interface, we >>> have only two options: either strdup() or cast away const (I'd >>> rather hide this kind of uglyness in the library), no? >> >> Casting const away should be all right in this case. It is the Standard way. > Committed as r286617, please let me know if you want other > changes, etc. > > Perhaps we should convert the tree over time to use __DECONST instead > then? Gak!. I use rmrf on code with __DECONST in it. The misimplementation of __DECONST only "works" because -Wcast-qual is too broken to detect removal of qualifiers by casting a pointer to an integer. Casting a pointer to an integer is much less safe than casting away only a qualifer for a pointer, but both are Standard, so they work unless the compiler is directed to be nonstandard using -Wcast-qual -Werror. Compilers should know about the language defects that make it impossible to declare functions like execv() with the correct number of const's and turn off -Wcast-qual warnings for these functions. strchr() is another function that needs special. It can take a pointer const char and return a related pointer with the const qualifier removed (subtract an offset to get the original pointer with its const qualifier removed). The warning about this from -Wcast-qual is not yet killed using __DECONST() because libc is still compiled with a low WARNS. The implementation uses a cast in the Standard way. Only the implementation would be affected by -Wcast-qual. But a flag like -Wcast-qual should direct the compiler to warn about removal of casts by abusing strchr() too. Bruce From owner-svn-src-head@freebsd.org Tue Aug 11 08:57:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AE39699D104; Tue, 11 Aug 2015 08:57:05 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9F0E698D; Tue, 11 Aug 2015 08:57:05 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B8v598031132; Tue, 11 Aug 2015 08:57:05 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B8v5uD031131; Tue, 11 Aug 2015 08:57:05 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508110857.t7B8v5uD031131@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Tue, 11 Aug 2015 08:57:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286620 - head/contrib/netbsd-tests/lib/libc/regex X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 08:57:05 -0000 Author: bapt Date: Tue Aug 11 08:57:04 2015 New Revision: 286620 URL: https://svnweb.freebsd.org/changeset/base/286620 Log: Disable broken test until we have time ti actually fix the test Modified: head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Modified: head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c ============================================================================== --- head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Tue Aug 11 08:44:19 2015 (r286619) +++ head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Tue Aug 11 08:57:04 2015 (r286620) @@ -631,7 +631,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, basic); ATF_TP_ADD_TC(tp, categorization); ATF_TP_ADD_TC(tp, nullsubexpr); - ATF_TP_ADD_TC(tp, leftassoc); +// ATF_TP_ADD_TC(tp, leftassoc); ATF_TP_ADD_TC(tp, rightassoc); ATF_TP_ADD_TC(tp, forcedassoc); ATF_TP_ADD_TC(tp, repetition); From owner-svn-src-head@freebsd.org Tue Aug 11 08:58:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E575C99D150; Tue, 11 Aug 2015 08:58:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D643FADE; Tue, 11 Aug 2015 08:58:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B8w1AS031220; Tue, 11 Aug 2015 08:58:01 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B8w1hS031219; Tue, 11 Aug 2015 08:58:01 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508110858.t7B8w1hS031219@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 11 Aug 2015 08:58:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286621 - head/usr.sbin/bhyve X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 08:58:02 -0000 Author: mav Date: Tue Aug 11 08:58:00 2015 New Revision: 286621 URL: https://svnweb.freebsd.org/changeset/base/286621 Log: Fix minor typo. MFC after: 3 days Modified: head/usr.sbin/bhyve/bhyve.8 Modified: head/usr.sbin/bhyve/bhyve.8 ============================================================================== --- head/usr.sbin/bhyve/bhyve.8 Tue Aug 11 08:57:04 2015 (r286620) +++ head/usr.sbin/bhyve/bhyve.8 Tue Aug 11 08:58:00 2015 (r286621) @@ -331,7 +331,7 @@ bhyve -c 4 \e\ -s 1:5,ahci-hd,/images/disk.6 \\ -s 1:6,ahci-hd,/images/disk.7 \\ -s 1:7,ahci-hd,/images/disk.8 \\ - -s 2,ahci-cd,/images.install.iso \\ + -s 2,ahci-cd,/images/install.iso \\ -s 3,virtio-net,tap0 \\ -l com1,/dev/nmdm0A \\ -A -H -P -m 8G From owner-svn-src-head@freebsd.org Tue Aug 11 09:00:28 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6917299D504; Tue, 11 Aug 2015 09:00:28 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5A19CD7D; Tue, 11 Aug 2015 09:00:28 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B90SYM032087; Tue, 11 Aug 2015 09:00:28 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B90SB5032086; Tue, 11 Aug 2015 09:00:28 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508110900.t7B90SB5032086@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 11 Aug 2015 09:00:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286622 - head/usr.sbin/bhyve X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 09:00:28 -0000 Author: mav Date: Tue Aug 11 09:00:27 2015 New Revision: 286622 URL: https://svnweb.freebsd.org/changeset/base/286622 Log: Another small typo. MFC after: 3 days Modified: head/usr.sbin/bhyve/bhyve.8 Modified: head/usr.sbin/bhyve/bhyve.8 ============================================================================== --- head/usr.sbin/bhyve/bhyve.8 Tue Aug 11 08:58:00 2015 (r286621) +++ head/usr.sbin/bhyve/bhyve.8 Tue Aug 11 09:00:27 2015 (r286622) @@ -321,7 +321,7 @@ port connected to an .Xr nmdm 4 null-modem device. .Bd -literal -offset indent -bhyve -c 4 \e\ +bhyve -c 4 \\ -s 0,amd_hostbridge -s 1,lpc \\ -s 1:0,ahci-hd,/images/disk.1 \\ -s 1:1,ahci-hd,/images/disk.2 \\ From owner-svn-src-head@freebsd.org Tue Aug 11 09:18:52 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4E5C699DB91; Tue, 11 Aug 2015 09:18:52 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 211B68B2; Tue, 11 Aug 2015 09:18:52 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B9Iptw039355; Tue, 11 Aug 2015 09:18:51 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B9IpGA039354; Tue, 11 Aug 2015 09:18:51 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508110918.t7B9IpGA039354@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 11 Aug 2015 09:18:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286623 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 09:18:52 -0000 Author: mav Date: Tue Aug 11 09:18:51 2015 New Revision: 286623 URL: https://svnweb.freebsd.org/changeset/base/286623 Log: Remove extra lock, that IMO only creates potential problems now. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 09:00:27 2015 (r286622) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 09:18:51 2015 (r286623) @@ -4773,7 +4773,6 @@ arc_tempreserve_space(uint64_t reserve, return (0); } -static kmutex_t arc_lowmem_lock; #ifdef _KERNEL static eventhandler_tag arc_event_lowmem = NULL; @@ -4781,8 +4780,6 @@ static void arc_lowmem(void *arg __unused, int howto __unused) { - /* Serialize access via arc_lowmem_lock. */ - mutex_enter(&arc_lowmem_lock); mutex_enter(&arc_reclaim_thr_lock); needfree = 1; DTRACE_PROBE(arc__needfree); @@ -4793,12 +4790,9 @@ arc_lowmem(void *arg __unused, int howto * here from ARC itself and may hold ARC locks and thus risk a deadlock * with ARC reclaim thread. */ - if (curproc == pageproc) { - while (needfree) - msleep(&needfree, &arc_reclaim_thr_lock, 0, "zfs:lowmem", 0); - } + if (curproc == pageproc) + msleep(&needfree, &arc_reclaim_thr_lock, 0, "zfs:lowmem", 0); mutex_exit(&arc_reclaim_thr_lock); - mutex_exit(&arc_lowmem_lock); } #endif @@ -4809,7 +4803,6 @@ arc_init(void) mutex_init(&arc_reclaim_thr_lock, NULL, MUTEX_DEFAULT, NULL); cv_init(&arc_reclaim_thr_cv, NULL, CV_DEFAULT, NULL); - mutex_init(&arc_lowmem_lock, NULL, MUTEX_DEFAULT, NULL); /* Convert seconds to clock ticks */ arc_min_prefetch_lifespan = 1 * hz; @@ -5049,7 +5042,6 @@ arc_fini(void) ASSERT0(arc_loaned_bytes); - mutex_destroy(&arc_lowmem_lock); #ifdef _KERNEL if (arc_event_lowmem != NULL) EVENTHANDLER_DEREGISTER(vm_lowmem, arc_event_lowmem); From owner-svn-src-head@freebsd.org Tue Aug 11 09:26:14 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B84A899DE7F; Tue, 11 Aug 2015 09:26:14 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A7C53C90; Tue, 11 Aug 2015 09:26:14 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7B9QEiO043324; Tue, 11 Aug 2015 09:26:14 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7B9QCIx043317; Tue, 11 Aug 2015 09:26:12 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201508110926.t7B9QCIx043317@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Tue, 11 Aug 2015 09:26:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286624 - in head/sys: net netinet netinet6 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 09:26:14 -0000 Author: melifaro Date: Tue Aug 11 09:26:11 2015 New Revision: 286624 URL: https://svnweb.freebsd.org/changeset/base/286624 Log: Store addresses instead of sockaddrs inside llentry. This permits us having all (not fully true yet) all the info needed in lookup process in first 64 bytes of 'struct llentry'. struct llentry layout: BEFORE: [rwlock .. state .. state .. MAC ] (lle+1) [sockaddr_in[6]] AFTER [ in[6]_addr MAC .. state .. rwlock ] Currently, address part of struct llentry has only 16 bytes for the key. However, lltable does not restrict any custom lltable consumers with long keys use the previous approach (store key at (lle+1)). Sponsored by: Yandex LLC Modified: head/sys/net/if_llatbl.h head/sys/netinet/if_ether.c head/sys/netinet/in.c head/sys/netinet/toecore.c head/sys/netinet6/in6.c head/sys/netinet6/nd6.c head/sys/netinet6/nd6_nbr.c Modified: head/sys/net/if_llatbl.h ============================================================================== --- head/sys/net/if_llatbl.h Tue Aug 11 09:18:51 2015 (r286623) +++ head/sys/net/if_llatbl.h Tue Aug 11 09:26:11 2015 (r286624) @@ -54,7 +54,18 @@ extern struct rwlock lltable_rwlock; */ struct llentry { LIST_ENTRY(llentry) lle_next; - struct rwlock lle_lock; + union { + struct in_addr addr4; + struct in6_addr addr6; + } r_l3addr; + union { + uint64_t mac_aligned; + uint16_t mac16[3]; + uint8_t mac8[20]; /* IB needs 20 bytes. */ + } ll_addr; + uint32_t spare0; + uint64_t spare1; + struct lltable *lle_tbl; struct llentries *lle_head; void (*lle_free)(struct llentry *); @@ -70,19 +81,13 @@ struct llentry { time_t ln_ntick; int lle_refcnt; - union { - uint64_t mac_aligned; - uint16_t mac16[3]; - uint8_t mac8[20]; /* IB needs 20 bytes. */ - } ll_addr; - LIST_ENTRY(llentry) lle_chain; /* chain of deleted items */ /* XXX af-private? */ union { struct callout ln_timer_ch; struct callout la_timer; } lle_timer; - /* NB: struct sockaddr must immediately follow */ + struct rwlock lle_lock; }; #define LLE_WLOCK(lle) rw_wlock(&(lle)->lle_lock) @@ -133,11 +138,6 @@ struct llentry { #define ln_timer_ch lle_timer.ln_timer_ch #define la_timer lle_timer.la_timer -/* XXX bad name */ -#define L3_CADDR(lle) ((const struct sockaddr *)(&lle[1])) -#define L3_ADDR(lle) ((struct sockaddr *)(&lle[1])) -#define L3_ADDR_LEN(lle) (((struct sockaddr *)(&lle[1]))->sa_len) - typedef struct llentry *(llt_lookup_t)(struct lltable *, u_int flags, const struct sockaddr *l3addr); typedef struct llentry *(llt_create_t)(struct lltable *, u_int flags, Modified: head/sys/netinet/if_ether.c ============================================================================== --- head/sys/netinet/if_ether.c Tue Aug 11 09:18:51 2015 (r286623) +++ head/sys/netinet/if_ether.c Tue Aug 11 09:26:11 2015 (r286624) @@ -813,7 +813,7 @@ match: m_hold = la->la_hold; la->la_hold = NULL; la->la_numheld = 0; - memcpy(&sa, L3_ADDR(la), sizeof(sa)); + lltable_fill_sa_entry(la, (struct sockaddr *)&sa); LLE_WUNLOCK(la); for (; m_hold != NULL; m_hold = m_hold_next) { m_hold_next = m_hold->m_nextpkt; Modified: head/sys/netinet/in.c ============================================================================== --- head/sys/netinet/in.c Tue Aug 11 09:18:51 2015 (r286623) +++ head/sys/netinet/in.c Tue Aug 11 09:26:11 2015 (r286624) @@ -958,7 +958,6 @@ in_purgemaddrs(struct ifnet *ifp) struct in_llentry { struct llentry base; - struct sockaddr_in l3_addr4; }; #define IN_LLTBL_DEFAULT_HSIZE 32 @@ -980,7 +979,7 @@ in_lltable_destroy_lle(struct llentry *l } static struct llentry * -in_lltable_new(const struct sockaddr *l3addr, u_int flags) +in_lltable_new(struct in_addr addr4, u_int flags) { struct in_llentry *lle; @@ -993,7 +992,7 @@ in_lltable_new(const struct sockaddr *l3 * an ARP request. */ lle->base.la_expire = time_uptime; /* mark expired */ - lle->l3_addr4 = *(const struct sockaddr_in *)l3addr; + lle->base.r_l3addr.addr4 = addr4; lle->base.lle_refcnt = 1; lle->base.lle_free = in_lltable_destroy_lle; LLE_LOCK_INIT(&lle->base); @@ -1003,7 +1002,7 @@ in_lltable_new(const struct sockaddr *l3 } #define IN_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \ - (((ntohl((d)->sin_addr.s_addr) ^ (a)->sin_addr.s_addr) & (m)->sin_addr.s_addr)) == 0 ) + (((ntohl((d).s_addr) ^ (a)->sin_addr.s_addr) & (m)->sin_addr.s_addr)) == 0 ) static int in_lltable_match_prefix(const struct sockaddr *prefix, @@ -1016,7 +1015,7 @@ in_lltable_match_prefix(const struct soc * (flags & LLE_STATIC) means deleting all entries * including static ARP entries. */ - if (IN_ARE_MASKED_ADDR_EQUAL(satosin(L3_ADDR(lle)), pfx, msk) && + if (IN_ARE_MASKED_ADDR_EQUAL(lle->r_l3addr.addr4, pfx, msk) && ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) return (1); @@ -1132,11 +1131,8 @@ in_lltable_hash_dst(const struct in_addr static uint32_t in_lltable_hash(const struct llentry *lle, uint32_t hsize) { - const struct sockaddr_in *sin; - sin = (const struct sockaddr_in *)(L3_CADDR(lle)); - - return (in_lltable_hash_dst(sin->sin_addr, hsize)); + return (in_lltable_hash_dst(lle->r_l3addr.addr4, hsize)); } static void @@ -1148,7 +1144,7 @@ in_lltable_fill_sa_entry(const struct ll bzero(sin, sizeof(*sin)); sin->sin_family = AF_INET; sin->sin_len = sizeof(*sin); - sin->sin_addr = ((const struct sockaddr_in *)(L3_CADDR(lle)))->sin_addr; + sin->sin_addr = lle->r_l3addr.addr4; } static inline struct llentry * @@ -1156,16 +1152,14 @@ in_lltable_find_dst(struct lltable *llt, { struct llentry *lle; struct llentries *lleh; - struct sockaddr_in *sin; u_int hashidx; hashidx = in_lltable_hash_dst(dst, llt->llt_hsize); lleh = &llt->lle_head[hashidx]; LIST_FOREACH(lle, lleh, lle_next) { - sin = satosin(L3_ADDR(lle)); if (lle->la_flags & LLE_DELETED) continue; - if (sin->sin_addr.s_addr == dst.s_addr) + if (lle->r_l3addr.addr4.s_addr == dst.s_addr) break; } @@ -1236,7 +1230,7 @@ in_lltable_create(struct lltable *llt, u in_lltable_rtcheck(ifp, flags, l3addr) != 0) return (NULL); - lle = in_lltable_new(l3addr, flags); + lle = in_lltable_new(sin->sin_addr, flags); if (lle == NULL) { log(LOG_INFO, "lla_lookup: new lle malloc failed\n"); return (NULL); Modified: head/sys/netinet/toecore.c ============================================================================== --- head/sys/netinet/toecore.c Tue Aug 11 09:18:51 2015 (r286623) +++ head/sys/netinet/toecore.c Tue Aug 11 09:26:11 2015 (r286624) @@ -390,27 +390,30 @@ toe_lle_event(void *arg __unused, struct struct sockaddr *sa; uint8_t *lladdr; uint16_t vtag; + int family; + struct sockaddr_in6 sin6; LLE_WLOCK_ASSERT(lle); - ifp = lle->lle_tbl->llt_ifp; - sa = L3_ADDR(lle); - - KASSERT(sa->sa_family == AF_INET || sa->sa_family == AF_INET6, - ("%s: lle_event %d for lle %p but sa %p !INET && !INET6", - __func__, evt, lle, sa)); + ifp = lltable_get_ifp(lle->lle_tbl); + family = lltable_get_af(lle->lle_tbl); + if (family != AF_INET && family != AF_INET6) + return; /* * Not interested if the interface's TOE capability is not enabled. */ - if ((sa->sa_family == AF_INET && !(ifp->if_capenable & IFCAP_TOE4)) || - (sa->sa_family == AF_INET6 && !(ifp->if_capenable & IFCAP_TOE6))) + if ((family == AF_INET && !(ifp->if_capenable & IFCAP_TOE4)) || + (family == AF_INET6 && !(ifp->if_capenable & IFCAP_TOE6))) return; tod = TOEDEV(ifp); if (tod == NULL) return; + sa = (struct sockaddr *)&sin6; + lltable_fill_sa_entry(lle, sa); + vtag = 0xfff; if (evt != LLENTRY_RESOLVED) { Modified: head/sys/netinet6/in6.c ============================================================================== --- head/sys/netinet6/in6.c Tue Aug 11 09:18:51 2015 (r286623) +++ head/sys/netinet6/in6.c Tue Aug 11 09:26:11 2015 (r286624) @@ -2047,7 +2047,6 @@ in6_if2idlen(struct ifnet *ifp) struct in6_llentry { struct llentry base; - struct sockaddr_in6 l3_addr6; }; #define IN6_LLTBL_DEFAULT_HSIZE 32 @@ -2069,7 +2068,7 @@ in6_lltable_destroy_lle(struct llentry * } static struct llentry * -in6_lltable_new(const struct sockaddr *l3addr, u_int flags) +in6_lltable_new(const struct in6_addr *addr6, u_int flags) { struct in6_llentry *lle; @@ -2077,7 +2076,7 @@ in6_lltable_new(const struct sockaddr *l if (lle == NULL) /* NB: caller generates msg */ return NULL; - lle->l3_addr6 = *(const struct sockaddr_in6 *)l3addr; + lle->base.r_l3addr.addr6 = *addr6; lle->base.lle_refcnt = 1; lle->base.lle_free = in6_lltable_destroy_lle; LLE_LOCK_INIT(&lle->base); @@ -2093,7 +2092,7 @@ in6_lltable_match_prefix(const struct so const struct sockaddr_in6 *pfx = (const struct sockaddr_in6 *)prefix; const struct sockaddr_in6 *msk = (const struct sockaddr_in6 *)mask; - if (IN6_ARE_MASKED_ADDR_EQUAL(&satosin6(L3_ADDR(lle))->sin6_addr, + if (IN6_ARE_MASKED_ADDR_EQUAL(&lle->r_l3addr.addr6, &pfx->sin6_addr, &msk->sin6_addr) && ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) return (1); @@ -2172,11 +2171,8 @@ in6_lltable_hash_dst(const struct in6_ad static uint32_t in6_lltable_hash(const struct llentry *lle, uint32_t hsize) { - const struct sockaddr_in6 *sin6; - sin6 = (const struct sockaddr_in6 *)L3_CADDR(lle); - - return (in6_lltable_hash_dst(&sin6->sin6_addr, hsize)); + return (in6_lltable_hash_dst(&lle->r_l3addr.addr6, hsize)); } static void @@ -2188,7 +2184,7 @@ in6_lltable_fill_sa_entry(const struct l bzero(sin6, sizeof(*sin6)); sin6->sin6_family = AF_INET6; sin6->sin6_len = sizeof(*sin6); - sin6->sin6_addr =((const struct sockaddr_in6*)L3_CADDR(lle))->sin6_addr; + sin6->sin6_addr = lle->r_l3addr.addr6; } static inline struct llentry * @@ -2196,16 +2192,14 @@ in6_lltable_find_dst(struct lltable *llt { struct llentry *lle; struct llentries *lleh; - const struct sockaddr_in6 *sin6; u_int hashidx; hashidx = in6_lltable_hash_dst(dst, llt->llt_hsize); lleh = &llt->lle_head[hashidx]; LIST_FOREACH(lle, lleh, lle_next) { - sin6 = (const struct sockaddr_in6 *)L3_CADDR(lle); if (lle->la_flags & LLE_DELETED) continue; - if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, dst)) + if (IN6_ARE_ADDR_EQUAL(&lle->r_l3addr.addr6, dst)) break; } @@ -2272,7 +2266,7 @@ in6_lltable_create(struct lltable *llt, in6_lltable_rtcheck(ifp, flags, l3addr) != 0) return (NULL); - lle = in6_lltable_new(l3addr, flags); + lle = in6_lltable_new(&sin6->sin6_addr, flags); if (lle == NULL) { log(LOG_INFO, "lla_lookup: new lle malloc failed\n"); return (NULL); Modified: head/sys/netinet6/nd6.c ============================================================================== --- head/sys/netinet6/nd6.c Tue Aug 11 09:18:51 2015 (r286623) +++ head/sys/netinet6/nd6.c Tue Aug 11 09:26:11 2015 (r286624) @@ -66,7 +66,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#define L3_ADDR_SIN6(le) ((struct sockaddr_in6 *) L3_ADDR(le)) #include #include #include @@ -150,13 +149,16 @@ static void nd6_lle_event(void *arg __unused, struct llentry *lle, int evt) { struct rt_addrinfo rtinfo; - struct sockaddr_in6 dst, *sa6; + struct sockaddr_in6 dst; struct sockaddr_dl gw; struct ifnet *ifp; int type; LLE_WLOCK_ASSERT(lle); + if (lltable_get_af(lle->lle_tbl) != AF_INET6) + return; + switch (evt) { case LLENTRY_RESOLVED: type = RTM_ADD; @@ -170,20 +172,14 @@ nd6_lle_event(void *arg __unused, struct return; } - sa6 = L3_ADDR_SIN6(lle); - if (sa6->sin6_family != AF_INET6) - return; - ifp = lle->lle_tbl->llt_ifp; + ifp = lltable_get_ifp(lle->lle_tbl); bzero(&dst, sizeof(dst)); bzero(&gw, sizeof(gw)); bzero(&rtinfo, sizeof(rtinfo)); - dst.sin6_len = sizeof(struct sockaddr_in6); - dst.sin6_family = AF_INET6; - dst.sin6_addr = sa6->sin6_addr; + lltable_fill_sa_entry(lle, (struct sockaddr *)&dst); dst.sin6_scope_id = in6_getscopezone(ifp, - in6_addrscope(&sa6->sin6_addr)); - in6_clearscope(&dst.sin6_addr); /* XXX */ + in6_addrscope(&dst.sin6_addr)); gw.sdl_len = sizeof(struct sockaddr_dl); gw.sdl_family = AF_LINK; gw.sdl_alen = ifp->if_addrlen; @@ -569,7 +565,7 @@ nd6_llinfo_timer(void *arg) } ndi = ND_IFINFO(ifp); - dst = &L3_ADDR_SIN6(ln)->sin6_addr; + dst = &ln->r_l3addr.addr6; if (ln->la_flags & LLE_STATIC) { goto done; } @@ -1122,7 +1118,7 @@ nd6_free(struct llentry *ln, int gc) ifp = ln->lle_tbl->llt_ifp; if (ND_IFINFO(ifp)->flags & ND6_IFF_ACCEPT_RTADV) { - dr = defrouter_lookup(&L3_ADDR_SIN6(ln)->sin6_addr, ifp); + dr = defrouter_lookup(&ln->r_l3addr.addr6, ifp); if (dr != NULL && dr->expire && ln->ln_state == ND6_LLINFO_STALE && gc) { @@ -1183,7 +1179,7 @@ nd6_free(struct llentry *ln, int gc) * is in the Default Router List. * See a corresponding comment in nd6_na_input(). */ - rt6_flush(&L3_ADDR_SIN6(ln)->sin6_addr, ifp); + rt6_flush(&ln->r_l3addr.addr6, ifp); } if (dr) { @@ -1907,7 +1903,7 @@ nd6_grab_holdchain(struct llentry *ln, s *chain = ln->la_hold; ln->la_hold = NULL; - memcpy(sin6, L3_ADDR_SIN6(ln), sizeof(*sin6)); + lltable_fill_sa_entry(ln, (struct sockaddr *)sin6); if (ln->ln_state == ND6_LLINFO_STALE) { Modified: head/sys/netinet6/nd6_nbr.c ============================================================================== --- head/sys/netinet6/nd6_nbr.c Tue Aug 11 09:18:51 2015 (r286623) +++ head/sys/netinet6/nd6_nbr.c Tue Aug 11 09:26:11 2015 (r286624) @@ -68,7 +68,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#define L3_ADDR_SIN6(le) ((struct sockaddr_in6 *) L3_ADDR(le)) #include #include #include @@ -898,7 +897,7 @@ nd6_na_input(struct mbuf *m, int off, in struct nd_defrouter *dr; struct in6_addr *in6; - in6 = &L3_ADDR_SIN6(ln)->sin6_addr; + in6 = &ln->r_l3addr.addr6; /* * Lock to protect the default router list. From owner-svn-src-head@freebsd.org Tue Aug 11 09:43:04 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5362899E34A; Tue, 11 Aug 2015 09:43:04 +0000 (UTC) (envelope-from marck@rinet.ru) Received: from woozle.rinet.ru (woozle.rinet.ru [195.54.192.68]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 31C449D0; Tue, 11 Aug 2015 09:43:02 +0000 (UTC) (envelope-from marck@rinet.ru) Received: from localhost (localhost [127.0.0.1]) by woozle.rinet.ru (8.14.5/8.14.5) with ESMTP id t7B9cdc6012265; Tue, 11 Aug 2015 12:38:40 +0300 (MSK) (envelope-from marck@rinet.ru) Date: Tue, 11 Aug 2015 12:38:39 +0300 (MSK) From: Dmitry Morozovsky To: Alexander Motin cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286570 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys In-Reply-To: <201508101034.t7AAYOtk074606@repo.freebsd.org> Message-ID: References: <201508101034.t7AAYOtk074606@repo.freebsd.org> User-Agent: Alpine 2.00 (BSF 1167 2008-08-23) X-NCC-RegID: ru.rinet X-OpenPGP-Key-ID: 6B691B03 MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3 (woozle.rinet.ru [0.0.0.0]); Tue, 11 Aug 2015 12:38:40 +0300 (MSK) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 09:43:04 -0000 Alexander, On Mon, 10 Aug 2015, Alexander Motin wrote: > Author: mav > Date: Mon Aug 10 10:34:23 2015 > New Revision: 286570 > URL: https://svnweb.freebsd.org/changeset/base/286570 > > Log: > MFV r277426: 5408 managing ZFS cache devices requires lots of RAM > > illumos/illumos-gate@89c86e32293a30cdd7af530c38b2073fee01411c [snip] > For an average blocksize of 8KB, this means that for the L2ARC, the ratio > of metadata to data has gone down from about 2.92% to 1.56%. For a > 'storage optimized' EC2 instance with 1600GB of SSD and 60GB of RAM, this > means that we expect a completely full L2ARC to use (1600 GB * 0.0156) / > 60GB = 41% of the available memory, down from 78%. Thanks! Any MFC planned please? -- Sincerely, D.Marck [DM5020, MCK-RIPE, DM3-RIPN] [ FreeBSD committer: marck@FreeBSD.org ] ------------------------------------------------------------------------ *** Dmitry Morozovsky --- D.Marck --- Wild Woozle --- marck@rinet.ru *** ------------------------------------------------------------------------ From owner-svn-src-head@freebsd.org Tue Aug 11 09:59:44 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A493D99E800; Tue, 11 Aug 2015 09:59:44 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: from mail-lb0-x22d.google.com (mail-lb0-x22d.google.com [IPv6:2a00:1450:4010:c04::22d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 45E7F14AE; Tue, 11 Aug 2015 09:59:44 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: by lbbpu9 with SMTP id pu9so82740599lbb.3; Tue, 11 Aug 2015 02:59:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=aQyNbwJGGNgU8bf8/OL6x+RQgDfFgRpNjl2k3hDz5yQ=; b=Q/27hvcHt6rPGn0LZMFGabI1uc5gpZEVYmSOm9TlzY8nCROM8U+iXVCxRb7/9MQL3O Rb6parl0cT1tQvpBHAQmQ9lJU6T2KWw5wFrg+YEtunGbDtVuiQ9QkxDF90kTiifXywKY 79xw1gNWFav36HYNtx8Pk1WPbU/BpAcuQfQg3e7fGBm8jHu32p6MDqmBbTM7wHOr2may Fy8yO+R9TFO9lnI+TLD5xD2gr+tz7LBu+1SEHxo979X4MFXqjez9ZiGkZK6rQ9C621DU zbLcA/SWeuMQvefuc5e6TjmMnt/Y8rQmDLzd5GoyIqO5W1wJqIa76PH03Wr/UJPdsuad 3BnQ== X-Received: by 10.112.160.73 with SMTP id xi9mr24963918lbb.92.1439287182430; Tue, 11 Aug 2015 02:59:42 -0700 (PDT) Received: from mavbook.mavhome.dp.ua ([134.249.139.101]) by smtp.googlemail.com with ESMTPSA id rl1sm351674lac.14.2015.08.11.02.59.40 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Aug 2015 02:59:41 -0700 (PDT) Sender: Alexander Motin Message-ID: <55C9C78A.2070707@FreeBSD.org> Date: Tue, 11 Aug 2015 12:59:38 +0300 From: Alexander Motin User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Dmitry Morozovsky CC: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286570 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys References: <201508101034.t7AAYOtk074606@repo.freebsd.org> In-Reply-To: Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 09:59:44 -0000 On 11.08.2015 12:38, Dmitry Morozovsky wrote: > Alexander, > > On Mon, 10 Aug 2015, Alexander Motin wrote: > >> Author: mav >> Date: Mon Aug 10 10:34:23 2015 >> New Revision: 286570 >> URL: https://svnweb.freebsd.org/changeset/base/286570 >> >> Log: >> MFV r277426: 5408 managing ZFS cache devices requires lots of RAM >> >> illumos/illumos-gate@89c86e32293a30cdd7af530c38b2073fee01411c > > [snip] > >> For an average blocksize of 8KB, this means that for the L2ARC, the ratio >> of metadata to data has gone down from about 2.92% to 1.56%. For a >> 'storage optimized' EC2 instance with 1600GB of SSD and 60GB of RAM, this >> means that we expect a completely full L2ARC to use (1600 GB * 0.0156) / >> 60GB = 41% of the available memory, down from 78%. > > Thanks! > > Any MFC planned please? Theoretically planned, but no specific terms yet -- too many changes. -- Alexander Motin From owner-svn-src-head@freebsd.org Tue Aug 11 10:39:20 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ADAC699E4ED; Tue, 11 Aug 2015 10:39:20 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9D81E690; Tue, 11 Aug 2015 10:39:20 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BAdKPA071659; Tue, 11 Aug 2015 10:39:20 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BAdK1x071658; Tue, 11 Aug 2015 10:39:20 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508111039.t7BAdK1x071658@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 11 Aug 2015 10:39:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286625 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 10:39:20 -0000 Author: mav Date: Tue Aug 11 10:39:19 2015 New Revision: 286625 URL: https://svnweb.freebsd.org/changeset/base/286625 Log: MFV r277425: 5376 arc_kmem_reap_now() should not result in clearing arc_no_grow Reviewed by: Christopher Siden Reviewed by: George Wilson Reviewed by: Steven Hartland Reviewed by: Richard Elling Approved by: Dan McDonald Author: Matthew Ahrens illumos/illumos-gate@2ec99e3e987d8aa273f1e9ba2b983557d058198c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 09:26:11 2015 (r286624) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 10:39:19 2015 (r286625) @@ -153,13 +153,7 @@ static kmutex_t arc_reclaim_thr_lock; static kcondvar_t arc_reclaim_thr_cv; /* used to signal reclaim thr */ static uint8_t arc_thread_exit; -#define ARC_REDUCE_DNLC_PERCENT 3 -uint_t arc_reduce_dnlc_percent = ARC_REDUCE_DNLC_PERCENT; - -typedef enum arc_reclaim_strategy { - ARC_RECLAIM_AGGR, /* Aggressive reclaim strategy */ - ARC_RECLAIM_CONS /* Conservative reclaim strategy */ -} arc_reclaim_strategy_t; +uint_t arc_reduce_dnlc_percent = 3; /* * The number of iterations through arc_evict_*() before we @@ -174,7 +168,19 @@ static int arc_grow_retry = 60; static int arc_p_min_shift = 4; /* log2(fraction of arc to reclaim) */ -static int arc_shrink_shift = 5; +static int arc_shrink_shift = 7; + +/* + * log2(fraction of ARC which must be free to allow growing). + * I.e. If there is less than arc_c >> arc_no_grow_shift free memory, + * when reading a new block into the ARC, we will evict an equal-sized block + * from the ARC. + * + * This must be less than arc_shrink_shift, so that when we shrink the ARC, + * we will still not allow it to grow. + */ +int arc_no_grow_shift = 5; + /* * minimum lifespan of a prefetch block in clock ticks @@ -3055,13 +3061,10 @@ arc_flush(spa_t *spa) } void -arc_shrink(void) +arc_shrink(int64_t to_free) { if (arc_c > arc_c_min) { - uint64_t to_free; - - to_free = arc_c >> arc_shrink_shift; DTRACE_PROBE4(arc__shrink, uint64_t, arc_c, uint64_t, arc_c_min, uint64_t, arc_p, uint64_t, to_free); if (arc_c > arc_c_min + to_free) @@ -3089,44 +3092,76 @@ arc_shrink(void) } } -static int needfree = 0; +static long needfree = 0; -static int -arc_reclaim_needed(void) +typedef enum free_memory_reason_t { + FMR_UNKNOWN, + FMR_NEEDFREE, + FMR_LOTSFREE, + FMR_SWAPFS_MINFREE, + FMR_PAGES_PP_MAXIMUM, + FMR_HEAP_ARENA, + FMR_ZIO_ARENA, + FMR_ZIO_FRAG, +} free_memory_reason_t; + +int64_t last_free_memory; +free_memory_reason_t last_free_reason; + +/* + * Additional reserve of pages for pp_reserve. + */ +int64_t arc_pages_pp_reserve = 64; + +/* + * Additional reserve of pages for swapfs. + */ +int64_t arc_swapfs_reserve = 64; + +/* + * Return the amount of memory that can be consumed before reclaim will be + * needed. Positive if there is sufficient free memory, negative indicates + * the amount of memory that needs to be freed up. + */ +static int64_t +arc_available_memory(void) { + int64_t lowest = INT64_MAX; + int64_t n; + free_memory_reason_t r = FMR_UNKNOWN; #ifdef _KERNEL - - if (needfree) { - DTRACE_PROBE(arc__reclaim_needfree); - return (1); + if (needfree > 0) { + n = PAGESIZE * (-needfree); + if (n < lowest) { + lowest = n; + r = FMR_NEEDFREE; + } } /* * Cooperate with pagedaemon when it's time for it to scan * and reclaim some pages. */ - if (freemem < zfs_arc_free_target) { - DTRACE_PROBE2(arc__reclaim_freemem, uint64_t, - freemem, uint64_t, zfs_arc_free_target); - return (1); + n = PAGESIZE * (int64_t)(freemem - zfs_arc_free_target); + if (n < lowest) { + lowest = n; + r = FMR_LOTSFREE; } #ifdef illumos /* - * take 'desfree' extra pages, so we reclaim sooner, rather than later - */ - extra = desfree; - - /* * check that we're out of range of the pageout scanner. It starts to * schedule paging if freemem is less than lotsfree and needfree. * lotsfree is the high-water mark for pageout, and needfree is the * number of needed free pages. We add extra pages here to make sure * the scanner doesn't start up while we're freeing memory. */ - if (freemem < lotsfree + needfree + extra) - return (1); + n = PAGESIZE * (freemem - lotsfree - needfree - desfree); + if (n < lowest) { + lowest = n; + r = FMR_LOTSFREE; + } /* * check to make sure that swapfs has enough space so that anon @@ -3135,8 +3170,13 @@ arc_reclaim_needed(void) * swap pages. We also add a bit of extra here just to prevent * circumstances from getting really dire. */ - if (availrmem < swapfs_minfree + swapfs_reserve + extra) - return (1); + n = PAGESIZE * (availrmem - swapfs_minfree - swapfs_reserve - + desfree - arc_swapfs_reserve); + if (n < lowest) { + lowest = n; + r = FMR_SWAPFS_MINFREE; + } + /* * Check that we have enough availrmem that memory locking (e.g., via @@ -3145,8 +3185,12 @@ arc_reclaim_needed(void) * drops below pages_pp_maximum, page locking mechanisms such as * page_pp_lock() will fail.) */ - if (availrmem <= pages_pp_maximum) - return (1); + n = PAGESIZE * (availrmem - pages_pp_maximum - + arc_pages_pp_reserve); + if (n < lowest) { + lowest = n; + r = FMR_PAGES_PP_MAXIMUM; + } #endif /* illumos */ #if defined(__i386) || !defined(UMA_MD_SMALL_ALLOC) @@ -3161,12 +3205,11 @@ arc_reclaim_needed(void) * heap is allocated. (Or, in the calculation, if less than 1/4th is * free) */ - if (vmem_size(heap_arena, VMEM_FREE) < - (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2)) { - DTRACE_PROBE2(arc__reclaim_used, uint64_t, - vmem_size(heap_arena, VMEM_FREE), uint64_t, - (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC)) >> 2); - return (1); + n = vmem_size(heap_arena, VMEM_FREE) - + (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2) + if (n < lowest) { + lowest = n; + r = FMR_HEAP_ARENA; } #define zio_arena NULL #else @@ -3182,29 +3225,50 @@ arc_reclaim_needed(void) * to aggressively evict memory from the arc in order to avoid * memory fragmentation issues. */ - if (zio_arena != NULL && - vmem_size(zio_arena, VMEM_FREE) < - (vmem_size(zio_arena, VMEM_ALLOC) >> 4)) - return (1); + if (zio_arena != NULL) { + n = vmem_size(zio_arena, VMEM_FREE) - + (vmem_size(zio_arena, VMEM_ALLOC) >> 4); + if (n < lowest) { + lowest = n; + r = FMR_ZIO_ARENA; + } + } /* * Above limits know nothing about real level of KVA fragmentation. * Start aggressive reclamation if too little sequential KVA left. */ - if (vmem_size(heap_arena, VMEM_MAXFREE) < zfs_max_recordsize) { - DTRACE_PROBE2(arc__reclaim_maxfree, uint64_t, - vmem_size(heap_arena, VMEM_MAXFREE), - uint64_t, zfs_max_recordsize); - return (1); + if (lowest > 0) { + n = (vmem_size(heap_arena, VMEM_MAXFREE) < zfs_max_recordsize) ? + -(vmem_size(heap_arena, VMEM_ALLOC) >> 4) : INT64_MAX; + if (n < lowest) { + lowest = n; + r = FMR_ZIO_FRAG; + } } #else /* _KERNEL */ + /* Every 100 calls, free a small amount */ if (spa_get_random(100) == 0) - return (1); + lowest = -1024; #endif /* _KERNEL */ - DTRACE_PROBE(arc__reclaim_no); - return (0); + last_free_memory = lowest; + last_free_reason = r; + DTRACE_PROBE2(arc__available_memory, int64_t, lowest, int, r); + return (lowest); +} + + +/* + * Determine if the system is under memory pressure and is asking + * to reclaim memory. A return value of TRUE indicates that the system + * is under memory pressure and that the arc should adjust accordingly. + */ +static boolean_t +arc_reclaim_needed(void) +{ + return (arc_available_memory() < 0); } extern kmem_cache_t *zio_buf_cache[]; @@ -3212,7 +3276,7 @@ extern kmem_cache_t *zio_data_buf_cache[ extern kmem_cache_t *range_seg_cache; static __noinline void -arc_kmem_reap_now(arc_reclaim_strategy_t strat) +arc_kmem_reap_now(void) { size_t i; kmem_cache_t *prev_cache = NULL; @@ -3235,13 +3299,6 @@ arc_kmem_reap_now(arc_reclaim_strategy_t #endif #endif - /* - * An aggressive reclamation will shrink the cache size as well as - * reap free buffers from the arc kmem caches. - */ - if (strat == ARC_RECLAIM_AGGR) - arc_shrink(); - for (i = 0; i < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; i++) { if (zio_buf_cache[i] != prev_cache) { prev_cache = zio_buf_cache[i]; @@ -3258,12 +3315,13 @@ arc_kmem_reap_now(arc_reclaim_strategy_t kmem_cache_reap_now(range_seg_cache); #ifdef illumos - /* - * Ask the vmem arena to reclaim unused memory from its - * quantum caches. - */ - if (zio_arena != NULL && strat == ARC_RECLAIM_AGGR) + if (zio_arena != NULL) { + /* + * Ask the vmem arena to reclaim unused memory from its + * quantum caches. + */ vmem_qcache_reap(zio_arena); + } #endif DTRACE_PROBE(arc__kmem_reap_end); } @@ -3272,46 +3330,44 @@ static void arc_reclaim_thread(void *dummy __unused) { clock_t growtime = 0; - arc_reclaim_strategy_t last_reclaim = ARC_RECLAIM_CONS; callb_cpr_t cpr; CALLB_CPR_INIT(&cpr, &arc_reclaim_thr_lock, callb_generic_cpr, FTAG); mutex_enter(&arc_reclaim_thr_lock); while (arc_thread_exit == 0) { - if (arc_reclaim_needed()) { + int64_t free_memory = arc_available_memory(); + if (free_memory < 0) { - if (arc_no_grow) { - if (last_reclaim == ARC_RECLAIM_CONS) { - DTRACE_PROBE(arc__reclaim_aggr_no_grow); - last_reclaim = ARC_RECLAIM_AGGR; - } else { - last_reclaim = ARC_RECLAIM_CONS; - } - } else { - arc_no_grow = TRUE; - last_reclaim = ARC_RECLAIM_AGGR; - DTRACE_PROBE(arc__reclaim_aggr); - membar_producer(); - } + arc_no_grow = B_TRUE; + arc_warm = B_TRUE; - /* reset the growth delay for every reclaim */ + /* + * Wait at least zfs_grow_retry (default 60) seconds + * before considering growing. + */ growtime = ddi_get_lbolt() + (arc_grow_retry * hz); - if (needfree && last_reclaim == ARC_RECLAIM_CONS) { - /* - * If needfree is TRUE our vm_lowmem hook - * was called and in that case we must free some - * memory, so switch to aggressive mode. - */ - arc_no_grow = TRUE; - last_reclaim = ARC_RECLAIM_AGGR; - } - arc_kmem_reap_now(last_reclaim); - arc_warm = B_TRUE; + arc_kmem_reap_now(); - } else if (arc_no_grow && ddi_get_lbolt() >= growtime) { - arc_no_grow = FALSE; + /* + * If we are still low on memory, shrink the ARC + * so that we have arc_shrink_min free space. + */ + free_memory = arc_available_memory(); + + int64_t to_free = + (arc_c >> arc_shrink_shift) - free_memory; + if (to_free > 0) { +#ifdef _KERNEL + to_free = MAX(to_free, ptob(needfree)); +#endif + arc_shrink(to_free); + } + } else if (free_memory < arc_c >> arc_no_grow_shift) { + arc_no_grow = B_TRUE; + } else if (ddi_get_lbolt() >= growtime) { + arc_no_grow = B_FALSE; } arc_adjust(); @@ -4781,7 +4837,8 @@ arc_lowmem(void *arg __unused, int howto { mutex_enter(&arc_reclaim_thr_lock); - needfree = 1; + /* XXX: Memory deficit should be passed as argument. */ + needfree = btoc(arc_c >> arc_shrink_shift); DTRACE_PROBE(arc__needfree); cv_signal(&arc_reclaim_thr_cv); @@ -4865,6 +4922,12 @@ arc_init(void) if (zfs_arc_shrink_shift > 0) arc_shrink_shift = zfs_arc_shrink_shift; + /* + * Ensure that arc_no_grow_shift is less than arc_shrink_shift. + */ + if (arc_no_grow_shift >= arc_shrink_shift) + arc_no_grow_shift = arc_shrink_shift - 1; + if (zfs_arc_p_min_shift > 0) arc_p_min_shift = zfs_arc_p_min_shift; From owner-svn-src-head@freebsd.org Tue Aug 11 10:52:30 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AE37799E9B0; Tue, 11 Aug 2015 10:52:30 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 0B985DDA; Tue, 11 Aug 2015 10:52:28 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id NAA16474; Tue, 11 Aug 2015 13:52:20 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1ZP7AJ-000O2w-DS; Tue, 11 Aug 2015 13:52:19 +0300 Subject: Re: svn commit: r286625 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs To: Alexander Motin , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org References: <201508111039.t7BAdK1x071658@repo.freebsd.org> From: Andriy Gapon X-Enigmail-Draft-Status: N1110 Message-ID: <55C9D3A5.1020000@FreeBSD.org> Date: Tue, 11 Aug 2015 13:51:17 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <201508111039.t7BAdK1x071658@repo.freebsd.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 10:52:30 -0000 On 11/08/2015 13:39, Alexander Motin wrote: > Author: mav > Date: Tue Aug 11 10:39:19 2015 > New Revision: 286625 > URL: https://svnweb.freebsd.org/changeset/base/286625 > > Log: > MFV r277425: > 5376 arc_kmem_reap_now() should not result in clearing arc_no_grow > Reviewed by: Christopher Siden > Reviewed by: George Wilson > Reviewed by: Steven Hartland > Reviewed by: Richard Elling > Approved by: Dan McDonald > Author: Matthew Ahrens > > illumos/illumos-gate@2ec99e3e987d8aa273f1e9ba2b983557d058198c > > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Alexander, thank you very much for bringing all these upstream changes into our tree. It seems that some of the changes, though, non-trivially overlap with FreeBSD-specific changes to ZFS code. I think that this change is one of the examples. It would be good if a strategy of the resolution of each non-trivial conflict was described and possibly discussed. Reviewing the change without knowing the general idea behind it is not always easy. -- Andriy Gapon From owner-svn-src-head@freebsd.org Tue Aug 11 11:51:25 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4B02C99EAAC; Tue, 11 Aug 2015 11:51:25 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebius.int.ru (glebius.int.ru [81.19.69.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebius.int.ru", Issuer "cell.glebius.int.ru" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4FD53C6; Tue, 11 Aug 2015 11:51:23 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebius.int.ru (localhost [127.0.0.1]) by cell.glebius.int.ru (8.15.2/8.15.2) with ESMTPS id t7BBpKF3083293 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 11 Aug 2015 14:51:20 +0300 (MSK) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebius.int.ru (8.15.2/8.15.2/Submit) id t7BBpK3d083292; Tue, 11 Aug 2015 14:51:20 +0300 (MSK) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebius.int.ru: glebius set sender to glebius@FreeBSD.org using -f Date: Tue, 11 Aug 2015 14:51:20 +0300 From: Gleb Smirnoff To: Adrian Chadd Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286437 - in head/sys: dev/ath dev/ath/ath_rate/sample dev/bwi dev/bwn dev/if_ndis dev/ipw dev/iwi dev/iwn dev/malo dev/mwl dev/ral dev/usb/wlan dev/wi dev/wpi dev/wtap net80211 Message-ID: <20150811115120.GQ75813@FreeBSD.org> References: <201508080110.t781AJUf044737@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="xesSdrSSBC0PokLI" Content-Disposition: inline In-Reply-To: <201508080110.t781AJUf044737@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 11:51:25 -0000 --xesSdrSSBC0PokLI Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sat, Aug 08, 2015 at 01:10:19AM +0000, Adrian Chadd wrote: A> Author: adrian A> Date: Sat Aug 8 01:10:17 2015 A> New Revision: 286437 A> URL: https://svnweb.freebsd.org/changeset/base/286437 A> A> Log: A> Revert the wifi ifnet changes until things are more baked and tested. A> A> * 286410 A> * 286413 A> * 286416 A> A> The initial commit broke a variety of debug and features that aren't A> in the GENERIC kernels but are enabled in other platforms. Here is latest patch, that passes all universe kernels. -- Totus tuus, Glebius. --xesSdrSSBC0PokLI Content-Type: application/octet-stream Content-Disposition: attachment; filename="net80211.diff.bz2" Content-Transfer-Encoding: base64 QlpoOTFBWSZTWVj4OQECXe5/gH52ICB///////////////9iVL7wBeAF3dVAOgAfe7jQB6UA ABVA+jew2suskAAJwLD6PodKFKdfd03ZKkKJ2xUCQEUSWu5bJ9sV0BujRRUpJdime5jlV8Hv vuthrk+9z3q3ub3eDvPvevfe18vvLb31677e6d1003SRH3t2duRJL6wFLOtXbYs9sewGl280 7nvb5898+fa73fe4pSd3nrp9r7vL731t7ntvbut993L72HX2XucAHm2lV99nrx8AAAAAew4P jbdOgTszG12u27dM33d84mXmAA3xvmYpwAAAAE3ePrU6X3wdBumDdhrOy5bTZq9jUuAD6A9s B716fTvuee8iuLesRAAe726h7xW0HkpQNvcoADFbq6dj3nc97ED7DvffPehZfbulAAALADPH YOhwAvuux72CHxPoD7zu2hZVxY8nn3d3vmzLvrSTvO9ePeKJ3oZQHufXrl26XWC3rr2M+vuv tkUp1vj556j2wG7u6B7m8+3e+97pKVJAC8wB7m672Pew0DQAKUD6yAAAAAAAAAPvsfVAOgUA Hprp6AOYAJUAVmgdAPXe2gBN3OmhoNABMxoABtdccngAAAAAAAAAAL3mXuWFJ1AB0O+5u8Mz ZbXwAOgC5KvL7PvgJd73ruPvt33fWtvu17s66dz58LpzwD73dtvdve2ndvXp5PeqwD1ZW0UA bpgVQAAiAAAC+9e8AwBUAD7uLcAABnH3AO47qADusAAA4o3mNS227dBJoATWSFADrEAAqne+ 772qpG3vYvDRXtqFHo+vPYpp0BQOeAHxJG5KvgM2sd7x1Ol451Nbc2dpGr7cvT3EVhsYY7Zd t2w433mK97Vk13Y1Zlmu644XWrs4QpAuW2stdutbWt1buzJtvWHYb2Mt32O3vRPe1JW2uzs3 bBZljEIbvntnuu1M1vbb59j0HVFAaeugJOh3vbilYvQHbUFzGg0gWu+Z2z3MegNOnLk68nnv XK95xw32bw2Ys+pDMwN1bJ8m2Nvc6a6qu2dAPoe88dC6X24FBQAOhtz3331KCVObvUud5ppS X0DJOjSM7621qsMWbt91PUtY7bNgZb1b3tPYDe3Ttu9yPeLdhb29Gm2N66uyia6j097eu1Ye lAUKDtsV1x1KpbuoAA22zbc9vI9rc89w73beO93s4973mT7yZrvnSnV8+9998fdh1qwu7OJb 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 x/T/N/uOCIH/WLuSKcKEgsfByAg= --xesSdrSSBC0PokLI-- From owner-svn-src-head@freebsd.org Tue Aug 11 12:21:43 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 52E4799F735; Tue, 11 Aug 2015 12:21:43 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: from mail-wi0-x230.google.com (mail-wi0-x230.google.com [IPv6:2a00:1450:400c:c05::230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DD51BB1D; Tue, 11 Aug 2015 12:21:42 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: by wicja10 with SMTP id ja10so66476046wic.1; Tue, 11 Aug 2015 05:21:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=vO3bSCUqVfXEAaKpNtD66JM8ZJzZRApgR5BzaG8bUYA=; b=iPPqiUYoqHoPWRSBIMfi9J00uAAPU3pE1XICRIcL14K5V1Z/0wOTETC3ubF5uvCCnC DDeY4vKI8EJCaSGIjHTTBtPz/jhxRfTccto/qBGaUaIz9nK2eUFgtNCat3eZQAWiT4SP i+142Xd7ihG6iRbnnrWlxPzmmTfbx5WvlWkM+webJ3d3crF8R3o3vWDw5/I0TfMr1pox eCyBahEYqs5MEOMg76c405oTZDEfRjXXGov2Objy/4TXbmBgLt6jwGHqi2r9RMXDjF3y wyS4aZcbWVb7gMBdbedO+LobNPlRo4opv6C8WlacOmFFpsIkFAvihEf0HZ4MA690yIUc z8CA== X-Received: by 10.194.172.233 with SMTP id bf9mr55707910wjc.107.1439295700709; Tue, 11 Aug 2015 05:21:40 -0700 (PDT) Received: from ivaldir.etoilebsd.net ([2001:41d0:8:db4c::1]) by smtp.gmail.com with ESMTPSA id s1sm3164832wix.13.2015.08.11.05.21.39 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Aug 2015 05:21:39 -0700 (PDT) Sender: Baptiste Daroussin Date: Tue, 11 Aug 2015 14:21:37 +0200 From: Baptiste Daroussin To: Alexander Motin Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286625 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs Message-ID: <20150811122137.GI96980@ivaldir.etoilebsd.net> References: <201508111039.t7BAdK1x071658@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="81JctsDUVPekGcy+" Content-Disposition: inline In-Reply-To: <201508111039.t7BAdK1x071658@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 12:21:43 -0000 --81JctsDUVPekGcy+ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Aug 11, 2015 at 10:39:20AM +0000, Alexander Motin wrote: > Author: mav > Date: Tue Aug 11 10:39:19 2015 > New Revision: 286625 > URL: https://svnweb.freebsd.org/changeset/base/286625 >=20 > Log: > MFV r277425: > 5376 arc_kmem_reap_now() should not result in clearing arc_no_grow > Reviewed by: Christopher Siden > Reviewed by: George Wilson > Reviewed by: Steven Hartland > Reviewed by: Richard Elling > Approved by: Dan McDonald > Author: Matthew Ahrens > =20 > illumos/illumos-gate@2ec99e3e987d8aa273f1e9ba2b983557d058198c >=20 > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c >=20 > Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 = 09:26:11 2015 (r286624) > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 = 10:39:19 2015 (r286625) > @@ -153,13 +153,7 @@ static kmutex_t arc_reclaim_thr_lock; > static kcondvar_t arc_reclaim_thr_cv; /* used to signal reclaim thr */ > static uint8_t arc_thread_exit; > =20 > -#define ARC_REDUCE_DNLC_PERCENT 3 > -uint_t arc_reduce_dnlc_percent =3D ARC_REDUCE_DNLC_PERCENT; > - > -typedef enum arc_reclaim_strategy { > - ARC_RECLAIM_AGGR, /* Aggressive reclaim strategy */ > - ARC_RECLAIM_CONS /* Conservative reclaim strategy */ > -} arc_reclaim_strategy_t; > +uint_t arc_reduce_dnlc_percent =3D 3; > =20 > /* > * The number of iterations through arc_evict_*() before we > @@ -174,7 +168,19 @@ static int arc_grow_retry =3D 60; > static int arc_p_min_shift =3D 4; > =20 > /* log2(fraction of arc to reclaim) */ > -static int arc_shrink_shift =3D 5; > +static int arc_shrink_shift =3D 7; > + > +/* > + * log2(fraction of ARC which must be free to allow growing). > + * I.e. If there is less than arc_c >> arc_no_grow_shift free memory, > + * when reading a new block into the ARC, we will evict an equal-sized b= lock > + * from the ARC. > + * > + * This must be less than arc_shrink_shift, so that when we shrink the A= RC, > + * we will still not allow it to grow. > + */ > +int arc_no_grow_shift =3D 5; > + > =20 > /* > * minimum lifespan of a prefetch block in clock ticks > @@ -3055,13 +3061,10 @@ arc_flush(spa_t *spa) > } > =20 > void > -arc_shrink(void) > +arc_shrink(int64_t to_free) > { > =20 > if (arc_c > arc_c_min) { > - uint64_t to_free; > - > - to_free =3D arc_c >> arc_shrink_shift; > DTRACE_PROBE4(arc__shrink, uint64_t, arc_c, uint64_t, > arc_c_min, uint64_t, arc_p, uint64_t, to_free); > if (arc_c > arc_c_min + to_free) > @@ -3089,44 +3092,76 @@ arc_shrink(void) > } > } > =20 > -static int needfree =3D 0; > +static long needfree =3D 0; > =20 > -static int > -arc_reclaim_needed(void) > +typedef enum free_memory_reason_t { > + FMR_UNKNOWN, > + FMR_NEEDFREE, > + FMR_LOTSFREE, > + FMR_SWAPFS_MINFREE, > + FMR_PAGES_PP_MAXIMUM, > + FMR_HEAP_ARENA, > + FMR_ZIO_ARENA, > + FMR_ZIO_FRAG, > +} free_memory_reason_t; > + > +int64_t last_free_memory; > +free_memory_reason_t last_free_reason; > + > +/* > + * Additional reserve of pages for pp_reserve. > + */ > +int64_t arc_pages_pp_reserve =3D 64; > + > +/* > + * Additional reserve of pages for swapfs. > + */ > +int64_t arc_swapfs_reserve =3D 64; > + > +/* > + * Return the amount of memory that can be consumed before reclaim will = be > + * needed. Positive if there is sufficient free memory, negative indica= tes > + * the amount of memory that needs to be freed up. > + */ > +static int64_t > +arc_available_memory(void) > { > + int64_t lowest =3D INT64_MAX; > + int64_t n; > + free_memory_reason_t r =3D FMR_UNKNOWN; > =20 > #ifdef _KERNEL > - > - if (needfree) { > - DTRACE_PROBE(arc__reclaim_needfree); > - return (1); > + if (needfree > 0) { > + n =3D PAGESIZE * (-needfree); > + if (n < lowest) { > + lowest =3D n; > + r =3D FMR_NEEDFREE; > + } > } > =20 > /* > * Cooperate with pagedaemon when it's time for it to scan > * and reclaim some pages. > */ > - if (freemem < zfs_arc_free_target) { > - DTRACE_PROBE2(arc__reclaim_freemem, uint64_t, > - freemem, uint64_t, zfs_arc_free_target); > - return (1); > + n =3D PAGESIZE * (int64_t)(freemem - zfs_arc_free_target); > + if (n < lowest) { > + lowest =3D n; > + r =3D FMR_LOTSFREE; > } > =20 > #ifdef illumos > /* > - * take 'desfree' extra pages, so we reclaim sooner, rather than later > - */ > - extra =3D desfree; > - > - /* > * check that we're out of range of the pageout scanner. It starts to > * schedule paging if freemem is less than lotsfree and needfree. > * lotsfree is the high-water mark for pageout, and needfree is the > * number of needed free pages. We add extra pages here to make sure > * the scanner doesn't start up while we're freeing memory. > */ > - if (freemem < lotsfree + needfree + extra) > - return (1); > + n =3D PAGESIZE * (freemem - lotsfree - needfree - desfree); > + if (n < lowest) { > + lowest =3D n; > + r =3D FMR_LOTSFREE; > + } > =20 > /* > * check to make sure that swapfs has enough space so that anon > @@ -3135,8 +3170,13 @@ arc_reclaim_needed(void) > * swap pages. We also add a bit of extra here just to prevent > * circumstances from getting really dire. > */ > - if (availrmem < swapfs_minfree + swapfs_reserve + extra) > - return (1); > + n =3D PAGESIZE * (availrmem - swapfs_minfree - swapfs_reserve - > + desfree - arc_swapfs_reserve); > + if (n < lowest) { > + lowest =3D n; > + r =3D FMR_SWAPFS_MINFREE; > + } > + > =20 > /* > * Check that we have enough availrmem that memory locking (e.g., via > @@ -3145,8 +3185,12 @@ arc_reclaim_needed(void) > * drops below pages_pp_maximum, page locking mechanisms such as > * page_pp_lock() will fail.) > */ > - if (availrmem <=3D pages_pp_maximum) > - return (1); > + n =3D PAGESIZE * (availrmem - pages_pp_maximum - > + arc_pages_pp_reserve); > + if (n < lowest) { > + lowest =3D n; > + r =3D FMR_PAGES_PP_MAXIMUM; > + } > =20 > #endif /* illumos */ > #if defined(__i386) || !defined(UMA_MD_SMALL_ALLOC) > @@ -3161,12 +3205,11 @@ arc_reclaim_needed(void) > * heap is allocated. (Or, in the calculation, if less than 1/4th is > * free) > */ > - if (vmem_size(heap_arena, VMEM_FREE) < > - (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2)) { > - DTRACE_PROBE2(arc__reclaim_used, uint64_t, > - vmem_size(heap_arena, VMEM_FREE), uint64_t, > - (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC)) >> 2); > - return (1); > + n =3D vmem_size(heap_arena, VMEM_FREE) - > + (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2) Missing a ';' here Best regards, Bapt --81JctsDUVPekGcy+ Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEARECAAYFAlXJ6NEACgkQ8kTtMUmk6Ey2kwCggjPXwGjvElzuHhgVCcEWn26l BIAAn3F49yU/aFnQ8V/gV8PS/X0kbzCM =CV17 -----END PGP SIGNATURE----- --81JctsDUVPekGcy+-- From owner-svn-src-head@freebsd.org Tue Aug 11 12:22:18 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4DACA99F773; Tue, 11 Aug 2015 12:22:18 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0C147E20; Tue, 11 Aug 2015 12:22:17 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BCMHXZ017626; Tue, 11 Aug 2015 12:22:17 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BCMHx6017625; Tue, 11 Aug 2015 12:22:17 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508111222.t7BCMHx6017625@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 11 Aug 2015 12:22:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286626 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 12:22:18 -0000 Author: mav Date: Tue Aug 11 12:22:16 2015 New Revision: 286626 URL: https://svnweb.freebsd.org/changeset/base/286626 Log: Fix minor mismerge in r286574. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 10:39:19 2015 (r286625) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 12:22:16 2015 (r286626) @@ -4729,48 +4729,6 @@ arc_memory_throttle(uint64_t reserve, ui return (0); } -static void -arc_kstat_update_state(arc_state_t *state, kstat_named_t *size, - kstat_named_t *evict_data, kstat_named_t *evict_metadata) -{ - size->value.ui64 = state->arcs_size; - evict_data->value.ui64 = state->arcs_lsize[ARC_BUFC_DATA]; - evict_metadata->value.ui64 = state->arcs_lsize[ARC_BUFC_METADATA]; -} - -static int -arc_kstat_update(kstat_t *ksp, int rw) -{ - arc_stats_t *as = ksp->ks_data; - - if (rw == KSTAT_WRITE) { - return (EACCES); - } else { - arc_kstat_update_state(arc_anon, - &as->arcstat_anon_size, - &as->arcstat_anon_evictable_data, - &as->arcstat_anon_evictable_metadata); - arc_kstat_update_state(arc_mru, - &as->arcstat_mru_size, - &as->arcstat_mru_evictable_data, - &as->arcstat_mru_evictable_metadata); - arc_kstat_update_state(arc_mru_ghost, - &as->arcstat_mru_ghost_size, - &as->arcstat_mru_ghost_evictable_data, - &as->arcstat_mru_ghost_evictable_metadata); - arc_kstat_update_state(arc_mfu, - &as->arcstat_mfu_size, - &as->arcstat_mfu_evictable_data, - &as->arcstat_mfu_evictable_metadata); - arc_kstat_update_state(arc_mfu_ghost, - &as->arcstat_mfu_ghost_size, - &as->arcstat_mfu_ghost_evictable_data, - &as->arcstat_mfu_ghost_evictable_metadata); - } - - return (0); -} - void arc_tempreserve_clear(uint64_t reserve) { @@ -4829,6 +4787,48 @@ arc_tempreserve_space(uint64_t reserve, return (0); } +static void +arc_kstat_update_state(arc_state_t *state, kstat_named_t *size, + kstat_named_t *evict_data, kstat_named_t *evict_metadata) +{ + size->value.ui64 = state->arcs_size; + evict_data->value.ui64 = state->arcs_lsize[ARC_BUFC_DATA]; + evict_metadata->value.ui64 = state->arcs_lsize[ARC_BUFC_METADATA]; +} + +static int +arc_kstat_update(kstat_t *ksp, int rw) +{ + arc_stats_t *as = ksp->ks_data; + + if (rw == KSTAT_WRITE) { + return (EACCES); + } else { + arc_kstat_update_state(arc_anon, + &as->arcstat_anon_size, + &as->arcstat_anon_evictable_data, + &as->arcstat_anon_evictable_metadata); + arc_kstat_update_state(arc_mru, + &as->arcstat_mru_size, + &as->arcstat_mru_evictable_data, + &as->arcstat_mru_evictable_metadata); + arc_kstat_update_state(arc_mru_ghost, + &as->arcstat_mru_ghost_size, + &as->arcstat_mru_ghost_evictable_data, + &as->arcstat_mru_ghost_evictable_metadata); + arc_kstat_update_state(arc_mfu, + &as->arcstat_mfu_size, + &as->arcstat_mfu_evictable_data, + &as->arcstat_mfu_evictable_metadata); + arc_kstat_update_state(arc_mfu_ghost, + &as->arcstat_mfu_ghost_size, + &as->arcstat_mfu_ghost_evictable_data, + &as->arcstat_mfu_ghost_evictable_metadata); + } + + return (0); +} + #ifdef _KERNEL static eventhandler_tag arc_event_lowmem = NULL; From owner-svn-src-head@freebsd.org Tue Aug 11 12:32:18 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5E4A799F8FD; Tue, 11 Aug 2015 12:32:18 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4EF30310; Tue, 11 Aug 2015 12:32:18 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BCWIUr021954; Tue, 11 Aug 2015 12:32:18 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BCWIw5021953; Tue, 11 Aug 2015 12:32:18 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201508111232.t7BCWIw5021953@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Tue, 11 Aug 2015 12:32:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286627 - head/sys/arm64/arm64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 12:32:18 -0000 Author: andrew Date: Tue Aug 11 12:32:17 2015 New Revision: 286627 URL: https://svnweb.freebsd.org/changeset/base/286627 Log: Check the correct value in db_validate_address, pmap_extract returns 0 on failure. Sponsored by: ABT Systems Ltd Modified: head/sys/arm64/arm64/db_interface.c Modified: head/sys/arm64/arm64/db_interface.c ============================================================================== --- head/sys/arm64/arm64/db_interface.c Tue Aug 11 12:22:16 2015 (r286626) +++ head/sys/arm64/arm64/db_interface.c Tue Aug 11 12:32:17 2015 (r286627) @@ -119,7 +119,7 @@ db_validate_address(vm_offset_t addr) else pmap = p->p_vmspace->vm_map.pmap; - return (pmap_extract(pmap, addr) == FALSE); + return (pmap_extract(pmap, addr) != 0); } /* From owner-svn-src-head@freebsd.org Tue Aug 11 12:38:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D093399FB5A; Tue, 11 Aug 2015 12:38:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C0D4F7FE; Tue, 11 Aug 2015 12:38:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BCc1ip022410; Tue, 11 Aug 2015 12:38:01 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BCc176022409; Tue, 11 Aug 2015 12:38:01 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508111238.t7BCc176022409@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 11 Aug 2015 12:38:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286628 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 12:38:01 -0000 Author: mav Date: Tue Aug 11 12:38:01 2015 New Revision: 286628 URL: https://svnweb.freebsd.org/changeset/base/286628 Log: Fix r286625 build on i386. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 12:32:17 2015 (r286627) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 12:38:01 2015 (r286628) @@ -3206,7 +3206,7 @@ arc_available_memory(void) * free) */ n = vmem_size(heap_arena, VMEM_FREE) - - (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2) + (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2); if (n < lowest) { lowest = n; r = FMR_HEAP_ARENA; From owner-svn-src-head@freebsd.org Tue Aug 11 12:38:57 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 073FB99FB86; Tue, 11 Aug 2015 12:38:57 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EB4B194F; Tue, 11 Aug 2015 12:38:56 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BCcuDQ022518; Tue, 11 Aug 2015 12:38:56 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BCctDL022510; Tue, 11 Aug 2015 12:38:55 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201508111238.t7BCctDL022510@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Tue, 11 Aug 2015 12:38:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286629 - in head/sys: net netinet netinet6 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 12:38:57 -0000 Author: melifaro Date: Tue Aug 11 12:38:54 2015 New Revision: 286629 URL: https://svnweb.freebsd.org/changeset/base/286629 Log: Use single 'lle_timer' callout in lltable instead of two different names of the same timer. Modified: head/sys/net/if_llatbl.c head/sys/net/if_llatbl.h head/sys/netinet/if_ether.c head/sys/netinet/in.c head/sys/netinet6/in6.c head/sys/netinet6/nd6.c Modified: head/sys/net/if_llatbl.c ============================================================================== --- head/sys/net/if_llatbl.c Tue Aug 11 12:38:01 2015 (r286628) +++ head/sys/net/if_llatbl.c Tue Aug 11 12:38:54 2015 (r286629) @@ -374,7 +374,7 @@ lltable_free(struct lltable *llt) IF_AFDATA_WUNLOCK(llt->llt_ifp); LIST_FOREACH_SAFE(lle, &dchain, lle_chain, next) { - if (callout_stop(&lle->la_timer)) + if (callout_stop(&lle->lle_timer)) LLE_REMREF(lle); llentry_free(lle); } @@ -656,7 +656,7 @@ llatbl_lle_show(struct llentry_sa *la) bcopy(&lle->ll_addr.mac16, octet, sizeof(octet)); db_printf(" ll_addr=%02x:%02x:%02x:%02x:%02x:%02x\n", octet[0], octet[1], octet[2], octet[3], octet[4], octet[5]); - db_printf(" la_timer=%p\n", &lle->la_timer); + db_printf(" lle_timer=%p\n", &lle->lle_timer); switch (la->l3_addr.sa_family) { #ifdef INET Modified: head/sys/net/if_llatbl.h ============================================================================== --- head/sys/net/if_llatbl.h Tue Aug 11 12:38:01 2015 (r286628) +++ head/sys/net/if_llatbl.h Tue Aug 11 12:38:54 2015 (r286629) @@ -82,11 +82,7 @@ struct llentry { int lle_refcnt; LIST_ENTRY(llentry) lle_chain; /* chain of deleted items */ - /* XXX af-private? */ - union { - struct callout ln_timer_ch; - struct callout la_timer; - } lle_timer; + struct callout lle_timer; struct rwlock lle_lock; }; @@ -135,9 +131,6 @@ struct llentry { } while (0) -#define ln_timer_ch lle_timer.ln_timer_ch -#define la_timer lle_timer.la_timer - typedef struct llentry *(llt_lookup_t)(struct lltable *, u_int flags, const struct sockaddr *l3addr); typedef struct llentry *(llt_create_t)(struct lltable *, u_int flags, Modified: head/sys/netinet/if_ether.c ============================================================================== --- head/sys/netinet/if_ether.c Tue Aug 11 12:38:01 2015 (r286628) +++ head/sys/netinet/if_ether.c Tue Aug 11 12:38:54 2015 (r286629) @@ -170,7 +170,7 @@ arptimer(void *arg) return; } LLE_WLOCK(lle); - if (callout_pending(&lle->la_timer)) { + if (callout_pending(&lle->lle_timer)) { /* * Here we are a bit odd here in the treatment of * active/pending. If the pending bit is set, it got @@ -202,7 +202,7 @@ arptimer(void *arg) EVENTHANDLER_INVOKE(lle_event, lle, evt); } - callout_stop(&lle->la_timer); + callout_stop(&lle->lle_timer); /* XXX: LOR avoidance. We still have ref on lle. */ LLE_WUNLOCK(lle); @@ -453,7 +453,7 @@ retry: LLE_ADDREF(la); la->la_expire = time_uptime; - canceled = callout_reset(&la->la_timer, hz * V_arpt_down, + canceled = callout_reset(&la->lle_timer, hz * V_arpt_down, arptimer, la); if (canceled) LLE_REMREF(la); @@ -793,7 +793,7 @@ match: LLE_ADDREF(la); la->la_expire = time_uptime + V_arpt_keep; - canceled = callout_reset(&la->la_timer, + canceled = callout_reset(&la->lle_timer, hz * V_arpt_keep, arptimer, la); if (canceled) LLE_REMREF(la); Modified: head/sys/netinet/in.c ============================================================================== --- head/sys/netinet/in.c Tue Aug 11 12:38:01 2015 (r286628) +++ head/sys/netinet/in.c Tue Aug 11 12:38:54 2015 (r286629) @@ -996,7 +996,7 @@ in_lltable_new(struct in_addr addr4, u_i lle->base.lle_refcnt = 1; lle->base.lle_free = in_lltable_destroy_lle; LLE_LOCK_INIT(&lle->base); - callout_init(&lle->base.la_timer, 1); + callout_init(&lle->base.lle_timer, 1); return (&lle->base); } @@ -1039,7 +1039,7 @@ in_lltable_free_entry(struct lltable *ll } /* cancel timer */ - if (callout_stop(&lle->la_timer)) + if (callout_stop(&lle->lle_timer)) LLE_REMREF(lle); /* Drop hold queue */ Modified: head/sys/netinet6/in6.c ============================================================================== --- head/sys/netinet6/in6.c Tue Aug 11 12:38:01 2015 (r286628) +++ head/sys/netinet6/in6.c Tue Aug 11 12:38:54 2015 (r286629) @@ -2080,7 +2080,7 @@ in6_lltable_new(const struct in6_addr *a lle->base.lle_refcnt = 1; lle->base.lle_free = in6_lltable_destroy_lle; LLE_LOCK_INIT(&lle->base); - callout_init(&lle->base.ln_timer_ch, 1); + callout_init(&lle->base.lle_timer, 1); return (&lle->base); } @@ -2116,7 +2116,7 @@ in6_lltable_free_entry(struct lltable *l lltable_unlink_entry(llt, lle); } - if (callout_stop(&lle->la_timer)) + if (callout_stop(&lle->lle_timer)) LLE_REMREF(lle); llentry_free(lle); Modified: head/sys/netinet6/nd6.c ============================================================================== --- head/sys/netinet6/nd6.c Tue Aug 11 12:38:01 2015 (r286628) +++ head/sys/netinet6/nd6.c Tue Aug 11 12:38:54 2015 (r286629) @@ -492,17 +492,17 @@ nd6_llinfo_settimer_locked(struct llentr if (tick < 0) { ln->la_expire = 0; ln->ln_ntick = 0; - canceled = callout_stop(&ln->ln_timer_ch); + canceled = callout_stop(&ln->lle_timer); } else { ln->la_expire = time_uptime + tick / hz; LLE_ADDREF(ln); if (tick > INT_MAX) { ln->ln_ntick = tick - INT_MAX; - canceled = callout_reset(&ln->ln_timer_ch, INT_MAX, + canceled = callout_reset(&ln->lle_timer, INT_MAX, nd6_llinfo_timer, ln); } else { ln->ln_ntick = 0; - canceled = callout_reset(&ln->ln_timer_ch, tick, + canceled = callout_reset(&ln->lle_timer, tick, nd6_llinfo_timer, ln); } } @@ -530,7 +530,7 @@ nd6_llinfo_timer(void *arg) KASSERT(arg != NULL, ("%s: arg NULL", __func__)); ln = (struct llentry *)arg; LLE_WLOCK(ln); - if (callout_pending(&ln->la_timer)) { + if (callout_pending(&ln->lle_timer)) { /* * Here we are a bit odd here in the treatment of * active/pending. If the pending bit is set, it got From owner-svn-src-head@freebsd.org Tue Aug 11 13:42:59 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7A0E399EA3A; Tue, 11 Aug 2015 13:42:59 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 64F81F5; Tue, 11 Aug 2015 13:42:59 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BDgxh6051405; Tue, 11 Aug 2015 13:42:59 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BDgxYI051404; Tue, 11 Aug 2015 13:42:59 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201508111342.t7BDgxYI051404@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Tue, 11 Aug 2015 13:42:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286630 - head/sys/dev/psci X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 13:42:59 -0000 Author: andrew Date: Tue Aug 11 13:42:58 2015 New Revision: 286630 URL: https://svnweb.freebsd.org/changeset/base/286630 Log: Start to support PSCI 1.0. For all the functions we currently support this can be seen as the same as 0.2. There are changes with the data passed to CPU_SUSPEND, however we don't yet use this call. Sponsored by: ABT Systems Ltd Modified: head/sys/dev/psci/psci.c Modified: head/sys/dev/psci/psci.c ============================================================================== --- head/sys/dev/psci/psci.c Tue Aug 11 12:38:54 2015 (r286629) +++ head/sys/dev/psci/psci.c Tue Aug 11 13:42:58 2015 (r286630) @@ -288,20 +288,21 @@ psci_v0_2_init(device_t dev) if (version == PSCI_RETVAL_NOT_SUPPORTED) return (1); - if ((PSCI_VER_MAJOR(version) != 0) && (PSCI_VER_MINOR(version) != 2)) { - device_printf(dev, "PSCI version number mismatched with DT\n"); - return (1); - } + if ((PSCI_VER_MAJOR(version) == 0 && PSCI_VER_MINOR(version) == 2) || + (PSCI_VER_MAJOR(version) == 1 && PSCI_VER_MINOR(version) == 0)) { + if (bootverbose) + device_printf(dev, "PSCI version 0.2 available\n"); - if (bootverbose) - device_printf(dev, "PSCI version 0.2 available\n"); + /* + * We only register this for v0.2 since v0.1 doesn't support + * system_reset. + */ + EVENTHANDLER_REGISTER(shutdown_final, psci_shutdown, sc, + SHUTDOWN_PRI_LAST); - /* - * We only register this for v0.2 since v0.1 doesn't support - * system_reset. - */ - EVENTHANDLER_REGISTER(shutdown_final, psci_shutdown, sc, - SHUTDOWN_PRI_LAST); + return (0); + } - return (0); + device_printf(dev, "PSCI version number mismatched with DT\n"); + return (1); } From owner-svn-src-head@freebsd.org Tue Aug 11 13:47:24 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7D12199EB72; Tue, 11 Aug 2015 13:47:24 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5E2AC356; Tue, 11 Aug 2015 13:47:24 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BDlO8Q051648; Tue, 11 Aug 2015 13:47:24 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BDlNij051646; Tue, 11 Aug 2015 13:47:23 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508111347.t7BDlNij051646@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Tue, 11 Aug 2015 13:47:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286631 - in head/sys: kern sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 13:47:24 -0000 Author: ed Date: Tue Aug 11 13:47:23 2015 New Revision: 286631 URL: https://svnweb.freebsd.org/changeset/base/286631 Log: Add support for anonymous kqueues. CloudABI's polling system calls merge the concept of one-shot polling (poll, select) and stateful polling (kqueue). They share the same data structures. Extend FreeBSD's kqueue to provide support for waiting for events on an anonymous kqueue. Unlike stateful polling, there is no need to support timeouts, as an additional timer event could be used instead. Furthermore, it makes no sense to use a different number of input and output kevents. Merge this into a single argument. Obtained from: https://github.com/NuxiNL/freebsd Differential Revision: https://reviews.freebsd.org/D3307 Modified: head/sys/kern/kern_event.c head/sys/sys/syscallsubr.h Modified: head/sys/kern/kern_event.c ============================================================================== --- head/sys/kern/kern_event.c Tue Aug 11 13:42:58 2015 (r286630) +++ head/sys/kern/kern_event.c Tue Aug 11 13:47:23 2015 (r286631) @@ -99,6 +99,8 @@ static int kqueue_register(struct kqueue struct thread *td, int waitok); static int kqueue_acquire(struct file *fp, struct kqueue **kqp); static void kqueue_release(struct kqueue *kq, int locked); +static void kqueue_destroy(struct kqueue *kq); +static void kqueue_drain(struct kqueue *kq, struct thread *td); static int kqueue_expand(struct kqueue *kq, struct filterops *fops, uintptr_t ident, int waitok); static void kqueue_task(void *arg, int pending); @@ -741,6 +743,16 @@ sys_kqueue(struct thread *td, struct kqu return (kern_kqueue(td, 0, NULL)); } +static void +kqueue_init(struct kqueue *kq) +{ + + mtx_init(&kq->kq_lock, "kqueue", NULL, MTX_DEF | MTX_DUPOK); + TAILQ_INIT(&kq->kq_head); + knlist_init_mtx(&kq->kq_sel.si_note, &kq->kq_lock); + TASK_INIT(&kq->kq_task, 0, kqueue_task, kq); +} + int kern_kqueue(struct thread *td, int flags, struct filecaps *fcaps) { @@ -766,12 +778,9 @@ kern_kqueue(struct thread *td, int flags /* 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); + kqueue_init(kq); kq->kq_fdp = fdp; kq->kq_cred = cred; - knlist_init_mtx(&kq->kq_sel.si_note, &kq->kq_lock); - TASK_INIT(&kq->kq_task, 0, kqueue_task, kq); FILEDESC_XLOCK(fdp); TAILQ_INSERT_HEAD(&fdp->fd_kqlist, kq, kq_list); @@ -910,26 +919,20 @@ kern_kevent(struct thread *td, int fd, i return (error); } -int -kern_kevent_fp(struct thread *td, struct file *fp, int nchanges, int nevents, +static int +kqueue_kevent(struct kqueue *kq, struct thread *td, int nchanges, int nevents, struct kevent_copyops *k_ops, const struct timespec *timeout) { struct kevent keva[KQ_NEVENTS]; struct kevent *kevp, *changes; - struct kqueue *kq; int i, n, nerrors, error; - error = kqueue_acquire(fp, &kq); - if (error != 0) - return (error); - nerrors = 0; - while (nchanges > 0) { n = nchanges > KQ_NEVENTS ? KQ_NEVENTS : nchanges; error = k_ops->k_copyin(k_ops->arg, keva, n); if (error) - goto done; + return (error); changes = keva; for (i = 0; i < n; i++) { kevp = &changes[i]; @@ -938,33 +941,56 @@ kern_kevent_fp(struct thread *td, struct kevp->flags &= ~EV_SYSFLAGS; error = kqueue_register(kq, kevp, td, 1); if (error || (kevp->flags & EV_RECEIPT)) { - if (nevents != 0) { - kevp->flags = EV_ERROR; - kevp->data = error; - (void) k_ops->k_copyout(k_ops->arg, - kevp, 1); - nevents--; - nerrors++; - } else { - goto done; - } + if (nevents == 0) + return (error); + kevp->flags = EV_ERROR; + kevp->data = error; + (void)k_ops->k_copyout(k_ops->arg, kevp, 1); + nevents--; + nerrors++; } } nchanges -= n; } if (nerrors) { td->td_retval[0] = nerrors; - error = 0; - goto done; + return (0); } - error = kqueue_scan(kq, nevents, k_ops, timeout, keva, td); -done: + return (kqueue_scan(kq, nevents, k_ops, timeout, keva, td)); +} + +int +kern_kevent_fp(struct thread *td, struct file *fp, int nchanges, int nevents, + struct kevent_copyops *k_ops, const struct timespec *timeout) +{ + struct kqueue *kq; + int error; + + error = kqueue_acquire(fp, &kq); + if (error != 0) + return (error); + error = kqueue_kevent(kq, td, nchanges, nevents, k_ops, timeout); kqueue_release(kq, 0); return (error); } int +kern_kevent_anonymous(struct thread *td, int nevents, + struct kevent_copyops *k_ops) +{ + struct kqueue kq = {}; + int error; + + kqueue_init(&kq); + kq.kq_refcnt = 1; + error = kqueue_kevent(&kq, td, nevents, nevents, k_ops, NULL); + kqueue_drain(&kq, td); + kqueue_destroy(&kq); + return (error); +} + +int kqueue_add_filteropts(int filt, struct filterops *filtops) { int error; @@ -1734,21 +1760,12 @@ kqueue_stat(struct file *fp, struct stat return (0); } -/*ARGSUSED*/ -static int -kqueue_close(struct file *fp, struct thread *td) +static void +kqueue_drain(struct kqueue *kq, struct thread *td) { - struct kqueue *kq = fp->f_data; - struct filedesc *fdp; struct knote *kn; int i; - int error; - int filedesc_unlock; - - if ((error = kqueue_acquire(fp, &kq))) - return error; - filedesc_unlock = 0; KQ_LOCK(kq); KASSERT((kq->kq_state & KQ_CLOSING) != KQ_CLOSING, @@ -1758,7 +1775,6 @@ kqueue_close(struct file *fp, struct thr msleep(&kq->kq_refcnt, &kq->kq_lock, PSOCK, "kqclose", 0); KASSERT(kq->kq_refcnt == 1, ("other refs are out there!")); - fdp = kq->kq_fdp; KASSERT(knlist_empty(&kq->kq_sel.si_note), ("kqueue's knlist not empty")); @@ -1809,6 +1825,36 @@ kqueue_close(struct file *fp, struct thr } KQ_UNLOCK(kq); +} + +static void +kqueue_destroy(struct kqueue *kq) +{ + + seldrain(&kq->kq_sel); + knlist_destroy(&kq->kq_sel.si_note); + mtx_destroy(&kq->kq_lock); + + if (kq->kq_knhash != NULL) + free(kq->kq_knhash, M_KQUEUE); + if (kq->kq_knlist != NULL) + free(kq->kq_knlist, M_KQUEUE); + + funsetown(&kq->kq_sigio); +} + +/*ARGSUSED*/ +static int +kqueue_close(struct file *fp, struct thread *td) +{ + struct kqueue *kq = fp->f_data; + struct filedesc *fdp; + int error; + int filedesc_unlock; + + if ((error = kqueue_acquire(fp, &kq))) + return error; + kqueue_drain(kq, td); /* * We could be called due to the knote_drop() doing fdrop(), @@ -1816,6 +1862,7 @@ kqueue_close(struct file *fp, struct thr * lock is owned, and filedesc sx is locked before, to not * take the sleepable lock after non-sleepable. */ + fdp = kq->kq_fdp; if (!sx_xlocked(FILEDESC_LOCK(fdp))) { FILEDESC_XLOCK(fdp); filedesc_unlock = 1; @@ -1825,17 +1872,7 @@ kqueue_close(struct file *fp, struct thr if (filedesc_unlock) FILEDESC_XUNLOCK(fdp); - seldrain(&kq->kq_sel); - knlist_destroy(&kq->kq_sel.si_note); - mtx_destroy(&kq->kq_lock); - kq->kq_fdp = NULL; - - if (kq->kq_knhash != NULL) - free(kq->kq_knhash, M_KQUEUE); - if (kq->kq_knlist != NULL) - free(kq->kq_knlist, M_KQUEUE); - - funsetown(&kq->kq_sigio); + kqueue_destroy(kq); chgkqcnt(kq->kq_cred->cr_ruidinfo, -1, 0); crfree(kq->kq_cred); free(kq, M_KQUEUE); Modified: head/sys/sys/syscallsubr.h ============================================================================== --- head/sys/sys/syscallsubr.h Tue Aug 11 13:42:58 2015 (r286630) +++ head/sys/sys/syscallsubr.h Tue Aug 11 13:47:23 2015 (r286631) @@ -124,6 +124,8 @@ int kern_jail_get(struct thread *td, str int kern_jail_set(struct thread *td, struct uio *options, int flags); int kern_kevent(struct thread *td, int fd, int nchanges, int nevents, struct kevent_copyops *k_ops, const struct timespec *timeout); +int kern_kevent_anonymous(struct thread *td, int nevents, + struct kevent_copyops *k_ops); int kern_kevent_fp(struct thread *td, struct file *fp, int nchanges, int nevents, struct kevent_copyops *k_ops, const struct timespec *timeout); From owner-svn-src-head@freebsd.org Tue Aug 11 13:55:15 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2D6FF99ED56; Tue, 11 Aug 2015 13:55:15 +0000 (UTC) (envelope-from kwm@freebsd.org) Received: from fep31.mx.upcmail.net (fep31.mx.upcmail.net [62.179.121.49]) by mx1.freebsd.org (Postfix) with ESMTP id DADA2A3A; Tue, 11 Aug 2015 13:55:13 +0000 (UTC) (envelope-from kwm@freebsd.org) Received: from edge04.upcmail.net ([192.168.13.239]) by viefep31-int.chello.at (InterMail vM.8.01.05.05 201-2260-151-110-20120111) with ESMTP id <20150811134651.ZLSS812.viefep31-int.chello.at@edge04.upcmail.net>; Tue, 11 Aug 2015 15:46:51 +0200 Received: from [192.168.1.60] ([95.96.229.21]) by edge04.upcmail.net with edge id 3Rv31r00a0ULilr01Rv3Rd; Tue, 11 Aug 2015 15:55:04 +0200 X-SourceIP: 95.96.229.21 Message-ID: <1439301209.4375.40.camel@FreeBSD.org> Subject: Re: svn commit: r286524 - in head: . etc sys/dev/drm sys/dev/drm2 From: Koop Mast To: Jan Beich Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Date: Tue, 11 Aug 2015 15:53:29 +0200 In-Reply-To: References: <201508091258.t79CwvGj027161@repo.freebsd.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.16.4 FreeBSD GNOME Team Port Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 13:55:15 -0000 On Mon, 2015-08-10 at 02:15 +0200, Jan Beich wrote: > Koop Mast writes: > > > Author: kwm (ports committer) > > Date: Sun Aug 9 12:58:56 2015 > > New Revision: 286524 > > URL: https://svnweb.freebsd.org/changeset/base/286524 > > > > Log: > > Add a new group named 'video' with the id of 44. And make drm > > create > > devices in /dev/dri/ with this new group. > > Would 'video' group include capture devices as well? Linux seems to > mix > /dev/nvidia*, /dev/fb* and /dev/video* all under same group despite > all of them have different attack vectors. We could extend this, but the only example I had where the dri devices. Also webcamd already chmod's it's devices: % ll /dev/video0 crw-rw---- 1 webcamd webcamd 0x9a Aug 10 07:35 /dev/video0 I'm unsure if nvidia makes any /dev devices since it been ages since I had one in a machine of mine. > > Modified: head/sys/dev/drm/drmP.h > > =================================================================== > > =========== > > --- head/sys/dev/drm/drmP.h Sun Aug 9 12:20:22 2015 > > (r286523) > > +++ head/sys/dev/drm/drmP.h Sun Aug 9 12:58:56 2015 > > (r286524) > > @@ -175,7 +175,7 @@ SYSCTL_DECL(_hw_drm); > > > > #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) > > #define DRM_DEV_UID 0 > > -#define DRM_DEV_GID 0 > > +#define DRM_DEV_GID 44 /* "video" group */ > > Why hardcode? Linux often uses udev(7) rules to assign a group which > on > FreeBSD can easily be translated into devd.conf(5) or devfs.rules(5). > > Having 'video' assigned by kernel wouldn't eliminate having to run > mergemaster/etcupdate + pw groupmod on upgrade. I find this way easier to do. However with the devd.conf(5) or devfs.rules(5) someone still needs to up date the /etc and pw groupmod. -Koop From owner-svn-src-head@freebsd.org Tue Aug 11 14:01:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8A16799F066 for ; Tue, 11 Aug 2015 14:01:56 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-oi0-f53.google.com (mail-oi0-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5DF94F12 for ; Tue, 11 Aug 2015 14:01:56 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by oihn130 with SMTP id n130so105774245oih.2 for ; Tue, 11 Aug 2015 07:01:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=jOhQB3mqJCFeqdTDt23yO5ZE9WbrJlvRfgKTlYpYmoI=; b=DU5woBfVcNlp967n0V3q6FrOuiL77mm3YgStfa3utL3dkSOaws7wRVyOMrusivfbvF 5e695CxzXeMDoRyvvkLIWP2qz5szZMXJoHH2dvMSvtcaNuBuL/G2dUJ1zh4yhqAJXcfj 14xqhqVtLC0LDsKuEFsgTIow94e+jSPTXiGsTauEV2WBTaHHpxcogvXkmk3K3U8tFiLM nIOOMfJWNMtjwqdm+l9ZvTyf2WOxJSHQF90mhsl9hIW/UR9MNCjUJ2KItdW+VDdA/L8T pHtm3KrXFlFJuF1xUY5ozdSpkXLh8WysVkN5rGg+BjV7PxkKrfVj73Gn75b9Lsn2wS16 IdlA== X-Gm-Message-State: ALoCoQkDv63+KpLcyix6Dp62EVqEHPY7ShsXuw4wZkA812RjqwrchW/hVYSdfP98SGfslc82i6Yg MIME-Version: 1.0 X-Received: by 10.202.208.136 with SMTP id h130mr7426188oig.74.1439301715413; Tue, 11 Aug 2015 07:01:55 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Tue, 11 Aug 2015 07:01:55 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508091258.t79CwvGj027161@repo.freebsd.org> References: <201508091258.t79CwvGj027161@repo.freebsd.org> Date: Tue, 11 Aug 2015 16:01:55 +0200 Message-ID: Subject: Re: svn commit: r286524 - in head: . etc sys/dev/drm sys/dev/drm2 From: Ed Schouten To: Koop Mast Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 14:01:56 -0000 Hi Koop, 2015-08-09 14:58 GMT+02:00 Koop Mast : > +#define DRM_DEV_GID 44 /* "video" group */ I think it looks a bit weird that DRM has these definitions locally. already has definitions for various users and groups (UID_* and GID_*). Would it make sense to add GID_VIDEO to and change the definitions in drmP.h to the following? #define DRM_DEV_UID UID_ROOT #define DRM_DEV_GID GID_VIDEO -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Tue Aug 11 14:07:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 113F599F118; Tue, 11 Aug 2015 14:07:05 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F37DF191; Tue, 11 Aug 2015 14:07:04 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BE74P2059729; Tue, 11 Aug 2015 14:07:04 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BE74SJ059728; Tue, 11 Aug 2015 14:07:04 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508111407.t7BE74SJ059728@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Tue, 11 Aug 2015 14:07:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286632 - head/sys/compat/cloudabi X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 14:07:05 -0000 Author: ed Date: Tue Aug 11 14:07:04 2015 New Revision: 286632 URL: https://svnweb.freebsd.org/changeset/base/286632 Log: Properly convert the error number to CloudABI's indexing. We currently return FreeBSD's errno value directly, which is of course not correct. Modified: head/sys/compat/cloudabi/cloudabi_sock.c Modified: head/sys/compat/cloudabi/cloudabi_sock.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_sock.c Tue Aug 11 13:47:23 2015 (r286631) +++ head/sys/compat/cloudabi/cloudabi_sock.c Tue Aug 11 14:07:04 2015 (r286632) @@ -236,7 +236,7 @@ cloudabi_sys_sock_stat_get(struct thread /* Set ss_error. */ SOCK_LOCK(so); - ss.ss_error = so->so_error; + ss.ss_error = cloudabi_convert_errno(so->so_error); if ((uap->flags & CLOUDABI_SOCKSTAT_CLEAR_ERROR) != 0) so->so_error = 0; SOCK_UNLOCK(so); From owner-svn-src-head@freebsd.org Tue Aug 11 14:08:47 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 92E8599F169; Tue, 11 Aug 2015 14:08:47 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 83963391; Tue, 11 Aug 2015 14:08:47 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BE8lVt059840; Tue, 11 Aug 2015 14:08:47 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BE8lg8059839; Tue, 11 Aug 2015 14:08:47 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508111408.t7BE8lg8059839@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Tue, 11 Aug 2015 14:08:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286633 - head/sys/compat/cloudabi X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 14:08:47 -0000 Author: ed Date: Tue Aug 11 14:08:46 2015 New Revision: 286633 URL: https://svnweb.freebsd.org/changeset/base/286633 Log: Fall back to O_RDONLY -- not O_WRONLY. If CloudABI processes open files with a set of requested rights that do not match any of the privileges granted by O_RDONLY, O_WRONLY or O_RDWR, we'd better fall back to O_RDONLY -- not O_WRONLY. Modified: head/sys/compat/cloudabi/cloudabi_file.c Modified: head/sys/compat/cloudabi/cloudabi_file.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_file.c Tue Aug 11 14:07:04 2015 (r286632) +++ head/sys/compat/cloudabi/cloudabi_file.c Tue Aug 11 14:08:46 2015 (r286633) @@ -224,7 +224,7 @@ cloudabi_sys_file_open(struct thread *td write = (fds.fs_rights_base & (CLOUDABI_RIGHT_FD_DATASYNC | CLOUDABI_RIGHT_FD_WRITE | CLOUDABI_RIGHT_FILE_ALLOCATE | CLOUDABI_RIGHT_FILE_STAT_FPUT_SIZE)) != 0; - fflags = read ? write ? FREAD | FWRITE : FREAD : FWRITE; + fflags = write ? read ? FREAD | FWRITE : FWRITE : FREAD; /* Convert open flags. */ if ((uap->oflags & CLOUDABI_O_CREAT) != 0) { From owner-svn-src-head@freebsd.org Tue Aug 11 14:22:28 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1B86799F4C9; Tue, 11 Aug 2015 14:22:28 +0000 (UTC) (envelope-from bjkfbsd@gmail.com) Received: from mail-wi0-x230.google.com (mail-wi0-x230.google.com [IPv6:2a00:1450:400c:c05::230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B8D81F10; Tue, 11 Aug 2015 14:22:27 +0000 (UTC) (envelope-from bjkfbsd@gmail.com) Received: by wibhh20 with SMTP id hh20so198436392wib.0; Tue, 11 Aug 2015 07:22:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=vzLgXjFWRetWBJ7hjnC6q5RDP4jvd2JDE4Hffv28iHM=; b=HVT3eSppqIxao2AZZ+YKn6G5SExux4jmSHNGPPudM2t5gfbKN7urxhpnqEUbO+zgjL DHFqLuhdxegY+kqXmtEPlQqCWfsmXo1FaeReR1CFlOg42ZSHY6NVvAgCY1itJ61iUOS3 mjBmB/GBsux9UqsidopNFLju8bfIGmKqanO6AjTtszy/UnByFhNmmnmWJ4SEJAZKfUoa Ix38uHUICxEv4XodltYz7l0wasyfPz6tlGOu0+xLn2nDe14/5UYLhtBiKLLmsMRsv0rW GWq2sWweTp6wLXvZATz5/U+MsXb7EwYNwTR/79MoaMCBorn21RDUptA7UYlF7v93B/+e mRVw== MIME-Version: 1.0 X-Received: by 10.180.12.178 with SMTP id z18mr37756752wib.24.1439302932452; Tue, 11 Aug 2015 07:22:12 -0700 (PDT) Received: by 10.27.96.132 with HTTP; Tue, 11 Aug 2015 07:22:12 -0700 (PDT) In-Reply-To: <201508110857.t7B8v5uD031131@repo.freebsd.org> References: <201508110857.t7B8v5uD031131@repo.freebsd.org> Date: Tue, 11 Aug 2015 10:22:12 -0400 Message-ID: Subject: Re: svn commit: r286620 - head/contrib/netbsd-tests/lib/libc/regex From: Benjamin Kaduk To: Baptiste Daroussin Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 14:22:28 -0000 On Tue, Aug 11, 2015 at 4:57 AM, Baptiste Daroussin wrote: > Author: bapt > Date: Tue Aug 11 08:57:04 2015 > New Revision: 286620 > URL: https://svnweb.freebsd.org/changeset/base/286620 > > Log: > Disable broken test until we have time ti actually fix the test > > Modified: > head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c > > Modified: head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c > > ============================================================================== > --- head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Tue Aug 11 > 08:44:19 2015 (r286619) > +++ head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Tue Aug 11 > 08:57:04 2015 (r286620) > @@ -631,7 +631,7 @@ ATF_TP_ADD_TCS(tp) > ATF_TP_ADD_TC(tp, basic); > ATF_TP_ADD_TC(tp, categorization); > ATF_TP_ADD_TC(tp, nullsubexpr); > - ATF_TP_ADD_TC(tp, leftassoc); > +// ATF_TP_ADD_TC(tp, leftassoc); > style still doesn't like C++-style comments... -Ben From owner-svn-src-head@freebsd.org Tue Aug 11 14:50:55 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7000399F9F6; Tue, 11 Aug 2015 14:50:55 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: from mail-wi0-x230.google.com (mail-wi0-x230.google.com [IPv6:2a00:1450:400c:c05::230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0CEBB1D23; Tue, 11 Aug 2015 14:50:55 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: by wijp15 with SMTP id p15so179836456wij.0; Tue, 11 Aug 2015 07:50:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=OU617GooFG4Gs/UVefJuFm1vyfQTYJ95P4mFR/abW7U=; b=xLAh45IrOwyJ7NsSjkjOSWvSajK1AOE7H8jVG3v8XS/hIKZ0CjTJ/cEXKrJkVtkqFe CZPIxjbmlPYmku7lVDTbis0mYnynKL0ZquY7s5GkBcjNiLp2guXsM+HsULAx4vWRxm3h SZu3E0VgbmXwg51oiYHPNEMsHi4OtrVnB+gyWIEzcHoc/b+Hl2dzrUJXKKpnpJ0WIADq ekk5aPWEGcaKV9sgSwZzzw1yJce8b3iCjrRFk2qKEWlDhBywHmj1CUqv0TXt8fUCaXHq 8yaH1MABBnzcjIGFiG2t7AX9/HmgyEzzXxQESXQq+mjbfp6v9AIt234L933kBE76mpae yI2w== X-Received: by 10.194.133.73 with SMTP id pa9mr56601376wjb.148.1439304653588; Tue, 11 Aug 2015 07:50:53 -0700 (PDT) Received: from ivaldir.etoilebsd.net ([2001:41d0:8:db4c::1]) by smtp.gmail.com with ESMTPSA id by17sm19275491wib.18.2015.08.11.07.50.52 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Aug 2015 07:50:52 -0700 (PDT) Sender: Baptiste Daroussin Date: Tue, 11 Aug 2015 16:50:50 +0200 From: Baptiste Daroussin To: Benjamin Kaduk Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Subject: Re: svn commit: r286620 - head/contrib/netbsd-tests/lib/libc/regex Message-ID: <20150811145050.GA10390@ivaldir.etoilebsd.net> References: <201508110857.t7B8v5uD031131@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="J2SCkAp4GZ/dPZZf" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 14:50:55 -0000 --J2SCkAp4GZ/dPZZf Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Aug 11, 2015 at 10:22:12AM -0400, Benjamin Kaduk wrote: > On Tue, Aug 11, 2015 at 4:57 AM, Baptiste Daroussin > wrote: >=20 > > Author: bapt > > Date: Tue Aug 11 08:57:04 2015 > > New Revision: 286620 > > URL: https://svnweb.freebsd.org/changeset/base/286620 > > > > Log: > > Disable broken test until we have time ti actually fix the test > > > > Modified: > > head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c > > > > Modified: head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c > > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D > > --- head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Tue Aug= 11 > > 08:44:19 2015 (r286619) > > +++ head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Tue Aug= 11 > > 08:57:04 2015 (r286620) > > @@ -631,7 +631,7 @@ ATF_TP_ADD_TCS(tp) > > ATF_TP_ADD_TC(tp, basic); > > ATF_TP_ADD_TC(tp, categorization); > > ATF_TP_ADD_TC(tp, nullsubexpr); > > - ATF_TP_ADD_TC(tp, leftassoc); > > +// ATF_TP_ADD_TC(tp, leftassoc); > > >=20 > style still doesn't like C++-style comments... >=20 > -Ben This is a temporary disable, do we really care? Bapt --J2SCkAp4GZ/dPZZf Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEARECAAYFAlXKC8oACgkQ8kTtMUmk6ExxoQCdGgjMaAcpmA8LqebvvOFU6ewa TWcAoJStPIoTijrs5vKVtS5UzCgl4LX8 =T1Er -----END PGP SIGNATURE----- --J2SCkAp4GZ/dPZZf-- From owner-svn-src-head@freebsd.org Tue Aug 11 15:17:26 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 51FCC99F0FD for ; Tue, 11 Aug 2015 15:17:26 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from mail-pd0-f180.google.com (mail-pd0-f180.google.com [209.85.192.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 22F8A2BB for ; Tue, 11 Aug 2015 15:17:25 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: by pdrh1 with SMTP id h1so66631054pdr.0 for ; Tue, 11 Aug 2015 08:17:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:subject:mime-version:content-type:from :in-reply-to:date:cc:message-id:references:to; bh=E2wDHE/zTFcej2Uja002sZx5bZ0ExH1FtNq1TUGs6Uo=; b=hIKN9SErVGwmbn/rppzS/ZBJ4pScPKO1gn2rUE9LzJ4PkiJUwViEZgJxxXcUTfCMP/ szp7OJosw5rYtDXg64P5bskou2igq2XE4MZRsw9q5rE/zJXQH77wXCar6mlx3yqQ7sfo 26vTcHprEh3nJaiYg/w9Gj4CqFhkdc4mu8hI8F9tSLAM5sKiWDNaQF/rKLcFegzpY3vr feS7L10Gc+YEGatqpl25rkfqi2dCoLbIe6GZuOs508ln8TVG8W5etYFbCo6vdf2DNx3C LVSf9wG/yOzcZZBTQ7EkECMAHzgGgv26+P7V2DN19I0hPzF0P2t0ybg2Y9hze3G9GuEW zdfQ== X-Gm-Message-State: ALoCoQkH13Qghi2cWPj94GmtNUQIWoHVQjVmY5Ifcu3hXA0dKRVKE/X1nQe61PCa6PdX5Oqx1H88 X-Received: by 10.70.3.98 with SMTP id b2mr57046986pdb.107.1439305850288; Tue, 11 Aug 2015 08:10:50 -0700 (PDT) Received: from [100.127.128.155] ([69.53.245.15]) by smtp.gmail.com with ESMTPSA id da17sm3041528pac.29.2015.08.11.08.10.48 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 11 Aug 2015 08:10:49 -0700 (PDT) Sender: Warner Losh Subject: Re: svn commit: r286524 - in head: . etc sys/dev/drm sys/dev/drm2 Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Content-Type: multipart/signed; boundary="Apple-Mail=_18A42306-2BC7-4C21-A695-ADDAF3EC4FD6"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail 2.5 From: Warner Losh In-Reply-To: <1439301209.4375.40.camel@FreeBSD.org> Date: Tue, 11 Aug 2015 09:10:46 -0600 Cc: Jan Beich , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Message-Id: References: <201508091258.t79CwvGj027161@repo.freebsd.org> <1439301209.4375.40.camel@FreeBSD.org> To: Koop Mast X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 15:17:26 -0000 --Apple-Mail=_18A42306-2BC7-4C21-A695-ADDAF3EC4FD6 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Aug 11, 2015, at 7:53 AM, Koop Mast wrote: >=20 > On Mon, 2015-08-10 at 02:15 +0200, Jan Beich wrote: >> Koop Mast writes: >>=20 >>> Author: kwm (ports committer) >>> Date: Sun Aug 9 12:58:56 2015 >>> New Revision: 286524 >>> URL: https://svnweb.freebsd.org/changeset/base/286524 >>>=20 >>> Log: >>> Add a new group named 'video' with the id of 44. And make drm >>> create >>> devices in /dev/dri/ with this new group. >>=20 >> Would 'video' group include capture devices as well? Linux seems to >> mix >> /dev/nvidia*, /dev/fb* and /dev/video* all under same group despite >> all of them have different attack vectors. >=20 > We could extend this, but the only example I had where the dri = devices. > Also webcamd already chmod's it's devices: > % ll /dev/video0 > crw-rw---- 1 webcamd webcamd 0x9a Aug 10 07:35 /dev/video0 >=20 > I'm unsure if nvidia makes any /dev devices since it been ages since I > had one in a machine of mine. >=20 >>> Modified: head/sys/dev/drm/drmP.h >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>> --- head/sys/dev/drm/drmP.h Sun Aug 9 12:20:22 2015 >>> (r286523) >>> +++ head/sys/dev/drm/drmP.h Sun Aug 9 12:58:56 2015 >>> (r286524) >>> @@ -175,7 +175,7 @@ SYSCTL_DECL(_hw_drm); >>>=20 >>> #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) >>> #define DRM_DEV_UID 0 >>> -#define DRM_DEV_GID 0 >>> +#define DRM_DEV_GID 44 /* "video" group */ >>=20 >> Why hardcode? Linux often uses udev(7) rules to assign a group which >> on >> FreeBSD can easily be translated into devd.conf(5) or devfs.rules(5). >>=20 >> Having 'video' assigned by kernel wouldn't eliminate having to run >> mergemaster/etcupdate + pw groupmod on upgrade. >=20 > I find this way easier to do. However with the devd.conf(5) or > devfs.rules(5) someone still needs to up date the /etc and pw = groupmod. devd.conf isn=E2=80=99t the place for this. This is pure devfs.rules. Warner --Apple-Mail=_18A42306-2BC7-4C21-A695-ADDAF3EC4FD6 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVyhB3AAoJEGwc0Sh9sBEAg54QAIxT7XZBAk3NT2AnsgDvOYFl CaPGFengI9bQZ84U7yeV+IAbHmE+JgUsGnfZSrgazee+55Shl7HS5hBjP8Dmezh6 jklC3P2gdKrigwpP0jnD0wEgNW4FlRYgcGsskTGirHe1bG2x7rcVf650vdA9oBU9 gBTYzGEOB35fd0NeUj+UX6xtYdOPE5MA8jA3IFkozLSFpiWQr6FCOYczGDaYk0u7 6qmD7tKT1UX+d3GkO9FvzyFqAD2872cGJo/ljsfAKxH40AgEzbrl90oKTpmh8hiU AzmH0vt/PIf+o1STa3VWblKR1JQGXCT0qjfRhT64WAOCyWA8zsPCSpeV2ilrgytB HspRWqywZ4epdwQYikqIKx3X4okFsObkpGGNTzn5P0m+YJa1ynqbNHfgf8Y4PLYn xHh/Wo1AfPvEExDvM6ePtZeubWp+mnVXLVpqQI3IzUun/qSbByBlZlG9JmzVt3Cf tsrkOIcnNFFWwGjUuLQ9BJZXkRkwzXFaH0FPPm7ucuvIWY5X2ElFA18mE/M9gBox grKZSiV8NVgKZP2XoMs+5EUpo88uCv0auKnlYz4FKhOsDPq1Wf5qUrj0bNiPwpUm FLcugaCvDkc+DzGhERr4a0ng1mgsrPo4eg3YHj9cMLOLPfiIfBAgRVcdojac49CJ BTMreEjigDuvogWNpSfD =tus0 -----END PGP SIGNATURE----- --Apple-Mail=_18A42306-2BC7-4C21-A695-ADDAF3EC4FD6-- From owner-svn-src-head@freebsd.org Tue Aug 11 15:43:10 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2200999F661; Tue, 11 Aug 2015 15:43:10 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E7C63646; Tue, 11 Aug 2015 15:43:09 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BFh9NW000425; Tue, 11 Aug 2015 15:43:09 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BFh9e5000424; Tue, 11 Aug 2015 15:43:09 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508111543.t7BFh9e5000424@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Tue, 11 Aug 2015 15:43:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286635 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 15:43:10 -0000 Author: emaste Date: Tue Aug 11 15:43:09 2015 New Revision: 286635 URL: https://svnweb.freebsd.org/changeset/base/286635 Log: Build libelf and libdwarf in the legacy stage They need to be built and installed (including headers) prior to the DTrace CTF tools. Reviewed by: imp (as part of a larger change) Sponsored by: The FreeBSD Foundation Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Tue Aug 11 15:25:08 2015 (r286634) +++ head/Makefile.inc1 Tue Aug 11 15:43:09 2015 (r286635) @@ -1229,12 +1229,18 @@ update: # set of tools and shims necessary to compensate for older systems which don't have # the APIs that the targets built in bootstrap-tools, build-tools or cross-tools. # + +# ELF Tool Chain libraries are needed for ELF tools and dtrace tools. +.if ${BOOTSTRAPPING} < 1100006 +_elftoolchain_libs= lib/libelf lib/libdwarf +.endif + legacy: .if ${BOOTSTRAPPING} < 800107 && ${BOOTSTRAPPING} != 0 @echo "ERROR: Source upgrades from versions prior to 8.0 not supported."; \ false .endif -.for _tool in tools/build +.for _tool in tools/build ${_elftoolchain_libs} ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \ cd ${.CURDIR}/${_tool} && \ ${MAKE} DIRPRFX=${_tool}/ obj && \ @@ -1332,13 +1338,12 @@ ${_bt}-usr.bin/clang/tblgen: ${_bt}-lib/ # pre libdwarf .if ${BOOTSTRAPPING} < 1100006 || (${MACHINE} != ${TARGET} || \ ${MACHINE_ARCH} != ${TARGET_ARCH}) -_elftoolchain_libs= lib/libelf lib/libdwarf .if ${MK_CDDL} != "no" _dtrace_tools= cddl/usr.bin/sgsmsg cddl/lib/libctf cddl/usr.bin/ctfconvert \ cddl/usr.bin/ctfmerge -${_bt}-cddl/usr.bin/ctfconvert: ${_bt}-lib/libelf ${_bt}-lib/libdwarf ${_bt}-cddl/lib/libctf -${_bt}-cddl/usr.bin/ctfmerge: ${_bt}-lib/libelf ${_bt}-lib/libdwarf ${_bt}-cddl/lib/libctf +${_bt}-cddl/usr.bin/ctfconvert: ${_bt}-cddl/lib/libctf +${_bt}-cddl/usr.bin/ctfmerge: ${_bt}-cddl/lib/libctf .endif .endif @@ -1381,7 +1386,6 @@ bootstrap-tools: .PHONY .for _tool in \ ${_clang_tblgen} \ ${_kerberos5_bootstrap_tools} \ - ${_elftoolchain_libs} \ ${_dtrace_tools} \ ${_strfile} \ ${_gperf} \ From owner-svn-src-head@freebsd.org Tue Aug 11 15:47:59 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F126A99F77C for ; Tue, 11 Aug 2015 15:47:58 +0000 (UTC) (envelope-from steven.hartland@multiplay.co.uk) Received: from mail-wi0-f172.google.com (mail-wi0-f172.google.com [209.85.212.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B0FCA967 for ; Tue, 11 Aug 2015 15:47:58 +0000 (UTC) (envelope-from steven.hartland@multiplay.co.uk) Received: by wibhh20 with SMTP id hh20so202550983wib.0 for ; Tue, 11 Aug 2015 08:47:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-type :content-transfer-encoding; bh=uMRmvSr5jvpPA/En9h7KEL4R8BD7sb00AupephLRokM=; b=kidRajFbWLs1ZFQI0ENcuRF3pfILg0GICGOiCTNVQvumA0chhJ5LWivvxJ/wMtfVcc Wa9qpDS65s9QR5CEciOs097876pZJCGV9+eEIi/knsFAdR1nTR44yJdn+AMGkq3FDY5d 8JVC79DL7YyZs9EZbl4hGS863SxVQObwxLWjKZZ2HreophJ7IbEh1zNlacO1AS3mtNMB PhsYLg7YYSGlKVU1F396uz3IudHycFiVMQpb99GChNlxEFhVPU3WxQ3rrStFQuBOSezg KT9mTGdKwcp8O1MStmdW0bKtS7alx5RY4yPk84V1yHV7KcyknU3Z/a0w5k8cFIibvV6D 0BMg== X-Gm-Message-State: ALoCoQlvM5eR/sm9D/9HiwM0iiyPK+ZP+atbmnit3ySEGbgRUwp2bRDGf+BNA0Y/oL6l90khpFCw X-Received: by 10.180.38.34 with SMTP id d2mr35364962wik.48.1439308070970; Tue, 11 Aug 2015 08:47:50 -0700 (PDT) Received: from [10.10.1.68] (82-69-141-170.dsl.in-addr.zen.co.uk. [82.69.141.170]) by smtp.gmail.com with ESMTPSA id lu5sm3598080wjb.9.2015.08.11.08.47.49 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 11 Aug 2015 08:47:49 -0700 (PDT) Subject: Re: svn commit: r286625 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs To: Andriy Gapon , Alexander Motin , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org References: <201508111039.t7BAdK1x071658@repo.freebsd.org> <55C9D3A5.1020000@FreeBSD.org> From: Steven Hartland Message-ID: <55CA1921.6030606@multiplay.co.uk> Date: Tue, 11 Aug 2015 16:47:45 +0100 User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <55C9D3A5.1020000@FreeBSD.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 15:47:59 -0000 On 11/08/2015 11:51, Andriy Gapon wrote: > On 11/08/2015 13:39, Alexander Motin wrote: >> Author: mav >> Date: Tue Aug 11 10:39:19 2015 >> New Revision: 286625 >> URL: https://svnweb.freebsd.org/changeset/base/286625 >> >> Log: >> MFV r277425: >> 5376 arc_kmem_reap_now() should not result in clearing arc_no_grow >> Reviewed by: Christopher Siden >> Reviewed by: George Wilson >> Reviewed by: Steven Hartland >> Reviewed by: Richard Elling >> Approved by: Dan McDonald >> Author: Matthew Ahrens >> >> illumos/illumos-gate@2ec99e3e987d8aa273f1e9ba2b983557d058198c >> >> Modified: >> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c > Alexander, > > thank you very much for bringing all these upstream changes into our tree. > It seems that some of the changes, though, non-trivially overlap with > FreeBSD-specific changes to ZFS code. I think that this change is one > of the examples. > It would be good if a strategy of the resolution of each non-trivial > conflict was described and possibly discussed. Reviewing the change > without knowing the general idea behind it is not always easy. > I actually eliminated most of the miss-matches between illumos and FreeBSD in this area pretty recently, so I'm not sure that there's actually many FreeBSD specific changes, hence conflicts. Given I worked in this area before I did also make a point of reviewing the upstream commit. That's not to say it wouldn't be good to review these sorts of changes especially given the potential impact, however we don't have a very good track record (myself included) in reviewing things so I'm concerned that would just become a real progress blocker. What do others think? Regards Steve From owner-svn-src-head@freebsd.org Tue Aug 11 16:07:25 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BF36F99FC91; Tue, 11 Aug 2015 16:07:25 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B02731B1F; Tue, 11 Aug 2015 16:07:25 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BG7P3f008999; Tue, 11 Aug 2015 16:07:25 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BG7PcF008998; Tue, 11 Aug 2015 16:07:25 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508111607.t7BG7PcF008998@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Tue, 11 Aug 2015 16:07:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286638 - head/contrib/netbsd-tests/lib/libc/regex X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:07:25 -0000 Author: bapt Date: Tue Aug 11 16:07:24 2015 New Revision: 286638 URL: https://svnweb.freebsd.org/changeset/base/286638 Log: Reenable the test. Sorry I was testing on the wrong branch. Modified: head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Modified: head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c ============================================================================== --- head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Tue Aug 11 16:01:34 2015 (r286637) +++ head/contrib/netbsd-tests/lib/libc/regex/t_regex_att.c Tue Aug 11 16:07:24 2015 (r286638) @@ -631,7 +631,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, basic); ATF_TP_ADD_TC(tp, categorization); ATF_TP_ADD_TC(tp, nullsubexpr); -// ATF_TP_ADD_TC(tp, leftassoc); + ATF_TP_ADD_TC(tp, leftassoc); ATF_TP_ADD_TC(tp, rightassoc); ATF_TP_ADD_TC(tp, forcedassoc); ATF_TP_ADD_TC(tp, repetition); From owner-svn-src-head@freebsd.org Tue Aug 11 16:08:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4A46399FCC9; Tue, 11 Aug 2015 16:08:11 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3B81A1C97; Tue, 11 Aug 2015 16:08:11 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BG8BH7009073; Tue, 11 Aug 2015 16:08:11 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BG8BRD009072; Tue, 11 Aug 2015 16:08:11 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508111608.t7BG8BRD009072@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Tue, 11 Aug 2015 16:08:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286639 - head/lib/libc/tests/locale X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:08:11 -0000 Author: bapt Date: Tue Aug 11 16:08:10 2015 New Revision: 286639 URL: https://svnweb.freebsd.org/changeset/base/286639 Log: Actually disable the invalid test Modified: head/lib/libc/tests/locale/Makefile Modified: head/lib/libc/tests/locale/Makefile ============================================================================== --- head/lib/libc/tests/locale/Makefile Tue Aug 11 16:07:24 2015 (r286638) +++ head/lib/libc/tests/locale/Makefile Tue Aug 11 16:08:10 2015 (r286639) @@ -6,7 +6,7 @@ TESTSDIR= ${TESTSBASE}/lib/libc/locale NETBSD_ATF_TESTS_C= io_test NETBSD_ATF_TESTS_C+= mbrtowc_test -NETBSD_ATF_TESTS_C+= mbstowcs_test +#NETBSD_ATF_TESTS_C+= mbstowcs_test NETBSD_ATF_TESTS_C+= mbsnrtowcs_test NETBSD_ATF_TESTS_C+= mbtowc_test NETBSD_ATF_TESTS_C+= wcscspn_test From owner-svn-src-head@freebsd.org Tue Aug 11 16:19:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5B1A499FF0D for ; Tue, 11 Aug 2015 16:19:01 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-ob0-f169.google.com (mail-ob0-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 371B433A for ; Tue, 11 Aug 2015 16:19:01 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by obbfr1 with SMTP id fr1so115216748obb.1 for ; Tue, 11 Aug 2015 09:19:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=YXx/iL1RCxVssx4WRYGaxRAcxKnG8WY3lftwWvzCDac=; b=Jft/fBsbojkkTTTdhUHW/28aHEwUrp8F5RLImUoJoEVuwChL+T/JRE4xYSlgKyzIXz MTlSROkNuf8q0dpzzbwBpr7nM7n4RCHmcg5cKn1wfdVtrliO5QDaQpnEclz4uF+VBx4/ ehIy61gNuCO9yytwDdjS2EZxbcjSxj3XsxhwiCG0dKBlRnUI2ocGZ585Kz7sjPM2j0wj By+EkzJIypTOj3mv7vMX+bl4xvIglFEvwkGh+E1sKUGA+nXOuAGhYEqcVY9tGadqj3Bg unZbhUstDAQtKy/Zm6NDbLvXXsYBp6+UXxrxBzy2Unl7/DvXM/vTuczzehEsMtv6H5LU jcQg== X-Gm-Message-State: ALoCoQk0mokT7N6k/f2mMX2pQ4s4gwLoA0/oW8eEY42JgRWPUw8XQvzb1bP9fWCB+tmDihNcmETj MIME-Version: 1.0 X-Received: by 10.60.46.200 with SMTP id x8mr26372987oem.73.1439309939928; Tue, 11 Aug 2015 09:18:59 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Tue, 11 Aug 2015 09:18:59 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508111608.t7BG8BRD009072@repo.freebsd.org> References: <201508111608.t7BG8BRD009072@repo.freebsd.org> Date: Tue, 11 Aug 2015 18:18:59 +0200 Message-ID: Subject: Re: svn commit: r286639 - head/lib/libc/tests/locale From: Ed Schouten To: Baptiste Daroussin Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:19:01 -0000 2015-08-11 18:08 GMT+02:00 Baptiste Daroussin : > Actually disable the invalid test I thought mbrtowc_test was the one that was failing -- not mbstowcs_test. Why not simply remove the bad test vectors? -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Tue Aug 11 16:27:02 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C611899E0AB for ; Tue, 11 Aug 2015 16:27:02 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-ob0-f172.google.com (mail-ob0-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 94285A29 for ; Tue, 11 Aug 2015 16:27:02 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by obbfr1 with SMTP id fr1so115400869obb.1 for ; Tue, 11 Aug 2015 09:27:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=XqoTEYr5omPTjyjFuO9ixrquGo23PwFGnT/38+PxlMA=; b=E2r4HHr0rmTyO81hbyDKRwsD1djBN4QYcMLrE+U7FJaLE6bo7/nsspD1vGnZgcoo7J qyQG9a2Nf28GMmiInv05hzdvvQ00rPWaH0i04VxhBJgk0Zf9iwnfk3IQ+5iVUm0wraFd WZWVNKJXaLgHzDhiHJI/RbREyDOPdkgYbAOWi77mX4cAZymOs8mcpZawLzWOhqz7/NY4 OooRodubAldg+Tix/wqYPJBWWFXlz1/FUhhQYM6lTvSs4HA/ySiG3CTSn2pV94RL/QY5 +dj+V1mT2BLCHpqNWJZS4v4HuiStVQc8mXQvlitM3tN3JsvqtsgPPAPKXLxu/ycVJ37H fpKA== X-Gm-Message-State: ALoCoQmM5kgUPE4Ym4WhgxVdB689k6ugxTbhQTMz2U9i6PqEtAEvSOAmK6KebmNnymei+hckAlo5 MIME-Version: 1.0 X-Received: by 10.60.35.42 with SMTP id e10mr24917199oej.26.1439310421577; Tue, 11 Aug 2015 09:27:01 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Tue, 11 Aug 2015 09:27:01 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508082359.t78NxGGZ026906@repo.freebsd.org> References: <201508082359.t78NxGGZ026906@repo.freebsd.org> Date: Tue, 11 Aug 2015 18:27:01 +0200 Message-ID: Subject: Re: svn commit: r286490 - head/lib/libc/locale From: Ed Schouten To: Baptiste Daroussin Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:27:02 -0000 2015-08-09 1:59 GMT+02:00 Baptiste Daroussin : > Remove 5 and 6 bytes sequences which are illegal in UTF-8 space. > > Per rfc3629 value greater than 0x10ffff should be rejected I think the change you made only ensures that the value cannot exceed 0x1fffff -- not 0x10ffff. You probably need to do something like this: diff --git a/lib/libc/locale/utf8.c b/lib/libc/locale/utf8.c index 55e2931..8ccfdb1 100644 --- a/lib/libc/locale/utf8.c +++ b/lib/libc/locale/utf8.c @@ -191,7 +191,7 @@ _UTF8_mbrtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n, errno = EILSEQ; return ((size_t)-1); } - if (wch >= 0xd800 && wch <= 0xdfff) { + if ((wch >= 0xd800 && wch <= 0xdfff) || wch > 0x10ffff) { /* * Malformed input; invalid code points. */ -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Tue Aug 11 16:28:07 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5C18399E0E8 for ; Tue, 11 Aug 2015 16:28:07 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-ob0-f178.google.com (mail-ob0-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 27C01AAD for ; Tue, 11 Aug 2015 16:28:07 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by obbfr1 with SMTP id fr1so115424146obb.1 for ; Tue, 11 Aug 2015 09:28:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=WPrLko66fTxOJLEbYOvKKl5vie5ABCixgcjWqpI8sxk=; b=ZQDn7LUTZbTOSh5/jpi7g6nEkay6gI6eZvK05MI/0ogJ95FqUU1vyoRLEaScHHQgnF 2/UXGsbD4Masav8OlCIlUSn9mvZwzL6EUsWwPqMnOV4c3C6vtw1N7SHYCT/oTurWx9Qg YAj+BgM1cGUGyGmDZE6m8TjOcrvKPsp06ZGDeK7pOpA8gszK9CjRqnkhBxKPX6vxv8ax unl4K8ftKeRyU14PXLtgiRrdyiR7Yu6PKVQBPss53p+cXpyRqP702iEX1kDnUyddmSBw I0zrS0fio5PgMW0LuFt2rZNos79nIa9OURjezG13tbYnvpR3zBISyEXcTwLc+O5PzJ7z PGUg== X-Gm-Message-State: ALoCoQnb4KqYGQCVz3luzYwWDVha9jkcUYFk549LH8//ferROa+1yv7xUz/6uw25GdqZM7INWJ9V MIME-Version: 1.0 X-Received: by 10.60.46.200 with SMTP id x8mr26415084oem.73.1439310486215; Tue, 11 Aug 2015 09:28:06 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Tue, 11 Aug 2015 09:28:06 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508090006.t7906vbK031238@repo.freebsd.org> References: <201508090006.t7906vbK031238@repo.freebsd.org> Date: Tue, 11 Aug 2015 18:28:06 +0200 Message-ID: Subject: Re: svn commit: r286491 - head/lib/libc/locale From: Ed Schouten To: Baptiste Daroussin Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:28:07 -0000 2015-08-09 2:06 GMT+02:00 Baptiste Daroussin : > Per rfc3629 value greater than 0x10ffff should be rejected Not only that, values between 0xd800 and 0xdfff also need to be rejected: diff --git a/lib/libc/locale/utf8.c b/lib/libc/locale/utf8.c index 55e2931..8ccfdb1 100644 --- a/lib/libc/locale/utf8.c +++ b/lib/libc/locale/utf8.c @@ -318,6 +318,10 @@ _UTF8_wcrtomb(char * __restrict s, wchar_t wc, mbstate_t * __restrict ps) lead = 0xc0; len = 2; } else if ((wc & ~0xffff) == 0) { + if (wc >= 0xd800 && wc <= 0xdfff) { + errno = EILSEQ; + return ((size_t)-1); + } lead = 0xe0; len = 3; } else if (wc >= 0 && wc <= 0x10ffff) { -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Tue Aug 11 16:33:18 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EC65899E26D for ; Tue, 11 Aug 2015 16:33:18 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-oi0-f44.google.com (mail-oi0-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BDA95F54 for ; Tue, 11 Aug 2015 16:33:17 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by oio137 with SMTP id 137so105716763oio.0 for ; Tue, 11 Aug 2015 09:33:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=3bfvubls+n9Nr8onEpmy7ZkYHCymgp+bIpv+sdydVUo=; b=JqzIqr75cVFGkhjS8TKZ6QO6Yaq3X/9dVgJ3885oxN4YV4HxroWfon7cYctZl79F0x KWxiOTUQtOHDT2XA76JqssLf/amRAycCdox+JMQIunUHDkUdMdGYO3kIE7tFyN3FG5KN im6+AEWJyFmPMtJqaO55KfSb8c2z6/BGb1Rwyxwnwnlfy4s0otOMRZhI6uZYUXpk/Mzt QHbOVeZGx7YfXaEVF55TkYvCp6xTyjaAKSbgkY7RfkOsG5yBzZKlGsDh6L9k20NEqfPh aFqXcGbV7jN84oLnuxaOJkcVqLUmutPvhTCBrix9Sg9vu6PaejcV2Fw5IFcdBasWBuGD jnXQ== X-Gm-Message-State: ALoCoQmz9soMpnCIA3Qg+hkqOteFQ0rqOKO5z0C6gcef0h6aumxQ7FosJE07tkd151Ib6dN6Sm/s MIME-Version: 1.0 X-Received: by 10.202.208.136 with SMTP id h130mr7998466oig.74.1439310797076; Tue, 11 Aug 2015 09:33:17 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Tue, 11 Aug 2015 09:33:17 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: References: <201508111608.t7BG8BRD009072@repo.freebsd.org> Date: Tue, 11 Aug 2015 18:33:17 +0200 Message-ID: Subject: Re: svn commit: r286639 - head/lib/libc/tests/locale From: Ed Schouten To: Baptiste Daroussin Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:33:19 -0000 2015-08-11 18:18 GMT+02:00 Ed Schouten : > 2015-08-11 18:08 GMT+02:00 Baptiste Daroussin : >> Actually disable the invalid test > > I thought mbrtowc_test was the one that was failing -- not mbstowcs_test. Oh, wait. Both mbrtowc_test and mbstowcs_test are failing. -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Tue Aug 11 16:34:07 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0D1F899E2D3; Tue, 11 Aug 2015 16:34:07 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: from mail-wi0-x233.google.com (mail-wi0-x233.google.com [IPv6:2a00:1450:400c:c05::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B5954155; Tue, 11 Aug 2015 16:34:06 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: by wijp15 with SMTP id p15so183947970wij.0; Tue, 11 Aug 2015 09:34:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=WSXba7pZfyU9f4hhASgnqPiGfSWSXhd9isq7qWFc/ao=; b=xAZG5NI0cMScXQ69v8o092ZEwCITQRILRlciYLEfdzuWPIHHhbNEFB9DFQna3eKc4l GlcH+aj46poAyQXiAKuIbobHeA8K3WRgtKkhEZx73xBmpU/Xqzghj+aDPHTPiRfn7Wrw TGOZFt9nRvvXpst18TIMxCBGAgSLWThRQsf763dVIepra3YkPGH98cNOAIwi42fTcy0o tFs2JZy0GPjArFdnS0efSB5lVfMMpDalBiaBwFys1s8PiGsfm95W0/hc6EjOoR1jkrFV M33/CWWCG4a3Aqmt02TsyFOErJK6fE/4w6M4mRAaR5ITe3qv4o3lA0h1pLrSb6Vo8oV0 uVYQ== X-Received: by 10.194.238.168 with SMTP id vl8mr59962138wjc.128.1439310845123; Tue, 11 Aug 2015 09:34:05 -0700 (PDT) Received: from ivaldir.etoilebsd.net ([2001:41d0:8:db4c::1]) by smtp.gmail.com with ESMTPSA id g13sm3756938wjs.21.2015.08.11.09.34.03 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Aug 2015 09:34:04 -0700 (PDT) Sender: Baptiste Daroussin Date: Tue, 11 Aug 2015 18:34:02 +0200 From: Baptiste Daroussin To: Ed Schouten Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers Subject: Re: svn commit: r286491 - head/lib/libc/locale Message-ID: <20150811163314.GB10390@ivaldir.etoilebsd.net> References: <201508090006.t7906vbK031238@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="W5WqUoFLvi1M7tJE" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:34:07 -0000 --W5WqUoFLvi1M7tJE Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Aug 11, 2015 at 06:28:06PM +0200, Ed Schouten wrote: > 2015-08-09 2:06 GMT+02:00 Baptiste Daroussin : > > Per rfc3629 value greater than 0x10ffff should be rejected >=20 > Not only that, values between 0xd800 and 0xdfff also need to be rejected: >=20 > diff --git a/lib/libc/locale/utf8.c b/lib/libc/locale/utf8.c > index 55e2931..8ccfdb1 100644 > --- a/lib/libc/locale/utf8.c > +++ b/lib/libc/locale/utf8.c > @@ -318,6 +318,10 @@ _UTF8_wcrtomb(char * __restrict s, wchar_t wc, > mbstate_t * __restrict ps) > lead =3D 0xc0; > len =3D 2; > } else if ((wc & ~0xffff) =3D=3D 0) { > + if (wc >=3D 0xd800 && wc <=3D 0xdfff) { > + errno =3D EILSEQ; > + return ((size_t)-1); > + } > lead =3D 0xe0; > len =3D 3; > } else if (wc >=3D 0 && wc <=3D 0x10ffff) { Good catch please go ahead Bapt --W5WqUoFLvi1M7tJE Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEARECAAYFAlXKI/kACgkQ8kTtMUmk6EwOhwCfdFSCi8nWDVRI59hxO4dASTUK 4kcAn3GEXDSOaRZ1Lte6EuAaPWGrz/MF =xnk5 -----END PGP SIGNATURE----- --W5WqUoFLvi1M7tJE-- From owner-svn-src-head@freebsd.org Tue Aug 11 16:36:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 41B7C99E37D; Tue, 11 Aug 2015 16:36:01 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: from mail-wi0-x22c.google.com (mail-wi0-x22c.google.com [IPv6:2a00:1450:400c:c05::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C6DA42F8; Tue, 11 Aug 2015 16:36:00 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: by wicja10 with SMTP id ja10so75577970wic.1; Tue, 11 Aug 2015 09:35:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=hO6hn8cyCuB4GGlw/xytRKOZq6eQddggppSp2TaO2+w=; b=q30tyvEW6D8HkOCRxV3hsjpmDwyDmQsDIy1S2O0RZTTd1OFYwpFU3x2D//tTr2eHN4 SOe2pU/d9gkmeF+5r4kRSjTH+jTVseXkDY3UvUGeA/HuT9qpIbPmZdKVT2knxnpO4ZfB YMhUZ0u86SiI3J4AogACT1ebrRcixbmQv1RW5nRp1BR3ukgk3v/5d3SY18jBxTTJygFy RI+U6C27TrRaU3pIeKg3ejLXEYKC3R4hl6khb0V0nLdLrFCfEZdoZRljUWBGZtLobkr0 kL+kL34G0A7dUEEIvKQYNN3Bm1vn65Y3RXwhENzfYtfohF7wYgZyBGKDrAEXfJnwHJCg 9a5g== X-Received: by 10.194.79.225 with SMTP id m1mr58201048wjx.8.1439310959170; Tue, 11 Aug 2015 09:35:59 -0700 (PDT) Received: from ivaldir.etoilebsd.net ([2001:41d0:8:db4c::1]) by smtp.gmail.com with ESMTPSA id du6sm12713805wib.24.2015.08.11.09.35.58 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Aug 2015 09:35:58 -0700 (PDT) Sender: Baptiste Daroussin Date: Tue, 11 Aug 2015 18:35:56 +0200 From: Baptiste Daroussin To: Ed Schouten Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers Subject: Re: svn commit: r286490 - head/lib/libc/locale Message-ID: <20150811163554.GC10390@ivaldir.etoilebsd.net> References: <201508082359.t78NxGGZ026906@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="lkTb+7nhmha7W+c3" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:36:01 -0000 --lkTb+7nhmha7W+c3 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Aug 11, 2015 at 06:27:01PM +0200, Ed Schouten wrote: > 2015-08-09 1:59 GMT+02:00 Baptiste Daroussin : > > Remove 5 and 6 bytes sequences which are illegal in UTF-8 space. > > > > Per rfc3629 value greater than 0x10ffff should be rejected >=20 > I think the change you made only ensures that the value cannot exceed > 0x1fffff -- not 0x10ffff. You probably need to do something like this: >=20 > diff --git a/lib/libc/locale/utf8.c b/lib/libc/locale/utf8.c > index 55e2931..8ccfdb1 100644 > --- a/lib/libc/locale/utf8.c > +++ b/lib/libc/locale/utf8.c > @@ -191,7 +191,7 @@ _UTF8_mbrtowc(wchar_t * __restrict pwc, const char > * __restrict s, size_t n, > errno =3D EILSEQ; > return ((size_t)-1); > } > - if (wch >=3D 0xd800 && wch <=3D 0xdfff) { > + if ((wch >=3D 0xd800 && wch <=3D 0xdfff) || wch > 0x10ffff) { > /* > * Malformed input; invalid code points. > */ Please go ahead with that one. Best regards, Bapt --lkTb+7nhmha7W+c3 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEARECAAYFAlXKJGoACgkQ8kTtMUmk6Ex7CgCgqaMpjq7qo4B2tNT9ngBRP1Vy V3QAmgPlvaMiAiqQEH5ebnlxgkvIibWv =Bmjl -----END PGP SIGNATURE----- --lkTb+7nhmha7W+c3-- From owner-svn-src-head@freebsd.org Tue Aug 11 16:51:45 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8680A99E75A; Tue, 11 Aug 2015 16:51:45 +0000 (UTC) (envelope-from kwm@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5EBE4CE6; Tue, 11 Aug 2015 16:51:45 +0000 (UTC) (envelope-from kwm@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BGpj1d030614; Tue, 11 Aug 2015 16:51:45 GMT (envelope-from kwm@FreeBSD.org) Received: (from kwm@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BGpiTC030611; Tue, 11 Aug 2015 16:51:44 GMT (envelope-from kwm@FreeBSD.org) Message-Id: <201508111651.t7BGpiTC030611@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kwm set sender to kwm@FreeBSD.org using -f From: Koop Mast Date: Tue, 11 Aug 2015 16:51:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286640 - in head/sys: dev/drm dev/drm2 sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:51:45 -0000 Author: kwm (ports committer) Date: Tue Aug 11 16:51:44 2015 New Revision: 286640 URL: https://svnweb.freebsd.org/changeset/base/286640 Log: Instead of defining the actualy user and group id in the drmP.h files define GID_VIDEO in sys/conf.h, and use it together with UID_ROOT to define DRM_DEV_UID and DRM_DEV_GID in the drmP.h files. So there is one place where the UID's and GID's are defined. Submitted by: ed@ Reviewed by: ed@, dumbbell@ Differential Revision: https://reviews.freebsd.org/D3360 Modified: head/sys/dev/drm/drmP.h head/sys/dev/drm2/drmP.h head/sys/sys/conf.h Modified: head/sys/dev/drm/drmP.h ============================================================================== --- head/sys/dev/drm/drmP.h Tue Aug 11 16:08:10 2015 (r286639) +++ head/sys/dev/drm/drmP.h Tue Aug 11 16:51:44 2015 (r286640) @@ -174,8 +174,8 @@ SYSCTL_DECL(_hw_drm); #define __OS_HAS_AGP 1 #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) -#define DRM_DEV_UID 0 -#define DRM_DEV_GID 44 /* "video" group */ +#define DRM_DEV_UID UID_ROOT +#define DRM_DEV_GID GID_VIDEO #define wait_queue_head_t atomic_t #define DRM_WAKEUP(w) wakeup((void *)w) Modified: head/sys/dev/drm2/drmP.h ============================================================================== --- head/sys/dev/drm2/drmP.h Tue Aug 11 16:08:10 2015 (r286639) +++ head/sys/dev/drm2/drmP.h Tue Aug 11 16:51:44 2015 (r286640) @@ -1592,8 +1592,8 @@ extern int drm_pcie_get_speed_cap_mask(s SYSCTL_DECL(_hw_drm); #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) -#define DRM_DEV_UID 0 -#define DRM_DEV_GID 44 /* "video" group */ +#define DRM_DEV_UID UID_ROOT +#define DRM_DEV_GID GID_VIDEO #define DRM_WAKEUP(w) wakeup((void *)w) #define DRM_WAKEUP_INT(w) wakeup(w) Modified: head/sys/sys/conf.h ============================================================================== --- head/sys/sys/conf.h Tue Aug 11 16:08:10 2015 (r286639) +++ head/sys/sys/conf.h Tue Aug 11 16:51:44 2015 (r286640) @@ -299,6 +299,7 @@ void devfs_free_cdp_inode(ino_t ino); #define GID_OPERATOR 5 #define GID_BIN 7 #define GID_GAMES 13 +#define GID_VIDEO 44 #define GID_DIALER 68 #define GID_NOBODY 65534 From owner-svn-src-head@freebsd.org Tue Aug 11 16:58:21 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4658999E833; Tue, 11 Aug 2015 16:58:21 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: from mail-la0-x22a.google.com (mail-la0-x22a.google.com [IPv6:2a00:1450:4010:c03::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C0586EEF; Tue, 11 Aug 2015 16:58:20 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: by lahi9 with SMTP id i9so44121260lah.2; Tue, 11 Aug 2015 09:58:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:user-agent:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=kDLdIXs/DunBRZrhiJRJa/rS76OW0G5FN9Yq8Iw+SVs=; b=05/qt/1Fb6JnZHCBeNLGtblg4q61LzBFt3EOZI3ONblfzDPmbXQjzDb9pXVIheC1W0 F20dGQlq+H0FRL1NYygThyaflyv3JDHula2Tqyl62RyL46xZ56La/9pe98quhYgsCz2z BZ42iZK2FRsAhAcRkhYncfIXavOJT7hme4LD4rfNxm7zsIa+5xQlqYRNkizBiterihHd EWdqnc/dH3jWC/dNq6YPwZHj0CFUTtW+En9KUqarm27z+lIa6I0o+xGDgqcuV514ibxt gdYILdH8KGK/zR2oefw4ZJRmNxeEGSFxIlqz5oy6dEr+wTkZeko9cla9uWO7/2P7Dgtq WbNw== X-Received: by 10.152.120.135 with SMTP id lc7mr26976528lab.41.1439312298851; Tue, 11 Aug 2015 09:58:18 -0700 (PDT) Received: from mavbook.mavhome.dp.ua ([134.249.139.101]) by smtp.googlemail.com with ESMTPSA id q5sm589690laj.6.2015.08.11.09.58.16 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Aug 2015 09:58:17 -0700 (PDT) Sender: Alexander Motin Message-ID: <55CA29A6.1000406@FreeBSD.org> Date: Tue, 11 Aug 2015 19:58:14 +0300 From: Alexander Motin User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Steven Hartland , Andriy Gapon , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org Subject: Re: svn commit: r286625 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs References: <201508111039.t7BAdK1x071658@repo.freebsd.org> <55C9D3A5.1020000@FreeBSD.org> <55CA1921.6030606@multiplay.co.uk> In-Reply-To: <55CA1921.6030606@multiplay.co.uk> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 16:58:21 -0000 On 11.08.2015 18:47, Steven Hartland wrote: > On 11/08/2015 11:51, Andriy Gapon wrote: >> On 11/08/2015 13:39, Alexander Motin wrote: >>> Author: mav >>> Date: Tue Aug 11 10:39:19 2015 >>> New Revision: 286625 >>> URL: https://svnweb.freebsd.org/changeset/base/286625 >>> >>> Log: >>> MFV r277425: >>> 5376 arc_kmem_reap_now() should not result in clearing arc_no_grow >>> Reviewed by: Christopher Siden >>> Reviewed by: George Wilson >>> Reviewed by: Steven Hartland >>> Reviewed by: Richard Elling >>> Approved by: Dan McDonald >>> Author: Matthew Ahrens >>> illumos/illumos-gate@2ec99e3e987d8aa273f1e9ba2b983557d058198c >>> >>> Modified: >>> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c >> Alexander, >> >> thank you very much for bringing all these upstream changes into our >> tree. >> It seems that some of the changes, though, non-trivially overlap with >> FreeBSD-specific changes to ZFS code. I think that this change is one >> of the examples. >> It would be good if a strategy of the resolution of each non-trivial >> conflict was described and possibly discussed. Reviewing the change >> without knowing the general idea behind it is not always easy. >> > I actually eliminated most of the miss-matches between illumos and > FreeBSD in this area pretty recently, so I'm not sure that there's > actually many FreeBSD specific changes, hence conflicts. Given I worked > in this area before I did also make a point of reviewing the upstream > commit. > > That's not to say it wouldn't be good to review these sorts of changes > especially given the potential impact, however we don't have a very good > track record (myself included) in reviewing things so I'm concerned that > would just become a real progress blocker. The fact that we had 6+ months of lag from upstream having several developers in the area tells me that we accumulated too much divergence, so that merging of already reviewed patches makes people worry about another review. I think we should just take big sledgehammer and break through this wall. For those who want to polish their reviewing skills, I'll soon prepare more interesting patch to look at -- merging the new implementation of improved ARC locking from Illumos. That seems to be one of the biggest divergence points. I've managed find a way to apply those patches almost clean, to hope that it will work when the build completes. :) -- Alexander Motin From owner-svn-src-head@freebsd.org Tue Aug 11 17:24:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E5EC299EE93; Tue, 11 Aug 2015 17:24:34 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D6EDF1E1E; Tue, 11 Aug 2015 17:24:34 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BHOY50043120; Tue, 11 Aug 2015 17:24:34 GMT (envelope-from oshogbo@FreeBSD.org) Received: (from oshogbo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BHOY2H043119; Tue, 11 Aug 2015 17:24:34 GMT (envelope-from oshogbo@FreeBSD.org) Message-Id: <201508111724.t7BHOY2H043119@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: oshogbo set sender to oshogbo@FreeBSD.org using -f From: Mariusz Zaborski Date: Tue, 11 Aug 2015 17:24:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286641 - head/sys/netpfil/pf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 17:24:35 -0000 Author: oshogbo Date: Tue Aug 11 17:24:34 2015 New Revision: 286641 URL: https://svnweb.freebsd.org/changeset/base/286641 Log: Use correct src/dst ports when removing states. Submitted by: Milosz Kaniewski , UMEZAWA Takeshi (orginal) Reviewed by: glebius Approved by: pjd (mentor) Obtained from: OpenBSD MFC after: 3 days Modified: head/sys/netpfil/pf/pf_ioctl.c Modified: head/sys/netpfil/pf/pf_ioctl.c ============================================================================== --- head/sys/netpfil/pf/pf_ioctl.c Tue Aug 11 16:51:44 2015 (r286640) +++ head/sys/netpfil/pf/pf_ioctl.c Tue Aug 11 17:24:34 2015 (r286641) @@ -1665,13 +1665,13 @@ relock_DIOCKILLSTATES: if (s->direction == PF_OUT) { srcaddr = &sk->addr[1]; dstaddr = &sk->addr[0]; - srcport = sk->port[0]; + srcport = sk->port[1]; dstport = sk->port[0]; } else { srcaddr = &sk->addr[0]; dstaddr = &sk->addr[1]; srcport = sk->port[0]; - dstport = sk->port[0]; + dstport = sk->port[1]; } if ((!psk->psk_af || sk->af == psk->psk_af) From owner-svn-src-head@freebsd.org Tue Aug 11 17:41:33 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8FC0899F415; Tue, 11 Aug 2015 17:41:33 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6634DEDD; Tue, 11 Aug 2015 17:41:33 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BHfXsI050705; Tue, 11 Aug 2015 17:41:33 GMT (envelope-from oshogbo@FreeBSD.org) Received: (from oshogbo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BHfW3M050703; Tue, 11 Aug 2015 17:41:32 GMT (envelope-from oshogbo@FreeBSD.org) Message-Id: <201508111741.t7BHfW3M050703@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: oshogbo set sender to oshogbo@FreeBSD.org using -f From: Mariusz Zaborski Date: Tue, 11 Aug 2015 17:41:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286642 - in head: share/man/man9 sys/contrib/libnv X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 17:41:33 -0000 Author: oshogbo Date: Tue Aug 11 17:41:32 2015 New Revision: 286642 URL: https://svnweb.freebsd.org/changeset/base/286642 Log: Make the nvlist_next(9) function handle NULL pointer variable. This simplifies removing the first element from nvlist. Reviewed by: AllanJude Approved by: pjd (mentor) Modified: head/share/man/man9/nv.9 head/sys/contrib/libnv/nvlist.c Modified: head/share/man/man9/nv.9 ============================================================================== --- head/share/man/man9/nv.9 Tue Aug 11 17:24:34 2015 (r286641) +++ head/share/man/man9/nv.9 Tue Aug 11 17:41:32 2015 (r286642) @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 4, 2015 +.Dd Aug 11, 2015 .Dt NV 9 .Os .Sh NAME @@ -410,6 +410,16 @@ The argument can be NULL. Elements may not be removed from the nvlist while traversing it. The nvlist must not be in error state. +Note that +.Fn nvlist_next +will handle +.Va cookiep +being set to +.Dv NULL . +In this case first element is returned or +.Dv NULL +if nvlist is empty. +This behavior simplifies removing the first element from the list. .Pp The .Fn nvlist_exists Modified: head/sys/contrib/libnv/nvlist.c ============================================================================== --- head/sys/contrib/libnv/nvlist.c Tue Aug 11 17:24:34 2015 (r286641) +++ head/sys/contrib/libnv/nvlist.c Tue Aug 11 17:41:32 2015 (r286642) @@ -1026,9 +1026,8 @@ nvlist_next(const nvlist_t *nvl, int *ty nvpair_t *nvp; NVLIST_ASSERT(nvl); - PJDLOG_ASSERT(cookiep != NULL); - if (*cookiep == NULL) + if (cookiep == NULL || *cookiep == NULL) nvp = nvlist_first_nvpair(nvl); else nvp = nvlist_next_nvpair(nvl, *cookiep); @@ -1036,7 +1035,8 @@ nvlist_next(const nvlist_t *nvl, int *ty return (NULL); if (typep != NULL) *typep = nvpair_type(nvp); - *cookiep = nvp; + if (cookiep != NULL) + *cookiep = nvp; return (nvpair_name(nvp)); } From owner-svn-src-head@freebsd.org Tue Aug 11 17:48:59 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 23B5B99F4C7; Tue, 11 Aug 2015 17:48:59 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0D11F285; Tue, 11 Aug 2015 17:48:59 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BHmwZO052192; Tue, 11 Aug 2015 17:48:58 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BHmwCk052191; Tue, 11 Aug 2015 17:48:58 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508111748.t7BHmwCk052191@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Tue, 11 Aug 2015 17:48:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286643 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 17:48:59 -0000 Author: emaste Date: Tue Aug 11 17:48:58 2015 New Revision: 286643 URL: https://svnweb.freebsd.org/changeset/base/286643 Log: Fix comment describing legacy target and wrap to 80 columns Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Tue Aug 11 17:41:32 2015 (r286642) +++ head/Makefile.inc1 Tue Aug 11 17:48:58 2015 (r286643) @@ -1225,9 +1225,10 @@ update: # # -# legacy: Build compatibility shims for the next three targets. This is a minimal -# set of tools and shims necessary to compensate for older systems which don't have -# the APIs that the targets built in bootstrap-tools, build-tools or cross-tools. +# legacy: Build compatibility shims for the next three targets. This is a +# minimal set of tools and shims necessary to compensate for older systems +# which don't have the APIs required by the targets built in bootstrap-tools, +# build-tools or cross-tools. # # ELF Tool Chain libraries are needed for ELF tools and dtrace tools. From owner-svn-src-head@freebsd.org Tue Aug 11 17:54:52 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B88E599F7CF; Tue, 11 Aug 2015 17:54:52 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A980CBF5; Tue, 11 Aug 2015 17:54:52 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BHsq15056145; Tue, 11 Aug 2015 17:54:52 GMT (envelope-from oshogbo@FreeBSD.org) Received: (from oshogbo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BHsqXb056144; Tue, 11 Aug 2015 17:54:52 GMT (envelope-from oshogbo@FreeBSD.org) Message-Id: <201508111754.t7BHsqXb056144@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: oshogbo set sender to oshogbo@FreeBSD.org using -f From: Mariusz Zaborski Date: Tue, 11 Aug 2015 17:54:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286644 - head/sys/contrib/libnv X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 17:54:52 -0000 Author: oshogbo Date: Tue Aug 11 17:54:51 2015 New Revision: 286644 URL: https://svnweb.freebsd.org/changeset/base/286644 Log: Don't set parent if the unpack operation fail. In some case this could crash the library, because of the NULL pointer references. Discovered thanks to american fuzzy lop. Approved by: pjd (mentor) Modified: head/sys/contrib/libnv/nvlist.c Modified: head/sys/contrib/libnv/nvlist.c ============================================================================== --- head/sys/contrib/libnv/nvlist.c Tue Aug 11 17:48:58 2015 (r286643) +++ head/sys/contrib/libnv/nvlist.c Tue Aug 11 17:54:51 2015 (r286644) @@ -824,6 +824,8 @@ nvlist_xunpack(const void *buf, size_t s case NV_TYPE_NVLIST: ptr = nvpair_unpack_nvlist(isbe, nvp, ptr, &left, nfds, &tmpnvl); + if (tmpnvl == NULL || ptr == NULL) + goto failed; nvlist_set_parent(tmpnvl, nvp); break; #ifndef _KERNEL From owner-svn-src-head@freebsd.org Tue Aug 11 18:01:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8115399FA6C; Tue, 11 Aug 2015 18:01:11 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6411B807; Tue, 11 Aug 2015 18:01:11 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BI1BwT060410; Tue, 11 Aug 2015 18:01:11 GMT (envelope-from oshogbo@FreeBSD.org) Received: (from oshogbo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BI1A5T060408; Tue, 11 Aug 2015 18:01:10 GMT (envelope-from oshogbo@FreeBSD.org) Message-Id: <201508111801.t7BI1A5T060408@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: oshogbo set sender to oshogbo@FreeBSD.org using -f From: Mariusz Zaborski Date: Tue, 11 Aug 2015 18:01:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286645 - head/sys/contrib/libnv X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 18:01:11 -0000 Author: oshogbo Date: Tue Aug 11 18:01:10 2015 New Revision: 286645 URL: https://svnweb.freebsd.org/changeset/base/286645 Log: The nvlist_move_nvpair() function can fail in two cases, if: - the nvlist error is set, or - the nvlist case ignore flag is not set and there is attend to add element with duplicated name. In both cases the nvlist_move_nvpair() function free nvpair structure. If library will try to unpack a binary blob which contains duplicated names it will end up with using memory after free. To prevent that, the nvlist_move_nvpair() function interface is changed to report about failure and checks are added to the nvpair_xunpack() function. Discovered thanks to the american fuzzy lop. Approved by: pjd (mentor) Modified: head/sys/contrib/libnv/nv_impl.h head/sys/contrib/libnv/nvlist.c Modified: head/sys/contrib/libnv/nv_impl.h ============================================================================== --- head/sys/contrib/libnv/nv_impl.h Tue Aug 11 17:54:51 2015 (r286644) +++ head/sys/contrib/libnv/nv_impl.h Tue Aug 11 18:01:10 2015 (r286645) @@ -93,7 +93,7 @@ nvpair_t *nvlist_prev_nvpair(const nvlis void nvlist_add_nvpair(nvlist_t *nvl, const nvpair_t *nvp); -void nvlist_move_nvpair(nvlist_t *nvl, nvpair_t *nvp); +bool nvlist_move_nvpair(nvlist_t *nvl, nvpair_t *nvp); void nvlist_set_parent(nvlist_t *nvl, nvpair_t *parent); Modified: head/sys/contrib/libnv/nvlist.c ============================================================================== --- head/sys/contrib/libnv/nvlist.c Tue Aug 11 17:54:51 2015 (r286644) +++ head/sys/contrib/libnv/nvlist.c Tue Aug 11 18:01:10 2015 (r286645) @@ -330,7 +330,7 @@ nvlist_clone(const nvlist_t *nvl) newnvp = nvpair_clone(nvp); if (newnvp == NULL) break; - nvlist_move_nvpair(newnvl, newnvp); + (void)nvlist_move_nvpair(newnvl, newnvp); } if (nvp != NULL) { nvlist_destroy(newnvl); @@ -848,7 +848,8 @@ nvlist_xunpack(const void *buf, size_t s } if (ptr == NULL) goto failed; - nvlist_move_nvpair(nvl, nvp); + if (!nvlist_move_nvpair(nvl, nvp)) + goto failed; if (tmpnvl != NULL) { nvl = tmpnvl; tmpnvl = NULL; @@ -1124,7 +1125,7 @@ nvlist_add_stringv(nvlist_t *nvl, const nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM); ERRNO_SET(nvl->nvl_error); } else { - nvlist_move_nvpair(nvl, nvp); + (void)nvlist_move_nvpair(nvl, nvp); } } @@ -1143,7 +1144,7 @@ nvlist_add_null(nvlist_t *nvl, const cha nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM); ERRNO_SET(nvl->nvl_error); } else { - nvlist_move_nvpair(nvl, nvp); + (void)nvlist_move_nvpair(nvl, nvp); } } @@ -1163,7 +1164,7 @@ nvlist_add_binary(nvlist_t *nvl, const c nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM); ERRNO_SET(nvl->nvl_error); } else { - nvlist_move_nvpair(nvl, nvp); + (void)nvlist_move_nvpair(nvl, nvp); } } @@ -1184,7 +1185,7 @@ nvlist_add_##type(nvlist_t *nvl, const c nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM); \ ERRNO_SET(nvl->nvl_error); \ } else { \ - nvlist_move_nvpair(nvl, nvp); \ + (void)nvlist_move_nvpair(nvl, nvp); \ } \ } @@ -1198,7 +1199,7 @@ NVLIST_ADD(int, descriptor); #undef NVLIST_ADD -void +bool nvlist_move_nvpair(nvlist_t *nvl, nvpair_t *nvp) { @@ -1208,18 +1209,19 @@ nvlist_move_nvpair(nvlist_t *nvl, nvpair if (nvlist_error(nvl) != 0) { nvpair_free(nvp); ERRNO_SET(nvlist_error(nvl)); - return; + return (false); } if ((nvl->nvl_flags & NV_FLAG_NO_UNIQUE) == 0) { if (nvlist_exists(nvl, nvpair_name(nvp))) { nvpair_free(nvp); nvl->nvl_error = EEXIST; ERRNO_SET(nvl->nvl_error); - return; + return (false); } } nvpair_insert(&nvl->nvl_head, nvp, nvl); + return (true); } void @@ -1238,7 +1240,7 @@ nvlist_move_string(nvlist_t *nvl, const nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM); ERRNO_SET(nvl->nvl_error); } else { - nvlist_move_nvpair(nvl, nvp); + (void)nvlist_move_nvpair(nvl, nvp); } } @@ -1259,7 +1261,7 @@ nvlist_move_nvlist(nvlist_t *nvl, const nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM); ERRNO_SET(nvl->nvl_error); } else { - nvlist_move_nvpair(nvl, nvp); + (void)nvlist_move_nvpair(nvl, nvp); } } @@ -1280,7 +1282,7 @@ nvlist_move_descriptor(nvlist_t *nvl, co nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM); ERRNO_SET(nvl->nvl_error); } else { - nvlist_move_nvpair(nvl, nvp); + (void)nvlist_move_nvpair(nvl, nvp); } } #endif @@ -1301,7 +1303,7 @@ nvlist_move_binary(nvlist_t *nvl, const nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM); ERRNO_SET(nvl->nvl_error); } else { - nvlist_move_nvpair(nvl, nvp); + (void)nvlist_move_nvpair(nvl, nvp); } } From owner-svn-src-head@freebsd.org Tue Aug 11 18:17:32 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 60CEB99FCBF; Tue, 11 Aug 2015 18:17:32 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 35F02EF1; Tue, 11 Aug 2015 18:17:32 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BIHWEC064788; Tue, 11 Aug 2015 18:17:32 GMT (envelope-from oshogbo@FreeBSD.org) Received: (from oshogbo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BIHW0Z064787; Tue, 11 Aug 2015 18:17:32 GMT (envelope-from oshogbo@FreeBSD.org) Message-Id: <201508111817.t7BIHW0Z064787@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: oshogbo set sender to oshogbo@FreeBSD.org using -f From: Mariusz Zaborski Date: Tue, 11 Aug 2015 18:17:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286646 - head/sys/contrib/libnv X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 18:17:32 -0000 Author: oshogbo Date: Tue Aug 11 18:17:31 2015 New Revision: 286646 URL: https://svnweb.freebsd.org/changeset/base/286646 Log: If any function fail (the ptr variable will be equal to NULL), we shouldn't return buffer. Instead we should free it and return NULL. Approved by: pjd (mentor) Modified: head/sys/contrib/libnv/nvlist.c Modified: head/sys/contrib/libnv/nvlist.c ============================================================================== --- head/sys/contrib/libnv/nvlist.c Tue Aug 11 18:01:10 2015 (r286645) +++ head/sys/contrib/libnv/nvlist.c Tue Aug 11 18:17:31 2015 (r286646) @@ -629,10 +629,8 @@ nvlist_xpack(const nvlist_t *nvl, int64_ nvpair_init_datasize(nvp); ptr = nvpair_pack_header(nvp, ptr, &left); - if (ptr == NULL) { - nv_free(buf); - return (NULL); - } + if (ptr == NULL) + goto fail; switch (nvpair_type(nvp)) { case NV_TYPE_NULL: ptr = nvpair_pack_null(nvp, ptr, &left); @@ -650,7 +648,7 @@ nvlist_xpack(const nvlist_t *nvl, int64_ tmpnvl = nvpair_get_nvlist(nvp); ptr = nvlist_pack_header(tmpnvl, ptr, &left); if (ptr == NULL) - goto out; + goto fail; tmpnvp = nvlist_first_nvpair(tmpnvl); if (tmpnvp != NULL) { nvl = tmpnvl; @@ -670,10 +668,8 @@ nvlist_xpack(const nvlist_t *nvl, int64_ default: PJDLOG_ABORT("Invalid type (%d).", nvpair_type(nvp)); } - if (ptr == NULL) { - nv_free(buf); - return (NULL); - } + if (ptr == NULL) + goto fail; while ((nvp = nvlist_next_nvpair(nvl, nvp)) == NULL) { cookie = NULL; nvl = nvlist_get_parent(nvl, &cookie); @@ -682,7 +678,7 @@ nvlist_xpack(const nvlist_t *nvl, int64_ nvp = cookie; ptr = nvpair_pack_nvlist_up(ptr, &left); if (ptr == NULL) - goto out; + goto fail; } } @@ -690,6 +686,9 @@ out: if (sizep != NULL) *sizep = size; return (buf); +fail: + nv_free(buf); + return (NULL); } void * From owner-svn-src-head@freebsd.org Tue Aug 11 19:15:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6EEBD99F8F9; Tue, 11 Aug 2015 19:15:56 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5BEA022D; Tue, 11 Aug 2015 19:15:56 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BJFuDD091155; Tue, 11 Aug 2015 19:15:56 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BJFudW091154; Tue, 11 Aug 2015 19:15:56 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508111915.t7BJFudW091154@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 11 Aug 2015 19:15:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286647 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 19:15:56 -0000 Author: mav Date: Tue Aug 11 19:15:55 2015 New Revision: 286647 URL: https://svnweb.freebsd.org/changeset/base/286647 Log: Fix assertion panic caused by combination of r286598 and TRIM. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 18:17:31 2015 (r286646) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 19:15:55 2015 (r286647) @@ -2326,8 +2326,10 @@ arc_hdr_destroy(arc_buf_hdr_t *hdr) * want to re-destroy the header's L2 portion. */ if (HDR_HAS_L2HDR(hdr)) { - trim_map_free(dev->l2ad_vdev, hdr->b_l2hdr.b_daddr, - hdr->b_l2hdr.b_asize, 0); + if (hdr->b_l2hdr.b_daddr != L2ARC_ADDR_UNSET) + trim_map_free(dev->l2ad_vdev, + hdr->b_l2hdr.b_daddr, + hdr->b_l2hdr.b_asize, 0); arc_hdr_l2hdr_destroy(hdr); } @@ -4412,8 +4414,10 @@ arc_release(arc_buf_t *buf, void *tag) * to acquire the l2ad_mtx. */ if (HDR_HAS_L2HDR(hdr)) { - trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev, - hdr->b_l2hdr.b_daddr, hdr->b_l2hdr.b_asize, 0); + if (hdr->b_l2hdr.b_daddr != L2ARC_ADDR_UNSET) + trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev, + hdr->b_l2hdr.b_daddr, + hdr->b_l2hdr.b_asize, 0); arc_hdr_l2hdr_destroy(hdr); } From owner-svn-src-head@freebsd.org Tue Aug 11 19:25:27 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9D3E399FB52; Tue, 11 Aug 2015 19:25:27 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 75262952; Tue, 11 Aug 2015 19:25:27 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BJPRjn095202; Tue, 11 Aug 2015 19:25:27 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BJPRM6095201; Tue, 11 Aug 2015 19:25:27 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508111925.t7BJPRM6095201@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Tue, 11 Aug 2015 19:25:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286648 - head/sys/arm/ti/am335x X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 19:25:27 -0000 Author: ian Date: Tue Aug 11 19:25:26 2015 New Revision: 286648 URL: https://svnweb.freebsd.org/changeset/base/286648 Log: Make this compile again when PPS_SYNC is defined. Also remove a couple comment blocks and constants that no longer apply. Modified: head/sys/arm/ti/am335x/am335x_dmtimer.c Modified: head/sys/arm/ti/am335x/am335x_dmtimer.c ============================================================================== --- head/sys/arm/ti/am335x/am335x_dmtimer.c Tue Aug 11 19:15:55 2015 (r286647) +++ head/sys/arm/ti/am335x/am335x_dmtimer.c Tue Aug 11 19:25:26 2015 (r286648) @@ -101,15 +101,6 @@ __FBSDID("$FreeBSD$"); #define DMT_TSICR_RESET (1 << 1) /* TSICR perform soft reset */ #define DMT_TCAR2 0x48 /* Capture Reg */ -/* - * Use timer 2 for the eventtimer. When PPS support is not compiled in, there's - * no need to use a timer that has an associated capture-input pin, so use timer - * 3 for timecounter. When PPS is compiled in we ignore the default and use - * whichever of timers 4-7 have the capture pin configured. - */ -#define DEFAULT_ET_TIMER 2 -#define DEFAULT_TC_TIMER 3 - #define DMTIMER_READ4(sc, reg) (bus_read_4((sc)->tmr_mem_res, (reg))) #define DMTIMER_WRITE4(sc, reg, val) (bus_write_4((sc)->tmr_mem_res, (reg), (val))) @@ -383,10 +374,10 @@ am335x_dmtimer_pps_init(device_t dev, st TASK_INIT(&sc->pps_task, 0, am335x_dmtimer_process_pps_event, sc); /* Create the PPS cdev. */ + unit = device_get_unit(dev); sc->pps_cdev = make_dev(&am335x_dmtimer_pps_cdevsw, unit, UID_ROOT, GID_WHEEL, 0600, PPS_CDEV_NAME); sc->pps_cdev->si_drv1 = sc; - unit = device_get_unit(sc->pps_cdev); device_printf(dev, "Using DMTimer%d for PPS device /dev/%s%d\n", am335x_dmtimer_pps_module, PPS_CDEV_NAME, unit); @@ -597,12 +588,6 @@ am335x_dmtimer_attach(device_t dev) clk_ident_t timer_id; int enable; - /* - * Note that if this routine returns an error status rather than running - * to completion it makes no attempt to clean up allocated resources; - * the system is essentially dead anyway without functional timers. - */ - sc = device_get_softc(dev); sc->dev = dev; From owner-svn-src-head@freebsd.org Tue Aug 11 21:59:37 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AE3C699FE95; Tue, 11 Aug 2015 21:59:37 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8FF1FBAB; Tue, 11 Aug 2015 21:59:37 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BLxbIq057953; Tue, 11 Aug 2015 21:59:37 GMT (envelope-from jilles@FreeBSD.org) Received: (from jilles@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BLxa6U057950; Tue, 11 Aug 2015 21:59:36 GMT (envelope-from jilles@FreeBSD.org) Message-Id: <201508112159.t7BLxa6U057950@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jilles set sender to jilles@FreeBSD.org using -f From: Jilles Tjoelker Date: Tue, 11 Aug 2015 21:59:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286649 - in head: contrib/netbsd-tests/lib/libc/locale lib/libc/tests/locale X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 21:59:37 -0000 Author: jilles Date: Tue Aug 11 21:59:36 2015 New Revision: 286649 URL: https://svnweb.freebsd.org/changeset/base/286649 Log: Fix and re-enable UTF-8 tests. Modified: head/contrib/netbsd-tests/lib/libc/locale/t_mbrtowc.c head/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c head/lib/libc/tests/locale/Makefile Modified: head/contrib/netbsd-tests/lib/libc/locale/t_mbrtowc.c ============================================================================== --- head/contrib/netbsd-tests/lib/libc/locale/t_mbrtowc.c Tue Aug 11 19:25:26 2015 (r286648) +++ head/contrib/netbsd-tests/lib/libc/locale/t_mbrtowc.c Tue Aug 11 21:59:36 2015 (r286649) @@ -88,13 +88,11 @@ static struct test { }, { "en_US.UTF-8", "[\001\177][\302\200\337\277][\340\240\200\357\277\277][\360\220\200" - "\200\367\277\277\277][\370\210\200\200\200\373\277\277\277\277][\374" - "\204\200\200\200\200\375\277\277\277\277\277]", + "\200\364\217\277\277]", { 0x5b, 0x01, 0x7f, 0x5d, 0x5b, 0x80, 0x7ff, 0x5d, 0x5b, 0x800, 0xffff, - 0x5d, 0x5b, 0x10000, 0x1fffff, 0x5d, 0x5b, 0x200000, 0x3ffffff, 0x5d, - 0x5b, 0x4000000, 0x7fffffff, 0x5d }, - { 1, 1, 1, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 4, 4, 1, 1, 5, 5, 1, 1, 6, 6, 1 }, - 24 + 0x5d, 0x5b, 0x10000, 0x10ffff, 0x5d }, + { 1, 1, 1, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 4, 4, 1 }, + 16 }, { "ja_JP.ISO2022-JP2", "\033$BF|K\1348l\033(BA\033$B$\"\033(BB\033$B$$\033(B", Modified: head/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c ============================================================================== --- head/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c Tue Aug 11 19:25:26 2015 (r286648) +++ head/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c Tue Aug 11 21:59:36 2015 (r286649) @@ -82,12 +82,10 @@ static struct test { { "en_US.UTF-8", "[\001\177][\302\200\337\277][\340\240\200\357\277\277][\360\220\200" - "\200\367\277\277\277][\370\210\200\200\200\373\277\277\277\277][\374" - "\204\200\200\200\200\375\277\277\277\277\277]", + "\200\364\217\277\277]", { 0x5B, 0x01, 0x7F, 0x5D, 0x5B, 0x80, 0x07FF, 0x5D, 0x5B, 0x0800, - 0xFFFF, 0x5D, 0x5B, 0x10000, 0x1FFFFF, 0x5D, 0x5B, 0x200000, - 0x3FFFFFF, 0x5D, 0x5B, 0x4000000, 0x7FFFFFFF, 0x5D, 0x0A + 0xFFFF, 0x5D, 0x5B, 0x10000, 0x10FFFF, 0x5D, 0x0A }, { 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1 Modified: head/lib/libc/tests/locale/Makefile ============================================================================== --- head/lib/libc/tests/locale/Makefile Tue Aug 11 19:25:26 2015 (r286648) +++ head/lib/libc/tests/locale/Makefile Tue Aug 11 21:59:36 2015 (r286649) @@ -6,7 +6,7 @@ TESTSDIR= ${TESTSBASE}/lib/libc/locale NETBSD_ATF_TESTS_C= io_test NETBSD_ATF_TESTS_C+= mbrtowc_test -#NETBSD_ATF_TESTS_C+= mbstowcs_test +NETBSD_ATF_TESTS_C+= mbstowcs_test NETBSD_ATF_TESTS_C+= mbsnrtowcs_test NETBSD_ATF_TESTS_C+= mbtowc_test NETBSD_ATF_TESTS_C+= wcscspn_test From owner-svn-src-head@freebsd.org Tue Aug 11 22:29:44 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 576D999F61A; Tue, 11 Aug 2015 22:29:44 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: from mail-wi0-x235.google.com (mail-wi0-x235.google.com [IPv6:2a00:1450:400c:c05::235]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E115C177; Tue, 11 Aug 2015 22:29:43 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: by wijp15 with SMTP id p15so194880809wij.0; Tue, 11 Aug 2015 15:29:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=VV02d0mUizr3Zq+0CbGgtb30Oi9AD7E5QKBv8gI5Zbk=; b=yeIWIg/Wj5FW4RBr2S9MKkYu5VFL9zmxA2Z4rEP4rDwNPwtzWhG2mXRoDzLnHP0bLA 9Skh4q1pQD3+N+Jo1snXyw7t6Ir/V9SOnN1lBS9QVVAQb4tz5CNR7G9l92b6uncOWng6 Z0GNsalStgr7l2PfN5d22FXbcdbxXfuuJsQM2IWuheFSSThZVlaypl7CcUZl5tLAzcpT FOKJxOVrxbIyCfXgmMPNpxkUycH9ameghlAHWML2e+XVN1NtN4BCuUTZtHCFte3lBlXW adxEjJ7ZzvS6/U9iIaMjqgB4fXcOblr62IFcyCW6/R2eacKneRWM73ocpP6Dxnbwy9Gm mDmA== X-Received: by 10.181.13.230 with SMTP id fb6mr39084302wid.47.1439332182395; Tue, 11 Aug 2015 15:29:42 -0700 (PDT) Received: from ivaldir.etoilebsd.net ([2001:41d0:8:db4c::1]) by smtp.gmail.com with ESMTPSA id wx9sm4964583wjb.6.2015.08.11.15.29.41 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Aug 2015 15:29:41 -0700 (PDT) Sender: Baptiste Daroussin Date: Wed, 12 Aug 2015 00:29:39 +0200 From: Baptiste Daroussin To: Jilles Tjoelker Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286649 - in head: contrib/netbsd-tests/lib/libc/locale lib/libc/tests/locale Message-ID: <20150811222938.GE10390@ivaldir.etoilebsd.net> References: <201508112159.t7BLxa6U057950@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="pE2VAHO2njSJCslu" Content-Disposition: inline In-Reply-To: <201508112159.t7BLxa6U057950@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 22:29:44 -0000 --pE2VAHO2njSJCslu Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Aug 11, 2015 at 09:59:36PM +0000, Jilles Tjoelker wrote: > Author: jilles > Date: Tue Aug 11 21:59:36 2015 > New Revision: 286649 > URL: https://svnweb.freebsd.org/changeset/base/286649 >=20 > Log: > Fix and re-enable UTF-8 tests. >=20 Thank you very much I should have fixed it myself earlier. Sorry. Bapt --pE2VAHO2njSJCslu Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEARECAAYFAlXKd1IACgkQ8kTtMUmk6EzrkgCgpqD0RWccPcPIo1DWcEiHQyen HeUAoKzSTSEukF/M8rhnvXK5ZGBw50ug =ksTp -----END PGP SIGNATURE----- --pE2VAHO2njSJCslu-- From owner-svn-src-head@freebsd.org Tue Aug 11 22:40:45 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C004599F8E3; Tue, 11 Aug 2015 22:40:45 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-qg0-x235.google.com (mail-qg0-x235.google.com [IPv6:2607:f8b0:400d:c04::235]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7E698A77; Tue, 11 Aug 2015 22:40:45 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by qged69 with SMTP id d69so150123779qge.0; Tue, 11 Aug 2015 15:40:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=yjpGhXAM5wn+XvMS47uSq3YUf15lOg0lNDh7C9S+hA0=; b=q3Ptr6nfN8TMPJ6Pz1O2mtSeHCSGrZ4YFurBtsIKzFkGIWAtz0qUd0ZOal1zHI0R7+ wvpCmo4Oui9oadRHrbCfzzH2542XrZLy7+yETvWwAxdi0CqkYsynz/B6EQJhYecPVcRc SHkDTORGYfIeweMjktdoaU/r6BoGvyUYBkxoEP7sjYHaLTJ9BPuQ/3Rb2ZVFTis3MNkJ wFf8KjYGxNoENHkU0f/PnSqxcJTbmR3BEdrllZwXa559CHXpK13vIrLX7Fmy9jdNto0/ n+jsplZhJHIiHEIwdzeXMCxZ6JgRBDhO0EhX0hAbszGpEOwhI5pmOweBtIDME/e7toO2 wzVQ== MIME-Version: 1.0 X-Received: by 10.140.194.133 with SMTP id p127mr56060553qha.38.1439332844451; Tue, 11 Aug 2015 15:40:44 -0700 (PDT) Received: by 10.140.98.73 with HTTP; Tue, 11 Aug 2015 15:40:44 -0700 (PDT) In-Reply-To: <201508112159.t7BLxa6U057950@repo.freebsd.org> References: <201508112159.t7BLxa6U057950@repo.freebsd.org> Date: Tue, 11 Aug 2015 15:40:44 -0700 Message-ID: Subject: Re: svn commit: r286649 - in head: contrib/netbsd-tests/lib/libc/locale lib/libc/tests/locale From: NGie Cooper To: Jilles Tjoelker Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 22:40:45 -0000 On Tue, Aug 11, 2015 at 2:59 PM, Jilles Tjoelker wrote: > Author: jilles > Date: Tue Aug 11 21:59:36 2015 > New Revision: 286649 > URL: https://svnweb.freebsd.org/changeset/base/286649 > > Log: > Fix and re-enable UTF-8 tests. > > Modified: > head/contrib/netbsd-tests/lib/libc/locale/t_mbrtowc.c > head/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c > head/lib/libc/tests/locale/Makefile I would have appreciated a CR :(... From owner-svn-src-head@freebsd.org Tue Aug 11 22:43:29 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 94C1899FA07; Tue, 11 Aug 2015 22:43:29 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7F9CACBA; Tue, 11 Aug 2015 22:43:29 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7BMhTRY078769; Tue, 11 Aug 2015 22:43:29 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7BMhTk3078768; Tue, 11 Aug 2015 22:43:29 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201508112243.t7BMhTk3078768@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Tue, 11 Aug 2015 22:43:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286650 - head/etc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2015 22:43:29 -0000 Author: delphij Date: Tue Aug 11 22:43:28 2015 New Revision: 286650 URL: https://svnweb.freebsd.org/changeset/base/286650 Log: Disable building INDEX-9 and INDEX-10 because they are not useful for users who uses only FreeBSD -CURRENT, and building these indexes are only useful to those who share ports tree across different FreeBSD releases, and system administrator with that need can always enable this behavior. MFC after: 2 weeks (only the principals, not actual change) Modified: head/etc/portsnap.conf Modified: head/etc/portsnap.conf ============================================================================== --- head/etc/portsnap.conf Tue Aug 11 21:59:36 2015 (r286649) +++ head/etc/portsnap.conf Tue Aug 11 22:43:28 2015 (r286650) @@ -30,6 +30,6 @@ KEYPRINT=9b5feee6d69f170e3dd0a2c8e469ddb # REFUSE korean polish portuguese russian ukrainian vietnamese # List of INDEX files to build and the DESCRIBE file to use for each -INDEX INDEX-9 DESCRIBE.9 -INDEX INDEX-10 DESCRIBE.10 +#INDEX INDEX-9 DESCRIBE.9 +#INDEX INDEX-10 DESCRIBE.10 INDEX INDEX-11 DESCRIBE.11 From owner-svn-src-head@freebsd.org Wed Aug 12 00:49:21 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3833D99D98E; Wed, 12 Aug 2015 00:49:21 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 287EB7F6; Wed, 12 Aug 2015 00:49:21 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C0nL8x029799; Wed, 12 Aug 2015 00:49:21 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C0nLPI029798; Wed, 12 Aug 2015 00:49:21 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508120049.t7C0nLPI029798@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Wed, 12 Aug 2015 00:49:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286651 - head/lib/libc/string X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 00:49:21 -0000 Author: araujo Date: Wed Aug 12 00:49:20 2015 New Revision: 286651 URL: https://svnweb.freebsd.org/changeset/base/286651 Log: Describe that bcopy(3) is deprecated and marked as LEGACY in POSIX.1-2001 and removed from the specification in POSIX.1-2008. New softwares shall use memcpy(3) or memmove(3). Differential Revision: D3358 Reviewed by: wblock Approved by: rodrigc Sponsored by: gandi.net Modified: head/lib/libc/string/bcopy.3 Modified: head/lib/libc/string/bcopy.3 ============================================================================== --- head/lib/libc/string/bcopy.3 Tue Aug 11 22:43:28 2015 (r286650) +++ head/lib/libc/string/bcopy.3 Wed Aug 12 00:49:20 2015 (r286651) @@ -31,7 +31,7 @@ .\" @(#)bcopy.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd June 4, 1993 +.Dd August 11, 2015 .Dt BCOPY 3 .Os .Sh NAME @@ -57,6 +57,20 @@ The two strings may overlap. If .Fa len is zero, no bytes are copied. +.Pp +This function is deprecated (marked as LEGACY in +POSIX.1-2001): use +.Xr memcpy 3 +or +.Xr memmove 3 +in new programs. +Note that the first two arguments are +interchanged for +.Xr memcpy 3 +and +.Xr memmove 3 . +POSIX.1-2008 removes the specification of +.Fn bcopy . .Sh SEE ALSO .Xr memccpy 3 , .Xr memcpy 3 , From owner-svn-src-head@freebsd.org Wed Aug 12 01:35:38 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 702A599E60E; Wed, 12 Aug 2015 01:35:38 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from mail-oi0-x22a.google.com (mail-oi0-x22a.google.com [IPv6:2607:f8b0:4003:c06::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 369641ED1; Wed, 12 Aug 2015 01:35:38 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by oihn130 with SMTP id n130so1618426oih.2; Tue, 11 Aug 2015 18:35:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=XkwK9jZVkAzWvRBeR7wS+RI6L37Qk3JNRJrYq8+/MbA=; b=pgo/YMH90tqpo+DcGz0igZOMrPPbgTBaGT+U0ygOurQ++A47dj2UJfHBhlsTY65sSt TsxMyrJJqf+MLNJctaLmeOdMd8BUkOyYpYxbnshwcrxdafhIWnJKFdHyKDAZ39bqMOzn E2zobmdzu4Grd3qmLHh1V687nr7j2FwUqMk/gCMJqoa2uKg+OduYCPaQDsteYZMm8q2d g1V1FrIzxZtdG8//GM0kRvWwRittvwMZlf+idTbXZBOx1hnhtPfTeG4+0dUN2PFfWXA5 9KPg8T59yEoNal6fiTfPLy/ON9nUHs+AgN2eCvVpPFnX1foxDODdIcIs/Z4EFoMSfMWC 6Ctw== MIME-Version: 1.0 X-Received: by 10.202.232.67 with SMTP id f64mr27120168oih.63.1439343337426; Tue, 11 Aug 2015 18:35:37 -0700 (PDT) Received: by 10.202.11.193 with HTTP; Tue, 11 Aug 2015 18:35:37 -0700 (PDT) Reply-To: araujo@FreeBSD.org In-Reply-To: <201508120049.t7C0nLPI029798@repo.freebsd.org> References: <201508120049.t7C0nLPI029798@repo.freebsd.org> Date: Wed, 12 Aug 2015 09:35:37 +0800 Message-ID: Subject: Re: svn commit: r286651 - head/lib/libc/string From: Marcelo Araujo To: Marcelo Araujo Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 01:35:38 -0000 2015-08-12 8:49 GMT+08:00 Marcelo Araujo : > Author: araujo > Date: Wed Aug 12 00:49:20 2015 > New Revision: 286651 > URL: https://svnweb.freebsd.org/changeset/base/286651 > > Log: > Describe that bcopy(3) is deprecated and marked as LEGACY in > POSIX.1-2001 and removed from the specification in POSIX.1-2008. > New softwares shall use memcpy(3) or memmove(3). > > Differential Revision: D3358 > Reviewed by: wblock > Approved by: rodrigc > Sponsored by: gandi.net > > Forgot to add: Approved by: rodrigc (mentor) Best Regards, -- -- Marcelo Araujo (__)araujo@FreeBSD.org \\\'',)http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) From owner-svn-src-head@freebsd.org Wed Aug 12 01:45:03 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5633699E8BC; Wed, 12 Aug 2015 01:45:03 +0000 (UTC) (envelope-from crodr001@gmail.com) Received: from mail-yk0-x231.google.com (mail-yk0-x231.google.com [IPv6:2607:f8b0:4002:c07::231]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 179F57CC; Wed, 12 Aug 2015 01:45:03 +0000 (UTC) (envelope-from crodr001@gmail.com) Received: by ykay144 with SMTP id y144so2651313yka.3; Tue, 11 Aug 2015 18:45:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=zy2xff5a+3CZEMNtYlzxsN+Q3W32jTeuluy+Znit7QI=; b=Vg5cVUsn3iLRk42WhqTESfZymPCZA6NBQD45+fEy0QqXzTvFtKCYleftKrQLznl9Z7 siiCryj0xiwIMTuFkkPXTPPWjuu+DecBqEDiBd+kS1+ifN7FXZKIcElmtJixZk2Dgtxs lqqpWuEl3or7XjFv2GVI2A+CB2CAZfrCQHoAchcEZcX0EKY5NKWIRhyyrd+gLYUz71j1 vWZWd4TJJV9a6ChFEGMLEAjejMu4CvRRr/s9EK5hmmeYzGf9YN/XzX+Vli3ArlmHcRVo +O+WFWR+G3E/DRGTBqk3WnlWJOqk217AQYx5PVuidXHEVm2p6TzQIvL6D6IJf0BsSP7V 7BqA== MIME-Version: 1.0 X-Received: by 10.13.244.195 with SMTP id d186mr31546100ywf.73.1439343902098; Tue, 11 Aug 2015 18:45:02 -0700 (PDT) Sender: crodr001@gmail.com Received: by 10.37.79.2 with HTTP; Tue, 11 Aug 2015 18:45:02 -0700 (PDT) In-Reply-To: <201508112159.t7BLxa6U057950@repo.freebsd.org> References: <201508112159.t7BLxa6U057950@repo.freebsd.org> Date: Tue, 11 Aug 2015 18:45:02 -0700 X-Google-Sender-Auth: mrvu0ye8DXdyE3k__RUxvf96r6Q Message-ID: Subject: Re: svn commit: r286649 - in head: contrib/netbsd-tests/lib/libc/locale lib/libc/tests/locale From: Craig Rodrigues To: Jilles Tjoelker Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 01:45:03 -0000 On Tue, Aug 11, 2015 at 2:59 PM, Jilles Tjoelker wrote: > Author: jilles > Date: Tue Aug 11 21:59:36 2015 > New Revision: 286649 > URL: https://svnweb.freebsd.org/changeset/base/286649 > > Log: > Fix and re-enable UTF-8 tests. > > Modified: > head/contrib/netbsd-tests/lib/libc/locale/t_mbrtowc.c > head/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c > head/lib/libc/tests/locale/Makefile > > Thanks for fixing this. What is the procedure that FreeBSD developers need to follow to push this kind of change upstream to NetBSD? -- Craig From owner-svn-src-head@freebsd.org Wed Aug 12 03:03:52 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 093E5998C0A; Wed, 12 Aug 2015 03:03:52 +0000 (UTC) (envelope-from jmmv@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E6D321203; Wed, 12 Aug 2015 03:03:51 +0000 (UTC) (envelope-from jmmv@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C33pWs087974; Wed, 12 Aug 2015 03:03:51 GMT (envelope-from jmmv@FreeBSD.org) Received: (from jmmv@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C33p40087973; Wed, 12 Aug 2015 03:03:51 GMT (envelope-from jmmv@FreeBSD.org) Message-Id: <201508120303.t7C33p40087973@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jmmv set sender to jmmv@FreeBSD.org using -f From: Julio Merino Date: Wed, 12 Aug 2015 03:03:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286652 - head/tools/build/mk X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 03:03:52 -0000 Author: jmmv Date: Wed Aug 12 03:03:51 2015 New Revision: 286652 URL: https://svnweb.freebsd.org/changeset/base/286652 Log: Mark usr/include/c++/v1/tr1 as obsolete The directory usr/include/c++/v1 was marked as obsolete but its tr1 subdir was not, resulting in a removal error in delete-old. Modified: head/tools/build/mk/OptionalObsoleteFiles.inc Modified: head/tools/build/mk/OptionalObsoleteFiles.inc ============================================================================== --- head/tools/build/mk/OptionalObsoleteFiles.inc Wed Aug 12 00:49:20 2015 (r286651) +++ head/tools/build/mk/OptionalObsoleteFiles.inc Wed Aug 12 03:03:51 2015 (r286652) @@ -4017,6 +4017,7 @@ OLD_FILES+=usr/lib32/libcxxrt.a OLD_FILES+=usr/lib32/libcxxrt.so OLD_LIBS+=usr/lib32/libcxxrt.so.1 OLD_FILES+=usr/lib32/libcxxrt_p.a +OLD_DIRS+=usr/include/c++/v1/tr1 OLD_DIRS+=usr/include/c++/v1/experimental OLD_DIRS+=usr/include/c++/v1/ext OLD_DIRS+=usr/include/c++/v1 From owner-svn-src-head@freebsd.org Wed Aug 12 03:52:04 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5D7E599F794; Wed, 12 Aug 2015 03:52:04 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail104.syd.optusnet.com.au (mail104.syd.optusnet.com.au [211.29.132.246]) by mx1.freebsd.org (Postfix) with ESMTP id 1E17A6C6; Wed, 12 Aug 2015 03:52:03 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from c211-30-166-197.carlnfd1.nsw.optusnet.com.au (c211-30-166-197.carlnfd1.nsw.optusnet.com.au [211.30.166.197]) by mail104.syd.optusnet.com.au (Postfix) with ESMTPS id B0451424CF4; Wed, 12 Aug 2015 13:51:59 +1000 (AEST) Date: Wed, 12 Aug 2015 13:51:59 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Marcelo Araujo cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286651 - head/lib/libc/string In-Reply-To: <201508120049.t7C0nLPI029798@repo.freebsd.org> Message-ID: <20150812125431.P917@besplex.bde.org> References: <201508120049.t7C0nLPI029798@repo.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=XMDNMlVE c=1 sm=1 tr=0 a=KA6XNC2GZCFrdESI5ZmdjQ==:117 a=PO7r1zJSAAAA:8 a=JzwRw_2MAAAA:8 a=kj9zAlcOel0A:10 a=TMkQJ6Ldn3odNKDWf7gA:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 03:52:04 -0000 On Wed, 12 Aug 2015, Marcelo Araujo wrote: > Log: > Describe that bcopy(3) is deprecated and marked as LEGACY in > POSIX.1-2001 and removed from the specification in POSIX.1-2008. Only new and old POSIX software and all Standard C software. Standard C never had bcopy(). POSIX didn't have it until API bloat restored many old mistakes. But BSD has it. It is memmove(9undoc) that is deprecated (but brought back by KPI bloat) in the kernel in FreeBSD, but this is about userland. Only portability requires preferring mememove(3). > New softwares shall use memcpy(3) or memmove(3). Bad advice. bcopy() is only similar to memmove(). > Modified: > head/lib/libc/string/bcopy.3 > > Modified: head/lib/libc/string/bcopy.3 > ============================================================================== > --- head/lib/libc/string/bcopy.3 Tue Aug 11 22:43:28 2015 (r286650) > +++ head/lib/libc/string/bcopy.3 Wed Aug 12 00:49:20 2015 (r286651) > @@ -31,7 +31,7 @@ > .\" @(#)bcopy.3 8.1 (Berkeley) 6/4/93 > .\" $FreeBSD$ > .\" > -.Dd June 4, 1993 > +.Dd August 11, 2015 > .Dt BCOPY 3 > .Os > .Sh NAME > @@ -57,6 +57,20 @@ The two strings may overlap. The strings must not overlap for memcpy(). > If > .Fa len > is zero, no bytes are copied. > +.Pp > +This function is deprecated (marked as LEGACY in > +POSIX.1-2001): use > +.Xr memcpy 3 > +or > +.Xr memmove 3 > +in new programs. Bad advice, since these functions are not similar, and it doesn't follow from deprecation all the versions of POSIX that have it that it is deprecated in FreeBSD. It follows from the nonexistence of the function in POSIX before 2001 and after 2008 that the function is more than deprecated. > +Note that the first two arguments are > +interchanged for > +.Xr memcpy 3 > +and > +.Xr memmove 3 . The first 2 args are not interchanged for memcpy() and memmove(). They are only interchanged for bcopy() and memmove(). > +POSIX.1-2008 removes the specification of > +.Fn bcopy . > .Sh SEE ALSO > .Xr memccpy 3 , > .Xr memcpy 3 , Removing all mention of memcpy() (except the one in the Xr) would fix half of the bugs. POSIX has much better wording for this, as for most things. From a 2001 draft: X 5112 APPLICATION USAGE X 5113 memmove( ) is preferred over this function. When bcopy() was only deprecated, it was un-preferred but not banned. X 5114 The following are approximately equivalent (note the order of the arguments): X 5115 bcopy(s1,s2,n) = memmove(s2,s1,n) X 5116 For maximum portability, it is recommended to replace the function call to bcopy( ) as follows: X 5117 #define bcopy(b1,b2,len) (memmove((b2), (b1), (len)), (void) 0) No mention of memcpy(), but an example of how to translate with so much attention to details that it is hard to read. It even translates the return type. X X 5118 RATIONALE X 5119 None. X X 5120 FUTURE DIRECTIONS X 5121 This function may be withdrawn in a future version. It was apparently withdrawn in 2008. X X 5122 SEE ALSO X 5123 memmove( ), the Base Definitions volume of IEEE Std 1003.1-200x, No mention of memcpy() here either. I don't like long lists of Xr's to vaguely related man pages, with no hint of the exact relation, in FreeBSD man pages. A reader wishing to know any relation at all would have to read all the man pages in the long list to see some relation, and understand all their details to see the exact relation. X X 5124 CHANGE HISTORY X 5125 First released in Issue 4, Version 2. X X 5126 Issue 5 X 5127 Moved from X/OPEN UNIX extension to BASE. X X 5128 Issue 6 X 5129 This function is marked LEGACY. So bcopy() was apparently XSI in Issue 4, BASE in Issue 5, and BASE plus LEGACY in Issue 6. So why is it still XSI in 2001? I don't know the dates of the Issues. Oops, this is because only the include with the prototype for bcopy() is XSI in 2001. It doesn't exist in POSIX.1-1996. Bruce From owner-svn-src-head@freebsd.org Wed Aug 12 04:03:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1DD9E99FA41; Wed, 12 Aug 2015 04:03:05 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0EC8EB21; Wed, 12 Aug 2015 04:03:05 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C434w5012465; Wed, 12 Aug 2015 04:03:04 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C434Wq012464; Wed, 12 Aug 2015 04:03:04 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508120403.t7C434Wq012464@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Wed, 12 Aug 2015 04:03:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286653 - head/sys/dev/uart X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 04:03:05 -0000 Author: marcel Date: Wed Aug 12 04:03:04 2015 New Revision: 286653 URL: https://svnweb.freebsd.org/changeset/base/286653 Log: Use bus_alloc_resource_any(), rather than bus_alloc_resource() with start 0 and end ~0. This avoids confusion WRT to what the value of length can or should be. Modified: head/sys/dev/uart/uart_core.c Modified: head/sys/dev/uart/uart_core.c ============================================================================== --- head/sys/dev/uart/uart_core.c Wed Aug 12 03:03:51 2015 (r286652) +++ head/sys/dev/uart/uart_core.c Wed Aug 12 04:03:04 2015 (r286653) @@ -474,14 +474,13 @@ uart_bus_probe(device_t dev, int regshft */ sc->sc_rrid = rid; sc->sc_rtype = SYS_RES_IOPORT; - sc->sc_rres = bus_alloc_resource(dev, sc->sc_rtype, &sc->sc_rrid, - 0, ~0, uart_getrange(sc->sc_class), RF_ACTIVE); + sc->sc_rres = bus_alloc_resource_any(dev, sc->sc_rtype, &sc->sc_rrid, + RF_ACTIVE); if (sc->sc_rres == NULL) { sc->sc_rrid = rid; sc->sc_rtype = SYS_RES_MEMORY; - sc->sc_rres = bus_alloc_resource(dev, sc->sc_rtype, - &sc->sc_rrid, 0, ~0, uart_getrange(sc->sc_class), - RF_ACTIVE); + sc->sc_rres = bus_alloc_resource_any(dev, sc->sc_rtype, + &sc->sc_rrid, RF_ACTIVE); if (sc->sc_rres == NULL) return (ENXIO); } @@ -556,8 +555,8 @@ uart_bus_attach(device_t dev) * Re-allocate. We expect that the softc contains the information * collected by uart_bus_probe() intact. */ - sc->sc_rres = bus_alloc_resource(dev, sc->sc_rtype, &sc->sc_rrid, - 0, ~0, uart_getrange(sc->sc_class), RF_ACTIVE); + sc->sc_rres = bus_alloc_resource_any(dev, sc->sc_rtype, &sc->sc_rrid, + RF_ACTIVE); if (sc->sc_rres == NULL) { mtx_destroy(&sc->sc_hwmtx_s); return (ENXIO); From owner-svn-src-head@freebsd.org Wed Aug 12 04:06:10 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4E3FA99FBAD; Wed, 12 Aug 2015 04:06:10 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from mail-ob0-x234.google.com (mail-ob0-x234.google.com [IPv6:2607:f8b0:4003:c01::234]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 12F79CB7; Wed, 12 Aug 2015 04:06:10 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by obbop1 with SMTP id op1so4217496obb.2; Tue, 11 Aug 2015 21:06:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=83/zYcjJmGjthccb79rf6Vb8MOiZRDgjBbvbUc6B+CM=; b=JihcQJ5WkKlzcZ0vsM9rCGieBkzzn4TKdJOsT3xeOkf2+zaqKVS63035YqvRrPJgdm 3UFPDGcnUNMM+OjLJARwJHnruJj2dJwH55i6Sful6CiCGVpH5da14wuwhXGxGPTPmtL+ EmZg+I+q0t2MfjY6EJCvUkaus22nH+lMajUEod1CQcXWJln5tCOfb8skKWgSTpA75sI5 C3iKI+C+jR7cqo4MELcmkDPPJNbxTEuMhjQhgw9Qy+sjvUnLxUHzUByjXXJf9olGJAEq xYGD4vuX/ezsbk93ufe0Pw/37+8ZoSoEjL0SmSy3wRQBY2t5eiSdpihI46YZ4HtKsPlH 3u+Q== MIME-Version: 1.0 X-Received: by 10.182.211.66 with SMTP id na2mr29693886obc.43.1439352369390; Tue, 11 Aug 2015 21:06:09 -0700 (PDT) Received: by 10.202.11.193 with HTTP; Tue, 11 Aug 2015 21:06:09 -0700 (PDT) Reply-To: araujo@FreeBSD.org In-Reply-To: <20150812125431.P917@besplex.bde.org> References: <201508120049.t7C0nLPI029798@repo.freebsd.org> <20150812125431.P917@besplex.bde.org> Date: Wed, 12 Aug 2015 12:06:09 +0800 Message-ID: Subject: Re: svn commit: r286651 - head/lib/libc/string From: Marcelo Araujo To: Bruce Evans Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 04:06:10 -0000 Hello bde@ Maybe change it as it is in NetBSD would be better: http://netbsd.gw.com/cgi-bin/man-cgi?bcopy+3+NetBSD-current They still mention about memcpy(3). However, I need to check their implementation. What do you think? 2015-08-12 11:51 GMT+08:00 Bruce Evans : > On Wed, 12 Aug 2015, Marcelo Araujo wrote: > > Log: >> Describe that bcopy(3) is deprecated and marked as LEGACY in >> POSIX.1-2001 and removed from the specification in POSIX.1-2008. >> > > Only new and old POSIX software and all Standard C software. Standard > C never had bcopy(). POSIX didn't have it until API bloat restored > many old mistakes. But BSD has it. It is memmove(9undoc) that is > deprecated (but brought back by KPI bloat) in the kernel in FreeBSD, > but this is about userland. Only portability requires preferring > mememove(3). > > New softwares shall use memcpy(3) or memmove(3). >> > > Bad advice. bcopy() is only similar to memmove(). > > Modified: >> head/lib/libc/string/bcopy.3 >> >> Modified: head/lib/libc/string/bcopy.3 >> >> ============================================================================== >> --- head/lib/libc/string/bcopy.3 Tue Aug 11 22:43:28 2015 >> (r286650) >> +++ head/lib/libc/string/bcopy.3 Wed Aug 12 00:49:20 2015 >> (r286651) >> @@ -31,7 +31,7 @@ >> .\" @(#)bcopy.3 8.1 (Berkeley) 6/4/93 >> .\" $FreeBSD$ >> .\" >> -.Dd June 4, 1993 >> +.Dd August 11, 2015 >> .Dt BCOPY 3 >> .Os >> .Sh NAME >> @@ -57,6 +57,20 @@ The two strings may overlap. >> > > The strings must not overlap for memcpy(). > > If >> .Fa len >> is zero, no bytes are copied. >> +.Pp >> +This function is deprecated (marked as LEGACY in >> +POSIX.1-2001): use >> +.Xr memcpy 3 >> +or >> +.Xr memmove 3 >> +in new programs. >> > > Bad advice, since these functions are not similar, and it doesn't follow > from deprecation all the versions of POSIX that have it that it is > deprecated in FreeBSD. It follows from the nonexistence of the function > in POSIX before 2001 and after 2008 that the function is more than > deprecated. > > +Note that the first two arguments are >> +interchanged for >> +.Xr memcpy 3 >> +and >> +.Xr memmove 3 . >> > > The first 2 args are not interchanged for memcpy() and memmove(). They > are only interchanged for bcopy() and memmove(). > > > +POSIX.1-2008 removes the specification of >> +.Fn bcopy . >> .Sh SEE ALSO >> .Xr memccpy 3 , >> .Xr memcpy 3 , >> > > Removing all mention of memcpy() (except the one in the Xr) would fix half > of the bugs. > > POSIX has much better wording for this, as for most things. From a 2001 > draft: > > X 5112 APPLICATION USAGE > X 5113 memmove( ) is preferred over this function. > > When bcopy() was only deprecated, it was un-preferred but not banned. > > > X 5114 The following are approximately equivalent (note the > order of the arguments): > X 5115 bcopy(s1,s2,n) = memmove(s2,s1,n) > X 5116 For maximum portability, it is recommended to replace > the function call to bcopy( ) as follows: > X 5117 #define bcopy(b1,b2,len) (memmove((b2), (b1), (len)), > (void) 0) > > No mention of memcpy(), but an example of how to translate with so much > attention to details that it is hard to read. It even translates the > return type. > > X X 5118 RATIONALE > X 5119 None. > X X 5120 FUTURE DIRECTIONS > X 5121 This function may be withdrawn in a future version. > > It was apparently withdrawn in 2008. > > X X 5122 SEE ALSO > X 5123 memmove( ), the Base Definitions volume of IEEE Std > 1003.1-200x, > > No mention of memcpy() here either. I don't like long lists of Xr's to > vaguely related man pages, with no hint of the exact relation, in FreeBSD > man pages. A reader wishing to know any relation at all would have to > read all the man pages in the long list to see some relation, and > understand > all their details to see the exact relation. > > X X 5124 CHANGE HISTORY > X 5125 First released in Issue 4, Version 2. > X X 5126 Issue 5 > X 5127 Moved from X/OPEN UNIX extension to BASE. > X X 5128 Issue 6 > X 5129 This function is marked LEGACY. > > So bcopy() was apparently XSI in Issue 4, BASE in Issue 5, and > BASE plus LEGACY in Issue 6. So why is it still XSI in 2001? > I don't know the dates of the Issues. Oops, this is because only > the include with the prototype for bcopy() is XSI in > 2001. It doesn't exist in POSIX.1-1996. > > Bruce > -- -- Marcelo Araujo (__)araujo@FreeBSD.org \\\'',)http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) From owner-svn-src-head@freebsd.org Wed Aug 12 07:59:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 83A6099F98F; Wed, 12 Aug 2015 07:59:01 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 676FDF18; Wed, 12 Aug 2015 07:59:01 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C7x1YH006915; Wed, 12 Aug 2015 07:59:01 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C7x12L006914; Wed, 12 Aug 2015 07:59:01 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508120759.t7C7x12L006914@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 12 Aug 2015 07:59:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286654 - head/sys/compat/cloudabi64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 07:59:01 -0000 Author: ed Date: Wed Aug 12 07:59:00 2015 New Revision: 286654 URL: https://svnweb.freebsd.org/changeset/base/286654 Log: Make poll() and kqueue() on CloudABI work. This change implements two functions, cloudabi64_kevent_copyin() and cloudabi64_kevent_copyout(), that convert CloudABI structures to FreeBSD's struct kevent. CloudABI uses two structures: subscription_t and event_t. The former is used for input, whereas the latter is used for output. Unlike struct kevent, fields aren't overloaded for multiple purposes or for separate event types. For poll() we call into the newly introduced kern_kevent_anonymous() function that allows us to poll without a file descriptor. This function is not only used by poll(), but also by functions such as sleep() and clock_nanosleep(). Reviewed by: jmg Obtained from: https://github.com/NuxiNL/freebsd Differential Revision: https://reviews.freebsd.org/D3308 Modified: head/sys/compat/cloudabi64/cloudabi64_poll.c Modified: head/sys/compat/cloudabi64/cloudabi64_poll.c ============================================================================== --- head/sys/compat/cloudabi64/cloudabi64_poll.c Wed Aug 12 04:03:04 2015 (r286653) +++ head/sys/compat/cloudabi64/cloudabi64_poll.c Wed Aug 12 07:59:00 2015 (r286654) @@ -26,22 +26,260 @@ #include __FBSDID("$FreeBSD$"); +#include +#include +#include + +#include + #include #include +/* Converts a FreeBSD signal number to a CloudABI signal number. */ +static cloudabi_signal_t +convert_signal(int sig) +{ + static const cloudabi_signal_t signals[] = { + [SIGABRT] = CLOUDABI_SIGABRT, + [SIGALRM] = CLOUDABI_SIGALRM, + [SIGBUS] = CLOUDABI_SIGBUS, + [SIGCHLD] = CLOUDABI_SIGCHLD, + [SIGCONT] = CLOUDABI_SIGCONT, + [SIGFPE] = CLOUDABI_SIGFPE, + [SIGHUP] = CLOUDABI_SIGHUP, + [SIGILL] = CLOUDABI_SIGILL, + [SIGINT] = CLOUDABI_SIGINT, + [SIGKILL] = CLOUDABI_SIGKILL, + [SIGPIPE] = CLOUDABI_SIGPIPE, + [SIGQUIT] = CLOUDABI_SIGQUIT, + [SIGSEGV] = CLOUDABI_SIGSEGV, + [SIGSTOP] = CLOUDABI_SIGSTOP, + [SIGSYS] = CLOUDABI_SIGSYS, + [SIGTERM] = CLOUDABI_SIGTERM, + [SIGTRAP] = CLOUDABI_SIGTRAP, + [SIGTSTP] = CLOUDABI_SIGTSTP, + [SIGTTIN] = CLOUDABI_SIGTTIN, + [SIGTTOU] = CLOUDABI_SIGTTOU, + [SIGURG] = CLOUDABI_SIGURG, + [SIGUSR1] = CLOUDABI_SIGUSR1, + [SIGUSR2] = CLOUDABI_SIGUSR2, + [SIGVTALRM] = CLOUDABI_SIGVTALRM, + [SIGXCPU] = CLOUDABI_SIGXCPU, + [SIGXFSZ] = CLOUDABI_SIGXFSZ, + }; + + /* Convert unknown signals to SIGABRT. */ + if (sig < 0 || sig >= nitems(signals) || signals[sig] == 0) + return (SIGABRT); + return (signals[sig]); +} + +struct cloudabi64_kevent_args { + const cloudabi64_subscription_t *in; + cloudabi64_event_t *out; + bool once; +}; + +/* Converts CloudABI's subscription objects to FreeBSD's struct kevent. */ +static int +cloudabi64_kevent_copyin(void *arg, struct kevent *kevp, int count) +{ + cloudabi64_subscription_t sub; + struct cloudabi64_kevent_args *args; + cloudabi_timestamp_t ts; + int error; + + args = arg; + while (count-- > 0) { + /* TODO(ed): Copy in multiple entries at once. */ + error = copyin(args->in++, &sub, sizeof(sub)); + if (error != 0) + return (error); + + memset(kevp, 0, sizeof(*kevp)); + kevp->udata = (void *)sub.userdata; + switch (sub.type) { + case CLOUDABI_EVENTTYPE_CLOCK: + kevp->filter = EVFILT_TIMER; + kevp->ident = sub.clock.identifier; + kevp->fflags = NOTE_NSECONDS; + if ((sub.clock.flags & + CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) != 0 && + sub.clock.timeout > 0) { + /* Convert absolute timestamp to a relative. */ + error = cloudabi_clock_time_get(curthread, + sub.clock.clock_id, &ts); + if (error != 0) + return (error); + ts = ts > sub.clock.timeout ? 0 : + sub.clock.timeout - ts; + } else { + /* Relative timestamp. */ + ts = sub.clock.timeout; + } + kevp->data = ts > INTPTR_MAX ? INTPTR_MAX : ts; + break; + case CLOUDABI_EVENTTYPE_FD_READ: + kevp->filter = EVFILT_READ; + kevp->ident = sub.fd_readwrite.fd; + if ((sub.fd_readwrite.flags & + CLOUDABI_SUBSCRIPTION_FD_READWRITE_POLL) != 0) + kevp->fflags = NOTE_FILE_POLL; + break; + case CLOUDABI_EVENTTYPE_FD_WRITE: + kevp->filter = EVFILT_WRITE; + kevp->ident = sub.fd_readwrite.fd; + break; + case CLOUDABI_EVENTTYPE_PROC_TERMINATE: + kevp->filter = EVFILT_PROCDESC; + kevp->ident = sub.proc_terminate.fd; + kevp->fflags = NOTE_EXIT; + break; + } + if (args->once) { + /* Ignore flags. Simply use oneshot mode. */ + kevp->flags = EV_ADD | EV_ONESHOT; + } else { + /* Translate flags. */ + if ((sub.flags & CLOUDABI_SUBSCRIPTION_ADD) != 0) + kevp->flags |= EV_ADD; + if ((sub.flags & CLOUDABI_SUBSCRIPTION_CLEAR) != 0) + kevp->flags |= EV_CLEAR; + if ((sub.flags & CLOUDABI_SUBSCRIPTION_DELETE) != 0) + kevp->flags |= EV_DELETE; + if ((sub.flags & CLOUDABI_SUBSCRIPTION_DISABLE) != 0) + kevp->flags |= EV_DISABLE; + if ((sub.flags & CLOUDABI_SUBSCRIPTION_ENABLE) != 0) + kevp->flags |= EV_ENABLE; + if ((sub.flags & CLOUDABI_SUBSCRIPTION_ONESHOT) != 0) + kevp->flags |= EV_ONESHOT; + } + ++kevp; + } + return (0); +} + +/* Converts FreeBSD's struct kevent to CloudABI's event objects. */ +static int +cloudabi64_kevent_copyout(void *arg, struct kevent *kevp, int count) +{ + cloudabi64_event_t ev; + struct cloudabi64_kevent_args *args; + int error; + + args = arg; + while (count-- > 0) { + /* Convert fields that should always be present. */ + memset(&ev, 0, sizeof(ev)); + ev.userdata = (uintptr_t)kevp->udata; + switch (kevp->filter) { + case EVFILT_TIMER: + ev.type = CLOUDABI_EVENTTYPE_CLOCK; + ev.clock.identifier = kevp->ident; + break; + case EVFILT_READ: + ev.type = CLOUDABI_EVENTTYPE_FD_READ; + ev.fd_readwrite.fd = kevp->ident; + break; + case EVFILT_WRITE: + ev.type = CLOUDABI_EVENTTYPE_FD_WRITE; + ev.fd_readwrite.fd = kevp->ident; + break; + case EVFILT_PROCDESC: + ev.type = CLOUDABI_EVENTTYPE_PROC_TERMINATE; + ev.proc_terminate.fd = kevp->ident; + break; + } + + if ((kevp->flags & EV_ERROR) == 0) { + /* Success. */ + switch (kevp->filter) { + case EVFILT_READ: + case EVFILT_WRITE: + ev.fd_readwrite.nbytes = kevp->data; + if ((kevp->flags & EV_EOF) != 0) { + ev.fd_readwrite.flags |= + CLOUDABI_EVENT_FD_READWRITE_HANGUP; + } + break; + case EVFILT_PROCDESC: + if (WIFSIGNALED(kevp->data)) { + /* Process got signalled. */ + ev.proc_terminate.signal = + convert_signal(WTERMSIG(kevp->data)); + ev.proc_terminate.exitcode = 0; + } else { + /* Process exited. */ + ev.proc_terminate.signal = 0; + ev.proc_terminate.exitcode = + WEXITSTATUS(kevp->data); + } + break; + } + } else { + /* Error. */ + ev.error = cloudabi_convert_errno(kevp->data); + } + ++kevp; + + /* TODO(ed): Copy out multiple entries at once. */ + error = copyout(&ev, args->out++, sizeof(ev)); + if (error != 0) + return (error); + } + return (0); +} + int cloudabi64_sys_poll(struct thread *td, struct cloudabi64_sys_poll_args *uap) { + struct cloudabi64_kevent_args args = { + .in = uap->in, + .out = uap->out, + .once = true, + }; + struct kevent_copyops copyops = { + .k_copyin = cloudabi64_kevent_copyin, + .k_copyout = cloudabi64_kevent_copyout, + .arg = &args, + }; - /* Not implemented. */ - return (ENOSYS); + return (kern_kevent_anonymous(td, uap->nevents, ©ops)); } int cloudabi64_sys_poll_fd(struct thread *td, struct cloudabi64_sys_poll_fd_args *uap) { + struct cloudabi64_kevent_args args = { + .in = uap->in, + .out = uap->out, + .once = false, + }; + struct kevent_copyops copyops = { + .k_copyin = cloudabi64_kevent_copyin, + .k_copyout = cloudabi64_kevent_copyout, + .arg = &args, + }; + cloudabi64_subscription_t subtimo; + struct timespec timeout; + int error; - /* Not implemented. */ - return (ENOSYS); + if (uap->timeout != NULL) { + /* Poll with a timeout. */ + error = copyin(uap->timeout, &subtimo, sizeof(subtimo)); + if (error != 0) + return (error); + if (subtimo.type != CLOUDABI_EVENTTYPE_CLOCK || + subtimo.clock.flags != 0) + return (EINVAL); + timeout.tv_sec = subtimo.clock.timeout / 1000000000; + timeout.tv_nsec = subtimo.clock.timeout % 1000000000; + return (kern_kevent(td, uap->fd, uap->nin, uap->nout, ©ops, + &timeout)); + } else { + /* Poll without a timeout. */ + return (kern_kevent(td, uap->fd, uap->nin, uap->nout, ©ops, + NULL)); + } } From owner-svn-src-head@freebsd.org Wed Aug 12 08:36:59 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 20C8899F696; Wed, 12 Aug 2015 08:36:59 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 110222C1; Wed, 12 Aug 2015 08:36:59 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C8awgZ023280; Wed, 12 Aug 2015 08:36:58 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C8awIM023279; Wed, 12 Aug 2015 08:36:58 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508120836.t7C8awIM023279@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 12 Aug 2015 08:36:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286655 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 08:36:59 -0000 Author: mav Date: Wed Aug 12 08:36:58 2015 New Revision: 286655 URL: https://svnweb.freebsd.org/changeset/base/286655 Log: Fix set of sign extension bugs in r286625. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Aug 12 07:59:00 2015 (r286654) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Aug 12 08:36:58 2015 (r286655) @@ -3145,7 +3145,7 @@ arc_available_memory(void) * Cooperate with pagedaemon when it's time for it to scan * and reclaim some pages. */ - n = PAGESIZE * (int64_t)(freemem - zfs_arc_free_target); + n = PAGESIZE * ((int64_t)freemem - zfs_arc_free_target); if (n < lowest) { lowest = n; r = FMR_LOTSFREE; @@ -3207,7 +3207,7 @@ arc_available_memory(void) * heap is allocated. (Or, in the calculation, if less than 1/4th is * free) */ - n = vmem_size(heap_arena, VMEM_FREE) - + n = (int64_t)vmem_size(heap_arena, VMEM_FREE) - (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2); if (n < lowest) { lowest = n; @@ -3228,7 +3228,7 @@ arc_available_memory(void) * memory fragmentation issues. */ if (zio_arena != NULL) { - n = vmem_size(zio_arena, VMEM_FREE) - + n = (int64_t)vmem_size(zio_arena, VMEM_FREE) - (vmem_size(zio_arena, VMEM_ALLOC) >> 4); if (n < lowest) { lowest = n; @@ -3242,7 +3242,8 @@ arc_available_memory(void) */ if (lowest > 0) { n = (vmem_size(heap_arena, VMEM_MAXFREE) < zfs_max_recordsize) ? - -(vmem_size(heap_arena, VMEM_ALLOC) >> 4) : INT64_MAX; + -((int64_t)vmem_size(heap_arena, VMEM_ALLOC) >> 4) : + INT64_MAX; if (n < lowest) { lowest = n; r = FMR_ZIO_FRAG; From owner-svn-src-head@freebsd.org Wed Aug 12 08:41:49 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D40C499F828; Wed, 12 Aug 2015 08:41:49 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B78A2900; Wed, 12 Aug 2015 08:41:49 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C8fnbC026456; Wed, 12 Aug 2015 08:41:49 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C8fnfg026455; Wed, 12 Aug 2015 08:41:49 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508120841.t7C8fnfg026455@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 12 Aug 2015 08:41:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286656 - head/sys/compat/cloudabi64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 08:41:50 -0000 Author: ed Date: Wed Aug 12 08:41:48 2015 New Revision: 286656 URL: https://svnweb.freebsd.org/changeset/base/286656 Log: Make blocking CloudABI futex operations work. Blocking on locks and condition variables can be accomplished by polling and using the special filters CONDVAR, LOCK_RDLOCK and LOCK_WRLOCK. For now it wouldn't make sense to implement this functionality into kqueue() itself, for the reason that they are CloudABI specific and would require us to resize 'struct kevent' to hold all of the parameters of interest. Add a bandaid to the CloudABI poll system call to call into the futex code directly if it detects specific combinations of events that are used by the C library. Obtained from: https://github.com/NuxiNL/freebsd Modified: head/sys/compat/cloudabi64/cloudabi64_poll.c Modified: head/sys/compat/cloudabi64/cloudabi64_poll.c ============================================================================== --- head/sys/compat/cloudabi64/cloudabi64_poll.c Wed Aug 12 08:36:58 2015 (r286655) +++ head/sys/compat/cloudabi64/cloudabi64_poll.c Wed Aug 12 08:41:48 2015 (r286656) @@ -244,6 +244,127 @@ cloudabi64_sys_poll(struct thread *td, s .arg = &args, }; + /* + * Bandaid to support CloudABI futex constructs that are not + * implemented through FreeBSD's kqueue(). + */ + if (uap->nevents == 1) { + cloudabi64_subscription_t sub; + cloudabi64_event_t ev = {}; + int error; + + error = copyin(uap->in, &sub, sizeof(sub)); + if (error != 0) + return (error); + ev.userdata = sub.userdata; + ev.type = sub.type; + if (sub.type == CLOUDABI_EVENTTYPE_CONDVAR) { + /* Wait on a condition variable. */ + ev.condvar.condvar = sub.condvar.condvar; + ev.error = cloudabi_convert_errno( + cloudabi_futex_condvar_wait( + td, (cloudabi_condvar_t *)sub.condvar.condvar, + sub.condvar.condvar_scope, + (cloudabi_lock_t *)sub.condvar.lock, + sub.condvar.lock_scope, + CLOUDABI_CLOCK_MONOTONIC, UINT64_MAX, 0)); + td->td_retval[0] = 1; + return (copyout(&ev, uap->out, sizeof(ev))); + } else if (sub.type == CLOUDABI_EVENTTYPE_LOCK_RDLOCK) { + /* Acquire a read lock. */ + ev.lock.lock = sub.lock.lock; + ev.error = cloudabi_convert_errno( + cloudabi_futex_lock_rdlock( + td, (cloudabi_lock_t *)sub.lock.lock, + sub.lock.lock_scope, CLOUDABI_CLOCK_MONOTONIC, + UINT64_MAX, 0)); + td->td_retval[0] = 1; + return (copyout(&ev, uap->out, sizeof(ev))); + } else if (sub.type == CLOUDABI_EVENTTYPE_LOCK_WRLOCK) { + /* Acquire a write lock. */ + ev.lock.lock = sub.lock.lock; + ev.error = cloudabi_convert_errno( + cloudabi_futex_lock_wrlock( + td, (cloudabi_lock_t *)sub.lock.lock, + sub.lock.lock_scope, CLOUDABI_CLOCK_MONOTONIC, + UINT64_MAX, 0)); + td->td_retval[0] = 1; + return (copyout(&ev, uap->out, sizeof(ev))); + } + } else if (uap->nevents == 2) { + cloudabi64_subscription_t sub[2]; + cloudabi64_event_t ev[2] = {}; + int error; + + error = copyin(uap->in, &sub, sizeof(sub)); + if (error != 0) + return (error); + ev[0].userdata = sub[0].userdata; + ev[0].type = sub[0].type; + ev[1].userdata = sub[1].userdata; + ev[1].type = sub[1].type; + if (sub[0].type == CLOUDABI_EVENTTYPE_CONDVAR && + sub[1].type == CLOUDABI_EVENTTYPE_CLOCK && + sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) { + /* Wait for a condition variable with timeout. */ + ev[0].condvar.condvar = sub[0].condvar.condvar; + ev[1].clock.identifier = sub[1].clock.identifier; + error = cloudabi_futex_condvar_wait( + td, (cloudabi_condvar_t *)sub[0].condvar.condvar, + sub[0].condvar.condvar_scope, + (cloudabi_lock_t *)sub[0].condvar.lock, + sub[0].condvar.lock_scope, sub[1].clock.clock_id, + sub[1].clock.timeout, sub[1].clock.precision); + if (error == ETIMEDOUT) { + td->td_retval[0] = 1; + return (copyout(&ev[1], uap->out, + sizeof(ev[1]))); + } + + ev[0].error = cloudabi_convert_errno(error); + td->td_retval[0] = 1; + return (copyout(&ev[0], uap->out, sizeof(ev[0]))); + } else if (sub[0].type == CLOUDABI_EVENTTYPE_LOCK_RDLOCK && + sub[1].type == CLOUDABI_EVENTTYPE_CLOCK && + sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) { + /* Acquire a read lock with a timeout. */ + ev[0].lock.lock = sub[0].lock.lock; + ev[1].clock.identifier = sub[1].clock.identifier; + error = cloudabi_futex_lock_rdlock( + td, (cloudabi_lock_t *)sub[0].lock.lock, + sub[0].lock.lock_scope, sub[1].clock.clock_id, + sub[1].clock.timeout, sub[1].clock.precision); + if (error == ETIMEDOUT) { + td->td_retval[0] = 1; + return (copyout(&ev[1], uap->out, + sizeof(ev[1]))); + } + + ev[0].error = cloudabi_convert_errno(error); + td->td_retval[0] = 1; + return (copyout(&ev[0], uap->out, sizeof(ev[0]))); + } else if (sub[0].type == CLOUDABI_EVENTTYPE_LOCK_WRLOCK && + sub[1].type == CLOUDABI_EVENTTYPE_CLOCK && + sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) { + /* Acquire a write lock with a timeout. */ + ev[0].lock.lock = sub[0].lock.lock; + ev[1].clock.identifier = sub[1].clock.identifier; + error = cloudabi_futex_lock_wrlock( + td, (cloudabi_lock_t *)sub[0].lock.lock, + sub[0].lock.lock_scope, sub[1].clock.clock_id, + sub[1].clock.timeout, sub[1].clock.precision); + if (error == ETIMEDOUT) { + td->td_retval[0] = 1; + return (copyout(&ev[1], uap->out, + sizeof(ev[1]))); + } + + ev[0].error = cloudabi_convert_errno(error); + td->td_retval[0] = 1; + return (copyout(&ev[0], uap->out, sizeof(ev[0]))); + } + } + return (kern_kevent_anonymous(td, uap->nevents, ©ops)); } From owner-svn-src-head@freebsd.org Wed Aug 12 09:43:13 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 949A499EA58; Wed, 12 Aug 2015 09:43:13 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 85157802; Wed, 12 Aug 2015 09:43:13 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C9hDKm051750; Wed, 12 Aug 2015 09:43:13 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C9hDMj051748; Wed, 12 Aug 2015 09:43:13 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201508120943.t7C9hDMj051748@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 12 Aug 2015 09:43:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286657 - in head/sys: amd64/amd64 i386/i386 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 09:43:13 -0000 Author: kib Date: Wed Aug 12 09:43:12 2015 New Revision: 286657 URL: https://svnweb.freebsd.org/changeset/base/286657 Log: AP should load aps_ready with acquire semantic to see BSP updates to the SMP structures, synchronized with the load by release store in release_aps(). The change is formal, x86 strong memory model implicitely provided the guarantees. Discussed with: bde Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Modified: head/sys/amd64/amd64/mp_machdep.c head/sys/i386/i386/mp_machdep.c Modified: head/sys/amd64/amd64/mp_machdep.c ============================================================================== --- head/sys/amd64/amd64/mp_machdep.c Wed Aug 12 08:41:48 2015 (r286656) +++ head/sys/amd64/amd64/mp_machdep.c Wed Aug 12 09:43:12 2015 (r286657) @@ -282,7 +282,7 @@ init_secondary(void) mp_naps++; /* Spin until the BSP releases the AP's. */ - while (!aps_ready) + while (atomic_load_acq_int(&aps_ready) == 0) ia32_pause(); init_secondary_tail(); Modified: head/sys/i386/i386/mp_machdep.c ============================================================================== --- head/sys/i386/i386/mp_machdep.c Wed Aug 12 08:41:48 2015 (r286656) +++ head/sys/i386/i386/mp_machdep.c Wed Aug 12 09:43:12 2015 (r286657) @@ -291,7 +291,7 @@ init_secondary(void) CHECK_WRITE(0x39, 6); /* Spin until the BSP releases the AP's. */ - while (!aps_ready) + while (atomic_load_acq_int(&aps_ready) == 0) ia32_pause(); /* BSP may have changed PTD while we were waiting */ From owner-svn-src-head@freebsd.org Wed Aug 12 09:46:41 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 06FC299EBC3; Wed, 12 Aug 2015 09:46:41 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EBC53AA9; Wed, 12 Aug 2015 09:46:40 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C9keiN052124; Wed, 12 Aug 2015 09:46:40 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C9keUi052121; Wed, 12 Aug 2015 09:46:40 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201508120946.t7C9keUi052121@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 12 Aug 2015 09:46:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286658 - in head/sys: amd64/amd64 i386/i386 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 09:46:41 -0000 Author: kib Date: Wed Aug 12 09:46:39 2015 New Revision: 286658 URL: https://svnweb.freebsd.org/changeset/base/286658 Log: Initialization of smp_tlb_wait does not require release semantic, no data is synchronized by store/load to the variable. The lapic_write_icr() function ensures that store buffers are flushed before IPI command is issued. Discussed with: bde Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Modified: head/sys/amd64/amd64/mp_machdep.c head/sys/i386/i386/mp_machdep.c Modified: head/sys/amd64/amd64/mp_machdep.c ============================================================================== --- head/sys/amd64/amd64/mp_machdep.c Wed Aug 12 09:43:12 2015 (r286657) +++ head/sys/amd64/amd64/mp_machdep.c Wed Aug 12 09:46:39 2015 (r286658) @@ -440,7 +440,7 @@ smp_targeted_tlb_shootdown(cpuset_t mask smp_tlb_addr1 = addr1; smp_tlb_addr2 = addr2; smp_tlb_pmap = pmap; - atomic_store_rel_int(&smp_tlb_wait, 0); + smp_tlb_wait = 0; if (CPU_ISFULLSET(&mask)) { ncpu = othercpus; ipi_all_but_self(vector); Modified: head/sys/i386/i386/mp_machdep.c ============================================================================== --- head/sys/i386/i386/mp_machdep.c Wed Aug 12 09:43:12 2015 (r286657) +++ head/sys/i386/i386/mp_machdep.c Wed Aug 12 09:46:39 2015 (r286658) @@ -504,7 +504,7 @@ smp_tlb_shootdown(u_int vector, vm_offse mtx_lock_spin(&smp_ipi_mtx); smp_tlb_addr1 = addr1; smp_tlb_addr2 = addr2; - atomic_store_rel_int(&smp_tlb_wait, 0); + smp_tlb_wait = 0; ipi_all_but_self(vector); while (smp_tlb_wait < ncpu) ia32_pause(); From owner-svn-src-head@freebsd.org Wed Aug 12 09:55:52 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DC99499EE59; Wed, 12 Aug 2015 09:55:52 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CD5E777; Wed, 12 Aug 2015 09:55:52 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7C9tqi6056227; Wed, 12 Aug 2015 09:55:52 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7C9tqWD056226; Wed, 12 Aug 2015 09:55:52 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201508120955.t7C9tqWD056226@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 12 Aug 2015 09:55:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286659 - head/sys/x86/x86 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 09:55:53 -0000 Author: kib Date: Wed Aug 12 09:55:52 2015 New Revision: 286659 URL: https://svnweb.freebsd.org/changeset/base/286659 Log: In x2APIC mode, IPI generation is atomic because it is performed by single ICR MSR write. This is in contrast with the xAPIC mode, where we must read current ICR value, do bit fiddling and perform two 32-bit register writes. As a consequence, there is no need to disable interrupts around ICR value calculation and write. Note that typical users of ipi_raw() and ipi_vectored() take spinlock, which already disables interrupts. For them, the change removes unneeded CLI and POPFL/Q instructions. Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Modified: head/sys/x86/x86/local_apic.c Modified: head/sys/x86/x86/local_apic.c ============================================================================== --- head/sys/x86/x86/local_apic.c Wed Aug 12 09:46:39 2015 (r286658) +++ head/sys/x86/x86/local_apic.c Wed Aug 12 09:55:52 2015 (r286659) @@ -1657,9 +1657,10 @@ native_lapic_ipi_raw(register_t icrlo, u ("%s: reserved bits set in ICR LO register", __func__)); /* Set destination in ICR HI register if it is being used. */ - saveintr = intr_disable(); - if (!x2apic_mode) + if (!x2apic_mode) { + saveintr = intr_disable(); icr = lapic_read_icr(); + } if ((icrlo & APIC_DEST_MASK) == APIC_DEST_DESTFLD) { if (x2apic_mode) { @@ -1682,7 +1683,8 @@ native_lapic_ipi_raw(register_t icrlo, u vlo |= icrlo; } lapic_write_icr(vhi, vlo); - intr_restore(saveintr); + if (!x2apic_mode) + intr_restore(saveintr); } #define BEFORE_SPIN 50000 From owner-svn-src-head@freebsd.org Wed Aug 12 10:34:08 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DCC5F9A0798; Wed, 12 Aug 2015 10:34:07 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CC68627B; Wed, 12 Aug 2015 10:34:07 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CAY7fX072432; Wed, 12 Aug 2015 10:34:07 GMT (envelope-from brueffer@FreeBSD.org) Received: (from brueffer@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CAY6s3072423; Wed, 12 Aug 2015 10:34:06 GMT (envelope-from brueffer@FreeBSD.org) Message-Id: <201508121034.t7CAY6s3072423@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brueffer set sender to brueffer@FreeBSD.org using -f From: Christian Brueffer Date: Wed, 12 Aug 2015 10:34:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286660 - in head: sbin/camcontrol sbin/reboot usr.bin/mkimg usr.sbin/pwd_mkdb usr.sbin/sysrc usr.sbin/wake X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 10:34:08 -0000 Author: brueffer Date: Wed Aug 12 10:34:05 2015 New Revision: 286660 URL: https://svnweb.freebsd.org/changeset/base/286660 Log: Fix a few mandoc warnings. MFC after: 1 week Modified: head/sbin/camcontrol/camcontrol.8 head/sbin/reboot/nextboot.8 head/usr.bin/mkimg/mkimg.1 head/usr.sbin/pwd_mkdb/pwd_mkdb.8 head/usr.sbin/sysrc/sysrc.8 head/usr.sbin/wake/wake.8 Modified: head/sbin/camcontrol/camcontrol.8 ============================================================================== --- head/sbin/camcontrol/camcontrol.8 Wed Aug 12 09:55:52 2015 (r286659) +++ head/sbin/camcontrol/camcontrol.8 Wed Aug 12 10:34:05 2015 (r286660) @@ -2183,7 +2183,6 @@ current initiator will be unregistered f The reservation will be moved to relative target port 2 on the target device. The registration will persist across power losses. -.Pp .Bd -literal -offset indent camcontrol attrib sa0 -v -i attr_values -p 1 .Ed Modified: head/sbin/reboot/nextboot.8 ============================================================================== --- head/sbin/reboot/nextboot.8 Wed Aug 12 09:55:52 2015 (r286659) +++ head/sbin/reboot/nextboot.8 Wed Aug 12 10:34:05 2015 (r286660) @@ -135,4 +135,3 @@ If it scrambles your file system, do not is only able to read ZFS, not write to it. .Pa nextboot.conf will NOT be reset in case of a kernel boot failure. - Modified: head/usr.bin/mkimg/mkimg.1 ============================================================================== --- head/usr.bin/mkimg/mkimg.1 Wed Aug 12 09:55:52 2015 (r286659) +++ head/usr.bin/mkimg/mkimg.1 Wed Aug 12 10:34:05 2015 (r286660) @@ -327,4 +327,5 @@ utility first appeared in .Sh AUTHORS The .Nm -utility and manpage were written by Marcel Moolenaar +utility and manpage were written by +.An Marcel Moolenaar Aq Mt marcelm@juniper.net . Modified: head/usr.sbin/pwd_mkdb/pwd_mkdb.8 ============================================================================== --- head/usr.sbin/pwd_mkdb/pwd_mkdb.8 Wed Aug 12 09:55:52 2015 (r286659) +++ head/usr.sbin/pwd_mkdb/pwd_mkdb.8 Wed Aug 12 10:34:05 2015 (r286660) @@ -132,7 +132,6 @@ The legacy format entries are endianness .Pp The following options may be specified and will affect the generation of legacy entries. -.Pp .Bl -tag -width flag .It Fl B Store data in big-endian format. Modified: head/usr.sbin/sysrc/sysrc.8 ============================================================================== --- head/usr.sbin/sysrc/sysrc.8 Wed Aug 12 09:55:52 2015 (r286659) +++ head/usr.sbin/sysrc/sysrc.8 Wed Aug 12 10:34:05 2015 (r286660) @@ -223,7 +223,6 @@ For example, the above and below stateme .Dq gif0 starts with an alpha-numeric character .Pq the letter Li g : -.Pp .Bl -tag -width indent+ .It \ .Nm @@ -278,7 +277,6 @@ For example, the above and below stateme .Dq gif0 starts with an alpha-numeric character .Pq the letter Li g : -.Pp .Bl -tag -width indent+ .It \ .Nm Modified: head/usr.sbin/wake/wake.8 ============================================================================== --- head/usr.sbin/wake/wake.8 Wed Aug 12 09:55:52 2015 (r286659) +++ head/usr.sbin/wake/wake.8 Wed Aug 12 10:34:05 2015 (r286660) @@ -65,4 +65,4 @@ Ethernet host name data base. .Sh AUTHORS .Nm was written by -.Ar Marc Balmer Aq Mt marc@msys.ch . +.An Marc Balmer Aq Mt marc@msys.ch . From owner-svn-src-head@freebsd.org Wed Aug 12 11:07:04 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9546D9A0D8A; Wed, 12 Aug 2015 11:07:04 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 684F196; Wed, 12 Aug 2015 11:07:04 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CB74VH084641; Wed, 12 Aug 2015 11:07:04 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CB73Ra084639; Wed, 12 Aug 2015 11:07:03 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508121107.t7CB73Ra084639@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 12 Aug 2015 11:07:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286661 - head/sys/compat/cloudabi X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 11:07:04 -0000 Author: ed Date: Wed Aug 12 11:07:03 2015 New Revision: 286661 URL: https://svnweb.freebsd.org/changeset/base/286661 Log: Use CAP_EVENT instead of CAP_PDWAIT. The cloudlibc pdwait() function ends up using FreeBSD's kqueue() in combination with EVFILT_PROCDESC. This depends on CAP_EVENT -- not CAP_PDWAIT. Obtained from: https://github.com/NuxiNL/freebsd Modified: head/sys/compat/cloudabi/cloudabi_fd.c head/sys/compat/cloudabi/cloudabi_proc.c Modified: head/sys/compat/cloudabi/cloudabi_fd.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_fd.c Wed Aug 12 10:34:05 2015 (r286660) +++ head/sys/compat/cloudabi/cloudabi_fd.c Wed Aug 12 11:07:03 2015 (r286661) @@ -74,7 +74,7 @@ __FBSDID("$FreeBSD$"); MAPPING(CLOUDABI_RIGHT_MEM_MAP_EXEC, CAP_MMAP_X) \ MAPPING(CLOUDABI_RIGHT_POLL_FD_READWRITE, CAP_EVENT) \ MAPPING(CLOUDABI_RIGHT_POLL_MODIFY, CAP_KQUEUE_CHANGE) \ - MAPPING(CLOUDABI_RIGHT_POLL_PROC_TERMINATE, CAP_PDWAIT) \ + MAPPING(CLOUDABI_RIGHT_POLL_PROC_TERMINATE, CAP_EVENT) \ MAPPING(CLOUDABI_RIGHT_POLL_WAIT, CAP_KQUEUE_EVENT) \ MAPPING(CLOUDABI_RIGHT_PROC_EXEC, CAP_FEXECVE) \ MAPPING(CLOUDABI_RIGHT_SOCK_ACCEPT, CAP_ACCEPT) \ @@ -380,7 +380,8 @@ cloudabi_remove_conflicting_rights(cloud *inheriting = 0; break; case CLOUDABI_FILETYPE_PROCESS: - *base &= ~CLOUDABI_RIGHT_FILE_ADVISE; + *base &= ~(CLOUDABI_RIGHT_FILE_ADVISE | + CLOUDABI_RIGHT_POLL_FD_READWRITE); *inheriting = 0; break; case CLOUDABI_FILETYPE_REGULAR_FILE: Modified: head/sys/compat/cloudabi/cloudabi_proc.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_proc.c Wed Aug 12 10:34:05 2015 (r286660) +++ head/sys/compat/cloudabi/cloudabi_proc.c Wed Aug 12 11:07:03 2015 (r286661) @@ -74,7 +74,7 @@ cloudabi_sys_proc_fork(struct thread *td struct proc *p2; int error, fd; - cap_rights_init(&fcaps.fc_rights, CAP_FSTAT, CAP_PDWAIT); + cap_rights_init(&fcaps.fc_rights, CAP_FSTAT, CAP_EVENT); error = fork1(td, RFFDG | RFPROC | RFPROCDESC, 0, &p2, &fd, 0, &fcaps); if (error != 0) return (error); From owner-svn-src-head@freebsd.org Wed Aug 12 11:30:32 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B82EB99F607; Wed, 12 Aug 2015 11:30:32 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A93B0F14; Wed, 12 Aug 2015 11:30:32 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CBUWBi095477; Wed, 12 Aug 2015 11:30:32 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CBUW8C095476; Wed, 12 Aug 2015 11:30:32 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508121130.t7CBUW8C095476@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 12 Aug 2015 11:30:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286662 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 11:30:32 -0000 Author: ed Date: Wed Aug 12 11:30:31 2015 New Revision: 286662 URL: https://svnweb.freebsd.org/changeset/base/286662 Log: Unignore signals when starting CloudABI processes. As CloudABI processes cannot adjust their signal handlers, we need to make sure that we start up CloudABI processes with consistent signal masks. Though the POSIx standard signal behavior is all right, we do need to make sure that we ignore SIGPIPE, as it would otherwise be hard to interact with pipes and sockets. Extend execsigs() to iterate over ps_sigignore and call sigdflt() for each of the ignored signals. Reviewed by: kib Obtained from: https://github.com/NuxiNL/freebsd Differential Revision: https://reviews.freebsd.org/D3365 Modified: head/sys/kern/kern_sig.c Modified: head/sys/kern/kern_sig.c ============================================================================== --- head/sys/kern/kern_sig.c Wed Aug 12 11:07:03 2015 (r286661) +++ head/sys/kern/kern_sig.c Wed Aug 12 11:30:31 2015 (r286662) @@ -952,6 +952,7 @@ sigdflt(struct sigacts *ps, int sig) void execsigs(struct proc *p) { + sigset_t osigignore; struct sigacts *ps; int sig; struct thread *td; @@ -971,6 +972,24 @@ execsigs(struct proc *p) if ((sigprop(sig) & SA_IGNORE) != 0) sigqueue_delete_proc(p, sig); } + + /* + * As CloudABI processes cannot modify signal handlers, fully + * reset all signals to their default behavior. Do ignore + * SIGPIPE, as it would otherwise be impossible to recover from + * writes to broken pipes and sockets. + */ + if (SV_PROC_ABI(p) == SV_ABI_CLOUDABI) { + osigignore = ps->ps_sigignore; + while (SIGNOTEMPTY(osigignore)) { + sig = sig_ffs(&osigignore); + SIGDELSET(osigignore, sig); + if (sig != SIGPIPE) + sigdflt(ps, sig); + } + SIGADDSET(ps->ps_sigignore, SIGPIPE); + } + /* * Reset stack state to the user stack. * Clear set of signals caught on the signal stack. From owner-svn-src-head@freebsd.org Wed Aug 12 11:56:26 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3408599FD4C; Wed, 12 Aug 2015 11:56:26 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 12BDF1AB8; Wed, 12 Aug 2015 11:56:26 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CBuPFU005447; Wed, 12 Aug 2015 11:56:25 GMT (envelope-from brueffer@FreeBSD.org) Received: (from brueffer@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CBuK6k005425; Wed, 12 Aug 2015 11:56:20 GMT (envelope-from brueffer@FreeBSD.org) Message-Id: <201508121156.t7CBuK6k005425@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brueffer set sender to brueffer@FreeBSD.org using -f From: Christian Brueffer Date: Wed, 12 Aug 2015 11:56:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286663 - in head/share/man: man4 man4/man4.i386 man7 man8 man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 11:56:26 -0000 Author: brueffer Date: Wed Aug 12 11:56:19 2015 New Revision: 286663 URL: https://svnweb.freebsd.org/changeset/base/286663 Log: Fix mandoc warnings/errors. MFC after: 1 week Modified: head/share/man/man4/cloudabi.4 head/share/man/man4/ctl.4 head/share/man/man4/em.4 head/share/man/man4/gre.4 head/share/man/man4/hptiop.4 head/share/man/man4/man4.i386/wl.4 head/share/man/man4/ng_btsocket.4 head/share/man/man4/siftr.4 head/share/man/man4/snp.4 head/share/man/man4/uftdi.4 head/share/man/man4/vt.4 head/share/man/man7/release.7 head/share/man/man8/nanobsd.8 head/share/man/man8/uefi.8 head/share/man/man8/yp.8 head/share/man/man9/PCI_IOV_ADD_VF.9 head/share/man/man9/PCI_IOV_INIT.9 head/share/man/man9/altq.9 head/share/man/man9/ifnet.9 Modified: head/share/man/man4/cloudabi.4 ============================================================================== --- head/share/man/man4/cloudabi.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/cloudabi.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -99,5 +99,4 @@ cloudlibc on GitHub: CloudABI support first appeared in .Fx 11.0 . .Sh AUTHORS -Nuxi: -.Pa https://nuxi.nl/ . +.An Nuxi : Pa https://nuxi.nl/ . Modified: head/share/man/man4/ctl.4 ============================================================================== --- head/share/man/man4/ctl.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/ctl.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -119,6 +119,7 @@ In the event that there is no response w forcibly terminated. Set to 0 to disable sending NOP-In PDUs. Defaults to 5. +.El .Sh SEE ALSO .Xr ctladm 8 , .Xr ctld 8 , Modified: head/share/man/man4/em.4 ============================================================================== --- head/share/man/man4/em.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/em.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -307,5 +307,4 @@ The driver was written by .An Intel Corporation Aq Mt freebsd@intel.com . .Sh BUGS -.Pp Activating EM_MULTIQUEUE support requires MSI-X features. Modified: head/share/man/man4/gre.4 ============================================================================== --- head/share/man/man4/gre.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/gre.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -154,7 +154,6 @@ ifconfig greN create ifconfig greN inet 198.51.100.1 203.0.113.1 ifconfig greN inet tunnel 198.51.100.1 203.0.113.1 tunnelfib 1 .Ed -.Pp .Sh NOTES The MTU of .Nm Modified: head/share/man/man4/hptiop.4 ============================================================================== --- head/share/man/man4/hptiop.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/hptiop.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -135,4 +135,5 @@ device driver first appeared in .Sh AUTHORS The .Nm -driver was written by HighPoint Technologies, Inc. +driver was written by +.An HighPoint Technologies, Inc. Modified: head/share/man/man4/man4.i386/wl.4 ============================================================================== --- head/share/man/man4/man4.i386/wl.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/man4.i386/wl.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -165,7 +165,9 @@ ported the Mach drivers to BSDI. ported them to .Fx 2.1 . .An Michael Smith -ported the wl driver only to 2.2.2. +ported the +.Nm +driver only to 2.2.2. Jim and Michael have been maintaining them. The current state of the driver is NOT ANYONE'S Modified: head/share/man/man4/ng_btsocket.4 ============================================================================== --- head/share/man/man4/ng_btsocket.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/ng_btsocket.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -45,8 +45,8 @@ module implements three Netgraph node ty Each type in its turn implements one protocol within .Dv PF_BLUETOOTH domain. -.Sh Dv BLUETOOTH_PROTO_HCI Sh protocol -.Ss Dv SOCK_RAW Ss HCI sockets +.Sh Dv BLUETOOTH_PROTO_HCI protocol +.Ss Dv SOCK_RAW HCI sockets Implemented by .Nm btsock_hci_raw Netgraph type. @@ -147,7 +147,7 @@ level can be used to obtain via or change via .Xr setsockopt 2 raw HCI socket's filter. -.Sh Dv BLUETOOTH_PROTO_L2CAP Sh protocol +.Sh Dv BLUETOOTH_PROTO_L2CAP protocol The Bluetooth L2CAP socket address is defined as follows: .Bd -literal -offset indent /* Bluetooth version of struct sockaddr for L2CAP sockets */ @@ -158,7 +158,7 @@ struct sockaddr_l2cap { bdaddr_t l2cap_bdaddr; /* address */ }; .Ed -.Ss Dv SOCK_RAW Ss L2CAP sockets +.Ss Dv SOCK_RAW L2CAP sockets Implemented by .Nm btsock_l2c_raw Netgraph type. @@ -204,7 +204,7 @@ The variable, that can be examined and set via .Xr sysctl 8 , controls the control request timeout (in seconds) for raw L2CAP sockets. -.Ss Dv SOCK_SEQPACKET Ss L2CAP sockets +.Ss Dv SOCK_SEQPACKET L2CAP sockets Implemented by .Nm btsock_l2c Netgraph type. @@ -264,7 +264,7 @@ Get (set) value of the flush timeout. Not implemented. .Ef .El -.Sh Dv BLUETOOTH_PROTO_RFCOMM Sh protocol +.Sh Dv BLUETOOTH_PROTO_RFCOMM protocol The Bluetooth RFCOMM socket address is defined as follows: .Bd -literal -offset indent /* Bluetooth version of struct sockaddr for RFCOMM sockets */ @@ -275,7 +275,7 @@ struct sockaddr_rfcomm { uint8_t rfcomm_channel; /* channel */ }; .Ed -.Ss Dv SOCK_STREAM Ss RFCOMM sockets +.Ss Dv SOCK_STREAM RFCOMM sockets Note that RFCOMM sockets do not have associated Netgraph node type. RFCOMM sockets are implemented as additional layer on top of L2CAP sockets. RFCOMM sockets are either Modified: head/share/man/man4/siftr.4 ============================================================================== --- head/share/man/man4/siftr.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/siftr.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -345,7 +345,7 @@ network interface card and drivers being .Bl -tag -offset indent -width Va .It Va 28 Flow type for the connection. -Flowtype defines which protocol fields are hashed to produce the flowid. +Flowtype defines which protocol fields are hashed to produce the flowid. A complete listing is available in .Pa sys/mbuf.h under Modified: head/share/man/man4/snp.4 ============================================================================== --- head/share/man/man4/snp.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/snp.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -85,7 +85,7 @@ driver was rewritten to work with the re .Sh AUTHORS .An -nosplit The author of the current implementation is -.An Ed Schouten Aq Mt ed@FreeBSD.org . +.An \&Ed Schouten Aq Mt ed@FreeBSD.org . Previous versions of .Nm were based on code written by Modified: head/share/man/man4/uftdi.4 ============================================================================== --- head/share/man/man4/uftdi.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/uftdi.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -193,7 +193,7 @@ struct uftdi_eeio .Pp The FT232R chip has an internal eeprom. An external serial eeprom is optional on other FTDI chips. -The eeprom may contain 64, 128, or 256 words, +The eeprom may contain 64, 128, or 256 words, depending on the part used. Multiple calls may be needed to read or write the larger parts. When no eeprom is present, all words in the returned data are 0xffff. Modified: head/share/man/man4/vt.4 ============================================================================== --- head/share/man/man4/vt.4 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man4/vt.4 Wed Aug 12 11:56:19 2015 (r286663) @@ -327,8 +327,8 @@ driver first appeared in The .Nm device driver was developed by -.An Ed Schouten Aq Mt ed@FreeBSD.org , -.An Ed Maste Aq Mt emaste@FreeBSD.org , +.An \&Ed Schouten Aq Mt ed@FreeBSD.org , +.An \&Ed Maste Aq Mt emaste@FreeBSD.org , and .An Aleksandr Rybalko Aq Mt ray@FreeBSD.org , with sponsorship provided by the Modified: head/share/man/man7/release.7 ============================================================================== --- head/share/man/man7/release.7 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man7/release.7 Wed Aug 12 11:56:19 2015 (r286663) @@ -435,7 +435,6 @@ include support for each hosting provide The following .Xr make 1 environment variables are supported: -.Pp .Bl -tag -width Ev .It Va CLOUDWARE Set to a list of one or more cloud hosting providers, enclosed in quotes. Modified: head/share/man/man8/nanobsd.8 ============================================================================== --- head/share/man/man8/nanobsd.8 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man8/nanobsd.8 Wed Aug 12 11:56:19 2015 (r286663) @@ -104,7 +104,7 @@ Making use of just one shell script and possible to build reduced and customized images satisfying any arbitrary set of requirements. .El -.Ss Nm NanoBSD Ss Media Layout +.Ss NanoBSD Media Layout The mass storage medium is divided into three parts by default (which are normally mounted read-only): .Pp Modified: head/share/man/man8/uefi.8 ============================================================================== --- head/share/man/man8/uefi.8 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man8/uefi.8 Wed Aug 12 11:56:19 2015 (r286663) @@ -114,7 +114,7 @@ typical non-default kernel (optional) .Xr vt 4 , .Xr msdosfs 5 , .Xr boot 8 , -.Xr gpart 8 , +.Xr gpart 8 , .Xr uefisign 8 .Sh HISTORY .Nm @@ -125,7 +125,7 @@ boot support first appeared in .Nm boot support was developed by .An Benno Rice Aq Mt benno@FreeBSD.org , -.An Ed Maste Aq Mt emaste@FreeBSD.org , +.An \&Ed Maste Aq Mt emaste@FreeBSD.org , and .An Nathan Whitehorn Aq Mt nwhitehorn@FreeBSD.org . The Modified: head/share/man/man8/yp.8 ============================================================================== --- head/share/man/man8/yp.8 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man8/yp.8 Wed Aug 12 11:56:19 2015 (r286663) @@ -464,9 +464,11 @@ Some systems, such as .Tn NIS to be running in order for their hostname resolution functions -.Fn ( gethostbyname , +.Po Fn gethostbyname , .Fn gethostbyaddr , -etc.) to work properly. +etc. +.Pc +to work properly. On these systems, .Xr ypserv 8 performs @@ -499,13 +501,14 @@ It can also be made to register itself a v1 server in order to placate certain systems that insist on the presence of a v1 server -.No ( Fx +.Po Fx uses only .Tn NIS v2, but many other systems, including .Tn SunOS -4.x, search for both a v1 and v2 server when binding). +4.x, search for both a v1 and v2 server when binding +.Pc . .Fx Ns 's .Xr ypserv 8 does not actually handle Modified: head/share/man/man9/PCI_IOV_ADD_VF.9 ============================================================================== --- head/share/man/man9/PCI_IOV_ADD_VF.9 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man9/PCI_IOV_ADD_VF.9 Wed Aug 12 11:56:19 2015 (r286663) @@ -104,8 +104,8 @@ the PF. .Sh SEE ALSO .Xr nv 9 , .Xr pci 9 , -.Xr pci_iov_schema 9 , .Xr PCI_IOV_INIT 9 , +.Xr pci_iov_schema 9 , .Xr PCI_IOV_UNINIT 9 .Sh AUTHORS This manual page was written by Modified: head/share/man/man9/PCI_IOV_INIT.9 ============================================================================== --- head/share/man/man9/PCI_IOV_INIT.9 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man9/PCI_IOV_INIT.9 Wed Aug 12 11:56:19 2015 (r286663) @@ -77,8 +77,8 @@ and no VFs will be created. .Sh SEE ALSO .Xr nv 9 , .Xr pci 9 , -.Xr pci_iov_schema 9 , .Xr PCI_IOV_ADD_VF 9 , +.Xr pci_iov_schema 9 , .Xr PCI_IOV_UNINIT 9 .Sh AUTHORS This manual page was written by Modified: head/share/man/man9/altq.9 ============================================================================== --- head/share/man/man9/altq.9 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man9/altq.9 Wed Aug 12 11:56:19 2015 (r286663) @@ -237,7 +237,7 @@ sets a flag to indicate that a driver wa .Nm can be enabled only on interfaces with this flag. .Sh COMPATIBILITY -.Ss Vt ifaltq Ss structure +.Ss Vt ifaltq structure In order to keep compatibility with the existing code, the new output queue structure .Vt ifaltq Modified: head/share/man/man9/ifnet.9 ============================================================================== --- head/share/man/man9/ifnet.9 Wed Aug 12 11:30:31 2015 (r286662) +++ head/share/man/man9/ifnet.9 Wed Aug 12 11:56:19 2015 (r286663) @@ -215,7 +215,7 @@ Interfaces are also associated with an o this structure is used to hold packets while the interface is in the process of sending another. .Pp -.Ss The Vt ifnet Ss structure +.Ss The ifnet Structure The fields of .Vt "struct ifnet" are as follows: @@ -840,7 +840,7 @@ routine. The .Xr polling handler returns the number of packets processed. -.Ss The Vt if_data Ss Structure +.Ss The if_data Structure The .Vt if_data structure contains statistics and identifying information used @@ -1021,7 +1021,7 @@ The link is down. .It Dv LINK_STATE_UP The link is up. .El -.Ss The Vt ifaddr Ss Structure +.Ss The ifaddr Structure Every interface is associated with a list (or, rather, a .Li TAILQ ) @@ -1119,7 +1119,7 @@ In addition to these functions, there may also be link-layer support routines which are used by a number of drivers implementing a specific link layer over different hardware; see the documentation for that link layer for more details. -.Ss The Vt ifmultiaddr Ss Structure +.Ss The ifmultiaddr Structure Every multicast-capable interface is associated with a list of multicast group memberships, which indicate at a low level which link-layer multicast addresses (if any) should be accepted, and at a From owner-svn-src-head@freebsd.org Wed Aug 12 15:26:35 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BA7B699F8B4; Wed, 12 Aug 2015 15:26:35 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A5019E1; Wed, 12 Aug 2015 15:26:35 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CFQZeA091864; Wed, 12 Aug 2015 15:26:35 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CFQWHM091851; Wed, 12 Aug 2015 15:26:32 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508121526.t7CFQWHM091851@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Wed, 12 Aug 2015 15:26:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286667 - in head/sys: amd64/amd64 conf dev/vt/hw/efifb dev/vt/hw/vga i386/i386 x86/include x86/x86 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 15:26:35 -0000 Author: marcel Date: Wed Aug 12 15:26:32 2015 New Revision: 286667 URL: https://svnweb.freebsd.org/changeset/base/286667 Log: Better support memory mapped console devices, such as VGA and EFI frame buffers and memory mapped UARTs. 1. Delay calling cninit() until after pmap_bootstrap(). This makes sure we have PMAP initialized enough to add translations. Keep kdb_init() after cninit() so that we have console when we need to break into the debugger on boot. 2. Unfortunately, the ATPIC code had be moved as well so as to avoid a spurious trap #30. The reason for which is not known at this time. 3. In pmap_mapdev_attr(), when we need to map a device prior to the VM system being initialized, use virtual_avail as the KVA to map the device at. In particular, avoid using the direct map on amd64 because we can't demote by virtue of not being able to allocate yet. Keep track of the translation. Re-use the translation after the VM has been initialized to not waste KVA and to satisfy the assumption in uart(4) that the handle returned for the low-level console is the same as later returned when the device is probed and attached. 4. In pmap_unmapdev() remove the mapping from the table when called pre-init. Otherwise keep the mapping. During bus probe and attach device resources are mapped and unmapped multiple times, which would have us destroy the mapping used by the low-level console. 5. In pmap_init(), set pmap_initialized to signal that we're not pre-init anymore. On amd64, bring the direct map in sync with the translations created at that time. 6. Implement bus_space_map() and bus_space_unmap() for real: when the tag corresponds to memory space, call the corresponding pmap_mapdev() and pmap_unmapdev() functions to construct and actual handle. 7. In efifb.c and vt_vga.c, remove the crutches and hacks and simply call pmap_mapdev_attr() or bus_space_map() as desired. Notes: 1. uart(4) already used bus_space_map() during low-level console setup but since serial ports have traditionally been I/O port based, the lack of a proper implementation for said function was not a problem. It has always supported memory mapped UARTs for low-level consoles by setting hw.uart.console accordingly. 2. The use of the direct map on amd64 without setting caching attributes has been a bigger problem than previously thought. This change has the fortunate (and unexpected) side-effect of fixing various EFI frame buffer problems (though not all). PR: 191564, 194952 Special thanks to: 1. XipLink, Inc -- generously donated an Intel Bay Trail E3800 based eval board (ADLE3800PC). 2. The FreeBSD Foundation, in particular emaste@ -- for UEFI support in general and testing. 3. Everyone who tested the proposed for PR 191564. 4. jhb@ and kib@ for being a soundboard and applying a clue bat if so needed. Added: head/sys/x86/x86/bus_machdep.c (contents, props changed) Modified: head/sys/amd64/amd64/machdep.c head/sys/amd64/amd64/pmap.c head/sys/conf/files.amd64 head/sys/conf/files.i386 head/sys/dev/vt/hw/efifb/efifb.c head/sys/dev/vt/hw/vga/vt_vga.c head/sys/i386/i386/machdep.c head/sys/i386/i386/pmap.c head/sys/x86/include/bus.h Modified: head/sys/amd64/amd64/machdep.c ============================================================================== --- head/sys/amd64/amd64/machdep.c Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/amd64/amd64/machdep.c Wed Aug 12 15:26:32 2015 (r286667) @@ -1625,38 +1625,6 @@ hammer_time(u_int64_t modulep, u_int64_t MODINFO_METADATA | MODINFOMD_EFI_MAP) != NULL) vty_set_preferred(VTY_VT); - /* - * Initialize the console before we print anything out. - */ - cninit(); - -#ifdef DEV_ISA -#ifdef DEV_ATPIC - elcr_probe(); - atpic_startup(); -#else - /* Reset and mask the atpics and leave them shut down. */ - atpic_reset(); - - /* - * Point the ICU spurious interrupt vectors at the APIC spurious - * interrupt handler. - */ - setidt(IDT_IO_INTS + 7, IDTVEC(spuriousint), SDT_SYSIGT, SEL_KPL, 0); - setidt(IDT_IO_INTS + 15, IDTVEC(spuriousint), SDT_SYSIGT, SEL_KPL, 0); -#endif -#else -#error "have you forgotten the isa device?"; -#endif - - kdb_init(); - -#ifdef KDB - if (boothowto & RB_KDB) - kdb_enter(KDB_WHY_BOOTFLAGS, - "Boot flags requested debugger"); -#endif - identify_cpu(); /* Final stage of CPU initialization */ initializecpu(); /* Initialize CPU registers */ initializecpucache(); @@ -1693,6 +1661,35 @@ hammer_time(u_int64_t modulep, u_int64_t /* now running on new page tables, configured,and u/iom is accessible */ + cninit(); + +#ifdef DEV_ISA +#ifdef DEV_ATPIC + elcr_probe(); + atpic_startup(); +#else + /* Reset and mask the atpics and leave them shut down. */ + atpic_reset(); + + /* + * Point the ICU spurious interrupt vectors at the APIC spurious + * interrupt handler. + */ + setidt(IDT_IO_INTS + 7, IDTVEC(spuriousint), SDT_SYSIGT, SEL_KPL, 0); + setidt(IDT_IO_INTS + 15, IDTVEC(spuriousint), SDT_SYSIGT, SEL_KPL, 0); +#endif +#else +#error "have you forgotten the isa device?"; +#endif + + kdb_init(); + +#ifdef KDB + if (boothowto & RB_KDB) + kdb_enter(KDB_WHY_BOOTFLAGS, + "Boot flags requested debugger"); +#endif + msgbufinit(msgbufp, msgbufsize); fpuinit(); Modified: head/sys/amd64/amd64/pmap.c ============================================================================== --- head/sys/amd64/amd64/pmap.c Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/amd64/amd64/pmap.c Wed Aug 12 15:26:32 2015 (r286667) @@ -363,6 +363,18 @@ static u_int64_t DMPDphys; /* phys addr static u_int64_t DMPDPphys; /* phys addr of direct mapped level 3 */ static int ndmpdpphys; /* number of DMPDPphys pages */ +/* + * pmap_mapdev support pre initialization (i.e. console) + */ +#define PMAP_PREINIT_MAPPING_COUNT 8 +static struct pmap_preinit_mapping { + vm_paddr_t pa; + vm_offset_t va; + vm_size_t sz; + int mode; +} pmap_preinit_mapping[PMAP_PREINIT_MAPPING_COUNT]; +static int pmap_initialized; + static struct rwlock_padalign pvh_global_lock; /* @@ -1016,6 +1028,7 @@ pmap_page_init(vm_page_t m) void pmap_init(void) { + struct pmap_preinit_mapping *ppim; vm_page_t mpte; vm_size_t s; int i, pv_npg; @@ -1083,6 +1096,22 @@ pmap_init(void) M_WAITOK | M_ZERO); for (i = 0; i < pv_npg; i++) TAILQ_INIT(&pv_table[i].pv_list); + + pmap_initialized = 1; + for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { + ppim = pmap_preinit_mapping + i; + if (ppim->va == 0) + continue; + /* Make the direct map consistent */ + if (ppim->pa < dmaplimit && ppim->pa + ppim->sz < dmaplimit) { + (void)pmap_change_attr(PHYS_TO_DMAP(ppim->pa), + ppim->sz, ppim->mode); + } + if (!bootverbose) + continue; + printf("PPIM %u: PA=%#lx, VA=%#lx, size=%#lx, mode=%#x\n", i, + ppim->pa, ppim->va, ppim->sz, ppim->mode); + } } static SYSCTL_NODE(_vm_pmap, OID_AUTO, pde, CTLFLAG_RD, 0, @@ -6105,24 +6134,54 @@ pmap_pde_attr(pd_entry_t *pde, int cache void * pmap_mapdev_attr(vm_paddr_t pa, vm_size_t size, int mode) { + struct pmap_preinit_mapping *ppim; vm_offset_t va, offset; vm_size_t tmpsize; + int i; - /* - * If the specified range of physical addresses fits within the direct - * map window, use the direct map. - */ - if (pa < dmaplimit && pa + size < dmaplimit) { - va = PHYS_TO_DMAP(pa); - if (!pmap_change_attr(va, size, mode)) - return ((void *)va); - } offset = pa & PAGE_MASK; size = round_page(offset + size); - va = kva_alloc(size); - if (!va) - panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); pa = trunc_page(pa); + + if (!pmap_initialized) { + va = 0; + for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { + ppim = pmap_preinit_mapping + i; + if (ppim->va == 0) { + ppim->pa = pa; + ppim->sz = size; + ppim->mode = mode; + ppim->va = virtual_avail; + virtual_avail += size; + va = ppim->va; + break; + } + } + if (va == 0) + panic("%s: too many preinit mappings", __func__); + } else { + /* + * If we have a preinit mapping, re-use it. + */ + for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { + ppim = pmap_preinit_mapping + i; + if (ppim->pa == pa && ppim->sz == size && + ppim->mode == mode) + return ((void *)(ppim->va + offset)); + } + /* + * If the specified range of physical addresses fits within + * the direct map window, use the direct map. + */ + if (pa < dmaplimit && pa + size < dmaplimit) { + va = PHYS_TO_DMAP(pa); + if (!pmap_change_attr(va, size, mode)) + return ((void *)(va + offset)); + } + va = kva_alloc(size); + if (va == 0) + panic("%s: Couldn't allocate KVA", __func__); + } for (tmpsize = 0; tmpsize < size; tmpsize += PAGE_SIZE) pmap_kenter_attr(va + tmpsize, pa + tmpsize, mode); pmap_invalidate_range(kernel_pmap, va, va + tmpsize); @@ -6147,15 +6206,32 @@ pmap_mapbios(vm_paddr_t pa, vm_size_t si void pmap_unmapdev(vm_offset_t va, vm_size_t size) { - vm_offset_t base, offset; + struct pmap_preinit_mapping *ppim; + vm_offset_t offset; + int i; /* If we gave a direct map region in pmap_mapdev, do nothing */ if (va >= DMAP_MIN_ADDRESS && va < DMAP_MAX_ADDRESS) return; - base = trunc_page(va); offset = va & PAGE_MASK; size = round_page(offset + size); - kva_free(base, size); + va = trunc_page(va); + for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { + ppim = pmap_preinit_mapping + i; + if (ppim->va == va && ppim->sz == size) { + if (pmap_initialized) + return; + ppim->pa = 0; + ppim->va = 0; + ppim->sz = 0; + ppim->mode = 0; + if (va + size == virtual_avail) + virtual_avail = va; + return; + } + } + if (pmap_initialized) + kva_free(va, size); } /* Modified: head/sys/conf/files.amd64 ============================================================================== --- head/sys/conf/files.amd64 Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/conf/files.amd64 Wed Aug 12 15:26:32 2015 (r286667) @@ -592,6 +592,7 @@ x86/isa/nmi.c standard x86/isa/orm.c optional isa x86/pci/pci_bus.c optional pci x86/pci/qpi.c optional pci +x86/x86/bus_machdep.c standard x86/x86/busdma_bounce.c standard x86/x86/busdma_machdep.c standard x86/x86/cpu_machdep.c standard Modified: head/sys/conf/files.i386 ============================================================================== --- head/sys/conf/files.i386 Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/conf/files.i386 Wed Aug 12 15:26:32 2015 (r286667) @@ -586,6 +586,7 @@ x86/isa/nmi.c standard x86/isa/orm.c optional isa x86/pci/pci_bus.c optional pci x86/pci/qpi.c optional pci +x86/x86/bus_machdep.c standard x86/x86/busdma_bounce.c standard x86/x86/busdma_machdep.c standard x86/x86/cpu_machdep.c standard Modified: head/sys/dev/vt/hw/efifb/efifb.c ============================================================================== --- head/sys/dev/vt/hw/efifb/efifb.c Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/dev/vt/hw/efifb/efifb.c Wed Aug 12 15:26:32 2015 (r286667) @@ -51,7 +51,6 @@ __FBSDID("$FreeBSD$"); static vd_init_t vt_efifb_init; static vd_probe_t vt_efifb_probe; -static void vt_efifb_remap(void *efifb_data); static struct vt_driver vt_efifb_driver = { .vd_name = "efifb", @@ -71,8 +70,6 @@ static struct vt_driver vt_efifb_driver static struct fb_info local_info; VT_DRIVER_DECLARE(vt_efifb, vt_efifb_driver); -SYSINIT(efifb_remap, SI_SUB_KMEM, SI_ORDER_ANY, vt_efifb_remap, &local_info); - static int vt_efifb_probe(struct vt_device *vd) { @@ -137,12 +134,8 @@ vt_efifb_init(struct vt_device *vd) info->fb_size = info->fb_height * info->fb_stride; info->fb_pbase = efifb->fb_addr; - /* - * Use the direct map as a crutch until pmap is available. Once pmap - * is online, the framebuffer will be remapped by vt_efifb_remap() - * using pmap_mapdev_attr(). - */ - info->fb_vbase = PHYS_TO_DMAP(efifb->fb_addr); + info->fb_vbase = (intptr_t)pmap_mapdev_attr(info->fb_pbase, + info->fb_size, VM_MEMATTR_WRITE_COMBINING); /* Get pixel storage size. */ info->fb_bpp = info->fb_stride / info->fb_width * 8; @@ -158,21 +151,3 @@ vt_efifb_init(struct vt_device *vd) return (CN_INTERNAL); } - -static void -vt_efifb_remap(void *xinfo) -{ - struct fb_info *info = xinfo; - - if (info->fb_pbase == 0) - return; - - /* - * Remap as write-combining. This massively improves performance and - * happens very early in kernel initialization, when everything is - * still single-threaded and interrupts are off, so replacing the - * mapping address is safe. - */ - info->fb_vbase = (intptr_t)pmap_mapdev_attr(info->fb_pbase, - info->fb_size, VM_MEMATTR_WRITE_COMBINING); -} Modified: head/sys/dev/vt/hw/vga/vt_vga.c ============================================================================== --- head/sys/dev/vt/hw/vga/vt_vga.c Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/dev/vt/hw/vga/vt_vga.c Wed Aug 12 15:26:32 2015 (r286667) @@ -46,13 +46,6 @@ __FBSDID("$FreeBSD$"); #include -#if defined(__amd64__) || defined(__i386__) -#include -#include -#include -#include -#endif /* __amd64__ || __i386__ */ - struct vga_softc { bus_space_tag_t vga_fb_tag; bus_space_handle_t vga_fb_handle; @@ -1228,13 +1221,16 @@ vga_init(struct vt_device *vd) #if defined(__amd64__) || defined(__i386__) sc->vga_fb_tag = X86_BUS_SPACE_MEM; - sc->vga_fb_handle = KERNBASE + VGA_MEM_BASE; sc->vga_reg_tag = X86_BUS_SPACE_IO; - sc->vga_reg_handle = VGA_REG_BASE; #else # error "Architecture not yet supported!" #endif + bus_space_map(sc->vga_fb_tag, VGA_MEM_BASE, VGA_MEM_SIZE, 0, + &sc->vga_fb_handle); + bus_space_map(sc->vga_reg_tag, VGA_REG_BASE, VGA_REG_SIZE, 0, + &sc->vga_reg_handle); + TUNABLE_INT_FETCH("hw.vga.textmode", &textmode); if (textmode) { vd->vd_flags |= VDF_TEXTMODE; Modified: head/sys/i386/i386/machdep.c ============================================================================== --- head/sys/i386/i386/machdep.c Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/i386/i386/machdep.c Wed Aug 12 15:26:32 2015 (r286667) @@ -2612,6 +2612,40 @@ init386(first) */ clock_init(); + finishidentcpu(); /* Final stage of CPU initialization */ + setidt(IDT_UD, &IDTVEC(ill), SDT_SYS386TGT, SEL_KPL, + GSEL(GCODE_SEL, SEL_KPL)); + setidt(IDT_GP, &IDTVEC(prot), SDT_SYS386TGT, SEL_KPL, + GSEL(GCODE_SEL, SEL_KPL)); + initializecpu(); /* Initialize CPU registers */ + initializecpucache(); + + /* pointer to selector slot for %fs/%gs */ + PCPU_SET(fsgs_gdt, &gdt[GUFS_SEL].sd); + + dblfault_tss.tss_esp = dblfault_tss.tss_esp0 = dblfault_tss.tss_esp1 = + dblfault_tss.tss_esp2 = (int)&dblfault_stack[sizeof(dblfault_stack)]; + dblfault_tss.tss_ss = dblfault_tss.tss_ss0 = dblfault_tss.tss_ss1 = + dblfault_tss.tss_ss2 = GSEL(GDATA_SEL, SEL_KPL); +#if defined(PAE) || defined(PAE_TABLES) + dblfault_tss.tss_cr3 = (int)IdlePDPT; +#else + dblfault_tss.tss_cr3 = (int)IdlePTD; +#endif + dblfault_tss.tss_eip = (int)dblfault_handler; + dblfault_tss.tss_eflags = PSL_KERNEL; + dblfault_tss.tss_ds = dblfault_tss.tss_es = + dblfault_tss.tss_gs = GSEL(GDATA_SEL, SEL_KPL); + dblfault_tss.tss_fs = GSEL(GPRIV_SEL, SEL_KPL); + dblfault_tss.tss_cs = GSEL(GCODE_SEL, SEL_KPL); + dblfault_tss.tss_ldt = GSEL(GLDT_SEL, SEL_KPL); + + vm86_initialize(); + getmemsize(first); + init_param2(physmem); + + /* now running on new page tables, configured,and u/iom is accessible */ + /* * Initialize the console before we print anything out. */ @@ -2652,40 +2686,6 @@ init386(first) kdb_enter(KDB_WHY_BOOTFLAGS, "Boot flags requested debugger"); #endif - finishidentcpu(); /* Final stage of CPU initialization */ - setidt(IDT_UD, &IDTVEC(ill), SDT_SYS386TGT, SEL_KPL, - GSEL(GCODE_SEL, SEL_KPL)); - setidt(IDT_GP, &IDTVEC(prot), SDT_SYS386TGT, SEL_KPL, - GSEL(GCODE_SEL, SEL_KPL)); - initializecpu(); /* Initialize CPU registers */ - initializecpucache(); - - /* pointer to selector slot for %fs/%gs */ - PCPU_SET(fsgs_gdt, &gdt[GUFS_SEL].sd); - - dblfault_tss.tss_esp = dblfault_tss.tss_esp0 = dblfault_tss.tss_esp1 = - dblfault_tss.tss_esp2 = (int)&dblfault_stack[sizeof(dblfault_stack)]; - dblfault_tss.tss_ss = dblfault_tss.tss_ss0 = dblfault_tss.tss_ss1 = - dblfault_tss.tss_ss2 = GSEL(GDATA_SEL, SEL_KPL); -#if defined(PAE) || defined(PAE_TABLES) - dblfault_tss.tss_cr3 = (int)IdlePDPT; -#else - dblfault_tss.tss_cr3 = (int)IdlePTD; -#endif - dblfault_tss.tss_eip = (int)dblfault_handler; - dblfault_tss.tss_eflags = PSL_KERNEL; - dblfault_tss.tss_ds = dblfault_tss.tss_es = - dblfault_tss.tss_gs = GSEL(GDATA_SEL, SEL_KPL); - dblfault_tss.tss_fs = GSEL(GPRIV_SEL, SEL_KPL); - dblfault_tss.tss_cs = GSEL(GCODE_SEL, SEL_KPL); - dblfault_tss.tss_ldt = GSEL(GLDT_SEL, SEL_KPL); - - vm86_initialize(); - getmemsize(first); - init_param2(physmem); - - /* now running on new page tables, configured,and u/iom is accessible */ - msgbufinit(msgbufp, msgbufsize); #ifdef DEV_NPX npxinit(true); Modified: head/sys/i386/i386/pmap.c ============================================================================== --- head/sys/i386/i386/pmap.c Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/i386/i386/pmap.c Wed Aug 12 15:26:32 2015 (r286667) @@ -228,6 +228,18 @@ SYSCTL_INT(_vm_pmap, OID_AUTO, pg_ps_ena #define PAT_INDEX_SIZE 8 static int pat_index[PAT_INDEX_SIZE]; /* cache mode to PAT index conversion */ +/* + * pmap_mapdev support pre initialization (i.e. console) + */ +#define PMAP_PREINIT_MAPPING_COUNT 8 +static struct pmap_preinit_mapping { + vm_paddr_t pa; + vm_offset_t va; + vm_size_t sz; + int mode; +} pmap_preinit_mapping[PMAP_PREINIT_MAPPING_COUNT]; +static int pmap_initialized; + static struct rwlock_padalign pvh_global_lock; /* @@ -744,6 +756,7 @@ pmap_ptelist_init(vm_offset_t *head, voi void pmap_init(void) { + struct pmap_preinit_mapping *ppim; vm_page_t mpte; vm_size_t s; int i, pv_npg; @@ -827,6 +840,17 @@ pmap_init(void) UMA_ZONE_VM | UMA_ZONE_NOFREE); uma_zone_set_allocf(pdptzone, pmap_pdpt_allocf); #endif + + pmap_initialized = 1; + if (!bootverbose) + return; + for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { + ppim = pmap_preinit_mapping + i; + if (ppim->va == 0) + continue; + printf("PPIM %u: PA=%#jx, VA=%#x, size=%#x, mode=%#x\n", i, + (uintmax_t)ppim->pa, ppim->va, ppim->sz, ppim->mode); + } } @@ -5071,8 +5095,10 @@ pmap_pde_attr(pd_entry_t *pde, int cache void * pmap_mapdev_attr(vm_paddr_t pa, vm_size_t size, int mode) { + struct pmap_preinit_mapping *ppim; vm_offset_t va, offset; vm_size_t tmpsize; + int i; offset = pa & PAGE_MASK; size = round_page(offset + size); @@ -5080,11 +5106,36 @@ pmap_mapdev_attr(vm_paddr_t pa, vm_size_ if (pa < KERNLOAD && pa + size <= KERNLOAD) va = KERNBASE + pa; - else + else if (!pmap_initialized) { + va = 0; + for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { + ppim = pmap_preinit_mapping + i; + if (ppim->va == 0) { + ppim->pa = pa; + ppim->sz = size; + ppim->mode = mode; + ppim->va = virtual_avail; + virtual_avail += size; + va = ppim->va; + break; + } + } + if (va == 0) + panic("%s: too many preinit mappings", __func__); + } else { + /* + * If we have a preinit mapping, re-use it. + */ + for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { + ppim = pmap_preinit_mapping + i; + if (ppim->pa == pa && ppim->sz == size && + ppim->mode == mode) + return ((void *)(ppim->va + offset)); + } va = kva_alloc(size); - if (!va) - panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); - + if (va == 0) + panic("%s: Couldn't allocate KVA", __func__); + } for (tmpsize = 0; tmpsize < size; tmpsize += PAGE_SIZE) pmap_kenter_attr(va + tmpsize, pa + tmpsize, mode); pmap_invalidate_range(kernel_pmap, va, va + tmpsize); @@ -5109,14 +5160,31 @@ pmap_mapbios(vm_paddr_t pa, vm_size_t si void pmap_unmapdev(vm_offset_t va, vm_size_t size) { - vm_offset_t base, offset; + struct pmap_preinit_mapping *ppim; + vm_offset_t offset; + int i; if (va >= KERNBASE && va + size <= KERNBASE + KERNLOAD) return; - base = trunc_page(va); offset = va & PAGE_MASK; size = round_page(offset + size); - kva_free(base, size); + va = trunc_page(va); + for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { + ppim = pmap_preinit_mapping + i; + if (ppim->va == va && ppim->sz == size) { + if (pmap_initialized) + return; + ppim->pa = 0; + ppim->va = 0; + ppim->sz = 0; + ppim->mode = 0; + if (va + size == virtual_avail) + virtual_avail = va; + return; + } + } + if (pmap_initialized) + kva_free(va, size); } /* Modified: head/sys/x86/include/bus.h ============================================================================== --- head/sys/x86/include/bus.h Wed Aug 12 14:17:41 2015 (r286666) +++ head/sys/x86/include/bus.h Wed Aug 12 15:26:32 2015 (r286667) @@ -130,32 +130,15 @@ * Map a region of device bus space into CPU virtual address space. */ -static __inline int bus_space_map(bus_space_tag_t t, bus_addr_t addr, - bus_size_t size, int flags, - bus_space_handle_t *bshp); - -static __inline int -bus_space_map(bus_space_tag_t t __unused, bus_addr_t addr, - bus_size_t size __unused, int flags __unused, - bus_space_handle_t *bshp) -{ - - *bshp = addr; - return (0); -} +int bus_space_map(bus_space_tag_t tag, bus_addr_t addr, bus_size_t size, + int flags, bus_space_handle_t *bshp); /* * Unmap a region of device bus space. */ -static __inline void bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh, - bus_size_t size); - -static __inline void -bus_space_unmap(bus_space_tag_t t __unused, bus_space_handle_t bsh __unused, - bus_size_t size __unused) -{ -} +void bus_space_unmap(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t size); /* * Get a new handle for a subregion of an already-mapped area of bus space. Added: head/sys/x86/x86/bus_machdep.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/x86/x86/bus_machdep.c Wed Aug 12 15:26:32 2015 (r286667) @@ -0,0 +1,59 @@ +/*- + * Copyright (c) 2015 Marcel Moolenaar + * 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 ``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 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 + +/* + * Implementation of bus_space_map(), which effectively is a thin + * wrapper around pmap_mapdev() for memory mapped I/O space. It's + * implemented here and not in to avoid pollution. + */ +int +bus_space_map(bus_space_tag_t tag, bus_addr_t addr, bus_size_t size, + int flags __unused, bus_space_handle_t *bshp) +{ + + *bshp = (tag == X86_BUS_SPACE_MEM) + ? (uintptr_t)pmap_mapdev(addr, size) + : addr; + return (0); +} + +void +bus_space_unmap(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t size) +{ + + if (tag == X86_BUS_SPACE_MEM) + pmap_unmapdev(bsh, size); +} From owner-svn-src-head@freebsd.org Wed Aug 12 15:48:15 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B556999FDB1; Wed, 12 Aug 2015 15:48:15 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9BD55BEE; Wed, 12 Aug 2015 15:48:15 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CFmFwE000174; Wed, 12 Aug 2015 15:48:15 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CFmFkc000173; Wed, 12 Aug 2015 15:48:15 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508121548.t7CFmFkc000173@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Wed, 12 Aug 2015 15:48:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286668 - head/sys/dev/uart X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 15:48:15 -0000 Author: marcel Date: Wed Aug 12 15:48:14 2015 New Revision: 286668 URL: https://svnweb.freebsd.org/changeset/base/286668 Log: Add support for the Broadcom TruManage integrated serial port. PR: 191266 Modified: head/sys/dev/uart/uart_bus_pci.c Modified: head/sys/dev/uart/uart_bus_pci.c ============================================================================== --- head/sys/dev/uart/uart_bus_pci.c Wed Aug 12 15:26:32 2015 (r286667) +++ head/sys/dev/uart/uart_bus_pci.c Wed Aug 12 15:48:14 2015 (r286668) @@ -115,6 +115,8 @@ static const struct pci_id pci_ns8250_id 0x10, 16384000 }, { 0x1415, 0xc120, 0xffff, 0, "Oxford Semiconductor OXPCIe952 PCIe 16950 UART", 0x10 }, +{ 0x14e4, 0x160a, 0xffff, 0, "Broadcom TruManage UART", 0x10, + 128 * DEFAULT_RCLK, 2}, { 0x14e4, 0x4344, 0xffff, 0, "Sony Ericsson GC89 PC Card", 0x10}, { 0x151f, 0x0000, 0xffff, 0, "TOPIC Semiconductor TP560 56k modem", 0x10 }, { 0x1fd4, 0x1999, 0x1fd4, 0x0001, "Sunix SER5xxxx Serial Port", 0x10, From owner-svn-src-head@freebsd.org Wed Aug 12 16:08:38 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A1E319A0473; Wed, 12 Aug 2015 16:08:38 +0000 (UTC) (envelope-from hiren@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 886E68CB; Wed, 12 Aug 2015 16:08:38 +0000 (UTC) (envelope-from hiren@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CG8caP008392; Wed, 12 Aug 2015 16:08:38 GMT (envelope-from hiren@FreeBSD.org) Received: (from hiren@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CG8cxS008391; Wed, 12 Aug 2015 16:08:38 GMT (envelope-from hiren@FreeBSD.org) Message-Id: <201508121608.t7CG8cxS008391@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hiren set sender to hiren@FreeBSD.org using -f From: Hiren Panchasara Date: Wed, 12 Aug 2015 16:08:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286669 - head/sys/netinet X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 16:08:38 -0000 Author: hiren Date: Wed Aug 12 16:08:37 2015 New Revision: 286669 URL: https://svnweb.freebsd.org/changeset/base/286669 Log: Remove unused TCPTV_SRTTDFLT. We initialize srtt with TCPTV_SRTTBASE when we don't have any rtt estimate. Differential Revision: D3334 Sponsored by: Limelight Networks Modified: head/sys/netinet/tcp_timer.h Modified: head/sys/netinet/tcp_timer.h ============================================================================== --- head/sys/netinet/tcp_timer.h Wed Aug 12 15:48:14 2015 (r286668) +++ head/sys/netinet/tcp_timer.h Wed Aug 12 16:08:37 2015 (r286669) @@ -76,7 +76,6 @@ #define TCPTV_SRTTBASE 0 /* base roundtrip time; if 0, no idea yet */ #define TCPTV_RTOBASE ( 3*hz) /* assumed RTO if no info */ -#define TCPTV_SRTTDFLT ( 3*hz) /* assumed RTT if no info */ #define TCPTV_PERSMIN ( 5*hz) /* retransmit persistence */ #define TCPTV_PERSMAX ( 60*hz) /* maximum persist interval */ From owner-svn-src-head@freebsd.org Wed Aug 12 16:17:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 066799A06B7; Wed, 12 Aug 2015 16:17:01 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EB53DDE9; Wed, 12 Aug 2015 16:17:00 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CGH0QW013237; Wed, 12 Aug 2015 16:17:00 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CGH0tY013236; Wed, 12 Aug 2015 16:17:00 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508121617.t7CGH0tY013236@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 12 Aug 2015 16:17:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286670 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 16:17:01 -0000 Author: ed Date: Wed Aug 12 16:17:00 2015 New Revision: 286670 URL: https://svnweb.freebsd.org/changeset/base/286670 Log: Properly return ENOTDIR when calling *at() on a non-vnode. We already properly return ENOTDIR when calling *at() on a non-directory vnode, but it turns out that if you call it on a socket, we see EINVAL. Patch up namei to properly translate this to ENOTDIR. Modified: head/sys/kern/vfs_lookup.c Modified: head/sys/kern/vfs_lookup.c ============================================================================== --- head/sys/kern/vfs_lookup.c Wed Aug 12 16:08:37 2015 (r286669) +++ head/sys/kern/vfs_lookup.c Wed Aug 12 16:17:00 2015 (r286670) @@ -269,6 +269,8 @@ namei(struct nameidata *ndp) AUDIT_ARG_ATFD2(ndp->ni_dirfd); error = fgetvp_rights(td, ndp->ni_dirfd, &rights, &ndp->ni_filecaps, &dp); + if (error == EINVAL) + error = ENOTDIR; #ifdef CAPABILITIES /* * If file descriptor doesn't have all rights, From owner-svn-src-head@freebsd.org Wed Aug 12 16:22:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C79099A0824; Wed, 12 Aug 2015 16:22:11 +0000 (UTC) (envelope-from feld@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B3192218; Wed, 12 Aug 2015 16:22:11 +0000 (UTC) (envelope-from feld@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CGMBGS017099; Wed, 12 Aug 2015 16:22:11 GMT (envelope-from feld@FreeBSD.org) Received: (from feld@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CGMBI8017098; Wed, 12 Aug 2015 16:22:11 GMT (envelope-from feld@FreeBSD.org) Message-Id: <201508121622.t7CGMBI8017098@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: feld set sender to feld@FreeBSD.org using -f From: Mark Felder Date: Wed, 12 Aug 2015 16:22:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286671 - head/etc/rc.d X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 16:22:11 -0000 Author: feld (ports committer) Date: Wed Aug 12 16:22:10 2015 New Revision: 286671 URL: https://svnweb.freebsd.org/changeset/base/286671 Log: etc/rc.d/hostname: permit setting hostname if already set Approved by: dteske Differential Revision: https://reviews.freebsd.org/D2577 Modified: head/etc/rc.d/hostname Modified: head/etc/rc.d/hostname ============================================================================== --- head/etc/rc.d/hostname Wed Aug 12 16:17:00 2015 (r286670) +++ head/etc/rc.d/hostname Wed Aug 12 16:22:10 2015 (r286671) @@ -39,16 +39,13 @@ stop_cmd=":" hostname_start() { - # If we are not inside a jail, set the host name if it is not already set. - # If we are inside a jail, set the host name even if it is already set, - # but first check if it is permitted. + # If we are not inside a jail, set the host name. + # If we are inside a jail, set the host name if it is permitted. # if [ `$SYSCTL_N security.jail.jailed` -eq 1 ]; then if [ `$SYSCTL_N security.jail.set_hostname_allowed` -eq 0 ]; then return fi - elif [ -n "`/bin/hostname -s`" ]; then - return else # If we're not in a jail and rc.conf doesn't specify a # hostname, see if we can get one from kenv. From owner-svn-src-head@freebsd.org Wed Aug 12 16:43:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A58C89A0B86; Wed, 12 Aug 2015 16:43:16 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 96250CE0; Wed, 12 Aug 2015 16:43:16 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CGhG20025290; Wed, 12 Aug 2015 16:43:16 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CGhGbx025288; Wed, 12 Aug 2015 16:43:16 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201508121643.t7CGhGbx025288@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Wed, 12 Aug 2015 16:43:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286672 - in head: . sys/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 16:43:16 -0000 Author: imp Date: Wed Aug 12 16:43:15 2015 New Revision: 286672 URL: https://svnweb.freebsd.org/changeset/base/286672 Log: Crunchgen needs to be bootstrapped to pick up the STRIP->STRIPBIN changes to prevent the 'rescue: not found' errors from happening. Bump FreeBSD_version to 1100078 since there's been no version bumps since this change was made. Only people that installed since r284356 really need to do this bootstrapping, but since crunchgen needs to bootstrap for other reasons, bumping the number was the simplest. Modified: head/Makefile.inc1 head/sys/sys/param.h Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Wed Aug 12 16:22:10 2015 (r286671) +++ head/Makefile.inc1 Wed Aug 12 16:43:15 2015 (r286672) @@ -1304,7 +1304,8 @@ _lex= usr.bin/lex # r277259 crunchide: Correct 64-bit section header offset # r281674 crunchide: always include both 32- and 64-bit ELF support -.if ${BOOTSTRAPPING} < 1100071 +# r285986 crunchen: use STRIPBIN rather than STRIP +.if ${BOOTSTRAPPING} < 1100078 _crunch= usr.sbin/crunch .endif Modified: head/sys/sys/param.h ============================================================================== --- head/sys/sys/param.h Wed Aug 12 16:22:10 2015 (r286671) +++ head/sys/sys/param.h Wed Aug 12 16:43:15 2015 (r286672) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1100077 /* Master, propagated to newvers */ +#define __FreeBSD_version 1100078 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, From owner-svn-src-head@freebsd.org Wed Aug 12 17:05:48 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EE57899F3FC; Wed, 12 Aug 2015 17:05:47 +0000 (UTC) (envelope-from bjkfbsd@gmail.com) Received: from mail-wi0-x22c.google.com (mail-wi0-x22c.google.com [IPv6:2a00:1450:400c:c05::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8897DDA5; Wed, 12 Aug 2015 17:05:47 +0000 (UTC) (envelope-from bjkfbsd@gmail.com) Received: by wibhh20 with SMTP id hh20so38773600wib.0; Wed, 12 Aug 2015 10:05:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=K1Xy5RVE36RXgFCihjnAtDvV3hJrIxT1u/YGoazL2zM=; b=HqZPDOzKm5PaQu0FLoczhtxJB8zi6ED6vh3jWM7eFLmgY6EdtCU2FWDtnTLVcHBSsn 7T8uJcOFUus1hkmWlC8CD0c9NUHpnQs4j/d4OhyYED3zGARVSke+NZe0IFbEDVBzT9Aq n0+fJn8is9Na/3PPoCLPP/iVVQEMDpYBsAZCboM4+rn63ntelGmkjnhyrgH/1MP8poS2 MKiStCmuH4RhBP1ph0ixLn9LtmZ68Z430XNgx11lNotxCjOGEFGkfyQtAmpDErhLfS27 /BEj52/Hb06msqZcXvG+j7gfjSgNK6Y8nzCKZcP6yCRm1F9wsaXk+w7+D+guglQmib+3 cHbw== MIME-Version: 1.0 X-Received: by 10.194.57.205 with SMTP id k13mr54403013wjq.100.1439399146153; Wed, 12 Aug 2015 10:05:46 -0700 (PDT) Received: by 10.27.96.132 with HTTP; Wed, 12 Aug 2015 10:05:46 -0700 (PDT) In-Reply-To: <201508121130.t7CBUW8C095476@repo.freebsd.org> References: <201508121130.t7CBUW8C095476@repo.freebsd.org> Date: Wed, 12 Aug 2015 13:05:46 -0400 Message-ID: Subject: Re: svn commit: r286662 - head/sys/kern From: Benjamin Kaduk To: Ed Schouten Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:05:48 -0000 On Wed, Aug 12, 2015 at 7:30 AM, Ed Schouten wrote: > Author: ed > Date: Wed Aug 12 11:30:31 2015 > New Revision: 286662 > URL: https://svnweb.freebsd.org/changeset/base/286662 > > Log: > Unignore signals when starting CloudABI processes. > > As CloudABI processes cannot adjust their signal handlers, we need to > make sure that we start up CloudABI processes with consistent signal > masks. Though the POSIx standard signal behavior is all right, we do > > It ... is? I thought it caused all sorts of frustrating problems, some discussion of which is given at https://ldpreload.com/blog/signalfd-is-useless -Ben From owner-svn-src-head@freebsd.org Wed Aug 12 17:06:23 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4B02B99F44D; Wed, 12 Aug 2015 17:06:23 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3BA4CF1B; Wed, 12 Aug 2015 17:06:23 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CH6NY7033695; Wed, 12 Aug 2015 17:06:23 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CH6Nlv033694; Wed, 12 Aug 2015 17:06:23 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201508121706.t7CH6Nlv033694@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Wed, 12 Aug 2015 17:06:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286674 - head/sys/arm64/arm64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:06:23 -0000 Author: andrew Date: Wed Aug 12 17:06:22 2015 New Revision: 286674 URL: https://svnweb.freebsd.org/changeset/base/286674 Log: Set the counter-timer virtual offset to a know value, it may not have been set by the boot code and are reset to an implementation defined value that may be unknown. Sponsored by: ABT Systems Ltd Modified: head/sys/arm64/arm64/locore.S Modified: head/sys/arm64/arm64/locore.S ============================================================================== --- head/sys/arm64/arm64/locore.S Wed Aug 12 16:53:37 2015 (r286673) +++ head/sys/arm64/arm64/locore.S Wed Aug 12 17:06:22 2015 (r286674) @@ -220,6 +220,14 @@ drop_to_el1: /* Don't trap to EL2 for CP15 traps */ msr hstr_el2, xzr + /* Enable access to the physical timers at EL1 */ + mrs x2, cnthctl_el2 + orr x2, x2, #(CNTHCTL_EL1PCTEN | CNTHCTL_EL1PCEN) + msr cnthctl_el2, x2 + + /* Set the counter offset to a known value */ + msr cntvoff_el2, xzr + /* Hypervisor trap functions */ adr x2, hyp_vectors msr vbar_el2, x2 From owner-svn-src-head@freebsd.org Wed Aug 12 17:07:37 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5E16899F490; Wed, 12 Aug 2015 17:07:37 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-io0-x22d.google.com (mail-io0-x22d.google.com [IPv6:2607:f8b0:4001:c06::22d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2BA88FF; Wed, 12 Aug 2015 17:07:37 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: by iodv127 with SMTP id v127so10729023iod.3; Wed, 12 Aug 2015 10:07:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=8kswVICkNybMiOvUedVLbEFL8thQ8CVi3+OfM+Luoz0=; b=x5DDy7TN9+p34JLfcMGuVsABAU5r/BnwiSfNaFobcKyZpmmH6zZaqFtzfpM9V2nI9e yaTvtDFqBJZ4QVytxzUZG4tp+g2pSOEcTOGKCYX/nw78w1dCo0lKboYfmMuixvnXrnhX LYqA0kdun+GN+pO3h63owLMi6G3mN7aWusokhCSUXeSJgqtEK2vCHSetAuFKXfdSotO0 +ZQM8H1K3h9ADNEV47kpmY6Xd3ze75Gg+K+zfHbvBPNDOxeUl+MREdO9xdItD061cMWN SNGciNJ22ZADt3hthWOSIfl1FMi6xSQSbjdFOtpqZ8anB5IZ1By6oQ3DsEfFXXK6K4Qy nNzA== X-Received: by 10.107.47.152 with SMTP id v24mr34453014iov.180.1439399256665; Wed, 12 Aug 2015 10:07:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.136.200 with HTTP; Wed, 12 Aug 2015 10:07:10 -0700 (PDT) In-Reply-To: <201508121643.t7CGhGbx025288@repo.freebsd.org> References: <201508121643.t7CGhGbx025288@repo.freebsd.org> From: Ed Maste Date: Wed, 12 Aug 2015 13:07:10 -0400 Message-ID: Subject: Re: svn commit: r286672 - in head: . sys/sys To: Warner Losh Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:07:37 -0000 On 12 August 2015 at 12:43, Warner Losh wrote: > Only people that installed since r284356 > really need to do this bootstrapping, but since crunchgen needs to > bootstrap for other reasons, bumping the number was the simplest. Perhaps we should always leave the tests as BOOSTRAPPING < value, rather than introducing ranges. It seems to me that building a few small tools even when not necessary isn't a big price to pay for the simplicity. From owner-svn-src-head@freebsd.org Wed Aug 12 17:09:58 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B905B99F555; Wed, 12 Aug 2015 17:09:58 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A95AB2E1; Wed, 12 Aug 2015 17:09:58 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CH9wfJ033866; Wed, 12 Aug 2015 17:09:58 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CH9wP2033865; Wed, 12 Aug 2015 17:09:58 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201508121709.t7CH9wP2033865@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Wed, 12 Aug 2015 17:09:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286675 - head/sys/arm64/include X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:09:58 -0000 Author: andrew Date: Wed Aug 12 17:09:57 2015 New Revision: 286675 URL: https://svnweb.freebsd.org/changeset/base/286675 Log: Add the CNTHCTL_EL2 register bits missed in r286674 Modified: head/sys/arm64/include/armreg.h Modified: head/sys/arm64/include/armreg.h ============================================================================== --- head/sys/arm64/include/armreg.h Wed Aug 12 17:06:22 2015 (r286674) +++ head/sys/arm64/include/armreg.h Wed Aug 12 17:09:57 2015 (r286675) @@ -41,6 +41,13 @@ #define WRITE_SPECIALREG(reg, val) \ __asm __volatile("msr " __STRING(reg) ", %0" : : "r"((uint64_t)val)) +/* CNTHCTL_EL2 - Counter-timer Hypervisor Control register */ +#define CNTHCTL_EVNTI_MASK (0xf << 4) /* Bit to trigger event stream */ +#define CNTHCTL_EVNTDIR (1 << 3) /* Control transition trigger bit */ +#define CNTHCTL_EVNTEN (1 << 2) /* Enable event stream */ +#define CNTHCTL_EL1PCEN (1 << 1) /* Allow EL0/1 physical timer access */ +#define CNTHCTL_EL1PCTEN (1 << 0) /*Allow EL0/1 physical counter access*/ + /* CPACR_EL1 */ #define CPACR_FPEN_MASK (0x3 << 20) #define CPACR_FPEN_TRAP_ALL1 (0x0 << 20) /* Traps from EL0 and EL1 */ From owner-svn-src-head@freebsd.org Wed Aug 12 17:15:20 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 015D399F6AD for ; Wed, 12 Aug 2015 17:15:19 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from mail-pd0-f178.google.com (mail-pd0-f178.google.com [209.85.192.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BE76D9E3 for ; Wed, 12 Aug 2015 17:15:19 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: by pdbfa8 with SMTP id fa8so9359193pdb.1 for ; Wed, 12 Aug 2015 10:15:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:subject:mime-version:content-type:from :in-reply-to:date:cc:message-id:references:to; bh=06ob1C5kfbeEh+j0qUOO8ektL/TCax4krZzzuMjHC1g=; b=FP+e71xZSq6MS9tK+jgSjFQPXoSwkpsygp97ZPcGPCGVR7jGJaiFzbAe0GaSi++BAA dOVgupBSny1G+x8XteTgB5D38cqisVZMoKPZ9aRJ1RtqZvZTaJYJEHeYwNxI6ZgW6Jxe Xr7qXiSfDoCvN4SsUJ9d629UlToFaY0SECMTN5UeMbHlEyEQI+3JY/7VVA0DtvCiywgG y6AFy0CMo+/G+LG2o4WglvbX1TTTCPdHLzx/K7MIMAZxBJ1J94emCNv+mH8F7ODnM3De PjPLBCzXfJwpuXDaS5yThy/NH6W+su8XN36ISem3ajZu7kZpkYKRt6KvXTrTaFf7LAGD khuw== X-Gm-Message-State: ALoCoQmpE+neppDPdIK41SU2g/NoYPQKBlcKwR1f63rNKI2rwyz0+lSA9GrSTj94bFxkEo1GN6sY X-Received: by 10.70.14.36 with SMTP id m4mr68686798pdc.117.1439399713564; Wed, 12 Aug 2015 10:15:13 -0700 (PDT) Received: from netflix-mac-wired.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id ow5sm7121282pdb.30.2015.08.12.10.15.11 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 12 Aug 2015 10:15:12 -0700 (PDT) Sender: Warner Losh Subject: Re: svn commit: r286672 - in head: . sys/sys Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Content-Type: multipart/signed; boundary="Apple-Mail=_DC773D34-D213-484E-8EB3-763641D6932F"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail 2.5 From: Warner Losh In-Reply-To: Date: Wed, 12 Aug 2015 11:15:09 -0600 Cc: Warner Losh , "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Message-Id: <8842A35F-69C3-468F-9362-DE6B56F51F09@bsdimp.com> References: <201508121643.t7CGhGbx025288@repo.freebsd.org> To: Ed Maste X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:15:20 -0000 --Apple-Mail=_DC773D34-D213-484E-8EB3-763641D6932F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Aug 12, 2015, at 11:07 AM, Ed Maste wrote: >=20 > On 12 August 2015 at 12:43, Warner Losh wrote: >> Only people that installed since r284356 >> really need to do this bootstrapping, but since crunchgen needs to >> bootstrap for other reasons, bumping the number was the simplest. >=20 > Perhaps we should always leave the tests as BOOSTRAPPING < value, > rather than introducing ranges. It seems to me that building a few > small tools even when not necessary isn't a big price to pay for the > simplicity. I tend to agree, and that=E2=80=99s why I left it like this on -current. For stable, I could see both sides. If I made the test strictly <, then it would effectively always build on the most common scenario of building stable on stable. I opted to include a comment about the window on -stable. I also plan on removing it after a few months since this window was so short relatively to the release cycle. Several folks had comments about this issue, which is why I went ahead and put the seat belts in place, at least for now. Warner --Apple-Mail=_DC773D34-D213-484E-8EB3-763641D6932F Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVy38eAAoJEGwc0Sh9sBEAFa4P/3fIgak2GBC3iHBCoLWLcUDb TbA/3YdPKg52BEUSgYBcOlxMFkmQYSmR+Qb6K5fr3TTh7wfNf+2U/OzDPImzVOlR EVASJs8Tvci1IJp9WuOxSfK36NFbeKoam98L7bxWFx2ZRVkkJbacS6uUDTiqZOIf 1uls5lTUmhonNekW4S+kWTF6fiXzJWwz0ih+1g/CDWcT7rCxwraHSX90gIhW2tvX 2IwPMrf8lW5TijgEa/vqB20cmwPzK560VLVJXSUQkz+wz77ixrcWcERGN9xIAWZV DWlCxoTmufm+/quRMVRsKaz5rhBTlo6i86kjWLafP3fr05/aupjaI+5ZlcFzcThF zOT34Zgu8db2cDg26pvxQk0YTiFITm7mm5U62iztClIFwETh9jI8NbZCbQKPSslj lJgWk7IAxmK42W6qOSMMmO4FzLulFlvpqpZcZBEyTsgLB05GU3+OzD3MCC8yJQpB lH1v5cdQ5HEZ+h4+pYRvJPHk1wHJBHSjkl6ftug9PRCmOaZFObcHPIG0TdqdSP93 rnHP4QsJe+lE3JJ8RnuN+dcoS8waL3VwPkLXJ9D7n/UU/CvGMwkgk+KG79fFBD1p ydq11pbast3J70PYi3ee8CsB025r4VBa9JghC/uF1tKt88sgf1MdxWAKbYYgcpSc wBKESLxGXH7tfqjQZ8f+ =0heM -----END PGP SIGNATURE----- --Apple-Mail=_DC773D34-D213-484E-8EB3-763641D6932F-- From owner-svn-src-head@freebsd.org Wed Aug 12 17:19:53 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 33C1899F7B8; Wed, 12 Aug 2015 17:19:53 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 24A8ECED; Wed, 12 Aug 2015 17:19:53 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CHJrhK037911; Wed, 12 Aug 2015 17:19:53 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CHJr4i037910; Wed, 12 Aug 2015 17:19:53 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201508121719.t7CHJr4i037910@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Wed, 12 Aug 2015 17:19:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286676 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:19:53 -0000 Author: imp Date: Wed Aug 12 17:19:52 2015 New Revision: 286676 URL: https://svnweb.freebsd.org/changeset/base/286676 Log: Why on earth have we been building rescue as a build tool for the past 12 years? Nothing downstream in the build uses it. Eliminate it as a build tool. Reviewed by: emaste@ ("just delete it") Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Wed Aug 12 17:09:57 2015 (r286675) +++ head/Makefile.inc1 Wed Aug 12 17:19:52 2015 (r286676) @@ -1432,15 +1432,10 @@ _share= share/syscons/scrnmaps _gcc_tools= gnu/usr.bin/cc/cc_tools .endif -.if ${MK_RESCUE} != "no" -_rescue= rescue/rescue -.endif - build-tools: .MAKE .for _tool in \ bin/csh \ bin/sh \ - ${_rescue} \ ${LOCAL_TOOL_DIRS} \ lib/ncurses/ncurses \ lib/ncurses/ncursesw \ From owner-svn-src-head@freebsd.org Wed Aug 12 17:21:42 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 582C099F95F; Wed, 12 Aug 2015 17:21:42 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 45115135; Wed, 12 Aug 2015 17:21:42 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CHLgpn039234; Wed, 12 Aug 2015 17:21:42 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CHLfPi039232; Wed, 12 Aug 2015 17:21:41 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508121721.t7CHLfPi039232@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 12 Aug 2015 17:21:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286677 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:21:42 -0000 Author: mav Date: Wed Aug 12 17:21:41 2015 New Revision: 286677 URL: https://svnweb.freebsd.org/changeset/base/286677 Log: MFV r286224: 5695 dmu_sync'ed holes do not retain birth time illumos/illumos-gate@70163ac57e58ace1c5c94dfbe85dca5a974eff36 https://www.illumos.org/issues/5695 In dmu_sync_ready(), a hole block pointer will have it's logical size explicitly set as it's necessary for replay purposes. To "undo" this, dmu_sync_done() will zero out any hole that it finds. This becomes a problem when using the "hole_birth" feature, as this will also wipe out any birth time that might have happened to be set on the hole. ... As a fix, the logic to zero out a hole is only applied to old style holes with a birth time of zero. Holes created with the "hole_birth" feature enabled will have a non-zero birth time, and will be skipped (thus preserving the ltime, type, and level information as well). In addition, zdb was updated to also print the ltime, type, and level information for these new style holes. Previously, only the logical birth time would be printed. Author: Prakash Surya Reviewed by: Matthew Ahrens Reviewed by: George Wilson Reviewed by: Christopher Siden Reviewed by: Bayard Bell Approved by: Dan McDonald Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Wed Aug 12 17:19:52 2015 (r286676) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Wed Aug 12 17:21:41 2015 (r286677) @@ -1484,7 +1484,19 @@ dmu_sync_done(zio_t *zio, arc_buf_t *buf dr->dt.dl.dr_overridden_by = *zio->io_bp; dr->dt.dl.dr_override_state = DR_OVERRIDDEN; dr->dt.dl.dr_copies = zio->io_prop.zp_copies; - if (BP_IS_HOLE(&dr->dt.dl.dr_overridden_by)) + + /* + * Old style holes are filled with all zeros, whereas + * new-style holes maintain their lsize, type, level, + * and birth time (see zio_write_compress). While we + * need to reset the BP_SET_LSIZE() call that happened + * in dmu_sync_ready for old style holes, we do *not* + * want to wipe out the information contained in new + * style holes. Thus, only zero out the block pointer if + * it's an old style hole. + */ + if (BP_IS_HOLE(&dr->dt.dl.dr_overridden_by) && + dr->dt.dl.dr_overridden_by.blk_birth == 0) BP_ZERO(&dr->dt.dl.dr_overridden_by); } else { dr->dt.dl.dr_override_state = DR_NOT_OVERRIDDEN; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h Wed Aug 12 17:19:52 2015 (r286676) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h Wed Aug 12 17:21:41 2015 (r286677) @@ -536,12 +536,13 @@ _NOTE(CONSTCOND) } while (0) if (bp == NULL) { \ len += func(buf + len, size - len, ""); \ } else if (BP_IS_HOLE(bp)) { \ - len += func(buf + len, size - len, ""); \ - if (bp->blk_birth > 0) { \ - len += func(buf + len, size - len, \ - " birth=%lluL", \ - (u_longlong_t)bp->blk_birth); \ - } \ + len += func(buf + len, size - len, \ + "HOLE [L%llu %s] " \ + "size=%llxL birth=%lluL", \ + (u_longlong_t)BP_GET_LEVEL(bp), \ + type, \ + (u_longlong_t)BP_GET_LSIZE(bp), \ + (u_longlong_t)bp->blk_birth); \ } else if (BP_IS_EMBEDDED(bp)) { \ len = func(buf + len, size - len, \ "EMBEDDED [L%llu %s] et=%u %s " \ From owner-svn-src-head@freebsd.org Wed Aug 12 17:23:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 76D1299F9CC; Wed, 12 Aug 2015 17:23:16 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4EE0B63C; Wed, 12 Aug 2015 17:23:16 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CHNGfZ041784; Wed, 12 Aug 2015 17:23:16 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CHNFWm041782; Wed, 12 Aug 2015 17:23:15 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508121723.t7CHNFWm041782@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Wed, 12 Aug 2015 17:23:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286678 - head/sys/arm/ti X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:23:16 -0000 Author: ian Date: Wed Aug 12 17:23:15 2015 New Revision: 286678 URL: https://svnweb.freebsd.org/changeset/base/286678 Log: Add a routine to return the hardware instance/unit number from ti,hwmods, given the hardware name. The ti,hwmods property is used (among other things) to associate an fdt node with a specific instance of some hardware. For example given a device node that contains the property ti,hwmods = "timer3", if you call this passing "timer" as the hwmod string to look for it would return 3. Modified: head/sys/arm/ti/ti_hwmods.c head/sys/arm/ti/ti_hwmods.h Modified: head/sys/arm/ti/ti_hwmods.c ============================================================================== --- head/sys/arm/ti/ti_hwmods.c Wed Aug 12 17:21:41 2015 (r286677) +++ head/sys/arm/ti/ti_hwmods.c Wed Aug 12 17:23:15 2015 (r286678) @@ -168,3 +168,35 @@ int ti_hwmods_contains(device_t dev, con return (result); } + +int +ti_hwmods_get_unit(device_t dev, const char *hwmod) +{ + phandle_t node; + int l, len, hwmodlen, result; + char *name; + char *buf; + + if ((node = ofw_bus_get_node(dev)) == 0) + return (0); + + if ((len = OF_getprop_alloc(node, "ti,hwmods", 1, (void**)&name)) <= 0) + return (0); + + buf = name; + hwmodlen = strlen(hwmod); + result = 0; + while (len > 0) { + if (strncmp(name, hwmod, hwmodlen) == 0) { + result = (int)strtoul(name + hwmodlen, NULL, 10); + break; + } + /* Slide to the next sub-string. */ + l = strlen(name) + 1; + name += l; + len -= l; + } + + free(buf, M_OFWPROP); + return (result); +} Modified: head/sys/arm/ti/ti_hwmods.h ============================================================================== --- head/sys/arm/ti/ti_hwmods.h Wed Aug 12 17:21:41 2015 (r286677) +++ head/sys/arm/ti/ti_hwmods.h Wed Aug 12 17:23:15 2015 (r286678) @@ -31,4 +31,7 @@ clk_ident_t ti_hwmods_get_clock(device_t dev); int ti_hwmods_contains(device_t dev, const char *hwmod); +/* Returns the N from "hwmodN" in the ti,hwmods property; 0 on failure. */ +int ti_hwmods_get_unit(device_t dev, const char *hwmod); + #endif /* _TI_HWMODS_H_ */ From owner-svn-src-head@freebsd.org Wed Aug 12 17:32:59 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8D77499FBF3; Wed, 12 Aug 2015 17:32:59 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7434BB3B; Wed, 12 Aug 2015 17:32:59 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CHWxXI045805; Wed, 12 Aug 2015 17:32:59 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CHWx22045804; Wed, 12 Aug 2015 17:32:59 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508121732.t7CHWx22045804@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 12 Aug 2015 17:32:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286679 - in head: cddl/contrib/opensolaris cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensolaris/lib/libzfs sys/cddl/contr... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:32:59 -0000 Author: mav Date: Wed Aug 12 17:32:58 2015 New Revision: 286679 URL: https://svnweb.freebsd.org/changeset/base/286679 Log: Record mergeinfo. Modified: Directory Properties: head/cddl/contrib/opensolaris/ (props changed) head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/ (props changed) head/cddl/contrib/opensolaris/cmd/zfs/ (props changed) head/cddl/contrib/opensolaris/lib/libzfs/ (props changed) head/sys/cddl/contrib/opensolaris/ (props changed) From owner-svn-src-head@freebsd.org Wed Aug 12 17:37:47 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9652299FCEF for ; Wed, 12 Aug 2015 17:37:47 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-ob0-f180.google.com (mail-ob0-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 235E9E2D for ; Wed, 12 Aug 2015 17:37:46 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by obbhe7 with SMTP id he7so18302554obb.0 for ; Wed, 12 Aug 2015 10:37:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=g/XxFW3AUsc1XFlZmeswzjEN5YaDgCABBxA5rFOGoAc=; b=cza5NtRsKVxm/M1hpxxW4EYbgbh1wdkQZvqVH1WUyJ428FSl/OqOT63V2Z0c6zkSaV Btw98p1WJIKjsbEkD/Qu15pB4KB1X/IrTkOG0lZKR93EPdG/MwEexy2oDVRiZOvkpE4Q vnBNN9FbBy+D0quvEDjuF2egL+VO6cXf5MuIo2fpn5cBqL98btuBGJNHdLVAIYNjIeSQ YB/y0MYO5TFax5Q+unnh5JHfE35U0+0dyRkRzNOLM/1qLxP58EyFhkaC0uba6cj5sxO9 X9ckDGUsndIP7/X74C7wA0pluplowVVeFteUsXtlS1NPpfOoeTv7J0Sozs+gi9uDvdX0 OeZA== X-Gm-Message-State: ALoCoQkr3aiG3DNtwe0wn6MHacemyzM9+zMqkb0jtnnhPXn4sAskZdoh+v1iNn+htGkOzdR+Ij8V MIME-Version: 1.0 X-Received: by 10.60.74.193 with SMTP id w1mr30709913oev.33.1439401060146; Wed, 12 Aug 2015 10:37:40 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Wed, 12 Aug 2015 10:37:40 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <201508121526.t7CFQWHM091851@repo.freebsd.org> References: <201508121526.t7CFQWHM091851@repo.freebsd.org> Date: Wed, 12 Aug 2015 19:37:40 +0200 Message-ID: Subject: Re: svn commit: r286667 - in head/sys: amd64/amd64 conf dev/vt/hw/efifb dev/vt/hw/vga i386/i386 x86/include x86/x86 From: Ed Schouten To: Marcel Moolenaar Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:37:47 -0000 Hi Marcel, 2015-08-12 17:26 GMT+02:00 Marcel Moolenaar : > Better support memory mapped console devices, such as VGA and EFI > frame buffers and memory mapped UARTs. This change causes my FreeBSD instance in Virtualbox 4.3.28 (OS X) to crash. As soon as the kernel initializes the graphics on startup (read: before printing any messages), I see random garbage appear on screen, followed by a popup dialog from Virtualbox that a fatal machine exception has occurred. HTH, -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Wed Aug 12 17:42:21 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4EAC899FEB9; Wed, 12 Aug 2015 17:42:21 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3B1241DD; Wed, 12 Aug 2015 17:42:21 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CHgLIX049938; Wed, 12 Aug 2015 17:42:21 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CHgLGS049937; Wed, 12 Aug 2015 17:42:21 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508121742.t7CHgLGS049937@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 12 Aug 2015 17:42:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286680 - head/sys/compat/cloudabi64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:42:21 -0000 Author: ed Date: Wed Aug 12 17:42:20 2015 New Revision: 286680 URL: https://svnweb.freebsd.org/changeset/base/286680 Log: Add the last remaining system calls: send() and recv(). There is still one TODO item for these calls: add file descriptor passing. The data structures are already prepared for this. It's just the translation that's missing. Obtained from: http://github.com/NuxiNL/freebsd Modified: head/sys/compat/cloudabi64/cloudabi64_sock.c Modified: head/sys/compat/cloudabi64/cloudabi64_sock.c ============================================================================== --- head/sys/compat/cloudabi64/cloudabi64_sock.c Wed Aug 12 17:32:58 2015 (r286679) +++ head/sys/compat/cloudabi64/cloudabi64_sock.c Wed Aug 12 17:42:20 2015 (r286680) @@ -26,23 +26,119 @@ #include __FBSDID("$FreeBSD$"); +#include +#include +#include +#include +#include +#include +#include +#include + +#include + #include #include +static MALLOC_DEFINE(M_SOCKET, "socket", "CloudABI socket"); + int cloudabi64_sys_sock_recv(struct thread *td, struct cloudabi64_sys_sock_recv_args *uap) { + struct sockaddr_storage ss; + cloudabi64_recv_in_t ri; + cloudabi64_recv_out_t ro = {}; + cloudabi64_iovec_t iovobj; + struct msghdr msghdr = {}; + size_t i; + int error; + + error = copyin(uap->in, &ri, sizeof(ri)); + if (error != 0) + return (error); + + /* Convert results in cloudabi_recv_in_t to struct msghdr. */ + if (ri.ri_datalen > UIO_MAXIOV) + return (EINVAL); + msghdr.msg_iovlen = ri.ri_datalen; + msghdr.msg_iov = malloc(msghdr.msg_iovlen * sizeof(struct iovec), + M_SOCKET, M_WAITOK); + for (i = 0; i < msghdr.msg_iovlen; i++) { + error = copyin(&((cloudabi64_iovec_t *)ri.ri_data)[i], &iovobj, + sizeof(iovobj)); + if (error != 0) { + free(msghdr.msg_iov, M_SOCKET); + return (error); + } + msghdr.msg_iov[i].iov_base = (void *)iovobj.iov_base; + msghdr.msg_iov[i].iov_len = iovobj.iov_len; + } + msghdr.msg_name = &ss; + msghdr.msg_namelen = sizeof(ss); + if (ri.ri_flags & CLOUDABI_MSG_PEEK) + msghdr.msg_flags |= MSG_PEEK; + if (ri.ri_flags & CLOUDABI_MSG_WAITALL) + msghdr.msg_flags |= MSG_WAITALL; - /* Not implemented. */ - return (ENOSYS); + /* TODO(ed): Add file descriptor passing. */ + error = kern_recvit(td, uap->s, &msghdr, UIO_SYSSPACE, NULL); + free(msghdr.msg_iov, M_SOCKET); + if (error != 0) + return (error); + + /* Convert results in msghdr to cloudabi_recv_out_t. */ + ro.ro_datalen = td->td_retval[0]; + cloudabi_convert_sockaddr((struct sockaddr *)&ss, + MIN(msghdr.msg_namelen, sizeof(ss)), &ro.ro_peername); + td->td_retval[0] = 0; + return (copyout(&ro, uap->out, sizeof(ro))); } int cloudabi64_sys_sock_send(struct thread *td, struct cloudabi64_sys_sock_send_args *uap) { + cloudabi64_send_in_t si; + cloudabi64_send_out_t so = {}; + cloudabi64_ciovec_t iovobj; + struct msghdr msghdr = {}; + size_t i; + int error, flags; + + error = copyin(uap->in, &si, sizeof(si)); + if (error != 0) + return (error); + + /* Convert results in cloudabi_send_in_t to struct msghdr. */ + if (si.si_datalen > UIO_MAXIOV) + return (EINVAL); + msghdr.msg_iovlen = si.si_datalen; + msghdr.msg_iov = malloc(msghdr.msg_iovlen * sizeof(struct iovec), + M_SOCKET, M_WAITOK); + for (i = 0; i < msghdr.msg_iovlen; i++) { + error = copyin(&((cloudabi64_ciovec_t *)si.si_data)[i], &iovobj, + sizeof(iovobj)); + if (error != 0) { + free(msghdr.msg_iov, M_SOCKET); + return (error); + } + msghdr.msg_iov[i].iov_base = (void *)iovobj.iov_base; + msghdr.msg_iov[i].iov_len = iovobj.iov_len; + } + + flags = MSG_NOSIGNAL; + if (si.si_flags & CLOUDABI_MSG_EOR) + flags |= MSG_EOR; + + /* TODO(ed): Add file descriptor passing. */ + error = kern_sendit(td, uap->s, &msghdr, flags, NULL, UIO_USERSPACE); + free(msghdr.msg_iov, M_SOCKET); + if (error != 0) + return (error); - /* Not implemented. */ - return (ENOSYS); + /* Convert results in msghdr to cloudabi_send_out_t. */ + so.so_datalen = td->td_retval[0]; + td->td_retval[0] = 0; + return (copyout(&so, uap->out, sizeof(so))); } From owner-svn-src-head@freebsd.org Wed Aug 12 17:46:27 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 59A3599FF94; Wed, 12 Aug 2015 17:46:27 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4AD44660; Wed, 12 Aug 2015 17:46:27 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CHkRdc050172; Wed, 12 Aug 2015 17:46:27 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CHkR4B050171; Wed, 12 Aug 2015 17:46:27 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508121746.t7CHkR4B050171@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 12 Aug 2015 17:46:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286681 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:46:27 -0000 Author: ed Date: Wed Aug 12 17:46:26 2015 New Revision: 286681 URL: https://svnweb.freebsd.org/changeset/base/286681 Log: Perform cleanups in response to D3307. - Document the kern_kevent_anonymous() function. - Add assertions to ensure that we don't silently leave the kqueue linked from a file descriptor table. Reviewed by: jmg Differential Revision: https://reviews.freebsd.org/D3364 Modified: head/sys/kern/kern_event.c Modified: head/sys/kern/kern_event.c ============================================================================== --- head/sys/kern/kern_event.c Wed Aug 12 17:42:20 2015 (r286680) +++ head/sys/kern/kern_event.c Wed Aug 12 17:46:26 2015 (r286681) @@ -975,6 +975,10 @@ kern_kevent_fp(struct thread *td, struct return (error); } +/* + * Performs a kevent() call on a temporarily created kqueue. This can be + * used to perform one-shot polling, similar to poll() and select(). + */ int kern_kevent_anonymous(struct thread *td, int nevents, struct kevent_copyops *k_ops) @@ -1831,6 +1835,8 @@ static void kqueue_destroy(struct kqueue *kq) { + KASSERT(kq->kq_fdp == NULL, + ("kqueue still attached to a file descriptor")); seldrain(&kq->kq_sel); knlist_destroy(&kq->kq_sel.si_note); mtx_destroy(&kq->kq_lock); @@ -1863,6 +1869,7 @@ kqueue_close(struct file *fp, struct thr * take the sleepable lock after non-sleepable. */ fdp = kq->kq_fdp; + kq->kq_fdp = NULL; if (!sx_xlocked(FILEDESC_LOCK(fdp))) { FILEDESC_XLOCK(fdp); filedesc_unlock = 1; From owner-svn-src-head@freebsd.org Wed Aug 12 17:55:44 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 02DDA9A0170; Wed, 12 Aug 2015 17:55:44 +0000 (UTC) (envelope-from marcel@xcllnt.net) Received: from mail.xcllnt.net (mail.xcllnt.net [50.0.150.214]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B5E98B12; Wed, 12 Aug 2015 17:55:43 +0000 (UTC) (envelope-from marcel@xcllnt.net) Received: from marcels-mbp.int.brkt.com (cerberus.brkt.com [208.185.168.138]) (authenticated bits=0) by mail.xcllnt.net (8.15.2/8.15.2) with ESMTPSA id t7CHtg2K002149 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 12 Aug 2015 10:55:42 -0700 (PDT) (envelope-from marcel@xcllnt.net) Subject: Re: svn commit: r286667 - in head/sys: amd64/amd64 conf dev/vt/hw/efifb dev/vt/hw/vga i386/i386 x86/include x86/x86 Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Content-Type: multipart/signed; boundary="Apple-Mail=_A7E52580-AA76-4410-8D90-5F65FE55C2E6"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail 2.5 From: Marcel Moolenaar In-Reply-To: Date: Wed, 12 Aug 2015 10:55:36 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org, Ed Maste Message-Id: <1FE0AD63-7460-4E23-88A0-2C61950890F0@xcllnt.net> References: <201508121526.t7CFQWHM091851@repo.freebsd.org> To: Ed Schouten X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 17:55:44 -0000 --Apple-Mail=_A7E52580-AA76-4410-8D90-5F65FE55C2E6 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii [CC ed] > On Aug 12, 2015, at 10:37 AM, Ed Schouten wrote: > > Hi Marcel, > > 2015-08-12 17:26 GMT+02:00 Marcel Moolenaar : >> Better support memory mapped console devices, such as VGA and EFI >> frame buffers and memory mapped UARTs. > > This change causes my FreeBSD instance in Virtualbox 4.3.28 (OS X) to > crash. As soon as the kernel initializes the graphics on startup > (read: before printing any messages), I see random garbage appear on > screen, followed by a popup dialog from Virtualbox that a fatal > machine exception has occurred. Would you mind creating a PR so that we can track the various console issues pre and post this change. Details as to how to reproduce would be much appreciated! Thanks, -- Marcel Moolenaar marcel@xcllnt.net --Apple-Mail=_A7E52580-AA76-4410-8D90-5F65FE55C2E6 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVy4iYAAoJEIda8t8f0tjjYSMP/RZ5hR56VyHhRXUECfdeQlG5 +vk9XizRKnQDuKYXFsvHxebK0lzSu8vdUXph5B8e12KtKujjI7nTNHjKtWrp/lc+ cXFQSE028IokvcUWkRHU6D0HWsh1/cJucQzV/U9JtVuLZx7ThL4yURe3g7ykWVdl d1f35JnioqA/CBXwpy1JTuQUwfvAhMOrD7F1FAlq/Kb7ldQANEu1Uo0XoXOrBLfL v6B6iV6aRDl+95fgmux5CyihV1UjjlW2I776parl7fCI9HzMdKTXJfsobzR+Y3i6 sRnqY4phQEPmM/HcNm/lWEjDhV6V931AtzP72bvFGP/euBcPlA7T4Iv2xKWAZleW AzazWpuztpziZrHYIbAkMg3064tWunYbXRNSpqnNpunBN0AAS/ido/QSfVX93oo/ 8v18lzlb4dMyz7wqICCrhowwTMGQBSyvbMSwuN7x1GxxM1nj5nDHY4FguIHa7K4p +6u20EU6QCQv+785euWc9+/q9XXq0e95Mwn8KULUmWsPSyG4BJ+WQrcPMEkfwWOG WvGf7gb34aKcqx3w2XUhiKrwN4i58CIxhr2e/8EdYu2/dB914cT0/A3/vFMtNLow vX5Z2pFAj04N/5iqfAkQWii1NTMEtETP3X8/iv7CzCYxgKbQl3xXsG09WAJ6geAI 43L5BbkbqOWF2C5lYvX1 =mXot -----END PGP SIGNATURE----- --Apple-Mail=_A7E52580-AA76-4410-8D90-5F65FE55C2E6-- From owner-svn-src-head@freebsd.org Wed Aug 12 18:23:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 14A8B9A08C3; Wed, 12 Aug 2015 18:23:11 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 02CBBC8; Wed, 12 Aug 2015 18:23:11 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CINAlY066868; Wed, 12 Aug 2015 18:23:10 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CIN9Lk066863; Wed, 12 Aug 2015 18:23:09 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508121823.t7CIN9Lk066863@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 12 Aug 2015 18:23:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286683 - in head: cddl/contrib/opensolaris/lib/libzfs_core/common sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 18:23:11 -0000 Author: mav Date: Wed Aug 12 18:23:08 2015 New Revision: 286683 URL: https://svnweb.freebsd.org/changeset/base/286683 Log: MFV r286682: 5765 add support for estimating send stream size with lzc_send_space when source is a bookmark Reviewed by: Matthew Ahrens Reviewed by: Christopher Siden Reviewed by: Steven Hartland Reviewed by: Bayard Bell Approved by: Albert Lee Author: Max Grossman illumos/illumos-gate@643da460c8ca583e39ce053081754e24087f84c8 Modified: head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c ============================================================================== --- head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Wed Aug 12 18:08:40 2015 (r286682) +++ head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Wed Aug 12 18:23:08 2015 (r286683) @@ -20,7 +20,7 @@ */ /* - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. * Copyright (c) 2013 Steven Hartland. All rights reserved. */ @@ -532,18 +532,30 @@ lzc_send(const char *snapname, const cha } /* - * If fromsnap is NULL, a full (non-incremental) stream will be estimated. + * "from" can be NULL, a snapshot, or a bookmark. + * + * If from is NULL, a full (non-incremental) stream will be estimated. This + * is calculated very efficiently. + * + * If from is a snapshot, lzc_send_space uses the deadlists attached to + * each snapshot to efficiently estimate the stream size. + * + * If from is a bookmark, the indirect blocks in the destination snapshot + * are traversed, looking for blocks with a birth time since the creation TXG of + * the snapshot this bookmark was created from. This will result in + * significantly more I/O and be less efficient than a send space estimation on + * an equivalent snapshot. */ int -lzc_send_space(const char *snapname, const char *fromsnap, uint64_t *spacep) +lzc_send_space(const char *snapname, const char *from, uint64_t *spacep) { nvlist_t *args; nvlist_t *result; int err; args = fnvlist_alloc(); - if (fromsnap != NULL) - fnvlist_add_string(args, "fromsnap", fromsnap); + if (from != NULL) + fnvlist_add_string(args, "from", from); err = lzc_ioctl(ZFS_IOC_SEND_SPACE, snapname, args, &result); nvlist_free(args); if (err == 0) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Aug 12 18:08:40 2015 (r286682) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Aug 12 18:23:08 2015 (r286683) @@ -856,6 +856,40 @@ dmu_send(const char *tosnap, const char return (err); } +static int +dmu_adjust_send_estimate_for_indirects(dsl_dataset_t *ds, uint64_t size, + uint64_t *sizep) +{ + int err; + /* + * Assume that space (both on-disk and in-stream) is dominated by + * data. We will adjust for indirect blocks and the copies property, + * but ignore per-object space used (eg, dnodes and DRR_OBJECT records). + */ + + /* + * Subtract out approximate space used by indirect blocks. + * Assume most space is used by data blocks (non-indirect, non-dnode). + * Assume all blocks are recordsize. Assume ditto blocks and + * internal fragmentation counter out compression. + * + * Therefore, space used by indirect blocks is sizeof(blkptr_t) per + * block, which we observe in practice. + */ + uint64_t recordsize; + err = dsl_prop_get_int_ds(ds, "recordsize", &recordsize); + if (err != 0) + return (err); + size -= size / recordsize * sizeof (blkptr_t); + + /* Add in the space for the record associated with each block. */ + size += size / recordsize * sizeof (dmu_replay_record_t); + + *sizep = size; + + return (0); +} + int dmu_send_estimate(dsl_dataset_t *ds, dsl_dataset_t *fromds, uint64_t *sizep) { @@ -891,33 +925,61 @@ dmu_send_estimate(dsl_dataset_t *ds, dsl return (err); } - /* - * Assume that space (both on-disk and in-stream) is dominated by - * data. We will adjust for indirect blocks and the copies property, - * but ignore per-object space used (eg, dnodes and DRR_OBJECT records). - */ + err = dmu_adjust_send_estimate_for_indirects(ds, size, sizep); + return (err); +} + +/* + * Simple callback used to traverse the blocks of a snapshot and sum their + * uncompressed size + */ +/* ARGSUSED */ +static int +dmu_calculate_send_traversal(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const dnode_phys_t *dnp, void *arg) +{ + uint64_t *spaceptr = arg; + if (bp != NULL && !BP_IS_HOLE(bp)) { + *spaceptr += BP_GET_UCSIZE(bp); + } + return (0); +} + +/* + * Given a desination snapshot and a TXG, calculate the approximate size of a + * send stream sent from that TXG. from_txg may be zero, indicating that the + * whole snapshot will be sent. + */ +int +dmu_send_estimate_from_txg(dsl_dataset_t *ds, uint64_t from_txg, + uint64_t *sizep) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + int err; + uint64_t size = 0; + + ASSERT(dsl_pool_config_held(dp)); + + /* tosnap must be a snapshot */ + if (!dsl_dataset_is_snapshot(ds)) + return (SET_ERROR(EINVAL)); + + /* verify that from_txg is before the provided snapshot was taken */ + if (from_txg >= dsl_dataset_phys(ds)->ds_creation_txg) { + return (SET_ERROR(EXDEV)); + } /* - * Subtract out approximate space used by indirect blocks. - * Assume most space is used by data blocks (non-indirect, non-dnode). - * Assume all blocks are recordsize. Assume ditto blocks and - * internal fragmentation counter out compression. - * - * Therefore, space used by indirect blocks is sizeof(blkptr_t) per - * block, which we observe in practice. + * traverse the blocks of the snapshot with birth times after + * from_txg, summing their uncompressed size */ - uint64_t recordsize; - err = dsl_prop_get_int_ds(ds, "recordsize", &recordsize); - if (err != 0) + err = traverse_dataset(ds, from_txg, TRAVERSE_POST, + dmu_calculate_send_traversal, &size); + if (err) return (err); - size -= size / recordsize * sizeof (blkptr_t); - - /* Add in the space for the record associated with each block. */ - size += size / recordsize * sizeof (dmu_replay_record_t); - - *sizep = size; - return (0); + err = dmu_adjust_send_estimate_for_indirects(ds, size, sizep); + return (err); } typedef struct dmu_recv_begin_arg { Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h Wed Aug 12 18:08:40 2015 (r286682) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h Wed Aug 12 18:23:08 2015 (r286683) @@ -21,7 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. * Copyright 2011 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. */ @@ -45,6 +45,8 @@ int dmu_send(const char *tosnap, const c #endif int dmu_send_estimate(struct dsl_dataset *ds, struct dsl_dataset *fromds, uint64_t *sizep); +int dmu_send_estimate_from_txg(struct dsl_dataset *ds, uint64_t fromtxg, + uint64_t *sizep); int dmu_send_obj(const char *pool, uint64_t tosnap, uint64_t fromsnap, boolean_t embedok, boolean_t large_block_ok, #ifdef illumos Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Wed Aug 12 18:08:40 2015 (r286682) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Wed Aug 12 18:23:08 2015 (r286683) @@ -201,6 +201,9 @@ dsl_dataset_phys(dsl_dataset_t *ds) */ #define MAX_TAG_PREFIX_LEN 17 +#define dsl_dataset_is_snapshot(ds) \ + (dsl_dataset_phys(ds)->ds_num_children != 0) + #define DS_UNIQUE_IS_ACCURATE(ds) \ ((dsl_dataset_phys(ds)->ds_flags & DS_FLAG_UNIQUE_ACCURATE) != 0) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Wed Aug 12 18:08:40 2015 (r286682) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Wed Aug 12 18:23:08 2015 (r286683) @@ -5489,7 +5489,8 @@ zfs_ioc_send_new(const char *snapname, n * of bytes that will be written to the fd supplied to zfs_ioc_send_new(). * * innvl: { - * (optional) "fromsnap" -> full snap name to send an incremental from + * (optional) "from" -> full snap or bookmark name to send an incremental + * from * } * * outnvl: { @@ -5500,7 +5501,6 @@ static int zfs_ioc_send_space(const char *snapname, nvlist_t *innvl, nvlist_t *outnvl) { dsl_pool_t *dp; - dsl_dataset_t *fromsnap = NULL; dsl_dataset_t *tosnap; int error; char *fromname; @@ -5516,27 +5516,55 @@ zfs_ioc_send_space(const char *snapname, return (error); } - error = nvlist_lookup_string(innvl, "fromsnap", &fromname); + error = nvlist_lookup_string(innvl, "from", &fromname); if (error == 0) { - error = dsl_dataset_hold(dp, fromname, FTAG, &fromsnap); - if (error != 0) { - dsl_dataset_rele(tosnap, FTAG); - dsl_pool_rele(dp, FTAG); - return (error); + if (strchr(fromname, '@') != NULL) { + /* + * If from is a snapshot, hold it and use the more + * efficient dmu_send_estimate to estimate send space + * size using deadlists. + */ + dsl_dataset_t *fromsnap; + error = dsl_dataset_hold(dp, fromname, FTAG, &fromsnap); + if (error != 0) + goto out; + error = dmu_send_estimate(tosnap, fromsnap, &space); + dsl_dataset_rele(fromsnap, FTAG); + } else if (strchr(fromname, '#') != NULL) { + /* + * If from is a bookmark, fetch the creation TXG of the + * snapshot it was created from and use that to find + * blocks that were born after it. + */ + zfs_bookmark_phys_t frombm; + + error = dsl_bookmark_lookup(dp, fromname, tosnap, + &frombm); + if (error != 0) + goto out; + error = dmu_send_estimate_from_txg(tosnap, + frombm.zbm_creation_txg, &space); + } else { + /* + * from is not properly formatted as a snapshot or + * bookmark + */ + error = SET_ERROR(EINVAL); + goto out; } + } else { + // If estimating the size of a full send, use dmu_send_estimate + error = dmu_send_estimate(tosnap, NULL, &space); } - error = dmu_send_estimate(tosnap, fromsnap, &space); fnvlist_add_uint64(outnvl, "space", space); - if (fromsnap != NULL) - dsl_dataset_rele(fromsnap, FTAG); +out: dsl_dataset_rele(tosnap, FTAG); dsl_pool_rele(dp, FTAG); return (error); } - static zfs_ioc_vec_t zfs_ioc_vec[ZFS_IOC_LAST - ZFS_IOC_FIRST]; static void From owner-svn-src-head@freebsd.org Wed Aug 12 18:32:12 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 52A409A0B08; Wed, 12 Aug 2015 18:32:12 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: from mail-wi0-x22e.google.com (mail-wi0-x22e.google.com [IPv6:2a00:1450:400c:c05::22e]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EC75AA9C; Wed, 12 Aug 2015 18:32:11 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: by wibhh20 with SMTP id hh20so41873709wib.0; Wed, 12 Aug 2015 11:32:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=pt/Si5ejl8zLphg9Ir9fPWkKecGhoUZDhSfToPL2elQ=; b=OWeOR2GAkOyWswKSb8hBhA0TdhTtIjkSE9+jW2G1sjXydej7Hr46+AzszpV4F97uZJ 7O+zSnfGAU9bpVJ5hCmjg/I11c8CWSAJDRsvDqrzoZS50da+o1BOcaTNkzFlhvhBtpds Bpqk0nWVA5gKUVOJpSjtZzvI3dHghLcjfW3Y3vjBfmZzHjMTeTG/FmnLd6m0OxsdZn56 3nco3r/28JMzkbif6esI7l+lxRpSNMj5xjaKIdJxNemNNI5Cfndc9ZLXsfBtFRB8ko87 X+aRp4d4Ql0wPBapIoPlNaNB3vDYHTLe4sEHDBFBxZrgLIH5ylVxpA8gmkece7WMadVj VVaQ== X-Received: by 10.194.20.161 with SMTP id o1mr75155680wje.32.1439404330487; Wed, 12 Aug 2015 11:32:10 -0700 (PDT) Received: from ivaldir.etoilebsd.net ([2001:41d0:8:db4c::1]) by smtp.gmail.com with ESMTPSA id cw8sm9089975wjb.49.2015.08.12.11.32.09 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Aug 2015 11:32:09 -0700 (PDT) Sender: Baptiste Daroussin Date: Wed, 12 Aug 2015 20:32:07 +0200 From: Baptiste Daroussin To: Marcel Moolenaar Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286667 - in head/sys: amd64/amd64 conf dev/vt/hw/efifb dev/vt/hw/vga i386/i386 x86/include x86/x86 Message-ID: <20150812183207.GC51754@ivaldir.etoilebsd.net> References: <201508121526.t7CFQWHM091851@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="i7F3eY7HS/tUJxUd" Content-Disposition: inline In-Reply-To: <201508121526.t7CFQWHM091851@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 18:32:12 -0000 --i7F3eY7HS/tUJxUd Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Aug 12, 2015 at 03:26:32PM +0000, Marcel Moolenaar wrote: > Author: marcel > Date: Wed Aug 12 15:26:32 2015 > New Revision: 286667 > URL: https://svnweb.freebsd.org/changeset/base/286667 >=20 > Log: > Better support memory mapped console devices, such as VGA and EFI > frame buffers and memory mapped UARTs. Thanks, that makes my laptop usable on FreeBSD: boot on EFI correctly then = able to Use scfb Xorg driver instead of VESA (waiting for newer KMS this is a relief!) Thanks a lot. Bapt --i7F3eY7HS/tUJxUd Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEARECAAYFAlXLkScACgkQ8kTtMUmk6EzCnACgpnlGo9nNjXX0cvQZcHQyMDc3 NmEAn1P4almsNg5kJReuyQM2Ya/8RABQ =a9Af -----END PGP SIGNATURE----- --i7F3eY7HS/tUJxUd-- From owner-svn-src-head@freebsd.org Wed Aug 12 18:47:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1E43D9A0D4D; Wed, 12 Aug 2015 18:47:34 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 09C6D20B; Wed, 12 Aug 2015 18:47:34 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CIlYZ5075444; Wed, 12 Aug 2015 18:47:34 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CIlVZx075434; Wed, 12 Aug 2015 18:47:31 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508121847.t7CIlVZx075434@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 12 Aug 2015 18:47:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286686 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 18:47:34 -0000 Author: mav Date: Wed Aug 12 18:47:30 2015 New Revision: 286686 URL: https://svnweb.freebsd.org/changeset/base/286686 Log: MFV r284762: 5269 zpool import slow illumos/illumos-gate@12380e1e701fda28c9e9f32d01cafb54af279eb5 https://www.illumos.org/issues/5269 When importing a pool (at boot or with zpool import) with many filesystem, the process can take minutes. It doesn't matter whether the pool has been exported cleanly or uncleanly. The problem is that each dataset has its own log chain. On import, all datasets have to be checked if there are logs to replay. The idea is to speed up this process by paralellizing it. Reviewed by: Matthew Ahrens Reviewed by: George Wilson Reviewed by: Dan McDonald Approved by: Dan McDonald Author: Arne Jansen Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Wed Aug 12 18:47:30 2015 (r286686) @@ -25,6 +25,7 @@ * Copyright (c) 2013, Joyent, Inc. All rights reserved. * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. * Copyright 2015 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2015, STRATO AG, Inc. All rights reserved. */ /* Portions Copyright 2010 Robert Milkowski */ @@ -49,6 +50,7 @@ #include #include #include +#include /* * Needed to close a window in dnode_move() that allows the objset to be freed @@ -56,6 +58,16 @@ */ krwlock_t os_lock; +/* + * Tunable to overwrite the maximum number of threads for the parallization + * of dmu_objset_find_dp, needed to speed up the import of pools with many + * datasets. + * Default is 4 times the number of leaf vdevs. + */ +int dmu_find_threads = 0; + +static void dmu_objset_find_dp_cb(void *arg); + void dmu_objset_init(void) { @@ -504,6 +516,25 @@ dmu_objset_hold(const char *name, void * return (err); } +static int +dmu_objset_own_impl(dsl_dataset_t *ds, dmu_objset_type_t type, + boolean_t readonly, void *tag, objset_t **osp) +{ + int err; + + err = dmu_objset_from_ds(ds, osp); + if (err != 0) { + dsl_dataset_disown(ds, tag); + } else if (type != DMU_OST_ANY && type != (*osp)->os_phys->os_type) { + dsl_dataset_disown(ds, tag); + return (SET_ERROR(EINVAL)); + } else if (!readonly && dsl_dataset_is_snapshot(ds)) { + dsl_dataset_disown(ds, tag); + return (SET_ERROR(EROFS)); + } + return (err); +} + /* * dsl_pool must not be held when this is called. * Upon successful return, there will be a longhold on the dataset, @@ -525,21 +556,26 @@ dmu_objset_own(const char *name, dmu_obj dsl_pool_rele(dp, FTAG); return (err); } - - err = dmu_objset_from_ds(ds, osp); + err = dmu_objset_own_impl(ds, type, readonly, tag, osp); dsl_pool_rele(dp, FTAG); - if (err != 0) { - dsl_dataset_disown(ds, tag); - } else if (type != DMU_OST_ANY && type != (*osp)->os_phys->os_type) { - dsl_dataset_disown(ds, tag); - return (SET_ERROR(EINVAL)); - } else if (!readonly && ds->ds_is_snapshot) { - dsl_dataset_disown(ds, tag); - return (SET_ERROR(EROFS)); - } + return (err); } +int +dmu_objset_own_obj(dsl_pool_t *dp, uint64_t obj, dmu_objset_type_t type, + boolean_t readonly, void *tag, objset_t **osp) +{ + dsl_dataset_t *ds; + int err; + + err = dsl_dataset_own_obj(dp, obj, tag, &ds); + if (err != 0) + return (err); + + return (dmu_objset_own_impl(ds, type, readonly, tag, osp)); +} + void dmu_objset_rele(objset_t *os, void *tag) { @@ -1580,30 +1616,41 @@ dmu_dir_list_next(objset_t *os, int name return (0); } -/* - * Find objsets under and including ddobj, call func(ds) on each. - */ -int -dmu_objset_find_dp(dsl_pool_t *dp, uint64_t ddobj, - int func(dsl_pool_t *, dsl_dataset_t *, void *), void *arg, int flags) +typedef struct dmu_objset_find_ctx { + taskq_t *dc_tq; + dsl_pool_t *dc_dp; + uint64_t dc_ddobj; + int (*dc_func)(dsl_pool_t *, dsl_dataset_t *, void *); + void *dc_arg; + int dc_flags; + kmutex_t *dc_error_lock; + int *dc_error; +} dmu_objset_find_ctx_t; + +static void +dmu_objset_find_dp_impl(dmu_objset_find_ctx_t *dcp) { + dsl_pool_t *dp = dcp->dc_dp; + dmu_objset_find_ctx_t *child_dcp; dsl_dir_t *dd; dsl_dataset_t *ds; zap_cursor_t zc; zap_attribute_t *attr; uint64_t thisobj; - int err; + int err = 0; - ASSERT(dsl_pool_config_held(dp)); + /* don't process if there already was an error */ + if (*dcp->dc_error != 0) + goto out; - err = dsl_dir_hold_obj(dp, ddobj, NULL, FTAG, &dd); + err = dsl_dir_hold_obj(dp, dcp->dc_ddobj, NULL, FTAG, &dd); if (err != 0) - return (err); + goto out; /* Don't visit hidden ($MOS & $ORIGIN) objsets. */ if (dd->dd_myname[0] == '$') { dsl_dir_rele(dd, FTAG); - return (0); + goto out; } thisobj = dsl_dir_phys(dd)->dd_head_dataset_obj; @@ -1612,7 +1659,7 @@ dmu_objset_find_dp(dsl_pool_t *dp, uint6 /* * Iterate over all children. */ - if (flags & DS_FIND_CHILDREN) { + if (dcp->dc_flags & DS_FIND_CHILDREN) { for (zap_cursor_init(&zc, dp->dp_meta_objset, dsl_dir_phys(dd)->dd_child_dir_zapobj); zap_cursor_retrieve(&zc, attr) == 0; @@ -1621,24 +1668,22 @@ dmu_objset_find_dp(dsl_pool_t *dp, uint6 sizeof (uint64_t)); ASSERT3U(attr->za_num_integers, ==, 1); - err = dmu_objset_find_dp(dp, attr->za_first_integer, - func, arg, flags); - if (err != 0) - break; + child_dcp = kmem_alloc(sizeof (*child_dcp), KM_SLEEP); + *child_dcp = *dcp; + child_dcp->dc_ddobj = attr->za_first_integer; + if (dcp->dc_tq != NULL) + (void) taskq_dispatch(dcp->dc_tq, + dmu_objset_find_dp_cb, child_dcp, TQ_SLEEP); + else + dmu_objset_find_dp_impl(child_dcp); } zap_cursor_fini(&zc); - - if (err != 0) { - dsl_dir_rele(dd, FTAG); - kmem_free(attr, sizeof (zap_attribute_t)); - return (err); - } } /* * Iterate over all snapshots. */ - if (flags & DS_FIND_SNAPSHOTS) { + if (dcp->dc_flags & DS_FIND_SNAPSHOTS) { dsl_dataset_t *ds; err = dsl_dataset_hold_obj(dp, thisobj, FTAG, &ds); @@ -1659,7 +1704,7 @@ dmu_objset_find_dp(dsl_pool_t *dp, uint6 attr->za_first_integer, FTAG, &ds); if (err != 0) break; - err = func(dp, ds, arg); + err = dcp->dc_func(dp, ds, dcp->dc_arg); dsl_dataset_rele(ds, FTAG); if (err != 0) break; @@ -1672,17 +1717,115 @@ dmu_objset_find_dp(dsl_pool_t *dp, uint6 kmem_free(attr, sizeof (zap_attribute_t)); if (err != 0) - return (err); + goto out; /* * Apply to self. */ err = dsl_dataset_hold_obj(dp, thisobj, FTAG, &ds); if (err != 0) - return (err); - err = func(dp, ds, arg); + goto out; + err = dcp->dc_func(dp, ds, dcp->dc_arg); dsl_dataset_rele(ds, FTAG); - return (err); + +out: + if (err != 0) { + mutex_enter(dcp->dc_error_lock); + /* only keep first error */ + if (*dcp->dc_error == 0) + *dcp->dc_error = err; + mutex_exit(dcp->dc_error_lock); + } + + kmem_free(dcp, sizeof (*dcp)); +} + +static void +dmu_objset_find_dp_cb(void *arg) +{ + dmu_objset_find_ctx_t *dcp = arg; + dsl_pool_t *dp = dcp->dc_dp; + + dsl_pool_config_enter(dp, FTAG); + + dmu_objset_find_dp_impl(dcp); + + dsl_pool_config_exit(dp, FTAG); +} + +/* + * Find objsets under and including ddobj, call func(ds) on each. + * The order for the enumeration is completely undefined. + * func is called with dsl_pool_config held. + */ +int +dmu_objset_find_dp(dsl_pool_t *dp, uint64_t ddobj, + int func(dsl_pool_t *, dsl_dataset_t *, void *), void *arg, int flags) +{ + int error = 0; + taskq_t *tq = NULL; + int ntasks; + dmu_objset_find_ctx_t *dcp; + kmutex_t err_lock; + + mutex_init(&err_lock, NULL, MUTEX_DEFAULT, NULL); + dcp = kmem_alloc(sizeof (*dcp), KM_SLEEP); + dcp->dc_tq = NULL; + dcp->dc_dp = dp; + dcp->dc_ddobj = ddobj; + dcp->dc_func = func; + dcp->dc_arg = arg; + dcp->dc_flags = flags; + dcp->dc_error_lock = &err_lock; + dcp->dc_error = &error; + + if ((flags & DS_FIND_SERIALIZE) || dsl_pool_config_held_writer(dp)) { + /* + * In case a write lock is held we can't make use of + * parallelism, as down the stack of the worker threads + * the lock is asserted via dsl_pool_config_held. + * In case of a read lock this is solved by getting a read + * lock in each worker thread, which isn't possible in case + * of a writer lock. So we fall back to the synchronous path + * here. + * In the future it might be possible to get some magic into + * dsl_pool_config_held in a way that it returns true for + * the worker threads so that a single lock held from this + * thread suffices. For now, stay single threaded. + */ + dmu_objset_find_dp_impl(dcp); + + return (error); + } + + ntasks = dmu_find_threads; + if (ntasks == 0) + ntasks = vdev_count_leaves(dp->dp_spa) * 4; + tq = taskq_create("dmu_objset_find", ntasks, minclsyspri, ntasks, + INT_MAX, 0); + if (tq == NULL) { + kmem_free(dcp, sizeof (*dcp)); + return (SET_ERROR(ENOMEM)); + } + dcp->dc_tq = tq; + + /* dcp will be freed by task */ + (void) taskq_dispatch(tq, dmu_objset_find_dp_cb, dcp, TQ_SLEEP); + + /* + * PORTING: this code relies on the property of taskq_wait to wait + * until no more tasks are queued and no more tasks are active. As + * we always queue new tasks from within other tasks, task_wait + * reliably waits for the full recursion to finish, even though we + * enqueue new tasks after taskq_wait has been called. + * On platforms other than illumos, taskq_wait may not have this + * property. + */ + taskq_wait(tq); + taskq_destroy(tq); + mutex_destroy(&err_lock); + + return (error); } /* Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c Wed Aug 12 18:47:30 2015 (r286686) @@ -851,7 +851,7 @@ dsl_pool_upgrade_clones(dsl_pool_t *dp, ASSERT(dp->dp_origin_snap != NULL); VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, upgrade_clones_cb, - tx, DS_FIND_CHILDREN)); + tx, DS_FIND_CHILDREN | DS_FIND_SERIALIZE)); } /* ARGSUSED */ @@ -905,7 +905,7 @@ dsl_pool_upgrade_dir_clones(dsl_pool_t * VERIFY0(bpobj_open(&dp->dp_free_bpobj, dp->dp_meta_objset, obj)); VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, - upgrade_dir_clones_cb, tx, DS_FIND_CHILDREN)); + upgrade_dir_clones_cb, tx, DS_FIND_CHILDREN | DS_FIND_SERIALIZE)); } void @@ -1149,3 +1149,9 @@ dsl_pool_config_held(dsl_pool_t *dp) { return (RRW_LOCK_HELD(&dp->dp_config_rwlock)); } + +boolean_t +dsl_pool_config_held_writer(dsl_pool_t *dp) +{ + return (RRW_WRITE_HELD(&dp->dp_config_rwlock)); +} Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Wed Aug 12 18:47:30 2015 (r286686) @@ -1792,13 +1792,14 @@ static boolean_t spa_check_logs(spa_t *spa) { boolean_t rv = B_FALSE; + dsl_pool_t *dp = spa_get_dsl(spa); switch (spa->spa_log_state) { case SPA_LOG_MISSING: /* need to recheck in case slog has been restored */ case SPA_LOG_UNKNOWN: - rv = (dmu_objset_find(spa->spa_name, zil_check_log_chain, - NULL, DS_FIND_CHILDREN) != 0); + rv = (dmu_objset_find_dp(dp, dp->dp_root_dir_obj, + zil_check_log_chain, NULL, DS_FIND_CHILDREN) != 0); if (rv) spa_set_log_state(spa, SPA_LOG_MISSING); break; @@ -2786,6 +2787,7 @@ spa_load_impl(spa_t *spa, uint64_t pool_ spa->spa_load_max_txg == UINT64_MAX)) { dmu_tx_t *tx; int need_update = B_FALSE; + dsl_pool_t *dp = spa_get_dsl(spa); ASSERT(state != SPA_LOAD_TRYIMPORT); @@ -2798,9 +2800,8 @@ spa_load_impl(spa_t *spa, uint64_t pool_ */ spa->spa_claiming = B_TRUE; - tx = dmu_tx_create_assigned(spa_get_dsl(spa), - spa_first_txg(spa)); - (void) dmu_objset_find(spa_name(spa), + tx = dmu_tx_create_assigned(dp, spa_first_txg(spa)); + (void) dmu_objset_find_dp(dp, dp->dp_root_dir_obj, zil_claim, tx, DS_FIND_CHILDREN); dmu_tx_commit(tx); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h Wed Aug 12 18:47:30 2015 (r286686) @@ -243,6 +243,7 @@ void zfs_znode_byteswap(void *buf, size_ #define DS_FIND_SNAPSHOTS (1<<0) #define DS_FIND_CHILDREN (1<<1) +#define DS_FIND_SERIALIZE (1<<2) /* * The maximum number of bytes that can be accessed as part of one Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h Wed Aug 12 18:47:30 2015 (r286686) @@ -142,6 +142,8 @@ struct objset { int dmu_objset_hold(const char *name, void *tag, objset_t **osp); int dmu_objset_own(const char *name, dmu_objset_type_t type, boolean_t readonly, void *tag, objset_t **osp); +int dmu_objset_own_obj(struct dsl_pool *dp, uint64_t obj, + dmu_objset_type_t type, boolean_t readonly, void *tag, objset_t **osp); void dmu_objset_refresh_ownership(objset_t *os, void *tag); void dmu_objset_rele(objset_t *os, void *tag); void dmu_objset_disown(objset_t *os, void *tag); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h Wed Aug 12 18:47:30 2015 (r286686) @@ -154,6 +154,7 @@ void dsl_pool_mos_diduse_space(dsl_pool_ void dsl_pool_config_enter(dsl_pool_t *dp, void *tag); void dsl_pool_config_exit(dsl_pool_t *dp, void *tag); boolean_t dsl_pool_config_held(dsl_pool_t *dp); +boolean_t dsl_pool_config_held_writer(dsl_pool_t *dp); boolean_t dsl_pool_need_dirty_delay(dsl_pool_t *dp); taskq_t *dsl_pool_vnrele_taskq(dsl_pool_t *dp); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h Wed Aug 12 18:47:30 2015 (r286686) @@ -61,6 +61,7 @@ extern zio_t *vdev_probe(vdev_t *vd, zio extern boolean_t vdev_is_bootable(vdev_t *vd); extern vdev_t *vdev_lookup_top(spa_t *spa, uint64_t vdev); extern vdev_t *vdev_lookup_by_guid(vdev_t *vd, uint64_t guid); +extern int vdev_count_leaves(spa_t *spa); extern void vdev_dtl_dirty(vdev_t *vd, vdev_dtl_type_t d, uint64_t txg, uint64_t size); extern boolean_t vdev_dtl_contains(vdev_t *vd, vdev_dtl_type_t d, Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h Wed Aug 12 18:47:30 2015 (r286686) @@ -37,6 +37,9 @@ extern "C" { #endif +struct dsl_pool; +struct dsl_dataset; + /* * Intent log format: * @@ -404,8 +407,10 @@ extern void zil_itx_assign(zilog_t *zilo extern void zil_commit(zilog_t *zilog, uint64_t oid); extern int zil_vdev_offline(const char *osname, void *txarg); -extern int zil_claim(const char *osname, void *txarg); -extern int zil_check_log_chain(const char *osname, void *txarg); +extern int zil_claim(struct dsl_pool *dp, + struct dsl_dataset *ds, void *txarg); +extern int zil_check_log_chain(struct dsl_pool *dp, + struct dsl_dataset *ds, void *tx); extern void zil_sync(zilog_t *zilog, dmu_tx_t *tx); extern void zil_clean(zilog_t *zilog, uint64_t synced_txg); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Wed Aug 12 18:47:30 2015 (r286686) @@ -272,6 +272,26 @@ vdev_lookup_by_guid(vdev_t *vd, uint64_t return (NULL); } +static int +vdev_count_leaves_impl(vdev_t *vd) +{ + int n = 0; + + if (vd->vdev_ops->vdev_op_leaf) + return (1); + + for (int c = 0; c < vd->vdev_children; c++) + n += vdev_count_leaves_impl(vd->vdev_child[c]); + + return (n); +} + +int +vdev_count_leaves(spa_t *spa) +{ + return (vdev_count_leaves_impl(spa->spa_root_vdev)); +} + void vdev_add_child(vdev_t *pvd, vdev_t *cvd) { Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c Wed Aug 12 18:39:49 2015 (r286685) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c Wed Aug 12 18:47:30 2015 (r286686) @@ -636,7 +636,7 @@ zil_destroy_sync(zilog_t *zilog, dmu_tx_ } int -zil_claim(const char *osname, void *txarg) +zil_claim(dsl_pool_t *dp, dsl_dataset_t *ds, void *txarg) { dmu_tx_t *tx = txarg; uint64_t first_txg = dmu_tx_get_txg(tx); @@ -645,15 +645,16 @@ zil_claim(const char *osname, void *txar objset_t *os; int error; - error = dmu_objset_own(osname, DMU_OST_ANY, B_FALSE, FTAG, &os); + error = dmu_objset_own_obj(dp, ds->ds_object, + DMU_OST_ANY, B_FALSE, FTAG, &os); if (error != 0) { /* * EBUSY indicates that the objset is inconsistent, in which * case it can not have a ZIL. */ if (error != EBUSY) { - cmn_err(CE_WARN, "can't open objset for %s, error %u", - osname, error); + cmn_err(CE_WARN, "can't open objset for %llu, error %u", + (unsigned long long)ds->ds_object, error); } return (0); } @@ -700,8 +701,9 @@ zil_claim(const char *osname, void *txar * Checksum errors are ok as they indicate the end of the chain. * Any other error (no device or read failure) returns an error. */ +/* ARGSUSED */ int -zil_check_log_chain(const char *osname, void *tx) +zil_check_log_chain(dsl_pool_t *dp, dsl_dataset_t *ds, void *tx) { zilog_t *zilog; objset_t *os; @@ -710,9 +712,10 @@ zil_check_log_chain(const char *osname, ASSERT(tx == NULL); - error = dmu_objset_hold(osname, FTAG, &os); + error = dmu_objset_from_ds(ds, &os); if (error != 0) { - cmn_err(CE_WARN, "can't open objset for %s", osname); + cmn_err(CE_WARN, "can't open objset %llu, error %d", + (unsigned long long)ds->ds_object, error); return (0); } @@ -735,10 +738,8 @@ zil_check_log_chain(const char *osname, valid = vdev_log_state_valid(vd); spa_config_exit(os->os_spa, SCL_STATE, FTAG); - if (!valid) { - dmu_objset_rele(os, FTAG); + if (!valid) return (0); - } } /* @@ -751,8 +752,6 @@ zil_check_log_chain(const char *osname, error = zil_parse(zilog, zil_claim_log_block, zil_claim_log_record, tx, zilog->zl_header->zh_claim_txg ? -1ULL : spa_first_txg(os->os_spa)); - dmu_objset_rele(os, FTAG); - return ((error == ECKSUM || error == ENOENT) ? 0 : error); } From owner-svn-src-head@freebsd.org Wed Aug 12 19:00:48 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D6B5A9A01A0; Wed, 12 Aug 2015 19:00:48 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C59B8B9E; Wed, 12 Aug 2015 19:00:48 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CJ0mZF080492; Wed, 12 Aug 2015 19:00:48 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CJ0mhT080491; Wed, 12 Aug 2015 19:00:48 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201508121900.t7CJ0mhT080491@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Wed, 12 Aug 2015 19:00:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286687 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 19:00:48 -0000 Author: imp Date: Wed Aug 12 19:00:47 2015 New Revision: 286687 URL: https://svnweb.freebsd.org/changeset/base/286687 Log: Document build-tools better. Add rescue back because it builds /bin/sh which has a build-tools target (see commit for how build-tools and cross-tools differ). Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Wed Aug 12 18:47:30 2015 (r286686) +++ head/Makefile.inc1 Wed Aug 12 19:00:47 2015 (r286687) @@ -219,11 +219,16 @@ INSTALLTMP!= /usr/bin/mktemp -d -u -t in # 2. build-tools stage [TMAKE] # This stage is responsible for creating the object # tree and building any tools that are needed during -# the build process. +# the build process. Some programs are listed during +# this phase because they build binaires to generate +# files needed to build these programs. This stage also +# builds the 'build-tools' target rather than 'all'. # 3. cross-tools stage [XMAKE] # This stage is responsible for creating any tools that # are needed for building the system. A cross-compiler is one -# of them. +# of them. This differs from build tools in two ways: +# 1. the 'all' target is built rather than 'build-tools' +# 2. these tools are installed into TMPPATH for stage 4. # 4. world stage [WMAKE] # This stage actually builds the world. # 5. install stage (optional) [IMAKE] @@ -1432,6 +1437,11 @@ _share= share/syscons/scrnmaps _gcc_tools= gnu/usr.bin/cc/cc_tools .endif +.if ${MK_RESCUE} != "no" +# rescue includes programs that have build-tools targets +_rescue=rescue +.endif + build-tools: .MAKE .for _tool in \ bin/csh \ @@ -1439,6 +1449,7 @@ build-tools: .MAKE ${LOCAL_TOOL_DIRS} \ lib/ncurses/ncurses \ lib/ncurses/ncursesw \ + ${_rescue} ${_share} \ usr.bin/awk \ lib/libmagic \ From owner-svn-src-head@freebsd.org Wed Aug 12 19:10:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5BA619A04AA; Wed, 12 Aug 2015 19:10:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4BED016BA; Wed, 12 Aug 2015 19:10:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CJAVav084564; Wed, 12 Aug 2015 19:10:31 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CJAT4x084559; Wed, 12 Aug 2015 19:10:29 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508121910.t7CJAT4x084559@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 12 Aug 2015 19:10:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286689 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 19:10:31 -0000 Author: mav Date: Wed Aug 12 19:10:29 2015 New Revision: 286689 URL: https://svnweb.freebsd.org/changeset/base/286689 Log: MFV r284763: 5981 Deadlock in dmu_objset_find_dp illumos/illumos-gate@1d3f896f5469c69c1339890ec3d68e9feddb0343 https://www.illumos.org/issues/5981 When dmu_objset_find_dp gets called with a read lock held, it fans out the work to the task queue. Each task in turn acquires its own read lock before calling the callback. If during this process anyone tries to a acquire a write lock, it will stall all read lock requests.Thus the tasks will never finish, the read lock of the caller will never get freed and the write lock never acquired. deadlock. Reviewed by: Matthew Ahrens Reviewed by: Dan McDonald Approved by: Robert Mustacchi Author: Arne Jansen Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/rrwlock.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Wed Aug 12 19:06:35 2015 (r286688) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Wed Aug 12 19:10:29 2015 (r286689) @@ -1746,7 +1746,15 @@ dmu_objset_find_dp_cb(void *arg) dmu_objset_find_ctx_t *dcp = arg; dsl_pool_t *dp = dcp->dc_dp; - dsl_pool_config_enter(dp, FTAG); + /* + * We need to get a pool_config_lock here, as there are several + * asssert(pool_config_held) down the stack. Getting a lock via + * dsl_pool_config_enter is risky, as it might be stalled by a + * pending writer. This would deadlock, as the write lock can + * only be granted when our parent thread gives up the lock. + * The _prio interface gives us priority over a pending writer. + */ + dsl_pool_config_enter_prio(dp, FTAG); dmu_objset_find_dp_impl(dcp); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c Wed Aug 12 19:06:35 2015 (r286688) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c Wed Aug 12 19:10:29 2015 (r286689) @@ -1139,6 +1139,13 @@ dsl_pool_config_enter(dsl_pool_t *dp, vo } void +dsl_pool_config_enter_prio(dsl_pool_t *dp, void *tag) +{ + ASSERT(!rrw_held(&dp->dp_config_rwlock, RW_READER)); + rrw_enter_read_prio(&dp->dp_config_rwlock, tag); +} + +void dsl_pool_config_exit(dsl_pool_t *dp, void *tag) { rrw_exit(&dp->dp_config_rwlock, tag); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/rrwlock.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/rrwlock.c Wed Aug 12 19:06:35 2015 (r286688) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/rrwlock.c Wed Aug 12 19:10:29 2015 (r286689) @@ -159,8 +159,8 @@ rrw_destroy(rrwlock_t *rrl) refcount_destroy(&rrl->rr_linked_rcount); } -void -rrw_enter_read(rrwlock_t *rrl, void *tag) +static void +rrw_enter_read_impl(rrwlock_t *rrl, boolean_t prio, void *tag) { mutex_enter(&rrl->rr_lock); #if !defined(DEBUG) && defined(_KERNEL) @@ -176,7 +176,7 @@ rrw_enter_read(rrwlock_t *rrl, void *tag ASSERT(refcount_count(&rrl->rr_anon_rcount) >= 0); while (rrl->rr_writer != NULL || (rrl->rr_writer_wanted && - refcount_is_zero(&rrl->rr_anon_rcount) && + refcount_is_zero(&rrl->rr_anon_rcount) && !prio && rrn_find(rrl) == NULL)) cv_wait(&rrl->rr_cv, &rrl->rr_lock); @@ -192,6 +192,25 @@ rrw_enter_read(rrwlock_t *rrl, void *tag } void +rrw_enter_read(rrwlock_t *rrl, void *tag) +{ + rrw_enter_read_impl(rrl, B_FALSE, tag); +} + +/* + * take a read lock even if there are pending write lock requests. if we want + * to take a lock reentrantly, but from different threads (that have a + * relationship to each other), the normal detection mechanism to overrule + * the pending writer does not work, so we have to give an explicit hint here. + */ +void +rrw_enter_read_prio(rrwlock_t *rrl, void *tag) +{ + rrw_enter_read_impl(rrl, B_TRUE, tag); +} + + +void rrw_enter_write(rrwlock_t *rrl) { mutex_enter(&rrl->rr_lock); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h Wed Aug 12 19:06:35 2015 (r286688) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h Wed Aug 12 19:10:29 2015 (r286689) @@ -152,6 +152,7 @@ void dsl_pool_upgrade_dir_clones(dsl_poo void dsl_pool_mos_diduse_space(dsl_pool_t *dp, int64_t used, int64_t comp, int64_t uncomp); void dsl_pool_config_enter(dsl_pool_t *dp, void *tag); +void dsl_pool_config_enter_prio(dsl_pool_t *dp, void *tag); void dsl_pool_config_exit(dsl_pool_t *dp, void *tag); boolean_t dsl_pool_config_held(dsl_pool_t *dp); boolean_t dsl_pool_config_held_writer(dsl_pool_t *dp); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h Wed Aug 12 19:06:35 2015 (r286688) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h Wed Aug 12 19:10:29 2015 (r286689) @@ -69,6 +69,7 @@ void rrw_init(rrwlock_t *rrl, boolean_t void rrw_destroy(rrwlock_t *rrl); void rrw_enter(rrwlock_t *rrl, krw_t rw, void *tag); void rrw_enter_read(rrwlock_t *rrl, void *tag); +void rrw_enter_read_prio(rrwlock_t *rrl, void *tag); void rrw_enter_write(rrwlock_t *rrl); void rrw_exit(rrwlock_t *rrl, void *tag); boolean_t rrw_held(rrwlock_t *rrl, krw_t rw); From owner-svn-src-head@freebsd.org Wed Aug 12 19:21:59 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 452A59A0A49; Wed, 12 Aug 2015 19:21:59 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 365E79AE; Wed, 12 Aug 2015 19:21:59 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CJLxQu092724; Wed, 12 Aug 2015 19:21:59 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CJLxDp092723; Wed, 12 Aug 2015 19:21:59 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201508121921.t7CJLxDp092723@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Wed, 12 Aug 2015 19:21:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286691 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 19:21:59 -0000 Author: delphij Date: Wed Aug 12 19:21:58 2015 New Revision: 286691 URL: https://svnweb.freebsd.org/changeset/base/286691 Log: Fix build. Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Wed Aug 12 19:18:54 2015 (r286690) +++ head/Makefile.inc1 Wed Aug 12 19:21:58 2015 (r286691) @@ -1449,7 +1449,7 @@ build-tools: .MAKE ${LOCAL_TOOL_DIRS} \ lib/ncurses/ncurses \ lib/ncurses/ncursesw \ - ${_rescue} + ${_rescue} \ ${_share} \ usr.bin/awk \ lib/libmagic \ From owner-svn-src-head@freebsd.org Wed Aug 12 19:25:22 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E59DF9A0ACE; Wed, 12 Aug 2015 19:25:22 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D7017B7C; Wed, 12 Aug 2015 19:25:22 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CJPMpO092916; Wed, 12 Aug 2015 19:25:22 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CJPMfR092915; Wed, 12 Aug 2015 19:25:22 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508121925.t7CJPMfR092915@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Wed, 12 Aug 2015 19:25:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286692 - head/sys/arm/ti/am335x X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 19:25:23 -0000 Author: ian Date: Wed Aug 12 19:25:22 2015 New Revision: 286692 URL: https://svnweb.freebsd.org/changeset/base/286692 Log: Add a MODULE_VERSION(), because other things MODULE_DEPEND() on this. Modified: head/sys/arm/ti/am335x/am335x_prcm.c Modified: head/sys/arm/ti/am335x/am335x_prcm.c ============================================================================== --- head/sys/arm/ti/am335x/am335x_prcm.c Wed Aug 12 19:21:58 2015 (r286691) +++ head/sys/arm/ti/am335x/am335x_prcm.c Wed Aug 12 19:25:22 2015 (r286692) @@ -456,6 +456,7 @@ static devclass_t am335x_prcm_devclass; DRIVER_MODULE(am335x_prcm, simplebus, am335x_prcm_driver, am335x_prcm_devclass, 0, 0); +MODULE_VERSION(am335x_prcm, 1); MODULE_DEPEND(am335x_prcm, ti_scm, 1, 1, 1); static struct am335x_clk_details* From owner-svn-src-head@freebsd.org Wed Aug 12 19:26:37 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7D65A9A0B0B; Wed, 12 Aug 2015 19:26:37 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6ED39CE2; Wed, 12 Aug 2015 19:26:37 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CJQb21093003; Wed, 12 Aug 2015 19:26:37 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CJQb4t093002; Wed, 12 Aug 2015 19:26:37 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508121926.t7CJQb4t093002@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Wed, 12 Aug 2015 19:26:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286693 - head/sys/arm/ti X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 19:26:37 -0000 Author: ian Date: Wed Aug 12 19:26:36 2015 New Revision: 286693 URL: https://svnweb.freebsd.org/changeset/base/286693 Log: Remove a bogus printf that whines every time loading a driver module triggers a fresh round of probing. Modified: head/sys/arm/ti/ti_scm.c Modified: head/sys/arm/ti/ti_scm.c ============================================================================== --- head/sys/arm/ti/ti_scm.c Wed Aug 12 19:25:22 2015 (r286692) +++ head/sys/arm/ti/ti_scm.c Wed Aug 12 19:26:36 2015 (r286693) @@ -96,8 +96,6 @@ ti_scm_probe(device_t dev) return (ENXIO); if (ti_scm_sc) { - printf("%s: multiple SCM modules in device tree data, ignoring\n", - __func__); return (EEXIST); } From owner-svn-src-head@freebsd.org Wed Aug 12 19:39:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E71519A0D29; Wed, 12 Aug 2015 19:39:11 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D85BF768; Wed, 12 Aug 2015 19:39:11 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CJdBmu097489; Wed, 12 Aug 2015 19:39:11 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CJdBej097488; Wed, 12 Aug 2015 19:39:11 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201508121939.t7CJdBej097488@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Wed, 12 Aug 2015 19:39:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286695 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 19:39:12 -0000 Author: imp Date: Wed Aug 12 19:39:11 2015 New Revision: 286695 URL: https://svnweb.freebsd.org/changeset/base/286695 Log: Fix the fixing of the build I broke. rescue/rescue has the right target, but rescue doesn't. Pointy hat: imp@ Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Wed Aug 12 19:35:35 2015 (r286694) +++ head/Makefile.inc1 Wed Aug 12 19:39:11 2015 (r286695) @@ -1439,7 +1439,7 @@ _gcc_tools= gnu/usr.bin/cc/cc_tools .if ${MK_RESCUE} != "no" # rescue includes programs that have build-tools targets -_rescue=rescue +_rescue=rescue/rescue .endif build-tools: .MAKE From owner-svn-src-head@freebsd.org Wed Aug 12 19:40:33 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8827A9A0D7A; Wed, 12 Aug 2015 19:40:33 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7519E90D; Wed, 12 Aug 2015 19:40:33 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CJeX2A000124; Wed, 12 Aug 2015 19:40:33 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CJeXLp099808; Wed, 12 Aug 2015 19:40:33 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508121940.t7CJeXLp099808@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Wed, 12 Aug 2015 19:40:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286696 - head/sys/arm/ti/am335x X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 19:40:33 -0000 Author: ian Date: Wed Aug 12 19:40:32 2015 New Revision: 286696 URL: https://svnweb.freebsd.org/changeset/base/286696 Log: Remove all dregs of the old PPS driver from this code, in preparation for redoing it as a separate driver. Now that each hardware timer is handled by a separate instance of the timer driver, it no longer makes sense to bundle the pps driver with the regular timecounter code. (When all 8 timers were handled by one driver there was no choice about this.) Split the hardware register definitions out to their own file, so that the new pps driver (coming in a separate commit later) can share them. With the PPS driver gone, the question of which hardware timer to use for what purpose becomes much easier (some instances can't do the PPS capture). Now we can just hardcore timer2 for eventtimer and timer3 for timecounter. This also now only instantiates devices for the 2 hardware timers actually used to implement eventtimer and timecounter. This is required so that other drivers can come along and attach to other hardware timers to provide other functionality. (In addition to PPS, this hardware can also do PWM stuff, general pulse width and frequency measurements, etc. Maybe some day we'll have drivers for those things.) Added: head/sys/arm/ti/am335x/am335x_dmtreg.h (contents, props changed) Modified: head/sys/arm/ti/am335x/am335x_dmtimer.c Modified: head/sys/arm/ti/am335x/am335x_dmtimer.c ============================================================================== --- head/sys/arm/ti/am335x/am335x_dmtimer.c Wed Aug 12 19:39:11 2015 (r286695) +++ head/sys/arm/ti/am335x/am335x_dmtimer.c Wed Aug 12 19:40:32 2015 (r286696) @@ -30,79 +30,22 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include #include -#include #include -#include #include -#include #include -#include -#include -#include "opt_ntp.h" - -#include #include #include #include -#include - #include #include -#include -#define AM335X_NUM_TIMERS 8 - -#define DMT_TIDR 0x00 /* Identification Register */ -#define DMT_TIOCP_CFG 0x10 /* OCP Configuration Reg */ -#define DMT_TIOCP_RESET (1 << 0) /* TIOCP perform soft reset */ -#define DMT_IQR_EOI 0x20 /* IRQ End-Of-Interrupt Reg */ -#define DMT_IRQSTATUS_RAW 0x24 /* IRQSTATUS Raw Reg */ -#define DMT_IRQSTATUS 0x28 /* IRQSTATUS Reg */ -#define DMT_IRQENABLE_SET 0x2c /* IRQSTATUS Set Reg */ -#define DMT_IRQENABLE_CLR 0x30 /* IRQSTATUS Clear Reg */ -#define DMT_IRQWAKEEN 0x34 /* IRQ Wakeup Enable Reg */ -#define DMT_IRQ_MAT (1 << 0) /* IRQ: Match */ -#define DMT_IRQ_OVF (1 << 1) /* IRQ: Overflow */ -#define DMT_IRQ_TCAR (1 << 2) /* IRQ: Capture */ -#define DMT_IRQ_MASK (DMT_IRQ_TCAR | DMT_IRQ_OVF | DMT_IRQ_MAT) -#define DMT_TCLR 0x38 /* Control Register */ -#define DMT_TCLR_START (1 << 0) /* Start timer */ -#define DMT_TCLR_AUTOLOAD (1 << 1) /* Auto-reload on overflow */ -#define DMT_TCLR_PRES_MASK (7 << 2) /* Prescaler mask */ -#define DMT_TCLR_PRES_ENABLE (1 << 5) /* Prescaler enable */ -#define DMT_TCLR_COMP_ENABLE (1 << 6) /* Compare enable */ -#define DMT_TCLR_PWM_HIGH (1 << 7) /* PWM default output high */ -#define DMT_TCLR_CAPTRAN_MASK (3 << 8) /* Capture transition mask */ -#define DMT_TCLR_CAPTRAN_NONE (0 << 8) /* Capture: none */ -#define DMT_TCLR_CAPTRAN_LOHI (1 << 8) /* Capture lo->hi transition */ -#define DMT_TCLR_CAPTRAN_HILO (2 << 8) /* Capture hi->lo transition */ -#define DMT_TCLR_CAPTRAN_BOTH (3 << 8) /* Capture both transitions */ -#define DMT_TCLR_TRGMODE_MASK (3 << 10) /* Trigger output mode mask */ -#define DMT_TCLR_TRGMODE_NONE (0 << 10) /* Trigger off */ -#define DMT_TCLR_TRGMODE_OVFL (1 << 10) /* Trigger on overflow */ -#define DMT_TCLR_TRGMODE_BOTH (2 << 10) /* Trigger on match + ovflow */ -#define DMT_TCLR_PWM_PTOGGLE (1 << 12) /* PWM toggles */ -#define DMT_TCLR_CAP_MODE_2ND (1 << 13) /* Capture second event mode */ -#define DMT_TCLR_GPO_CFG (1 << 14) /* (no descr in datasheet) */ -#define DMT_TCRR 0x3C /* Counter Register */ -#define DMT_TLDR 0x40 /* Load Reg */ -#define DMT_TTGR 0x44 /* Trigger Reg */ -#define DMT_TWPS 0x48 /* Write Posted Status Reg */ -#define DMT_TMAR 0x4C /* Match Reg */ -#define DMT_TCAR1 0x50 /* Capture Reg */ -#define DMT_TSICR 0x54 /* Synchr. Interface Ctrl Reg */ -#define DMT_TSICR_RESET (1 << 1) /* TSICR perform soft reset */ -#define DMT_TCAR2 0x48 /* Capture Reg */ - -#define DMTIMER_READ4(sc, reg) (bus_read_4((sc)->tmr_mem_res, (reg))) -#define DMTIMER_WRITE4(sc, reg, val) (bus_write_4((sc)->tmr_mem_res, (reg), (val))) +#include "am335x_dmtreg.h" struct am335x_dmtimer_softc { device_t dev; @@ -113,294 +56,35 @@ struct am335x_dmtimer_softc { void *tmr_irq_handler; uint32_t sysclk_freq; uint32_t tclr; /* Cached TCLR register. */ - int pps_curmode; /* Edge mode now set in hw. */ - struct task pps_task; /* For pps_event handling. */ - struct cdev * pps_cdev; - struct pps_state pps; - union { struct timecounter tc; struct eventtimer et; } func; + int tmr_num; /* Hardware unit number. */ + char tmr_name[12]; /* "DMTimerN", N = tmr_num */ }; static struct am335x_dmtimer_softc *am335x_dmtimer_et_sc = NULL; static struct am335x_dmtimer_softc *am335x_dmtimer_tc_sc = NULL; - -#ifdef PPS_SYNC -/* -1 - not detected, 0 - not found, > 0 - timerX module */ -static int am335x_dmtimer_pps_module = -1; -static const char *am335x_dmtimer_pps_hwmod = NULL; -#endif - /* - * PPS driver routines, included when the kernel is built with option PPS_SYNC. - * - * Note that this PPS driver does not use an interrupt. Instead it uses the - * hardware's ability to latch the timer's count register in response to a - * signal on an IO pin. Each of timers 4-7 have an associated pin, and this - * code allows any one of those to be used. - * - * The timecounter routines in kern_tc.c call the pps poll routine periodically - * to see if a new counter value has been latched. When a new value has been - * latched, the only processing done in the poll routine is to capture the - * current set of timecounter timehands (done with pps_capture()) and the - * latched value from the timer. The remaining work (done by pps_event()) is - * scheduled to be done later in a non-interrupt context. + * We use dmtimer2 for eventtimer and dmtimer3 for timecounter. */ -#ifdef PPS_SYNC - -#define PPS_CDEV_NAME "dmtpps" - -static void -am335x_dmtimer_set_capture_mode(struct am335x_dmtimer_softc *sc, bool force_off) -{ - int newmode; - - if (force_off) - newmode = 0; - else - newmode = sc->pps.ppsparam.mode & PPS_CAPTUREBOTH; - - if (newmode == sc->pps_curmode) - return; - - sc->pps_curmode = newmode; - sc->tclr &= ~DMT_TCLR_CAPTRAN_MASK; - switch (newmode) { - case PPS_CAPTUREASSERT: - sc->tclr |= DMT_TCLR_CAPTRAN_LOHI; - break; - case PPS_CAPTURECLEAR: - sc->tclr |= DMT_TCLR_CAPTRAN_HILO; - break; - default: - /* It can't be BOTH, so it's disabled. */ - break; - } - DMTIMER_WRITE4(sc, DMT_TCLR, sc->tclr); -} - -static void -am335x_dmtimer_tc_poll_pps(struct timecounter *tc) -{ - struct am335x_dmtimer_softc *sc; - - sc = tc->tc_priv; - - /* - * Note that we don't have the TCAR interrupt enabled, but the hardware - * still provides the status bits in the "RAW" status register even when - * they're masked from generating an irq. However, when clearing the - * TCAR status to re-arm the capture for the next second, we have to - * write to the IRQ status register, not the RAW register. Quirky. - */ - if (DMTIMER_READ4(sc, DMT_IRQSTATUS_RAW) & DMT_IRQ_TCAR) { - pps_capture(&sc->pps); - sc->pps.capcount = DMTIMER_READ4(sc, DMT_TCAR1); - DMTIMER_WRITE4(sc, DMT_IRQSTATUS, DMT_IRQ_TCAR); - taskqueue_enqueue_fast(taskqueue_fast, &sc->pps_task); - } -} - -static void -am335x_dmtimer_process_pps_event(void *arg, int pending) -{ - struct am335x_dmtimer_softc *sc; - - sc = arg; - - /* This is the task function that gets enqueued by poll_pps. Once the - * time has been captured in the hw interrupt context, the remaining - * (more expensive) work to process the event is done later in a - * non-fast-interrupt context. - * - * We only support capture of the rising or falling edge, not both at - * once; tell the kernel to process whichever mode is currently active. - */ - pps_event(&sc->pps, sc->pps.ppsparam.mode & PPS_CAPTUREBOTH); -} - -static int -am335x_dmtimer_pps_open(struct cdev *dev, int flags, int fmt, - struct thread *td) -{ - struct am335x_dmtimer_softc *sc; - - sc = dev->si_drv1; +#define ET_TMR_NUM 2 +#define TC_TMR_NUM 3 - /* Enable capture on open. Harmless if already open. */ - am335x_dmtimer_set_capture_mode(sc, 0); - - return 0; -} - -static int -am335x_dmtimer_pps_close(struct cdev *dev, int flags, int fmt, - struct thread *td) -{ - struct am335x_dmtimer_softc *sc; - - sc = dev->si_drv1; - - /* - * Disable capture on last close. Use the force-off flag to override - * the configured mode and turn off the hardware capture. - */ - am335x_dmtimer_set_capture_mode(sc, 1); - - return 0; -} - -static int -am335x_dmtimer_pps_ioctl(struct cdev *dev, u_long cmd, caddr_t data, - int flags, struct thread *td) -{ - struct am335x_dmtimer_softc *sc; - int err; - - sc = dev->si_drv1; - - /* - * The hardware has a "capture both edges" mode, but we can't do - * anything useful with it in terms of PPS capture, so don't even try. - */ - if ((sc->pps.ppsparam.mode & PPS_CAPTUREBOTH) == PPS_CAPTUREBOTH) - return (EINVAL); - - /* Let the kernel do the heavy lifting for ioctl. */ - err = pps_ioctl(cmd, data, &sc->pps); - if (err != 0) - return (err); - - /* - * The capture mode could have changed, set the hardware to whatever - * mode is now current. Effectively a no-op if nothing changed. - */ - am335x_dmtimer_set_capture_mode(sc, 0); - - return (err); -} - -static struct cdevsw am335x_dmtimer_pps_cdevsw = { - .d_version = D_VERSION, - .d_open = am335x_dmtimer_pps_open, - .d_close = am335x_dmtimer_pps_close, - .d_ioctl = am335x_dmtimer_pps_ioctl, - .d_name = PPS_CDEV_NAME, +/* List of compatible strings for FDT tree */ +static struct ofw_compat_data compat_data[] = { + {"ti,am335x-timer", 1}, + {"ti,am335x-timer-1ms", 1}, + {NULL, 0}, }; -static void -am335x_dmtimer_pps_find() -{ - int i; - unsigned int padstate; - const char * padmux; - struct padinfo { - char * ballname; - const char * muxname; - int timer_num; - } padinfo[] = { - {"GPMC_ADVn_ALE", "timer4", 4}, - {"GPMC_BEn0_CLE", "timer5", 5}, - {"GPMC_WEn", "timer6", 6}, - {"GPMC_OEn_REn", "timer7", 7}, - }; - - /* - * Figure out which pin the user has set up for pps. We'll use the - * first timer that has an external caputure pin configured as input. - * - * XXX The hieroglyphic "(padstate & (0x01 << 5)))" checks that the pin - * is configured for input. The right symbolic values aren't exported - * yet from ti_scm.h. - */ - am335x_dmtimer_pps_module = 0; - for (i = 0; i < nitems(padinfo) && am335x_dmtimer_pps_module == 0; ++i) { - if (ti_pinmux_padconf_get(padinfo[i].ballname, &padmux, - &padstate) == 0) { - if (strcasecmp(padinfo[i].muxname, padmux) == 0 && - (padstate & (0x01 << 5))) { - am335x_dmtimer_pps_module = padinfo[i].timer_num; - am335x_dmtimer_pps_hwmod = padinfo[i].muxname; - } - } - } - - - if (am335x_dmtimer_pps_module == 0) { - printf("am335x_dmtimer: No DMTimer found with capture pin " - "configured as input; PPS driver disabled.\n"); - } -} - -/* - * Set up the PPS cdev and the the kernel timepps stuff. - * - * Note that this routine cannot touch the hardware, because bus space resources - * are not fully set up yet when this is called. - */ -static void -am335x_dmtimer_pps_init(device_t dev, struct am335x_dmtimer_softc *sc) -{ - int unit; - - if (am335x_dmtimer_pps_module == -1) - am335x_dmtimer_pps_find(); - - /* No PPS input */ - if (am335x_dmtimer_pps_module == 0) - return; - - /* Not PPS-enabled input */ - if ((am335x_dmtimer_pps_module > 0) && - (!ti_hwmods_contains(dev, am335x_dmtimer_pps_hwmod))) - return; - - /* - * Indicate our capabilities (pretty much just capture of either edge). - * Have the kernel init its part of the pps_state struct and add its - * capabilities. - */ - sc->pps.ppscap = PPS_CAPTUREBOTH; - pps_init(&sc->pps); - - /* - * Set up to capture the PPS via timecounter polling, and init the task - * that does deferred pps_event() processing after capture. - */ - sc->func.tc.tc_poll_pps = am335x_dmtimer_tc_poll_pps; - TASK_INIT(&sc->pps_task, 0, am335x_dmtimer_process_pps_event, sc); - - /* Create the PPS cdev. */ - unit = device_get_unit(dev); - sc->pps_cdev = make_dev(&am335x_dmtimer_pps_cdevsw, unit, - UID_ROOT, GID_WHEEL, 0600, PPS_CDEV_NAME); - sc->pps_cdev->si_drv1 = sc; - - device_printf(dev, "Using DMTimer%d for PPS device /dev/%s%d\n", - am335x_dmtimer_pps_module, PPS_CDEV_NAME, unit); -} - -#endif - -/* - * End of PPS driver code. - */ - -static unsigned -am335x_dmtimer_tc_get_timecount(struct timecounter *tc) -{ - struct am335x_dmtimer_softc *sc; - - sc = tc->tc_priv; - - return (DMTIMER_READ4(sc, DMT_TCRR)); -} +#define DMTIMER_READ4(sc, reg) bus_read_4((sc)->tmr_mem_res, (reg)) +#define DMTIMER_WRITE4(sc, reg, val) bus_write_4((sc)->tmr_mem_res, (reg), (val)) static int -am335x_dmtimer_start(struct eventtimer *et, sbintime_t first, sbintime_t period) +am335x_dmtimer_et_start(struct eventtimer *et, sbintime_t first, sbintime_t period) { struct am335x_dmtimer_softc *sc; uint32_t initial_count, reload_count; @@ -452,7 +136,7 @@ am335x_dmtimer_start(struct eventtimer * } static int -am335x_dmtimer_stop(struct eventtimer *et) +am335x_dmtimer_et_stop(struct eventtimer *et) { struct am335x_dmtimer_softc *sc; @@ -467,7 +151,7 @@ am335x_dmtimer_stop(struct eventtimer *e } static int -am335x_dmtimer_intr(void *arg) +am335x_dmtimer_et_intr(void *arg) { struct am335x_dmtimer_softc *sc; @@ -481,65 +165,55 @@ am335x_dmtimer_intr(void *arg) return (FILTER_HANDLED); } -/* - * Checks if timer is suitable to be system timer - */ static int -am335x_dmtimer_system_compatible(device_t dev) +am335x_dmtimer_et_init(struct am335x_dmtimer_softc *sc) { - phandle_t node; + KASSERT(am335x_dmtimer_et_sc == NULL, ("already have an eventtimer")); - node = ofw_bus_get_node(dev); - if (OF_hasprop(node, "ti,timer-alwon")) - return (0); - - return (1); -} - -static int -am335x_dmtimer_init_et(struct am335x_dmtimer_softc *sc) -{ - if (am335x_dmtimer_et_sc != NULL) - return (EEXIST); - -#ifdef PPS_SYNC - if ((am335x_dmtimer_pps_module > 0) && - (!ti_hwmods_contains(sc->dev, am335x_dmtimer_pps_hwmod))) { - device_printf(sc->dev, "not PPS enabled\n"); - return (ENXIO); - } -#endif - - /* Setup eventtimer interrupt handler. */ + /* + * Setup eventtimer interrupt handling. Panic if anything goes wrong, + * because the system just isn't going to run without an eventtimer. + */ + sc->tmr_irq_res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, + &sc->tmr_irq_rid, RF_ACTIVE); + if (sc->tmr_irq_res == NULL) + panic("am335x_dmtimer: could not allocate irq resources"); if (bus_setup_intr(sc->dev, sc->tmr_irq_res, INTR_TYPE_CLK, - am335x_dmtimer_intr, NULL, sc, &sc->tmr_irq_handler) != 0) { - device_printf(sc->dev, "Unable to setup the clock irq handler.\n"); - return (ENXIO); - } + am335x_dmtimer_et_intr, NULL, sc, &sc->tmr_irq_handler) != 0) + panic("am335x_dmtimer: count not setup irq handler"); - sc->func.et.et_name = "AM335x Eventtimer"; + sc->func.et.et_name = sc->tmr_name; sc->func.et.et_flags = ET_FLAGS_PERIODIC | ET_FLAGS_ONESHOT; - sc->func.et.et_quality = 1000; + sc->func.et.et_quality = 500; sc->func.et.et_frequency = sc->sysclk_freq; sc->func.et.et_min_period = ((0x00000005LLU << 32) / sc->func.et.et_frequency); sc->func.et.et_max_period = (0xfffffffeLLU << 32) / sc->func.et.et_frequency; - sc->func.et.et_start = am335x_dmtimer_start; - sc->func.et.et_stop = am335x_dmtimer_stop; + sc->func.et.et_start = am335x_dmtimer_et_start; + sc->func.et.et_stop = am335x_dmtimer_et_stop; sc->func.et.et_priv = sc; - et_register(&sc->func.et); am335x_dmtimer_et_sc = sc; + et_register(&sc->func.et); return (0); } +static unsigned +am335x_dmtimer_tc_get_timecount(struct timecounter *tc) +{ + struct am335x_dmtimer_softc *sc; + + sc = tc->tc_priv; + + return (DMTIMER_READ4(sc, DMT_TCRR)); +} + static int -am335x_dmtimer_init_tc(struct am335x_dmtimer_softc *sc) +am335x_dmtimer_tc_init(struct am335x_dmtimer_softc *sc) { - if (am335x_dmtimer_tc_sc != NULL) - return (EEXIST); + KASSERT(am335x_dmtimer_tc_sc == NULL, ("already have a timecounter")); /* Set up timecounter, start it, register it. */ DMTIMER_WRITE4(sc, DMT_TSICR, DMT_TSICR_RESET); @@ -551,15 +225,15 @@ am335x_dmtimer_init_tc(struct am335x_dmt DMTIMER_WRITE4(sc, DMT_TCRR, 0); DMTIMER_WRITE4(sc, DMT_TCLR, sc->tclr); - sc->func.tc.tc_name = "AM335x Timecounter"; + sc->func.tc.tc_name = sc->tmr_name; sc->func.tc.tc_get_timecount = am335x_dmtimer_tc_get_timecount; sc->func.tc.tc_counter_mask = ~0u; sc->func.tc.tc_frequency = sc->sysclk_freq; - sc->func.tc.tc_quality = 1000; + sc->func.tc.tc_quality = 500; sc->func.tc.tc_priv = sc; - tc_init(&sc->func.tc); am335x_dmtimer_tc_sc = sc; + tc_init(&sc->func.tc); return (0); } @@ -567,92 +241,72 @@ am335x_dmtimer_init_tc(struct am335x_dmt static int am335x_dmtimer_probe(device_t dev) { + char strbuf[32]; + int tmr_num; if (!ofw_bus_status_okay(dev)) return (ENXIO); - if (ofw_bus_is_compatible(dev, "ti,am335x-timer-1ms") || - ofw_bus_is_compatible(dev, "ti,am335x-timer")) { - device_set_desc(dev, "AM335x DMTimer"); - return(BUS_PROBE_DEFAULT); - } + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + /* + * Get the hardware unit number (the N from ti,hwmods="timerN"). + * If this isn't the hardware unit we're going to use for either the + * eventtimer or the timecounter, no point in instantiating the device. + */ + tmr_num = ti_hwmods_get_unit(dev, "timer"); + if (tmr_num != ET_TMR_NUM && tmr_num != TC_TMR_NUM) + return (ENXIO); - return (ENXIO); + snprintf(strbuf, sizeof(strbuf), "AM335x DMTimer%d", tmr_num); + device_set_desc_copy(dev, strbuf); + + return(BUS_PROBE_DEFAULT); } static int am335x_dmtimer_attach(device_t dev) { struct am335x_dmtimer_softc *sc; - int err; clk_ident_t timer_id; - int enable; + int err; sc = device_get_softc(dev); sc->dev = dev; /* Get the base clock frequency. */ - err = ti_prcm_clk_get_source_freq(SYS_CLK, &sc->sysclk_freq); - if (err) { - device_printf(dev, "Error: could not get sysclk frequency\n"); + if ((err = ti_prcm_clk_get_source_freq(SYS_CLK, &sc->sysclk_freq)) != 0) + return (err); + + /* Enable clocks and power on the device. */ + if ((timer_id = ti_hwmods_get_clock(dev)) == INVALID_CLK_IDENT) return (ENXIO); - } + if ((err = ti_prcm_clk_set_source(timer_id, SYSCLK_CLK)) != 0) + return (err); + if ((err = ti_prcm_clk_enable(timer_id)) != 0) + return (err); /* Request the memory resources. */ sc->tmr_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->tmr_mem_rid, RF_ACTIVE); if (sc->tmr_mem_res == NULL) { - device_printf(dev, "Error: could not allocate mem resources\n"); return (ENXIO); } - /* Request the IRQ resources. */ - sc->tmr_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, - &sc->tmr_irq_rid, RF_ACTIVE); - if (err) { - bus_release_resource(dev, SYS_RES_MEMORY, sc->tmr_mem_rid, - sc->tmr_mem_res); - device_printf(dev, "Error: could not allocate irq resources\n"); - return (ENXIO); - } + sc->tmr_num = ti_hwmods_get_unit(dev, "timer"); + snprintf(sc->tmr_name, sizeof(sc->tmr_name), "DMTimer%d", sc->tmr_num); -#ifdef PPS_SYNC - am335x_dmtimer_pps_init(dev, sc); -#endif - - enable = 0; - /* Try to use as a timecounter or event timer */ - if (am335x_dmtimer_system_compatible(dev)) { - if (am335x_dmtimer_init_tc(sc) == 0) - enable = 1; - else if (am335x_dmtimer_init_et(sc) == 0) - enable = 1; - } - - if (enable) { - /* Enable clocks and power on the chosen devices. */ - timer_id = ti_hwmods_get_clock(dev); - if (timer_id == INVALID_CLK_IDENT) { - bus_release_resource(dev, SYS_RES_MEMORY, sc->tmr_mem_rid, - sc->tmr_mem_res); - bus_release_resource(dev, SYS_RES_IRQ, sc->tmr_irq_rid, - sc->tmr_irq_res); - device_printf(dev, "failed to get device id using ti,hwmods\n"); - return (ENXIO); - } - - err = ti_prcm_clk_set_source(timer_id, SYSCLK_CLK); - err |= ti_prcm_clk_enable(timer_id); - - if (err) { - bus_release_resource(dev, SYS_RES_MEMORY, sc->tmr_mem_rid, - sc->tmr_mem_res); - bus_release_resource(dev, SYS_RES_IRQ, sc->tmr_irq_rid, - sc->tmr_irq_res); - device_printf(dev, "Error: could not enable timer clock\n"); - return (ENXIO); - } - } + /* + * Go set up either a timecounter or eventtimer. We wouldn't have + * attached if we weren't one or the other. + */ + if (sc->tmr_num == ET_TMR_NUM) + am335x_dmtimer_et_init(sc); + else if (sc->tmr_num == TC_TMR_NUM) + am335x_dmtimer_tc_init(sc); + else + panic("am335x_dmtimer: bad timer number %d", sc->tmr_num); return (0); } Added: head/sys/arm/ti/am335x/am335x_dmtreg.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/ti/am335x/am335x_dmtreg.h Wed Aug 12 19:40:32 2015 (r286696) @@ -0,0 +1,76 @@ +/*- + * Copyright (c) 2012 Damjan Marion + * 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 AM335X_DMTREG_H +#define AM335X_DMTREG_H + +#define AM335X_NUM_TIMERS 8 + +#define DMT_TIDR 0x00 /* Identification Register */ +#define DMT_TIOCP_CFG 0x10 /* OCP Configuration Reg */ +#define DMT_TIOCP_RESET (1 << 0) /* TIOCP perform soft reset */ +#define DMT_IQR_EOI 0x20 /* IRQ End-Of-Interrupt Reg */ +#define DMT_IRQSTATUS_RAW 0x24 /* IRQSTATUS Raw Reg */ +#define DMT_IRQSTATUS 0x28 /* IRQSTATUS Reg */ +#define DMT_IRQENABLE_SET 0x2c /* IRQSTATUS Set Reg */ +#define DMT_IRQENABLE_CLR 0x30 /* IRQSTATUS Clear Reg */ +#define DMT_IRQWAKEEN 0x34 /* IRQ Wakeup Enable Reg */ +#define DMT_IRQ_MAT (1 << 0) /* IRQ: Match */ +#define DMT_IRQ_OVF (1 << 1) /* IRQ: Overflow */ +#define DMT_IRQ_TCAR (1 << 2) /* IRQ: Capture */ +#define DMT_IRQ_MASK (DMT_IRQ_TCAR | DMT_IRQ_OVF | DMT_IRQ_MAT) +#define DMT_TCLR 0x38 /* Control Register */ +#define DMT_TCLR_START (1 << 0) /* Start timer */ +#define DMT_TCLR_AUTOLOAD (1 << 1) /* Auto-reload on overflow */ +#define DMT_TCLR_PRES_MASK (7 << 2) /* Prescaler mask */ +#define DMT_TCLR_PRES_ENABLE (1 << 5) /* Prescaler enable */ +#define DMT_TCLR_COMP_ENABLE (1 << 6) /* Compare enable */ +#define DMT_TCLR_PWM_HIGH (1 << 7) /* PWM default output high */ +#define DMT_TCLR_CAPTRAN_MASK (3 << 8) /* Capture transition mask */ +#define DMT_TCLR_CAPTRAN_NONE (0 << 8) /* Capture: none */ +#define DMT_TCLR_CAPTRAN_LOHI (1 << 8) /* Capture lo->hi transition */ +#define DMT_TCLR_CAPTRAN_HILO (2 << 8) /* Capture hi->lo transition */ +#define DMT_TCLR_CAPTRAN_BOTH (3 << 8) /* Capture both transitions */ +#define DMT_TCLR_TRGMODE_MASK (3 << 10) /* Trigger output mode mask */ +#define DMT_TCLR_TRGMODE_NONE (0 << 10) /* Trigger off */ +#define DMT_TCLR_TRGMODE_OVFL (1 << 10) /* Trigger on overflow */ +#define DMT_TCLR_TRGMODE_BOTH (2 << 10) /* Trigger on match + ovflow */ +#define DMT_TCLR_PWM_PTOGGLE (1 << 12) /* PWM toggles */ +#define DMT_TCLR_CAP_MODE_2ND (1 << 13) /* Capture second event mode */ +#define DMT_TCLR_GPO_CFG (1 << 14) /* (no descr in datasheet) */ +#define DMT_TCRR 0x3C /* Counter Register */ +#define DMT_TLDR 0x40 /* Load Reg */ +#define DMT_TTGR 0x44 /* Trigger Reg */ +#define DMT_TWPS 0x48 /* Write Posted Status Reg */ +#define DMT_TMAR 0x4C /* Match Reg */ +#define DMT_TCAR1 0x50 /* Capture Reg */ +#define DMT_TSICR 0x54 /* Synchr. Interface Ctrl Reg */ +#define DMT_TSICR_RESET (1 << 1) /* TSICR perform soft reset */ +#define DMT_TCAR2 0x48 /* Capture Reg */ + +#endif /* AM335X_DMTREG_H */ From owner-svn-src-head@freebsd.org Wed Aug 12 20:02:46 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4CB569AB3EF; Wed, 12 Aug 2015 20:02:46 +0000 (UTC) (envelope-from marcel@xcllnt.net) Received: from mail.xcllnt.net (mail.xcllnt.net [50.0.150.214]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0893F6B4; Wed, 12 Aug 2015 20:02:45 +0000 (UTC) (envelope-from marcel@xcllnt.net) Received: from marcels-mbp.int.brkt.com (cerberus.brkt.com [208.185.168.138]) (authenticated bits=0) by mail.xcllnt.net (8.15.2/8.15.2) with ESMTPSA id t7CK2hbP002885 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 12 Aug 2015 13:02:44 -0700 (PDT) (envelope-from marcel@xcllnt.net) Subject: Re: svn commit: r286667 - in head/sys: amd64/amd64 conf dev/vt/hw/efifb dev/vt/hw/vga i386/i386 x86/include x86/x86 Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Content-Type: multipart/signed; boundary="Apple-Mail=_6A278005-6305-40A1-B520-DFF5F3A0F513"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail 2.5 From: Marcel Moolenaar In-Reply-To: Date: Wed, 12 Aug 2015 13:02:38 -0700 Cc: Marcel Moolenaar , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: <8DEAEDA3-58FD-4F6A-95D2-0EA8F17B018E@xcllnt.net> References: <201508121526.t7CFQWHM091851@repo.freebsd.org> To: Ed Schouten X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 20:02:46 -0000 --Apple-Mail=_6A278005-6305-40A1-B520-DFF5F3A0F513 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Aug 12, 2015, at 10:37 AM, Ed Schouten wrote: >=20 > Hi Marcel, >=20 > 2015-08-12 17:26 GMT+02:00 Marcel Moolenaar : >> Better support memory mapped console devices, such as VGA and EFI >> frame buffers and memory mapped UARTs. >=20 > This change causes my FreeBSD instance in Virtualbox 4.3.28 (OS X) to > crash. As soon as the kernel initializes the graphics on startup > (read: before printing any messages), I see random garbage appear on > screen, followed by a popup dialog from Virtualbox that a fatal > machine exception has occurred. No problems are seen with VB 5.0 on Mac OS X and having BIOS (don=E2=80=99= t know if VB even supports UEFI) and with FreeBSD/amd64. Maybe upgrading to 4.3.30 resolves the issue? -- Marcel Moolenaar marcel@xcllnt.net --Apple-Mail=_6A278005-6305-40A1-B520-DFF5F3A0F513 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVy6ZeAAoJEIda8t8f0tjjXHsP/iaaOZ4qlJTkgtYv5zL5fNZK anqf2RvUblUhXV4F+XIWKLmQJqbe+LPUjzCquRHiTL8efalHmvspJ1K4naaPKXKi SjLyurIkkOTJwh3U1hmSnDY2bRqV5/yzAz11XATxl88Wt17is2u9O1vQF1RJ6syh dQrSuEp6ul8nhe/et7ebzN3+ANYU7UwHYWqdc17aVkEocJa1+FnWDCMBiLaouisv awSrbynksvgMiL5dtMMKncEh31cZnnEIAk8HaIOw7fowXYxW1WVD5lPbMUj9zDuN 2BAswBhTVOzMNUV7urRr+gZljYYjbM2jWeHoRrrV11hsIA5tKdP2KQZYY68KWNsp 09X3c8zN3yGEm6PnOSz00Nhrjv0Pw9WSiFLrhrNWdpt5qWv9w1jValY4ufWPLRX7 k7XcByTdzqgvEPLCJnwHr8EoqLF84Wd16HwgIR1YB1yINxCsqrD1/2zqRoJku3nR P65mg75HzvpmuVpcN+qy+r5t+nSsa6aK2SvJ24p3Z5h3+fH0TJkGmWk2aDd00/VS PmlHyLn4dHly8B+G+Fe3UkRky0ADP6QvOztZx9saW9Lydk0/h8qZzCAUTxIOiPuO tno0AzZf/1Fr9IJ8InXwcb7wkE581aCciSQY0CJASMWqwSaJsnMnESt9gCEItduN JINTFLy6dmBGluGkdtQ6 =5C06 -----END PGP SIGNATURE----- --Apple-Mail=_6A278005-6305-40A1-B520-DFF5F3A0F513-- From owner-svn-src-head@freebsd.org Wed Aug 12 20:08:54 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EC4B59AB500; Wed, 12 Aug 2015 20:08:54 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DD43794F; Wed, 12 Aug 2015 20:08:54 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CK8sd3009889; Wed, 12 Aug 2015 20:08:54 GMT (envelope-from oshogbo@FreeBSD.org) Received: (from oshogbo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CK8sjG009888; Wed, 12 Aug 2015 20:08:54 GMT (envelope-from oshogbo@FreeBSD.org) Message-Id: <201508122008.t7CK8sjG009888@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: oshogbo set sender to oshogbo@FreeBSD.org using -f From: Mariusz Zaborski Date: Wed, 12 Aug 2015 20:08:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286698 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 20:08:55 -0000 Author: oshogbo Date: Wed Aug 12 20:08:54 2015 New Revision: 286698 URL: https://svnweb.freebsd.org/changeset/base/286698 Log: When the wait*(2) syscalls wait for any process (P_ALL), they should ignore processes created with the pdfork(2) syscall. PR: 201054 Approved by: pjd (mentor) Discussed with: emaste, rwatson Modified: head/sys/kern/kern_exit.c Modified: head/sys/kern/kern_exit.c ============================================================================== --- head/sys/kern/kern_exit.c Wed Aug 12 19:48:49 2015 (r286697) +++ head/sys/kern/kern_exit.c Wed Aug 12 20:08:54 2015 (r286698) @@ -981,6 +981,10 @@ proc_to_reap(struct thread *td, struct p switch (idtype) { case P_ALL: + if (p->p_procdesc != NULL) { + PROC_UNLOCK(p); + return (0); + } break; case P_PID: if (p->p_pid != (pid_t)id) { From owner-svn-src-head@freebsd.org Wed Aug 12 20:16:14 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D64929AB6AA; Wed, 12 Aug 2015 20:16:14 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C77FEF31; Wed, 12 Aug 2015 20:16:14 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CKGEtp014073; Wed, 12 Aug 2015 20:16:14 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CKGElN014072; Wed, 12 Aug 2015 20:16:14 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201508122016.t7CKGElN014072@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Wed, 12 Aug 2015 20:16:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286699 - head/contrib/gcclibs/libcpp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 20:16:14 -0000 Author: dim Date: Wed Aug 12 20:16:13 2015 New Revision: 286699 URL: https://svnweb.freebsd.org/changeset/base/286699 Log: In gcc's libcpp, stop using the INTTYPE_MAXIMUM() macro, which relies on undefined behavior. The code used this macro to avoid problems on some broken systems which define SSIZE_MAX incorrectly, but this is not needed on FreeBSD, obviously. MFC after: 3 days Modified: head/contrib/gcclibs/libcpp/files.c Modified: head/contrib/gcclibs/libcpp/files.c ============================================================================== --- head/contrib/gcclibs/libcpp/files.c Wed Aug 12 20:08:54 2015 (r286698) +++ head/contrib/gcclibs/libcpp/files.c Wed Aug 12 20:16:13 2015 (r286699) @@ -567,7 +567,7 @@ read_file_guts (cpp_reader *pfile, _cpp_ SSIZE_MAX to be much smaller than the actual range of the type. Use INTTYPE_MAXIMUM unconditionally to ensure this does not bite us. */ - if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t)) + if (file->st.st_size > SSIZE_MAX) { cpp_error (pfile, CPP_DL_ERROR, "%s is too large", file->path); return false; @@ -581,7 +581,7 @@ read_file_guts (cpp_reader *pfile, _cpp_ file->path); return false; } - else if (offset > INTTYPE_MAXIMUM (ssize_t) || (ssize_t)offset > size) + else if (offset > SSIZE_MAX || (ssize_t)offset > size) { cpp_error (pfile, CPP_DL_ERROR, "current position of %s is too large", file->path); From owner-svn-src-head@freebsd.org Wed Aug 12 20:17:45 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1D9799AB74F for ; Wed, 12 Aug 2015 20:17:45 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-oi0-f51.google.com (mail-oi0-f51.google.com [209.85.218.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C68E71106 for ; Wed, 12 Aug 2015 20:17:44 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by oihn130 with SMTP id n130so15436923oih.2 for ; Wed, 12 Aug 2015 13:17:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=8OXY6rL4exV6hsdJMBpnYDOFSlf9b4pF5A1n4lIW5gM=; b=MgaKKfy14kgjxgILGxBVzt9uCzGUG9c/ZgOve5b3A97su4bLyEDIDBbBHzQeXp08uN JdJvyUZf/hIjgmYL13bTrbqUzcn0equ1In1q8w35IW9p0/RJrkfoQvKbx/1N20EJ/uVO rIX/1BY5HS2mFYUsU8apw3jB4gnEAX96bhf7oWNzY+VaHMhKf//EYh78G8yM4L1gU+F2 LckKMUX500FLov8v+0Q+WDCMzrSVKhYsdgHgdD+dFIvktfERCHFXw29ODLdAwi8TTlvF LounfQoWx00Xa1pyR0nLmxvyhUFpakHO8y96LxSDIeiRFokduDqS1z2rso5UyDz37sjA Ebuw== X-Gm-Message-State: ALoCoQl2DBs/PNlg4+fRZ6h4s1tKjF+XIvX+VCDbXnwsMzokusR2kjc+1QXLVW+f0LQb7bP7CEOa MIME-Version: 1.0 X-Received: by 10.202.229.204 with SMTP id c195mr16112620oih.113.1439410658235; Wed, 12 Aug 2015 13:17:38 -0700 (PDT) Received: by 10.76.50.84 with HTTP; Wed, 12 Aug 2015 13:17:38 -0700 (PDT) X-Originating-IP: [84.27.222.46] In-Reply-To: <8DEAEDA3-58FD-4F6A-95D2-0EA8F17B018E@xcllnt.net> References: <201508121526.t7CFQWHM091851@repo.freebsd.org> <8DEAEDA3-58FD-4F6A-95D2-0EA8F17B018E@xcllnt.net> Date: Wed, 12 Aug 2015 22:17:38 +0200 Message-ID: Subject: Re: svn commit: r286667 - in head/sys: amd64/amd64 conf dev/vt/hw/efifb dev/vt/hw/vga i386/i386 x86/include x86/x86 From: Ed Schouten To: Marcel Moolenaar Cc: Marcel Moolenaar , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 20:17:45 -0000 2015-08-12 22:02 GMT+02:00 Marcel Moolenaar : > Maybe upgrading to 4.3.30 resolves the issue? I just upgraded to 4.3.30 and 5.0.0. Both fail the same way. I've just attached a screenshot. Will open a bug. -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Wed Aug 12 20:21:07 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EAEB39AB7DC; Wed, 12 Aug 2015 20:21:06 +0000 (UTC) (envelope-from hiren@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CF87416C8; Wed, 12 Aug 2015 20:21:06 +0000 (UTC) (envelope-from hiren@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CKL6kS016756; Wed, 12 Aug 2015 20:21:06 GMT (envelope-from hiren@FreeBSD.org) Received: (from hiren@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CKL5wk016750; Wed, 12 Aug 2015 20:21:05 GMT (envelope-from hiren@FreeBSD.org) Message-Id: <201508122021.t7CKL5wk016750@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hiren set sender to hiren@FreeBSD.org using -f From: Hiren Panchasara Date: Wed, 12 Aug 2015 20:21:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286700 - in head: sbin/ifconfig sys/net X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 20:21:07 -0000 Author: hiren Date: Wed Aug 12 20:21:04 2015 New Revision: 286700 URL: https://svnweb.freebsd.org/changeset/base/286700 Log: Make LAG LACP fast timeout tunable through IOCTL. Differential Revision: D3300 Submitted by: LN Sundararajan Reviewed by: wblock, smh, gnn, hiren, rpokala at panasas MFC after: 2 weeks Sponsored by: Panasas Modified: head/sbin/ifconfig/ifconfig.8 head/sbin/ifconfig/iflagg.c head/sys/net/ieee8023ad_lacp.c head/sys/net/ieee8023ad_lacp.h head/sys/net/if_lagg.c head/sys/net/if_lagg.h Modified: head/sbin/ifconfig/ifconfig.8 ============================================================================== --- head/sbin/ifconfig/ifconfig.8 Wed Aug 12 20:16:13 2015 (r286699) +++ head/sbin/ifconfig/ifconfig.8 Wed Aug 12 20:21:04 2015 (r286700) @@ -28,7 +28,7 @@ .\" From: @(#)ifconfig.8 8.3 (Berkeley) 1/5/94 .\" $FreeBSD$ .\" -.Dd May 15, 2015 +.Dd Aug 12, 2015 .Dt IFCONFIG 8 .Os .Sh NAME @@ -2396,6 +2396,10 @@ Disable local hash computation for RSS h Set a shift parameter for RSS local hash computation. Hash is calculated by using flowid bits in a packet header mbuf which are shifted by the number of this parameter. +.It Cm lacp_fast_timeout +Enable lacp fast-timeout on the interface. +.It Cm -lacp_fast_timeout +Disable lacp fast-timeout on the interface. .El .Pp The following parameters are specific to IP tunnel interfaces, Modified: head/sbin/ifconfig/iflagg.c ============================================================================== --- head/sbin/ifconfig/iflagg.c Wed Aug 12 20:16:13 2015 (r286699) +++ head/sbin/ifconfig/iflagg.c Wed Aug 12 20:21:04 2015 (r286700) @@ -115,6 +115,8 @@ setlaggsetopt(const char *val, int d, in case -LAGG_OPT_LACP_TXTEST: case LAGG_OPT_LACP_RXTEST: case -LAGG_OPT_LACP_RXTEST: + case LAGG_OPT_LACP_TIMEOUT: + case -LAGG_OPT_LACP_TIMEOUT: break; default: err(1, "Invalid lagg option"); @@ -293,6 +295,8 @@ static struct cmd lagg_cmds[] = { DEF_CMD("-lacp_txtest", -LAGG_OPT_LACP_TXTEST, setlaggsetopt), DEF_CMD("lacp_rxtest", LAGG_OPT_LACP_RXTEST, setlaggsetopt), DEF_CMD("-lacp_rxtest", -LAGG_OPT_LACP_RXTEST, setlaggsetopt), + DEF_CMD("lacp_fast_timeout", LAGG_OPT_LACP_TIMEOUT, setlaggsetopt), + DEF_CMD("-lacp_fast_timeout", -LAGG_OPT_LACP_TIMEOUT, setlaggsetopt), DEF_CMD_ARG("flowid_shift", setlaggflowidshift), }; static struct afswtch af_lagg = { Modified: head/sys/net/ieee8023ad_lacp.c ============================================================================== --- head/sys/net/ieee8023ad_lacp.c Wed Aug 12 20:16:13 2015 (r286699) +++ head/sys/net/ieee8023ad_lacp.c Wed Aug 12 20:21:04 2015 (r286700) @@ -522,7 +522,7 @@ lacp_port_create(struct lagg_port *lgp) int error; boolean_t active = TRUE; /* XXX should be configurable */ - boolean_t fast = FALSE; /* XXX should be configurable */ + boolean_t fast = FALSE; /* Configurable via ioctl */ link_init_sdl(ifp, (struct sockaddr *)&sdl, IFT_ETHER); sdl.sdl_alen = ETHER_ADDR_LEN; Modified: head/sys/net/ieee8023ad_lacp.h ============================================================================== --- head/sys/net/ieee8023ad_lacp.h Wed Aug 12 20:16:13 2015 (r286699) +++ head/sys/net/ieee8023ad_lacp.h Wed Aug 12 20:21:04 2015 (r286700) @@ -251,6 +251,7 @@ struct lacp_softc { u_int32_t lsc_tx_test; } lsc_debug; u_int32_t lsc_strict_mode; + boolean_t lsc_fast_timeout; /* if set, fast timeout */ }; #define LACP_TYPE_ACTORINFO 1 Modified: head/sys/net/if_lagg.c ============================================================================== --- head/sys/net/if_lagg.c Wed Aug 12 20:16:13 2015 (r286699) +++ head/sys/net/if_lagg.c Wed Aug 12 20:21:04 2015 (r286700) @@ -1257,6 +1257,8 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd ro->ro_opts |= LAGG_OPT_LACP_RXTEST; if (lsc->lsc_strict_mode != 0) ro->ro_opts |= LAGG_OPT_LACP_STRICT; + if (lsc->lsc_fast_timeout != 0) + ro->ro_opts |= LAGG_OPT_LACP_TIMEOUT; ro->ro_active = sc->sc_active; } else { @@ -1292,6 +1294,8 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd case -LAGG_OPT_LACP_RXTEST: case LAGG_OPT_LACP_STRICT: case -LAGG_OPT_LACP_STRICT: + case LAGG_OPT_LACP_TIMEOUT: + case -LAGG_OPT_LACP_TIMEOUT: valid = lacp = 1; break; default: @@ -1320,6 +1324,7 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd sc->sc_opts &= ~ro->ro_opts; } else { struct lacp_softc *lsc; + struct lacp_port *lp; lsc = (struct lacp_softc *)sc->sc_psc; @@ -1342,6 +1347,20 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd case -LAGG_OPT_LACP_STRICT: lsc->lsc_strict_mode = 0; break; + case LAGG_OPT_LACP_TIMEOUT: + LACP_LOCK(lsc); + LIST_FOREACH(lp, &lsc->lsc_ports, lp_next) + lp->lp_state |= LACP_STATE_TIMEOUT; + LACP_UNLOCK(lsc); + lsc->lsc_fast_timeout = 1; + break; + case -LAGG_OPT_LACP_TIMEOUT: + LACP_LOCK(lsc); + LIST_FOREACH(lp, &lsc->lsc_ports, lp_next) + lp->lp_state &= ~LACP_STATE_TIMEOUT; + LACP_UNLOCK(lsc); + lsc->lsc_fast_timeout = 0; + break; } } LAGG_WUNLOCK(sc); Modified: head/sys/net/if_lagg.h ============================================================================== --- head/sys/net/if_lagg.h Wed Aug 12 20:16:13 2015 (r286699) +++ head/sys/net/if_lagg.h Wed Aug 12 20:21:04 2015 (r286700) @@ -150,6 +150,7 @@ struct lagg_reqopts { #define LAGG_OPT_LACP_STRICT 0x10 /* LACP strict mode */ #define LAGG_OPT_LACP_TXTEST 0x20 /* LACP debug: txtest */ #define LAGG_OPT_LACP_RXTEST 0x40 /* LACP debug: rxtest */ +#define LAGG_OPT_LACP_TIMEOUT 0x80 /* LACP timeout */ u_int ro_count; /* number of ports */ u_int ro_active; /* active port count */ u_int ro_flapping; /* number of flapping */ From owner-svn-src-head@freebsd.org Wed Aug 12 20:21:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C05C69AB91B; Wed, 12 Aug 2015 20:21:31 +0000 (UTC) (envelope-from marcel@xcllnt.net) Received: from mail.xcllnt.net (mail.xcllnt.net [50.0.150.214]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7D3191868; Wed, 12 Aug 2015 20:21:31 +0000 (UTC) (envelope-from marcel@xcllnt.net) Received: from marcels-mbp.int.brkt.com (cerberus.brkt.com [208.185.168.138]) (authenticated bits=0) by mail.xcllnt.net (8.15.2/8.15.2) with ESMTPSA id t7CKLTTm003028 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 12 Aug 2015 13:21:30 -0700 (PDT) (envelope-from marcel@xcllnt.net) Subject: Re: svn commit: r286667 - in head/sys: amd64/amd64 conf dev/vt/hw/efifb dev/vt/hw/vga i386/i386 x86/include x86/x86 Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Content-Type: multipart/signed; boundary="Apple-Mail=_68A4912B-48CA-4DA6-A9AA-B4B1312FE2C4"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail 2.5 From: Marcel Moolenaar In-Reply-To: Date: Wed, 12 Aug 2015 13:21:23 -0700 Cc: Marcel Moolenaar , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: References: <201508121526.t7CFQWHM091851@repo.freebsd.org> <8DEAEDA3-58FD-4F6A-95D2-0EA8F17B018E@xcllnt.net> To: Ed Schouten X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 20:21:31 -0000 --Apple-Mail=_68A4912B-48CA-4DA6-A9AA-B4B1312FE2C4 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii > On Aug 12, 2015, at 1:17 PM, Ed Schouten wrote: > > 2015-08-12 22:02 GMT+02:00 Marcel Moolenaar : >> Maybe upgrading to 4.3.30 resolves the issue? > > I just upgraded to 4.3.30 and 5.0.0. Both fail the same way. I've just > attached a screenshot. Will open a bug. Thanks! -- Marcel Moolenaar marcel@xcllnt.net --Apple-Mail=_68A4912B-48CA-4DA6-A9AA-B4B1312FE2C4 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVy6rEAAoJEIda8t8f0tjj5dgP/3FUXzcb+Eqn+MRBuxKCiYgG yUhH9kLMXYzPvES5+d0p0ACV7FrgazdBQdr1RVn0GNY+IST0ldwSTOMGeZHBcqEV nbR/pgpGAaJe6kEezDwNY1Enx/rl8OQjqH1ehp2WKZ2Xtze1GDKcomm4s17dWlQX Uw6pdsSSHbZYqdRDkza9NVpBROxRZlA+JuDVBpKathCuxoQdM7RSfisTSRn5BBID D4rS+nL148fSAq2n3xUcXR1VICx9Oc08H2vA04s4iqpCHdR+GBsKcufNjZ/AA1sh lGkzE7M3DZAEVZj5BslB/yuFwGyAMa/NauLj8M5Te5KDSDBRaZLKtiVdjGCEtdmm Pm426UwBsZ1KPAxmOrR1xKw4tBSM/W2XO7XbVMnRzRt9kAyhhIFEoa6+Qsl8ge3m u+5rt+EzqHCx1kY0zLHxcUS1MEA6MAkyh6weX6OMeu/zHIxwrumEPUolRCDFXQ7T aZQnXGqeYoATybygxINUkH9LfVJVeQ/5jO6l7X3nues7Zv5UXj7aI85wmgcuUJlV /EBuq0b1xOt0Y1L1MBqIHZ1+2iI+8GB57NDJL/I6ZgAGKY6DJwEVgASTUfBkmtez IHLRcIcnNgAVSlYjROoKemO72+qSjy8lfharBQVTa6BJ8Cta2kkD/CLPABMQf3+4 rrYg148/f5n7V/D95nOZ =Uz4a -----END PGP SIGNATURE----- --Apple-Mail=_68A4912B-48CA-4DA6-A9AA-B4B1312FE2C4-- From owner-svn-src-head@freebsd.org Wed Aug 12 20:50:21 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7FA049ABDF9; Wed, 12 Aug 2015 20:50:21 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 70AD1C16; Wed, 12 Aug 2015 20:50:21 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CKoLEP026682; Wed, 12 Aug 2015 20:50:21 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CKoLl6026678; Wed, 12 Aug 2015 20:50:21 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508122050.t7CKoLl6026678@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Wed, 12 Aug 2015 20:50:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286701 - in head: share/man/man4 sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 20:50:21 -0000 Author: ian Date: Wed Aug 12 20:50:20 2015 New Revision: 286701 URL: https://svnweb.freebsd.org/changeset/base/286701 Log: If a specific timecounter has been chosen via sysctl, and a new timecounter with higher quality registers (presumably in a module that has just been loaded), do not undo the user's choice by switching to the new timecounter. Document that behavior, and also the fact that there is no way to unregister a timecounter (and thus no way to unload a module containing one). Modified: head/share/man/man4/timecounters.4 head/sys/kern/kern_tc.c Modified: head/share/man/man4/timecounters.4 ============================================================================== --- head/share/man/man4/timecounters.4 Wed Aug 12 20:21:04 2015 (r286700) +++ head/share/man/man4/timecounters.4 Wed Aug 12 20:50:20 2015 (r286701) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 12, 2014 +.Dd August 12, 2015 .Dt TIMECOUNTERS 4 .Os .Sh NAME @@ -96,10 +96,16 @@ compared to others. A negative value means this time counter is broken and should not be used. .El .Pp -The time management code of the kernel chooses one time counter from that list. -The current choice can be read and affected via the +The time management code of the kernel automatically switches to a +higher-quality time counter when it registers, unless the .Va kern.timecounter.hardware -tunable/sysctl. +sysctl has been used to choose a specific device. +.Pp +There is no way to unregister a time counter once it has registered +with the kernel. +If a dynamically loaded module contains a time counter you will not +be able to unload that module, even if the time counter it contains +is not the one currently in use. .Sh SEE ALSO .Xr attimer 4 , .Xr eventtimers 4 , Modified: head/sys/kern/kern_tc.c ============================================================================== --- head/sys/kern/kern_tc.c Wed Aug 12 20:21:04 2015 (r286700) +++ head/sys/kern/kern_tc.c Wed Aug 12 20:50:20 2015 (r286701) @@ -133,6 +133,8 @@ SYSCTL_PROC(_kern_timecounter, OID_AUTO, sysctl_kern_timecounter_adjprecision, "I", "Allowed time interval deviation in percents"); +static int tc_chosen; /* Non-zero if a specific tc was chosen via sysctl. */ + static void tc_windup(void); static void cpu_tick_calibrate(int); @@ -1197,10 +1199,13 @@ tc_init(struct timecounter *tc) "quality", CTLFLAG_RD, &(tc->tc_quality), 0, "goodness of time counter"); /* - * Never automatically use a timecounter with negative quality. + * Do not automatically switch if the current tc was specifically + * chosen. Never automatically use a timecounter with negative quality. * Even though we run on the dummy counter, switching here may be - * worse since this timecounter may not be monotonous. + * worse since this timecounter may not be monotonic. */ + if (tc_chosen) + return; if (tc->tc_quality < 0) return; if (tc->tc_quality < timecounter->tc_quality) @@ -1433,9 +1438,12 @@ sysctl_kern_timecounter_hardware(SYSCTL_ strlcpy(newname, tc->tc_name, sizeof(newname)); error = sysctl_handle_string(oidp, &newname[0], sizeof(newname), req); - if (error != 0 || req->newptr == NULL || - strcmp(newname, tc->tc_name) == 0) + if (error != 0 || req->newptr == NULL) return (error); + /* Record that the tc in use now was specifically chosen. */ + tc_chosen = 1; + if (strcmp(newname, tc->tc_name) == 0) + return (0); for (newtc = timecounters; newtc != NULL; newtc = newtc->tc_next) { if (strcmp(newname, newtc->tc_name) != 0) continue; @@ -1464,7 +1472,7 @@ SYSCTL_PROC(_kern_timecounter, OID_AUTO, "Timecounter hardware selected"); -/* Report or change the active timecounter hardware. */ +/* Report the available timecounter hardware. */ static int sysctl_kern_timecounter_choice(SYSCTL_HANDLER_ARGS) { From owner-svn-src-head@freebsd.org Wed Aug 12 21:07:58 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D943599F0F9; Wed, 12 Aug 2015 21:07:58 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CA73B6EF; Wed, 12 Aug 2015 21:07:58 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CL7wnU035213; Wed, 12 Aug 2015 21:07:58 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CL7w47035212; Wed, 12 Aug 2015 21:07:58 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201508122107.t7CL7w47035212@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Wed, 12 Aug 2015 21:07:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286702 - head/sbin/ipfw X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 21:07:58 -0000 Author: dim Date: Wed Aug 12 21:07:57 2015 New Revision: 286702 URL: https://svnweb.freebsd.org/changeset/base/286702 Log: In ipfw2, avoid left-shifting negative integers, which is undefined. While here, make some other arguments to htonl(3) unsigned too. MFC after: 3 days Modified: head/sbin/ipfw/ipfw2.c Modified: head/sbin/ipfw/ipfw2.c ============================================================================== --- head/sbin/ipfw/ipfw2.c Wed Aug 12 20:50:20 2015 (r286701) +++ head/sbin/ipfw/ipfw2.c Wed Aug 12 21:07:57 2015 (r286702) @@ -2869,14 +2869,14 @@ fill_ip(ipfw_insn_ip *cmd, char *av, int case '/': masklen = atoi(p); if (masklen == 0) - d[1] = htonl(0); /* mask */ + d[1] = htonl(0U); /* mask */ else if (masklen > 32) errx(EX_DATAERR, "bad width ``%s''", p); else - d[1] = htonl(~0 << (32 - masklen)); + d[1] = htonl(~0U << (32 - masklen)); break; case '{': /* no mask, assume /24 and put back the '{' */ - d[1] = htonl(~0 << (32 - 24)); + d[1] = htonl(~0U << (32 - 24)); *(--p) = md; break; @@ -2885,7 +2885,7 @@ fill_ip(ipfw_insn_ip *cmd, char *av, int /* FALLTHROUGH */ case 0: /* initialization value */ default: - d[1] = htonl(~0); /* force /32 */ + d[1] = htonl(~0U); /* force /32 */ break; } d[0] &= d[1]; /* mask base address with mask */ From owner-svn-src-head@freebsd.org Wed Aug 12 22:09:59 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D1FCB99FA46; Wed, 12 Aug 2015 22:09:59 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AC8E6153; Wed, 12 Aug 2015 22:09:59 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CM9xfH060184; Wed, 12 Aug 2015 22:09:59 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CM9xk0060183; Wed, 12 Aug 2015 22:09:59 GMT (envelope-from np@FreeBSD.org) Message-Id: <201508122209.t7CM9xk0060183@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Wed, 12 Aug 2015 22:09:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286703 - head/sys/ofed/drivers/infiniband/core X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 22:10:00 -0000 Author: np Date: Wed Aug 12 22:09:58 2015 New Revision: 286703 URL: https://svnweb.freebsd.org/changeset/base/286703 Log: Reinstate unify_tcp_port_space and associated code that was lost during the last OFED update (r278886). iWARP on FreeBSD is properly integrated with the network stack and the iWARP drivers _never_ operate out of any private TCP port-space that is invisible to the kernel. Instead, an iWARP connection shows up as a TCP socket (which is what it is) fully visible to the kernel and standard tools like netstat, sockstat, etc. Modified: head/sys/ofed/drivers/infiniband/core/cma.c Modified: head/sys/ofed/drivers/infiniband/core/cma.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/cma.c Wed Aug 12 21:07:57 2015 (r286702) +++ head/sys/ofed/drivers/infiniband/core/cma.c Wed Aug 12 22:09:58 2015 (r286703) @@ -72,6 +72,11 @@ static int def_prec2sl = 3; module_param_named(def_prec2sl, def_prec2sl, int, 0644); MODULE_PARM_DESC(def_prec2sl, "Default value for SL priority with RoCE. Valid values 0 - 7"); +static int unify_tcp_port_space = 1; +module_param(unify_tcp_port_space, int, 0644); +MODULE_PARM_DESC(unify_tcp_port_space, "Unify the host TCP and RDMA port " + "space allocation (default=1)"); + static int debug_level = 0; #define cma_pr(level, priv, format, arg...) \ printk(level "CMA: %p: %s: " format, ((struct rdma_id_priv *) priv) , __func__, ## arg) @@ -957,6 +962,8 @@ static void cma_release_port(struct rdma kfree(bind_list); } mutex_unlock(&lock); + if (id_priv->sock) + sock_release(id_priv->sock); } static void cma_leave_mc_groups(struct rdma_id_private *id_priv) @@ -2449,6 +2456,42 @@ static int cma_bind_listen(struct rdma_i return ret; } +static int cma_get_tcp_port(struct rdma_id_private *id_priv) +{ + int ret; + int size; + struct socket *sock; + + ret = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); + if (ret) + return ret; +#ifdef __linux__ + ret = sock->ops->bind(sock, + (struct sockaddr *) &id_priv->id.route.addr.src_addr, + ip_addr_size((struct sockaddr *) &id_priv->id.route.addr.src_addr)); +#else + ret = -sobind(sock, + (struct sockaddr *)&id_priv->id.route.addr.src_addr, + curthread); +#endif + if (ret) { + sock_release(sock); + return ret; + } + + size = ip_addr_size((struct sockaddr *) &id_priv->id.route.addr.src_addr); + ret = sock_getname(sock, + (struct sockaddr *) &id_priv->id.route.addr.src_addr, + &size, 0); + if (ret) { + sock_release(sock); + return ret; + } + + id_priv->sock = sock; + return 0; +} + static int cma_get_port(struct rdma_id_private *id_priv) { struct idr *ps; @@ -2460,6 +2503,11 @@ static int cma_get_port(struct rdma_id_p break; case RDMA_PS_TCP: ps = &tcp_ps; + if (unify_tcp_port_space) { + ret = cma_get_tcp_port(id_priv); + if (ret) + goto out; + } break; case RDMA_PS_UDP: ps = &udp_ps; @@ -2480,7 +2528,7 @@ static int cma_get_port(struct rdma_id_p else ret = cma_use_port(ps, id_priv); mutex_unlock(&lock); - +out: return ret; } From owner-svn-src-head@freebsd.org Wed Aug 12 22:41:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7AFB09A0301; Wed, 12 Aug 2015 22:41:11 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 63611BFE; Wed, 12 Aug 2015 22:41:11 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CMfBhm073717; Wed, 12 Aug 2015 22:41:11 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CMf68V073697; Wed, 12 Aug 2015 22:41:06 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508122241.t7CMf68V073697@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 12 Aug 2015 22:41:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286705 - in head: cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensolaris/cmd/ztest cddl/contrib/opensolaris/lib/libzfs/common cddl/contrib/opensolar... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 22:41:11 -0000 Author: mav Date: Wed Aug 12 22:41:06 2015 New Revision: 286705 URL: https://svnweb.freebsd.org/changeset/base/286705 Log: MFV r286704: 5960 zfs recv should prefetch indirect blocks 5925 zfs receive -o origin= Reviewed by: Prakash Surya Reviewed by: Matthew Ahrens Author: Paul Dagnelie While running 'zfs recv' we noticed that every 128th 8K block required a read. We were seeing that restore_write() was calling dmu_tx_hold_write() and the indirect block was not cached. We should prefetch upcoming indirect blocks to avoid having to go to disk and blocking the restore_write(). Allow an incremental send stream to be received as a clone, even if the stream does not mark it as a clone. Added: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bqueue.c (contents, props changed) head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bqueue.h (contents, props changed) head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_priority.h (contents, props changed) Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c head/cddl/contrib/opensolaris/cmd/ztest/ztest.c head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c head/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_checksum.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c Directory Properties: head/cddl/contrib/opensolaris/ (props changed) head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/ (props changed) head/cddl/contrib/opensolaris/cmd/zfs/ (props changed) head/cddl/contrib/opensolaris/lib/libzfs/ (props changed) head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Wed Aug 12 22:41:06 2015 (r286705) @@ -2428,6 +2428,9 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog dmu_object_type_t type; boolean_t is_metadata; + if (bp == NULL) + return (0); + if (dump_opt['b'] >= 5 && bp->blk_birth > 0) { char blkbuf[BP_SPRINTF_LEN]; snprintf_blkptr(blkbuf, sizeof (blkbuf), bp); @@ -2917,7 +2920,7 @@ zdb_ddt_add_cb(spa_t *spa, zilog_t *zilo avl_index_t where; zdb_ddt_entry_t *zdde, zdde_search; - if (BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp)) + if (bp == NULL || BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp)) return (0); if (dump_opt['S'] > 1 && zb->zb_level == ZB_ROOT_LEVEL) { Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Wed Aug 12 22:36:02 2015 (r286704) +++ head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Wed Aug 12 22:41:06 2015 (r286705) @@ -191,11 +191,13 @@ .Nm .Cm receive Ns | Ns Cm recv .Op Fl vnFu +.Op Fl o Sy origin Ns = Ns Ar snapshot .Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot .Nm .Cm receive Ns | Ns Cm recv .Op Fl vnFu .Op Fl d | e +.Op Fl o Sy origin Ns = Ns Ar snapshot .Ar filesystem .Nm .Cm allow @@ -2705,6 +2707,7 @@ feature. .Nm .Cm receive Ns | Ns Cm recv .Op Fl vnFu +.Op Fl o Sy origin Ns = Ns Ar snapshot .Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot .Xc .It Xo @@ -2712,6 +2715,7 @@ feature. .Cm receive Ns | Ns Cm recv .Op Fl vnFu .Op Fl d | e +.Op Fl o Sy origin Ns = Ns Ar snapshot .Ar filesystem .Xc .Pp @@ -2796,6 +2800,10 @@ receive operation. Do not actually receive the stream. This can be useful in conjunction with the .Fl v option to verify the name the receive operation would use. +.It Fl o Sy origin Ns = Ns Ar snapshot +Forces the stream to be received as a clone of the given snapshot. +This is only valid if the stream is an incremental stream whose source +is the same as the provided origin. .It Fl F Force a rollback of the file system to the most recent snapshot before performing the receive operation. If receiving an incremental replication Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Wed Aug 12 22:41:06 2015 (r286705) @@ -264,8 +264,9 @@ get_usage(zfs_help_t idx) return (gettext("\tpromote \n")); case HELP_RECEIVE: return (gettext("\treceive|recv [-vnFu] \n" - "\treceive|recv [-vnFu] [-d | -e] \n")); + "snapshot>\n" + "\treceive|recv [-vnFu] [-o origin=] [-d | -e] " + "\n")); case HELP_RENAME: return (gettext("\trename [-f] " "\n" @@ -791,7 +792,7 @@ zfs_do_create(int argc, char **argv) nomem(); break; case 'o': - if (parseprop(props, optarg)) + if (parseprop(props, optarg) != 0) goto error; break; case 's': @@ -3659,7 +3660,7 @@ zfs_do_snapshot(int argc, char **argv) while ((c = getopt(argc, argv, "ro:")) != -1) { switch (c) { case 'o': - if (parseprop(props, optarg)) + if (parseprop(props, optarg) != 0) return (1); break; case 'r': @@ -3918,10 +3919,19 @@ zfs_do_receive(int argc, char **argv) { int c, err; recvflags_t flags = { 0 }; + nvlist_t *props; + nvpair_t *nvp = NULL; + + if (nvlist_alloc(&props, NV_UNIQUE_NAME, 0) != 0) + nomem(); /* check options */ - while ((c = getopt(argc, argv, ":denuvF")) != -1) { + while ((c = getopt(argc, argv, ":o:denuvF")) != -1) { switch (c) { + case 'o': + if (parseprop(props, optarg) != 0) + return (1); + break; case 'd': flags.isprefix = B_TRUE; break; @@ -3966,6 +3976,13 @@ zfs_do_receive(int argc, char **argv) usage(B_FALSE); } + while ((nvp = nvlist_next_nvpair(props, nvp))) { + if (strcmp(nvpair_name(nvp), "origin") != 0) { + (void) fprintf(stderr, gettext("invalid option")); + usage(B_FALSE); + } + } + if (isatty(STDIN_FILENO)) { (void) fprintf(stderr, gettext("Error: Backup stream can not be read " @@ -3974,7 +3991,7 @@ zfs_do_receive(int argc, char **argv) return (1); } - err = zfs_receive(g_zfs, argv[0], &flags, STDIN_FILENO, NULL); + err = zfs_receive(g_zfs, argv[0], props, &flags, STDIN_FILENO, NULL); return (err != 0); } Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Wed Aug 12 22:41:06 2015 (r286705) @@ -3586,7 +3586,8 @@ ztest_dmu_read_write(ztest_ds_t *zd, uin */ n = ztest_random(regions) * stride + ztest_random(width); s = 1 + ztest_random(2 * width - 1); - dmu_prefetch(os, bigobj, n * chunksize, s * chunksize); + dmu_prefetch(os, bigobj, 0, n * chunksize, s * chunksize, + ZIO_PRIORITY_SYNC_READ); /* * Pick a random index and compute the offsets into packobj and bigobj. @@ -5705,8 +5706,10 @@ ztest_run(ztest_shared_t *zs) * Right before closing the pool, kick off a bunch of async I/O; * spa_close() should wait for it to complete. */ - for (uint64_t object = 1; object < 50; object++) - dmu_prefetch(spa->spa_meta_objset, object, 0, 1ULL << 20); + for (uint64_t object = 1; object < 50; object++) { + dmu_prefetch(spa->spa_meta_objset, object, 0, 0, 1ULL << 20, + ZIO_PRIORITY_SYNC_READ); + } spa_close(spa, FTAG); Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h ============================================================================== --- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Wed Aug 12 22:36:02 2015 (r286704) +++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Wed Aug 12 22:41:06 2015 (r286705) @@ -668,8 +668,8 @@ typedef struct recvflags { boolean_t nomount; } recvflags_t; -extern int zfs_receive(libzfs_handle_t *, const char *, recvflags_t *, - int, avl_tree_t *); +extern int zfs_receive(libzfs_handle_t *, const char *, nvlist_t *, + recvflags_t *, int, avl_tree_t *); typedef enum diff_flags { ZFS_DIFF_PARSEABLE = 0x1, Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c ============================================================================== --- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Wed Aug 12 22:41:06 2015 (r286705) @@ -3535,7 +3535,7 @@ zpool_vdev_name(libzfs_handle_t *hdl, zp } static int -zbookmark_compare(const void *a, const void *b) +zbookmark_mem_compare(const void *a, const void *b) { return (memcmp(a, b, sizeof (zbookmark_phys_t))); } @@ -3598,7 +3598,7 @@ zpool_get_errlog(zpool_handle_t *zhp, nv zc.zc_nvlist_dst_size; count -= zc.zc_nvlist_dst_size; - qsort(zb, count, sizeof (zbookmark_phys_t), zbookmark_compare); + qsort(zb, count, sizeof (zbookmark_phys_t), zbookmark_mem_compare); verify(nvlist_alloc(nverrlistp, 0, KM_SLEEP) == 0); Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c ============================================================================== --- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c Wed Aug 12 22:41:06 2015 (r286705) @@ -64,8 +64,9 @@ extern void zfs_setprop_error(libzfs_han /* We need to use something for ENODATA. */ #define ENODATA EIDRM -static int zfs_receive_impl(libzfs_handle_t *, const char *, recvflags_t *, - int, const char *, nvlist_t *, avl_tree_t *, char **, int, uint64_t *); +static int zfs_receive_impl(libzfs_handle_t *, const char *, const char *, + recvflags_t *, int, const char *, nvlist_t *, avl_tree_t *, char **, int, + uint64_t *); static const zio_cksum_t zero_cksum = { 0 }; @@ -2498,7 +2499,7 @@ zfs_receive_package(libzfs_handle_t *hdl * zfs_receive_one() will take care of it (ie, * recv_skip() and return 0). */ - error = zfs_receive_impl(hdl, destname, flags, fd, + error = zfs_receive_impl(hdl, destname, NULL, flags, fd, sendfs, stream_nv, stream_avl, top_zfs, cleanup_fd, action_handlep); if (error == ENODATA) { @@ -2631,9 +2632,9 @@ recv_skip(libzfs_handle_t *hdl, int fd, */ static int zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, - recvflags_t *flags, dmu_replay_record_t *drr, - dmu_replay_record_t *drr_noswap, const char *sendfs, - nvlist_t *stream_nv, avl_tree_t *stream_avl, char **top_zfs, int cleanup_fd, + const char *originsnap, recvflags_t *flags, dmu_replay_record_t *drr, + dmu_replay_record_t *drr_noswap, const char *sendfs, nvlist_t *stream_nv, + avl_tree_t *stream_avl, char **top_zfs, int cleanup_fd, uint64_t *action_handlep) { zfs_cmd_t zc = { 0 }; @@ -2798,10 +2799,15 @@ zfs_receive_one(libzfs_handle_t *hdl, in } if (flags->verbose) (void) printf("found clone origin %s\n", zc.zc_string); + } else if (originsnap) { + (void) strncpy(zc.zc_string, originsnap, ZFS_MAXNAMELEN); + if (flags->verbose) + (void) printf("using provided clone origin %s\n", + zc.zc_string); } stream_wantsnewfs = (drrb->drr_fromguid == 0 || - (drrb->drr_flags & DRR_FLAG_CLONE)); + (drrb->drr_flags & DRR_FLAG_CLONE) || originsnap); if (stream_wantsnewfs) { /* @@ -3179,9 +3185,10 @@ zfs_receive_one(libzfs_handle_t *hdl, in } static int -zfs_receive_impl(libzfs_handle_t *hdl, const char *tosnap, recvflags_t *flags, - int infd, const char *sendfs, nvlist_t *stream_nv, avl_tree_t *stream_avl, - char **top_zfs, int cleanup_fd, uint64_t *action_handlep) +zfs_receive_impl(libzfs_handle_t *hdl, const char *tosnap, + const char *originsnap, recvflags_t *flags, int infd, const char *sendfs, + nvlist_t *stream_nv, avl_tree_t *stream_avl, char **top_zfs, int cleanup_fd, + uint64_t *action_handlep) { int err; dmu_replay_record_t drr, drr_noswap; @@ -3200,6 +3207,12 @@ zfs_receive_impl(libzfs_handle_t *hdl, c "(%s) does not exist"), tosnap); return (zfs_error(hdl, EZFS_NOENT, errbuf)); } + if (originsnap && + !zfs_dataset_exists(hdl, originsnap, ZFS_TYPE_DATASET)) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "specified origin fs " + "(%s) does not exist"), originsnap); + return (zfs_error(hdl, EZFS_NOENT, errbuf)); + } /* read in the BEGIN record */ if (0 != (err = recv_read(hdl, infd, &drr, sizeof (drr), B_FALSE, @@ -3272,14 +3285,14 @@ zfs_receive_impl(libzfs_handle_t *hdl, c *cp = '\0'; sendfs = nonpackage_sendfs; } - return (zfs_receive_one(hdl, infd, tosnap, flags, - &drr, &drr_noswap, sendfs, stream_nv, stream_avl, - top_zfs, cleanup_fd, action_handlep)); + return (zfs_receive_one(hdl, infd, tosnap, originsnap, flags, + &drr, &drr_noswap, sendfs, stream_nv, stream_avl, top_zfs, + cleanup_fd, action_handlep)); } else { assert(DMU_GET_STREAM_HDRTYPE(drrb->drr_versioninfo) == DMU_COMPOUNDSTREAM); - return (zfs_receive_package(hdl, infd, tosnap, flags, - &drr, &zcksum, top_zfs, cleanup_fd, action_handlep)); + return (zfs_receive_package(hdl, infd, tosnap, flags, &drr, + &zcksum, top_zfs, cleanup_fd, action_handlep)); } } @@ -3290,18 +3303,24 @@ zfs_receive_impl(libzfs_handle_t *hdl, c * (-1 will override -2). */ int -zfs_receive(libzfs_handle_t *hdl, const char *tosnap, recvflags_t *flags, - int infd, avl_tree_t *stream_avl) +zfs_receive(libzfs_handle_t *hdl, const char *tosnap, nvlist_t *props, + recvflags_t *flags, int infd, avl_tree_t *stream_avl) { char *top_zfs = NULL; int err; int cleanup_fd; uint64_t action_handle = 0; + char *originsnap = NULL; + if (props) { + err = nvlist_lookup_string(props, "origin", &originsnap); + if (err && err != ENOENT) + return (err); + } cleanup_fd = open(ZFS_DEV, O_RDWR|O_EXCL); VERIFY(cleanup_fd >= 0); - err = zfs_receive_impl(hdl, tosnap, flags, infd, NULL, NULL, + err = zfs_receive_impl(hdl, tosnap, originsnap, flags, infd, NULL, NULL, stream_avl, &top_zfs, cleanup_fd, &action_handle); VERIFY(0 == close(cleanup_fd)); Modified: head/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h ============================================================================== --- head/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Wed Aug 12 22:36:02 2015 (r286704) +++ head/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Wed Aug 12 22:41:06 2015 (r286705) @@ -135,8 +135,18 @@ extern int aok; /* * DTrace SDT probes have different signatures in userland than they do in - * kernel. If they're being used in kernel code, re-define them out of + * the kernel. If they're being used in kernel code, re-define them out of * existence for their counterparts in libzpool. + * + * Here's an example of how to use the set-error probes in userland: + * zfs$target:::set-error /arg0 == EBUSY/ {stack();} + * + * Here's an example of how to use DTRACE_PROBE probes in userland: + * If there is a probe declared as follows: + * DTRACE_PROBE2(zfs__probe_name, uint64_t, blkid, dnode_t *, dn); + * Then you can use it as follows: + * zfs$target:::probe2 /copyinstr(arg0) == "zfs__probe_name"/ + * {printf("%u %p\n", arg1, arg2);} */ #ifdef DTRACE_PROBE Modified: head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Wed Aug 12 22:36:02 2015 (r286704) +++ head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Wed Aug 12 22:41:06 2015 (r286705) @@ -22,7 +22,9 @@ # # Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2012 Nexenta Systems, Inc. All rights reserved. -# Copyright (c) 2013 by Delphix. All rights reserved. +# Copyright (c) 2012 Nexenta Systems, Inc. All rights reserved. +# Copyright (c) 2012 Joyent, Inc. All rights reserved. +# Copyright (c) 2011, 2014 by Delphix. All rights reserved. # Copyright (c) 2013 by Saso Kiselkov. All rights reserved. # # @@ -36,6 +38,7 @@ ZFS_COMMON_OBJS += \ blkptr.o \ bpobj.o \ bptree.o \ + bqueue.o \ dbuf.o \ ddt.o \ ddt_zap.o \ Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c Wed Aug 12 22:41:06 2015 (r286705) @@ -154,7 +154,7 @@ bptree_visit_cb(spa_t *spa, zilog_t *zil int err; struct bptree_args *ba = arg; - if (BP_IS_HOLE(bp)) + if (bp == NULL || BP_IS_HOLE(bp)) return (0); err = ba->ba_func(ba->ba_arg, bp, ba->ba_tx); Added: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bqueue.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bqueue.c Wed Aug 12 22:41:06 2015 (r286705) @@ -0,0 +1,111 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Delphix. All rights reserved. + */ + +#include +#include + +static inline bqueue_node_t * +obj2node(bqueue_t *q, void *data) +{ + return ((bqueue_node_t *)((char *)data + q->bq_node_offset)); +} + +/* + * Initialize a blocking queue The maximum capacity of the queue is set to + * size. Types that want to be stored in a bqueue must contain a bqueue_node_t, + * and offset should give its offset from the start of the struct. Return 0 on + * success, or -1 on failure. + */ +int +bqueue_init(bqueue_t *q, uint64_t size, size_t node_offset) +{ + list_create(&q->bq_list, node_offset + sizeof (bqueue_node_t), + node_offset + offsetof(bqueue_node_t, bqn_node)); + cv_init(&q->bq_add_cv, NULL, CV_DEFAULT, NULL); + cv_init(&q->bq_pop_cv, NULL, CV_DEFAULT, NULL); + mutex_init(&q->bq_lock, NULL, MUTEX_DEFAULT, NULL); + q->bq_node_offset = node_offset; + q->bq_size = 0; + q->bq_maxsize = size; + return (0); +} + +/* + * Destroy a blocking queue. This function asserts that there are no + * elements in the queue, and no one is blocked on the condition + * variables. + */ +void +bqueue_destroy(bqueue_t *q) +{ + ASSERT0(q->bq_size); + cv_destroy(&q->bq_add_cv); + cv_destroy(&q->bq_pop_cv); + mutex_destroy(&q->bq_lock); + list_destroy(&q->bq_list); +} + +/* + * Add data to q, consuming size units of capacity. If there is insufficient + * capacity to consume size units, block until capacity exists. Asserts size is + * > 0. + */ +void +bqueue_enqueue(bqueue_t *q, void *data, uint64_t item_size) +{ + ASSERT3U(item_size, >, 0); + ASSERT3U(item_size, <, q->bq_maxsize); + mutex_enter(&q->bq_lock); + obj2node(q, data)->bqn_size = item_size; + while (q->bq_size + item_size > q->bq_maxsize) { + cv_wait(&q->bq_add_cv, &q->bq_lock); + } + q->bq_size += item_size; + list_insert_tail(&q->bq_list, data); + cv_signal(&q->bq_pop_cv); + mutex_exit(&q->bq_lock); +} +/* + * Take the first element off of q. If there are no elements on the queue, wait + * until one is put there. Return the removed element. + */ +void * +bqueue_dequeue(bqueue_t *q) +{ + void *ret; + uint64_t item_size; + mutex_enter(&q->bq_lock); + while (q->bq_size == 0) { + cv_wait(&q->bq_pop_cv, &q->bq_lock); + } + ret = list_remove_head(&q->bq_list); + item_size = obj2node(q, ret)->bqn_size; + q->bq_size -= item_size; + mutex_exit(&q->bq_lock); + cv_signal(&q->bq_add_cv); + return (ret); +} + +/* + * Returns true if the space used is 0. + */ +boolean_t +bqueue_empty(bqueue_t *q) +{ + return (q->bq_size == 0); +} Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Wed Aug 12 22:41:06 2015 (r286705) @@ -548,11 +548,35 @@ dbuf_loan_arcbuf(dmu_buf_impl_t *db) return (abuf); } +/* + * Calculate which level n block references the data at the level 0 offset + * provided. + */ uint64_t -dbuf_whichblock(dnode_t *dn, uint64_t offset) +dbuf_whichblock(dnode_t *dn, int64_t level, uint64_t offset) { - if (dn->dn_datablkshift) { - return (offset >> dn->dn_datablkshift); + if (dn->dn_datablkshift != 0 && dn->dn_indblkshift != 0) { + /* + * The level n blkid is equal to the level 0 blkid divided by + * the number of level 0s in a level n block. + * + * The level 0 blkid is offset >> datablkshift = + * offset / 2^datablkshift. + * + * The number of level 0s in a level n is the number of block + * pointers in an indirect block, raised to the power of level. + * This is 2^(indblkshift - SPA_BLKPTRSHIFT)^level = + * 2^(level*(indblkshift - SPA_BLKPTRSHIFT)). + * + * Thus, the level n blkid is: offset / + * ((2^datablkshift)*(2^(level*(indblkshift - SPA_BLKPTRSHIFT))) + * = offset / 2^(datablkshift + level * + * (indblkshift - SPA_BLKPTRSHIFT)) + * = offset >> (datablkshift + level * + * (indblkshift - SPA_BLKPTRSHIFT)) + */ + return (offset >> (dn->dn_datablkshift + level * + (dn->dn_indblkshift - SPA_BLKPTRSHIFT))); } else { ASSERT3U(offset, <, dn->dn_datablksz); return (0); @@ -1715,6 +1739,12 @@ dbuf_clear(dmu_buf_impl_t *db) dbuf_rele(parent, db); } +/* + * Note: While bpp will always be updated if the function returns success, + * parentp will not be updated if the dnode does not have dn_dbuf filled in; + * this happens when the dnode is the meta-dnode, or a userused or groupused + * object. + */ static int dbuf_findbp(dnode_t *dn, int level, uint64_t blkid, int fail_sparse, dmu_buf_impl_t **parentp, blkptr_t **bpp) @@ -1755,7 +1785,7 @@ dbuf_findbp(dnode_t *dn, int level, uint } else if (level < nlevels-1) { /* this block is referenced from an indirect block */ int err = dbuf_hold_impl(dn, level+1, - blkid >> epbs, fail_sparse, NULL, parentp); + blkid >> epbs, fail_sparse, FALSE, NULL, parentp); if (err) return (err); err = dbuf_read(*parentp, NULL, @@ -1930,11 +1960,96 @@ dbuf_destroy(dmu_buf_impl_t *db) arc_space_return(sizeof (dmu_buf_impl_t), ARC_SPACE_OTHER); } +typedef struct dbuf_prefetch_arg { + spa_t *dpa_spa; /* The spa to issue the prefetch in. */ + zbookmark_phys_t dpa_zb; /* The target block to prefetch. */ + int dpa_epbs; /* Entries (blkptr_t's) Per Block Shift. */ + int dpa_curlevel; /* The current level that we're reading */ + zio_priority_t dpa_prio; /* The priority I/Os should be issued at. */ + zio_t *dpa_zio; /* The parent zio_t for all prefetches. */ + arc_flags_t dpa_aflags; /* Flags to pass to the final prefetch. */ +} dbuf_prefetch_arg_t; + +/* + * Actually issue the prefetch read for the block given. + */ +static void +dbuf_issue_final_prefetch(dbuf_prefetch_arg_t *dpa, blkptr_t *bp) +{ + if (BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp)) + return; + + arc_flags_t aflags = + dpa->dpa_aflags | ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH; + + ASSERT3U(dpa->dpa_curlevel, ==, BP_GET_LEVEL(bp)); + ASSERT3U(dpa->dpa_curlevel, ==, dpa->dpa_zb.zb_level); + ASSERT(dpa->dpa_zio != NULL); + (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, bp, NULL, NULL, + dpa->dpa_prio, ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, + &aflags, &dpa->dpa_zb); +} + +/* + * Called when an indirect block above our prefetch target is read in. This + * will either read in the next indirect block down the tree or issue the actual + * prefetch if the next block down is our target. + */ +static void +dbuf_prefetch_indirect_done(zio_t *zio, arc_buf_t *abuf, void *private) +{ + dbuf_prefetch_arg_t *dpa = private; + + ASSERT3S(dpa->dpa_zb.zb_level, <, dpa->dpa_curlevel); + ASSERT3S(dpa->dpa_curlevel, >, 0); + if (zio != NULL) { + ASSERT3S(BP_GET_LEVEL(zio->io_bp), ==, dpa->dpa_curlevel); + ASSERT3U(BP_GET_LSIZE(zio->io_bp), ==, zio->io_size); + ASSERT3P(zio->io_spa, ==, dpa->dpa_spa); + } + + dpa->dpa_curlevel--; + + uint64_t nextblkid = dpa->dpa_zb.zb_blkid >> + (dpa->dpa_epbs * (dpa->dpa_curlevel - dpa->dpa_zb.zb_level)); + blkptr_t *bp = ((blkptr_t *)abuf->b_data) + + P2PHASE(nextblkid, 1ULL << dpa->dpa_epbs); + if (BP_IS_HOLE(bp) || (zio != NULL && zio->io_error != 0)) { + kmem_free(dpa, sizeof (*dpa)); + } else if (dpa->dpa_curlevel == dpa->dpa_zb.zb_level) { + ASSERT3U(nextblkid, ==, dpa->dpa_zb.zb_blkid); + dbuf_issue_final_prefetch(dpa, bp); + kmem_free(dpa, sizeof (*dpa)); + } else { + arc_flags_t iter_aflags = ARC_FLAG_NOWAIT; + zbookmark_phys_t zb; + + ASSERT3U(dpa->dpa_curlevel, ==, BP_GET_LEVEL(bp)); + + SET_BOOKMARK(&zb, dpa->dpa_zb.zb_objset, + dpa->dpa_zb.zb_object, dpa->dpa_curlevel, nextblkid); + + (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, + bp, dbuf_prefetch_indirect_done, dpa, dpa->dpa_prio, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, + &iter_aflags, &zb); + } + (void) arc_buf_remove_ref(abuf, private); +} + +/* + * Issue prefetch reads for the given block on the given level. If the indirect + * blocks above that block are not in memory, we will read them in + * asynchronously. As a result, this call never blocks waiting for a read to + * complete. + */ void -dbuf_prefetch(dnode_t *dn, uint64_t blkid, zio_priority_t prio) +dbuf_prefetch(dnode_t *dn, int64_t level, uint64_t blkid, zio_priority_t prio, + arc_flags_t aflags) { - dmu_buf_impl_t *db = NULL; - blkptr_t *bp = NULL; + blkptr_t bp; + int epbs, nlevels, curlevel; + uint64_t curblkid; ASSERT(blkid != DMU_BONUS_BLKID); ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); @@ -1942,35 +2057,104 @@ dbuf_prefetch(dnode_t *dn, uint64_t blki if (dnode_block_freed(dn, blkid)) return; - /* dbuf_find() returns with db_mtx held */ - if (db = dbuf_find(dn->dn_objset, dn->dn_object, 0, blkid)) { + /* + * This dnode hasn't been written to disk yet, so there's nothing to + * prefetch. + */ + nlevels = dn->dn_phys->dn_nlevels; + if (level >= nlevels || dn->dn_phys->dn_nblkptr == 0) + return; + + epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; + if (dn->dn_phys->dn_maxblkid < blkid << (epbs * level)) + return; + + dmu_buf_impl_t *db = dbuf_find(dn->dn_objset, dn->dn_object, + level, blkid); + if (db != NULL) { + mutex_exit(&db->db_mtx); /* - * This dbuf is already in the cache. We assume that - * it is already CACHED, or else about to be either - * read or filled. + * This dbuf already exists. It is either CACHED, or + * (we assume) about to be read or filled. */ - mutex_exit(&db->db_mtx); return; } - if (dbuf_findbp(dn, 0, blkid, TRUE, &db, &bp) == 0) { - if (bp && !BP_IS_HOLE(bp) && !BP_IS_EMBEDDED(bp)) { - dsl_dataset_t *ds = dn->dn_objset->os_dsl_dataset; - arc_flags_t aflags = - ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH; - zbookmark_phys_t zb; - - SET_BOOKMARK(&zb, ds ? ds->ds_object : DMU_META_OBJSET, - dn->dn_object, 0, blkid); - - (void) arc_read(NULL, dn->dn_objset->os_spa, - bp, NULL, NULL, prio, - ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, - &aflags, &zb); + /* + * Find the closest ancestor (indirect block) of the target block + * that is present in the cache. In this indirect block, we will + * find the bp that is at curlevel, curblkid. + */ + curlevel = level; + curblkid = blkid; + while (curlevel < nlevels - 1) { + int parent_level = curlevel + 1; + uint64_t parent_blkid = curblkid >> epbs; + dmu_buf_impl_t *db; + + if (dbuf_hold_impl(dn, parent_level, parent_blkid, + FALSE, TRUE, FTAG, &db) == 0) { + blkptr_t *bpp = db->db_buf->b_data; + bp = bpp[P2PHASE(curblkid, 1 << epbs)]; + dbuf_rele(db, FTAG); + break; } - if (db) - dbuf_rele(db, NULL); + + curlevel = parent_level; + curblkid = parent_blkid; + } + + if (curlevel == nlevels - 1) { + /* No cached indirect blocks found. */ + ASSERT3U(curblkid, <, dn->dn_phys->dn_nblkptr); + bp = dn->dn_phys->dn_blkptr[curblkid]; } + if (BP_IS_HOLE(&bp)) + return; + + ASSERT3U(curlevel, ==, BP_GET_LEVEL(&bp)); + + zio_t *pio = zio_root(dmu_objset_spa(dn->dn_objset), NULL, NULL, + ZIO_FLAG_CANFAIL); + + dbuf_prefetch_arg_t *dpa = kmem_zalloc(sizeof (*dpa), KM_SLEEP); + dsl_dataset_t *ds = dn->dn_objset->os_dsl_dataset; + SET_BOOKMARK(&dpa->dpa_zb, ds != NULL ? ds->ds_object : DMU_META_OBJSET, + dn->dn_object, level, blkid); + dpa->dpa_curlevel = curlevel; + dpa->dpa_prio = prio; + dpa->dpa_aflags = aflags; + dpa->dpa_spa = dn->dn_objset->os_spa; + dpa->dpa_epbs = epbs; + dpa->dpa_zio = pio; + + /* + * If we have the indirect just above us, no need to do the asynchronous + * prefetch chain; we'll just run the last step ourselves. If we're at + * a higher level, though, we want to issue the prefetches for all the + * indirect blocks asynchronously, so we can go on with whatever we were + * doing. + */ + if (curlevel == level) { + ASSERT3U(curblkid, ==, blkid); + dbuf_issue_final_prefetch(dpa, &bp); + kmem_free(dpa, sizeof (*dpa)); + } else { + arc_flags_t iter_aflags = ARC_FLAG_NOWAIT; + zbookmark_phys_t zb; + + SET_BOOKMARK(&zb, ds != NULL ? ds->ds_object : DMU_META_OBJSET, + dn->dn_object, curlevel, curblkid); + (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, + &bp, dbuf_prefetch_indirect_done, dpa, prio, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, + &iter_aflags, &zb); + } + /* + * We use pio here instead of dpa_zio since it's possible that + * dpa may have already been freed. + */ + zio_nowait(pio); } /* @@ -1978,7 +2162,8 @@ dbuf_prefetch(dnode_t *dn, uint64_t blki * Note: dn_struct_rwlock must be held. */ int -dbuf_hold_impl(dnode_t *dn, uint8_t level, uint64_t blkid, int fail_sparse, +dbuf_hold_impl(dnode_t *dn, uint8_t level, uint64_t blkid, + boolean_t fail_sparse, boolean_t fail_uncached, void *tag, dmu_buf_impl_t **dbp) { dmu_buf_impl_t *db, *parent = NULL; @@ -1996,6 +2181,9 @@ top: blkptr_t *bp = NULL; int err; + if (fail_uncached) + return (SET_ERROR(ENOENT)); + ASSERT3P(parent, ==, NULL); err = dbuf_findbp(dn, level, blkid, fail_sparse, &parent, &bp); if (fail_sparse) { @@ -2012,6 +2200,11 @@ top: db = dbuf_create(dn, level, blkid, parent, bp); } + if (fail_uncached && db->db_state != DB_CACHED) { + mutex_exit(&db->db_mtx); + return (SET_ERROR(ENOENT)); + } + if (db->db_buf && refcount_is_zero(&db->db_holds)) { arc_buf_add_ref(db->db_buf, db); if (db->db_buf->b_data == NULL) { @@ -2067,16 +2260,14 @@ top: dmu_buf_impl_t * dbuf_hold(dnode_t *dn, uint64_t blkid, void *tag) { - dmu_buf_impl_t *db; - int err = dbuf_hold_impl(dn, 0, blkid, FALSE, tag, &db); - return (err ? NULL : db); + return (dbuf_hold_level(dn, 0, blkid, tag)); } dmu_buf_impl_t * dbuf_hold_level(dnode_t *dn, int level, uint64_t blkid, void *tag) { dmu_buf_impl_t *db; - int err = dbuf_hold_impl(dn, level, blkid, FALSE, tag, &db); + int err = dbuf_hold_impl(dn, level, blkid, FALSE, FALSE, tag, &db); return (err ? NULL : db); } @@ -2429,8 +2620,8 @@ dbuf_check_blkptr(dnode_t *dn, dmu_buf_i if (parent == NULL) { mutex_exit(&db->db_mtx); rw_enter(&dn->dn_struct_rwlock, RW_READER); - (void) dbuf_hold_impl(dn, db->db_level+1, - db->db_blkid >> epbs, FALSE, db, &parent); + parent = dbuf_hold_level(dn, db->db_level + 1, + db->db_blkid >> epbs, db); rw_exit(&dn->dn_struct_rwlock); mutex_enter(&db->db_mtx); db->db_parent = parent; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Wed Aug 12 22:41:06 2015 (r286705) @@ -141,7 +141,7 @@ dmu_buf_hold_noread(objset_t *os, uint64 err = dnode_hold(os, object, FTAG, &dn); if (err) return (err); - blkid = dbuf_whichblock(dn, offset); + blkid = dbuf_whichblock(dn, 0, offset); rw_enter(&dn->dn_struct_rwlock, RW_READER); db = dbuf_hold(dn, blkid, tag); rw_exit(&dn->dn_struct_rwlock); @@ -424,7 +424,7 @@ dmu_buf_hold_array_by_dnode(dnode_t *dn, dbp = kmem_zalloc(sizeof (dmu_buf_t *) * nblks, KM_SLEEP); zio = zio_root(dn->dn_objset->os_spa, NULL, NULL, ZIO_FLAG_CANFAIL); - blkid = dbuf_whichblock(dn, offset); + blkid = dbuf_whichblock(dn, 0, offset); for (i = 0; i < nblks; i++) { dmu_buf_impl_t *db = dbuf_hold(dn, blkid+i, tag); if (db == NULL) { @@ -528,17 +528,16 @@ dmu_buf_rele_array(dmu_buf_t **dbp_fake, } /* - * Issue prefetch i/os for the given blocks. + * Issue prefetch i/os for the given blocks. If level is greater than 0, the + * indirect blocks prefeteched will be those that point to the blocks containing + * the data starting at offset, and continuing to offset + len. * - * Note: The assumption is that we *know* these blocks will be needed - * almost immediately. Therefore, the prefetch i/os will be issued at - * ZIO_PRIORITY_SYNC_READ - * - * Note: indirect blocks and other metadata will be read synchronously, - * causing this function to block if they are not already cached. + * Note that if the indirect blocks above the blocks being prefetched are not in + * cache, they will be asychronously read in. */ void -dmu_prefetch(objset_t *os, uint64_t object, uint64_t offset, uint64_t len) +dmu_prefetch(objset_t *os, uint64_t object, int64_t level, uint64_t offset, + uint64_t len, zio_priority_t pri) { dnode_t *dn; uint64_t blkid; @@ -554,8 +553,9 @@ dmu_prefetch(objset_t *os, uint64_t obje return; rw_enter(&dn->dn_struct_rwlock, RW_READER); - blkid = dbuf_whichblock(dn, object * sizeof (dnode_phys_t)); - dbuf_prefetch(dn, blkid, ZIO_PRIORITY_SYNC_READ); + blkid = dbuf_whichblock(dn, level, + object * sizeof (dnode_phys_t)); + dbuf_prefetch(dn, level, blkid, pri, 0); rw_exit(&dn->dn_struct_rwlock); return; } @@ -570,18 +570,24 @@ dmu_prefetch(objset_t *os, uint64_t obje return; rw_enter(&dn->dn_struct_rwlock, RW_READER); - if (dn->dn_datablkshift) { - int blkshift = dn->dn_datablkshift; - nblks = (P2ROUNDUP(offset + len, 1 << blkshift) - - P2ALIGN(offset, 1 << blkshift)) >> blkshift; + /* + * offset + len - 1 is the last byte we want to prefetch for, and offset + * is the first. Then dbuf_whichblk(dn, level, off + len - 1) is the + * last block we want to prefetch, and dbuf_whichblock(dn, level, + * offset) is the first. Then the number we need to prefetch is the + * last - first + 1. + */ + if (level > 0 || dn->dn_datablkshift != 0) { + nblks = dbuf_whichblock(dn, level, offset + len - 1) - + dbuf_whichblock(dn, level, offset) + 1; } else { nblks = (offset < dn->dn_datablksz); } if (nblks != 0) { - blkid = dbuf_whichblock(dn, offset); + blkid = dbuf_whichblock(dn, level, offset); for (int i = 0; i < nblks; i++) - dbuf_prefetch(dn, blkid + i, ZIO_PRIORITY_SYNC_READ); + dbuf_prefetch(dn, level, blkid + i, pri, 0); } rw_exit(&dn->dn_struct_rwlock); @@ -1393,7 +1399,7 @@ dmu_assign_arcbuf(dmu_buf_t *handle, uin DB_DNODE_ENTER(dbuf); dn = DB_DNODE(dbuf); rw_enter(&dn->dn_struct_rwlock, RW_READER); - blkid = dbuf_whichblock(dn, offset); + blkid = dbuf_whichblock(dn, 0, offset); VERIFY((db = dbuf_hold(dn, blkid, FTAG)) != NULL); rw_exit(&dn->dn_struct_rwlock); DB_DNODE_EXIT(dbuf); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c Wed Aug 12 22:41:06 2015 (r286705) @@ -138,7 +138,7 @@ diff_cb(spa_t *spa, zilog_t *zilog, cons if (issig(JUSTLOOKING) && issig(FORREAL)) return (SET_ERROR(EINTR)); - if (zb->zb_object != DMU_META_DNODE_OBJECT) + if (bp == NULL || zb->zb_object != DMU_META_DNODE_OBJECT) return (0); if (BP_IS_HOLE(bp)) { Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c Wed Aug 12 22:41:06 2015 (r286705) @@ -148,6 +148,11 @@ dmu_object_free(objset_t *os, uint64_t o return (0); } +/* + * Return (in *objectp) the next object which is allocated (or a hole) + * after *object, taking into account only objects that may have been modified + * after the specified txg. + */ int dmu_object_next(objset_t *os, uint64_t *objectp, boolean_t hole, uint64_t txg) { Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Aug 12 22:36:02 2015 (r286704) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Aug 12 22:41:06 2015 (r286705) @@ -53,6 +53,7 @@ #include #include #include +#include #ifdef __FreeBSD__ #undef dump_write @@ -61,10 +62,34 @@ /* Set this tunable to TRUE to replace corrupt data with 0x2f5baddb10c */ int zfs_send_corrupt_data = B_FALSE; +int zfs_send_queue_length = 16 * 1024 * 1024; +int zfs_recv_queue_length = 16 * 1024 * 1024; static char *dmu_recv_tag = "dmu_recv_tag"; static const char *recv_clone_name = "%recv"; +#define BP_SPAN(datablkszsec, indblkshift, level) \ + (((uint64_t)datablkszsec) << (SPA_MINBLOCKSHIFT + \ + (level) * (indblkshift - SPA_BLKPTRSHIFT))) + +struct send_thread_arg { + bqueue_t q; + dsl_dataset_t *ds; /* Dataset to traverse */ + uint64_t fromtxg; /* Traverse from this txg */ + int flags; /* flags to pass to traverse_dataset */ + int error_code; + boolean_t cancel; +}; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Wed Aug 12 23:59:21 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 171039B7224; Wed, 12 Aug 2015 23:59:21 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 046CA6CB; Wed, 12 Aug 2015 23:59:21 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7CNxKgL006694; Wed, 12 Aug 2015 23:59:20 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7CNxHJj006680; Wed, 12 Aug 2015 23:59:17 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508122359.t7CNxHJj006680@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 12 Aug 2015 23:59:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286708 - in head: cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zhack cddl/contrib/opensolaris/cmd/zpool sys/cddl/contrib/opensolaris/common/zfs sys/cddl/contrib/openso... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2015 23:59:21 -0000 Author: mav Date: Wed Aug 12 23:59:17 2015 New Revision: 286708 URL: https://svnweb.freebsd.org/changeset/base/286708 Log: MFV 286707: 5959 clean up per-dataset feature count code Reviewed by: Toomas Soome Reviewed by: George Wilson Reviewed by: Alex Reece Approved by: Richard Lowe Author: Matthew Ahrens illumos/illumos-gate@ca0cc3918a1789fa839194af2a9245f801a06b1a A ZFS feature flags (large blocks) tracks its refcounts as the number of datasets that have ever used the feature. Several features of this type are planned to be added (new checksum functions). This code should be made common infrastructure rather than duplicating the code for each feature. Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c head/cddl/contrib/opensolaris/cmd/zhack/zhack.c head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c Directory Properties: head/cddl/contrib/opensolaris/ (props changed) head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Wed Aug 12 23:59:17 2015 (r286708) @@ -21,7 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. */ #include @@ -2221,7 +2221,7 @@ dump_label(const char *dev) (void) close(fd); } -static uint64_t num_large_blocks; +static uint64_t dataset_feature_count[SPA_FEATURES]; /*ARGSUSED*/ static int @@ -2235,8 +2235,15 @@ dump_one_dir(const char *dsname, void *a (void) printf("Could not open %s, error %d\n", dsname, error); return (0); } - if (dmu_objset_ds(os)->ds_large_blocks) - num_large_blocks++; + + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + if (!dmu_objset_ds(os)->ds_feature_inuse[f]) + continue; + ASSERT(spa_feature_table[f].fi_flags & + ZFEATURE_FLAG_PER_DATASET); + dataset_feature_count[f]++; + } + dump_dir(os); dmu_objset_disown(os, FTAG); fuid_table_destroy(); @@ -3035,7 +3042,6 @@ dump_zpool(spa_t *spa) dump_metaslab_groups(spa); if (dump_opt['d'] || dump_opt['i']) { - uint64_t refcount; dump_dir(dp->dp_meta_objset); if (dump_opt['d'] >= 3) { dump_full_bpobj(&spa->spa_deferred_bpobj, @@ -3057,17 +3063,29 @@ dump_zpool(spa_t *spa) (void) dmu_objset_find(spa_name(spa), dump_one_dir, NULL, DS_FIND_SNAPSHOTS | DS_FIND_CHILDREN); - (void) feature_get_refcount(spa, - &spa_feature_table[SPA_FEATURE_LARGE_BLOCKS], &refcount); - if (num_large_blocks != refcount) { - (void) printf("large_blocks feature refcount mismatch: " - "expected %lld != actual %lld\n", - (longlong_t)num_large_blocks, - (longlong_t)refcount); - rc = 2; - } else { - (void) printf("Verified large_blocks feature refcount " - "is correct (%llu)\n", (longlong_t)refcount); + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + uint64_t refcount; + + if (!(spa_feature_table[f].fi_flags & + ZFEATURE_FLAG_PER_DATASET)) { + ASSERT0(dataset_feature_count[f]); + continue; + } + (void) feature_get_refcount(spa, + &spa_feature_table[f], &refcount); + if (dataset_feature_count[f] != refcount) { + (void) printf("%s feature refcount mismatch: " + "%lld datasets != %lld refcount\n", + spa_feature_table[f].fi_uname, + (longlong_t)dataset_feature_count[f], + (longlong_t)refcount); + rc = 2; + } else { + (void) printf("Verified %s feature refcount " + "of %llu is correct\n", + spa_feature_table[f].fi_uname, + (longlong_t)refcount); + } } } if (rc == 0 && (dump_opt['b'] || dump_opt['c'])) Modified: head/cddl/contrib/opensolaris/cmd/zhack/zhack.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zhack/zhack.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/cddl/contrib/opensolaris/cmd/zhack/zhack.c Wed Aug 12 23:59:17 2015 (r286708) @@ -20,7 +20,7 @@ */ /* - * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2013 Steven Hartland. All rights reserved. */ @@ -294,8 +294,8 @@ zhack_feature_enable_sync(void *arg, dmu feature_enable_sync(spa, feature, tx); spa_history_log_internal(spa, "zhack enable feature", tx, - "name=%s can_readonly=%u", - feature->fi_guid, feature->fi_can_readonly); + "guid=%s flags=%x", + feature->fi_guid, feature->fi_flags); } static void @@ -314,9 +314,7 @@ zhack_do_feature_enable(int argc, char * */ desc = NULL; feature.fi_uname = "zhack"; - feature.fi_mos = B_FALSE; - feature.fi_can_readonly = B_FALSE; - feature.fi_activate_on_enable = B_FALSE; + feature.fi_flags = 0; feature.fi_depends = nodeps; feature.fi_feature = SPA_FEATURE_NONE; @@ -324,7 +322,7 @@ zhack_do_feature_enable(int argc, char * while ((c = getopt(argc, argv, "rmd:")) != -1) { switch (c) { case 'r': - feature.fi_can_readonly = B_TRUE; + feature.fi_flags |= ZFEATURE_FLAG_READONLY_COMPAT; break; case 'd': desc = strdup(optarg); @@ -413,7 +411,7 @@ zhack_do_feature_ref(int argc, char **ar * disk later. */ feature.fi_uname = "zhack"; - feature.fi_mos = B_FALSE; + feature.fi_flags = 0; feature.fi_desc = NULL; feature.fi_depends = nodeps; feature.fi_feature = SPA_FEATURE_NONE; @@ -422,7 +420,7 @@ zhack_do_feature_ref(int argc, char **ar while ((c = getopt(argc, argv, "md")) != -1) { switch (c) { case 'm': - feature.fi_mos = B_TRUE; + feature.fi_flags |= ZFEATURE_FLAG_MOS; break; case 'd': decr = B_TRUE; @@ -455,10 +453,10 @@ zhack_do_feature_ref(int argc, char **ar if (0 == zap_contains(mos, spa->spa_feat_for_read_obj, feature.fi_guid)) { - feature.fi_can_readonly = B_FALSE; + feature.fi_flags &= ~ZFEATURE_FLAG_READONLY_COMPAT; } else if (0 == zap_contains(mos, spa->spa_feat_for_write_obj, feature.fi_guid)) { - feature.fi_can_readonly = B_TRUE; + feature.fi_flags |= ZFEATURE_FLAG_READONLY_COMPAT; } else { fatal(spa, FTAG, "feature is not enabled: %s", feature.fi_guid); } Modified: head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Wed Aug 12 23:59:17 2015 (r286708) @@ -22,7 +22,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2011 Nexenta Systems, Inc. All rights reserved. - * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2012 by Frederik Wessels. All rights reserved. * Copyright (c) 2012 Martin Matuska . All rights reserved. * Copyright (c) 2013 by Prasad Joshi (sTec). All rights reserved. @@ -4986,7 +4986,8 @@ zpool_do_upgrade(int argc, char **argv) "---------------\n"); for (i = 0; i < SPA_FEATURES; i++) { zfeature_info_t *fi = &spa_feature_table[i]; - const char *ro = fi->fi_can_readonly ? + const char *ro = + (fi->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? " (read-only compatible)" : ""; (void) printf("%-37s%s\n", fi->fi_uname, ro); Modified: head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c Wed Aug 12 23:59:17 2015 (r286708) @@ -20,7 +20,7 @@ */ /* - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. * Copyright (c) 2014, Nexenta Systems, Inc. All rights reserved. @@ -129,15 +129,15 @@ zfeature_depends_on(spa_feature_t fid, s static void zfeature_register(spa_feature_t fid, const char *guid, const char *name, - const char *desc, boolean_t readonly, boolean_t mos, - boolean_t activate_on_enable, const spa_feature_t *deps) + const char *desc, zfeature_flags_t flags, const spa_feature_t *deps) { zfeature_info_t *feature = &spa_feature_table[fid]; static spa_feature_t nodeps[] = { SPA_FEATURE_NONE }; ASSERT(name != NULL); ASSERT(desc != NULL); - ASSERT(!readonly || !mos); + ASSERT((flags & ZFEATURE_FLAG_READONLY_COMPAT) == 0 || + (flags & ZFEATURE_FLAG_MOS) == 0); ASSERT3U(fid, <, SPA_FEATURES); ASSERT(zfeature_is_valid_guid(guid)); @@ -148,9 +148,7 @@ zfeature_register(spa_feature_t fid, con feature->fi_guid = guid; feature->fi_uname = name; feature->fi_desc = desc; - feature->fi_can_readonly = readonly; - feature->fi_mos = mos; - feature->fi_activate_on_enable = activate_on_enable; + feature->fi_flags = flags; feature->fi_depends = deps; } @@ -159,45 +157,46 @@ zpool_feature_init(void) { zfeature_register(SPA_FEATURE_ASYNC_DESTROY, "com.delphix:async_destroy", "async_destroy", - "Destroy filesystems asynchronously.", B_TRUE, B_FALSE, - B_FALSE, NULL); + "Destroy filesystems asynchronously.", + ZFEATURE_FLAG_READONLY_COMPAT, NULL); zfeature_register(SPA_FEATURE_EMPTY_BPOBJ, "com.delphix:empty_bpobj", "empty_bpobj", - "Snapshots use less space.", B_TRUE, B_FALSE, - B_FALSE, NULL); + "Snapshots use less space.", + ZFEATURE_FLAG_READONLY_COMPAT, NULL); zfeature_register(SPA_FEATURE_LZ4_COMPRESS, "org.illumos:lz4_compress", "lz4_compress", - "LZ4 compression algorithm support.", B_FALSE, B_FALSE, - B_TRUE, NULL); + "LZ4 compression algorithm support.", + ZFEATURE_FLAG_ACTIVATE_ON_ENABLE, NULL); zfeature_register(SPA_FEATURE_MULTI_VDEV_CRASH_DUMP, "com.joyent:multi_vdev_crash_dump", "multi_vdev_crash_dump", - "Crash dumps to multiple vdev pools.", B_FALSE, B_FALSE, - B_FALSE, NULL); + "Crash dumps to multiple vdev pools.", + 0, NULL); zfeature_register(SPA_FEATURE_SPACEMAP_HISTOGRAM, "com.delphix:spacemap_histogram", "spacemap_histogram", - "Spacemaps maintain space histograms.", B_TRUE, B_FALSE, - B_FALSE, NULL); + "Spacemaps maintain space histograms.", + ZFEATURE_FLAG_READONLY_COMPAT, NULL); zfeature_register(SPA_FEATURE_ENABLED_TXG, "com.delphix:enabled_txg", "enabled_txg", - "Record txg at which a feature is enabled", B_TRUE, B_FALSE, - B_FALSE, NULL); + "Record txg at which a feature is enabled", + ZFEATURE_FLAG_READONLY_COMPAT, NULL); static spa_feature_t hole_birth_deps[] = { SPA_FEATURE_ENABLED_TXG, SPA_FEATURE_NONE }; zfeature_register(SPA_FEATURE_HOLE_BIRTH, "com.delphix:hole_birth", "hole_birth", "Retain hole birth txg for more precise zfs send", - B_FALSE, B_TRUE, B_TRUE, hole_birth_deps); + ZFEATURE_FLAG_MOS | ZFEATURE_FLAG_ACTIVATE_ON_ENABLE, + hole_birth_deps); zfeature_register(SPA_FEATURE_EXTENSIBLE_DATASET, "com.delphix:extensible_dataset", "extensible_dataset", "Enhanced dataset functionality, used by other features.", - B_FALSE, B_FALSE, B_FALSE, NULL); + 0, NULL); static const spa_feature_t bookmarks_deps[] = { SPA_FEATURE_EXTENSIBLE_DATASET, @@ -206,7 +205,7 @@ zpool_feature_init(void) zfeature_register(SPA_FEATURE_BOOKMARKS, "com.delphix:bookmarks", "bookmarks", "\"zfs bookmark\" command", - B_TRUE, B_FALSE, B_FALSE, bookmarks_deps); + ZFEATURE_FLAG_READONLY_COMPAT, bookmarks_deps); static const spa_feature_t filesystem_limits_deps[] = { SPA_FEATURE_EXTENSIBLE_DATASET, @@ -214,13 +213,14 @@ zpool_feature_init(void) }; zfeature_register(SPA_FEATURE_FS_SS_LIMIT, "com.joyent:filesystem_limits", "filesystem_limits", - "Filesystem and snapshot limits.", B_TRUE, B_FALSE, B_FALSE, - filesystem_limits_deps); + "Filesystem and snapshot limits.", + ZFEATURE_FLAG_READONLY_COMPAT, filesystem_limits_deps); zfeature_register(SPA_FEATURE_EMBEDDED_DATA, "com.delphix:embedded_data", "embedded_data", "Blocks which compress very well use even less space.", - B_FALSE, B_TRUE, B_TRUE, NULL); + ZFEATURE_FLAG_MOS | ZFEATURE_FLAG_ACTIVATE_ON_ENABLE, + NULL); static const spa_feature_t large_blocks_deps[] = { SPA_FEATURE_EXTENSIBLE_DATASET, @@ -228,6 +228,6 @@ zpool_feature_init(void) }; zfeature_register(SPA_FEATURE_LARGE_BLOCKS, "org.open-zfs:large_blocks", "large_blocks", - "Support for blocks larger than 128KB.", B_FALSE, B_FALSE, B_FALSE, - large_blocks_deps); + "Support for blocks larger than 128KB.", + ZFEATURE_FLAG_PER_DATASET, large_blocks_deps); } Modified: head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h Wed Aug 12 23:38:58 2015 (r286707) +++ head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h Wed Aug 12 23:59:17 2015 (r286708) @@ -20,7 +20,7 @@ */ /* - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. */ @@ -56,15 +56,23 @@ typedef enum spa_feature { #define SPA_FEATURE_DISABLED (-1ULL) +typedef enum zfeature_flags { + /* Can open pool readonly even if this feature is not supported. */ + ZFEATURE_FLAG_READONLY_COMPAT = (1 << 0), + /* Is this feature necessary to read the MOS? */ + ZFEATURE_FLAG_MOS = (1 << 1), + /* Activate this feature at the same time it is enabled. */ + ZFEATURE_FLAG_ACTIVATE_ON_ENABLE = (1 << 2), + /* Each dataset has a field set if it has ever used this feature. */ + ZFEATURE_FLAG_PER_DATASET = (1 << 3) +} zfeature_flags_t; + typedef struct zfeature_info { spa_feature_t fi_feature; const char *fi_uname; /* User-facing feature name */ const char *fi_guid; /* On-disk feature identifier */ const char *fi_desc; /* Feature description */ - boolean_t fi_can_readonly; /* Can open pool readonly w/o support? */ - boolean_t fi_mos; /* Is the feature necessary to read the MOS? */ - /* Activate this feature at the same time it is enabled */ - boolean_t fi_activate_on_enable; + zfeature_flags_t fi_flags; /* array of dependencies, terminated by SPA_FEATURE_NONE */ const spa_feature_t *fi_depends; } zfeature_info_t; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Wed Aug 12 23:59:17 2015 (r286708) @@ -1573,6 +1573,11 @@ dmu_buf_write_embedded(dmu_buf_t *dbuf, struct dirty_leaf *dl; dmu_object_type_t type; + if (etype == BP_EMBEDDED_TYPE_DATA) { + ASSERT(spa_feature_is_active(dmu_objset_spa(db->db_objset), + SPA_FEATURE_EMBEDDED_DATA)); + } + DB_DNODE_ENTER(db); type = DB_DNODE(db)->dn_type; DB_DNODE_EXIT(db); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Aug 12 23:59:17 2015 (r286708) @@ -21,7 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2011 Nexenta Systems, Inc. All rights reserved. - * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2014, Joyent, Inc. All rights reserved. * Copyright (c) 2012, Martin Matuska . All rights reserved. * Copyright 2014 HybridCluster. All rights reserved. @@ -721,7 +721,7 @@ dmu_send_impl(void *tag, dsl_pool_t *dp, } #endif - if (large_block_ok && to_ds->ds_large_blocks) + if (large_block_ok && to_ds->ds_feature_inuse[SPA_FEATURE_LARGE_BLOCKS]) featureflags |= DMU_BACKUP_FEATURE_LARGE_BLOCKS; if (embedok && spa_feature_is_active(dp->dp_spa, SPA_FEATURE_EMBEDDED_DATA)) { @@ -1379,13 +1379,6 @@ dmu_recv_begin_sync(void *arg, dmu_tx_t } VERIFY0(dsl_dataset_own_obj(dp, dsobj, dmu_recv_tag, &newds)); - if ((DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo) & - DMU_BACKUP_FEATURE_LARGE_BLOCKS) && - !newds->ds_large_blocks) { - dsl_dataset_activate_large_blocks_sync_impl(dsobj, tx); - newds->ds_large_blocks = B_TRUE; - } - dmu_buf_will_dirty(newds->ds_dbuf, tx); dsl_dataset_phys(newds)->ds_flags |= DS_FLAG_INCONSISTENT; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Wed Aug 12 23:59:17 2015 (r286708) @@ -21,7 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Portions Copyright (c) 2011 Martin Matuska - * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2014, Joyent, Inc. All rights reserved. * Copyright (c) 2014 RackTop Systems. * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. @@ -130,8 +130,10 @@ dsl_dataset_block_born(dsl_dataset_t *ds dsl_dataset_phys(ds)->ds_compressed_bytes += compressed; dsl_dataset_phys(ds)->ds_uncompressed_bytes += uncompressed; dsl_dataset_phys(ds)->ds_unique_bytes += used; - if (BP_GET_LSIZE(bp) > SPA_OLD_MAXBLOCKSIZE) - ds->ds_need_large_blocks = B_TRUE; + if (BP_GET_LSIZE(bp) > SPA_OLD_MAXBLOCKSIZE) { + ds->ds_feature_activation_needed[SPA_FEATURE_LARGE_BLOCKS] = + B_TRUE; + } mutex_exit(&ds->ds_lock); dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, delta, compressed, uncompressed, tx); @@ -433,19 +435,23 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin offsetof(dmu_sendarg_t, dsa_link)); if (doi.doi_type == DMU_OTN_ZAP_METADATA) { - int zaperr = zap_contains(mos, dsobj, - DS_FIELD_LARGE_BLOCKS); - if (zaperr != ENOENT) { - VERIFY0(zaperr); - ds->ds_large_blocks = B_TRUE; + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + if (!(spa_feature_table[f].fi_flags & + ZFEATURE_FLAG_PER_DATASET)) + continue; + err = zap_contains(mos, dsobj, + spa_feature_table[f].fi_guid); + if (err == 0) { + ds->ds_feature_inuse[f] = B_TRUE; + } else { + ASSERT3U(err, ==, ENOENT); + err = 0; + } } } - if (err == 0) { - err = dsl_dir_hold_obj(dp, - dsl_dataset_phys(ds)->ds_dir_obj, NULL, ds, - &ds->ds_dir); - } + err = dsl_dir_hold_obj(dp, + dsl_dataset_phys(ds)->ds_dir_obj, NULL, ds, &ds->ds_dir); if (err != 0) { mutex_destroy(&ds->ds_lock); mutex_destroy(&ds->ds_opening_lock); @@ -701,6 +707,34 @@ dsl_dataset_tryown(dsl_dataset_t *ds, vo return (gotit); } +static void +dsl_dataset_activate_feature(uint64_t dsobj, spa_feature_t f, dmu_tx_t *tx) +{ + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + objset_t *mos = dmu_tx_pool(tx)->dp_meta_objset; + uint64_t zero = 0; + + VERIFY(spa_feature_table[f].fi_flags & ZFEATURE_FLAG_PER_DATASET); + + spa_feature_incr(spa, f, tx); + dmu_object_zapify(mos, dsobj, DMU_OT_DSL_DATASET, tx); + + VERIFY0(zap_add(mos, dsobj, spa_feature_table[f].fi_guid, + sizeof (zero), 1, &zero, tx)); +} + +void +dsl_dataset_deactivate_feature(uint64_t dsobj, spa_feature_t f, dmu_tx_t *tx) +{ + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + objset_t *mos = dmu_tx_pool(tx)->dp_meta_objset; + + VERIFY(spa_feature_table[f].fi_flags & ZFEATURE_FLAG_PER_DATASET); + + VERIFY0(zap_remove(mos, dsobj, spa_feature_table[f].fi_guid, tx)); + spa_feature_decr(spa, f, tx); +} + uint64_t dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin, uint64_t flags, dmu_tx_t *tx) @@ -761,8 +795,10 @@ dsl_dataset_create_sync_dd(dsl_dir_t *dd dsphys->ds_flags |= dsl_dataset_phys(origin)->ds_flags & (DS_FLAG_INCONSISTENT | DS_FLAG_CI_DATASET); - if (origin->ds_large_blocks) - dsl_dataset_activate_large_blocks_sync_impl(dsobj, tx); + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + if (origin->ds_feature_inuse[f]) + dsl_dataset_activate_feature(dsobj, f, tx); + } dmu_buf_will_dirty(origin->ds_dbuf, tx); dsl_dataset_phys(origin)->ds_num_children++; @@ -1324,8 +1360,10 @@ dsl_dataset_snapshot_sync_impl(dsl_datas dsphys->ds_bp = dsl_dataset_phys(ds)->ds_bp; dmu_buf_rele(dbuf, FTAG); - if (ds->ds_large_blocks) - dsl_dataset_activate_large_blocks_sync_impl(dsobj, tx); + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + if (ds->ds_feature_inuse[f]) + dsl_dataset_activate_feature(dsobj, f, tx); + } ASSERT3U(ds->ds_prev != 0, ==, dsl_dataset_phys(ds)->ds_prev_snap_obj != 0); @@ -1617,9 +1655,13 @@ dsl_dataset_sync(dsl_dataset_t *ds, zio_ dmu_objset_sync(ds->ds_objset, zio, tx); - if (ds->ds_need_large_blocks && !ds->ds_large_blocks) { - dsl_dataset_activate_large_blocks_sync_impl(ds->ds_object, tx); - ds->ds_large_blocks = B_TRUE; + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + if (ds->ds_feature_activation_needed[f]) { + if (ds->ds_feature_inuse[f]) + continue; + dsl_dataset_activate_feature(ds->ds_object, f, tx); + ds->ds_feature_inuse[f] = B_TRUE; + } } } @@ -2783,6 +2825,40 @@ dsl_dataset_clone_swap_sync_impl(dsl_dat dsl_dataset_phys(clone)->ds_unique_bytes <= origin_head->ds_quota); ASSERT3P(clone->ds_prev, ==, origin_head->ds_prev); + /* + * Swap per-dataset feature flags. + */ + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + if (!(spa_feature_table[f].fi_flags & + ZFEATURE_FLAG_PER_DATASET)) { + ASSERT(!clone->ds_feature_inuse[f]); + ASSERT(!origin_head->ds_feature_inuse[f]); + continue; + } + + boolean_t clone_inuse = clone->ds_feature_inuse[f]; + boolean_t origin_head_inuse = origin_head->ds_feature_inuse[f]; + + if (clone_inuse) { + dsl_dataset_deactivate_feature(clone->ds_object, f, tx); + clone->ds_feature_inuse[f] = B_FALSE; + } + if (origin_head_inuse) { + dsl_dataset_deactivate_feature(origin_head->ds_object, + f, tx); + origin_head->ds_feature_inuse[f] = B_FALSE; + } + if (clone_inuse) { + dsl_dataset_activate_feature(origin_head->ds_object, + f, tx); + origin_head->ds_feature_inuse[f] = B_TRUE; + } + if (origin_head_inuse) { + dsl_dataset_activate_feature(clone->ds_object, f, tx); + clone->ds_feature_inuse[f] = B_TRUE; + } + } + dmu_buf_will_dirty(clone->ds_dbuf, tx); dmu_buf_will_dirty(origin_head->ds_dbuf, tx); @@ -3337,77 +3413,6 @@ dsl_dataset_space_wouldfree(dsl_dataset_ return (err); } -static int -dsl_dataset_activate_large_blocks_check(void *arg, dmu_tx_t *tx) -{ - const char *dsname = arg; - dsl_dataset_t *ds; - dsl_pool_t *dp = dmu_tx_pool(tx); - int error = 0; - - if (!spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_LARGE_BLOCKS)) - return (SET_ERROR(ENOTSUP)); - - ASSERT(spa_feature_is_enabled(dp->dp_spa, - SPA_FEATURE_EXTENSIBLE_DATASET)); - - error = dsl_dataset_hold(dp, dsname, FTAG, &ds); - if (error != 0) - return (error); - - if (ds->ds_large_blocks) - error = EALREADY; - dsl_dataset_rele(ds, FTAG); - - return (error); -} - -void -dsl_dataset_activate_large_blocks_sync_impl(uint64_t dsobj, dmu_tx_t *tx) -{ - spa_t *spa = dmu_tx_pool(tx)->dp_spa; - objset_t *mos = dmu_tx_pool(tx)->dp_meta_objset; - uint64_t zero = 0; - - spa_feature_incr(spa, SPA_FEATURE_LARGE_BLOCKS, tx); - dmu_object_zapify(mos, dsobj, DMU_OT_DSL_DATASET, tx); - - VERIFY0(zap_add(mos, dsobj, DS_FIELD_LARGE_BLOCKS, - sizeof (zero), 1, &zero, tx)); -} - -static void -dsl_dataset_activate_large_blocks_sync(void *arg, dmu_tx_t *tx) -{ - const char *dsname = arg; - dsl_dataset_t *ds; - - VERIFY0(dsl_dataset_hold(dmu_tx_pool(tx), dsname, FTAG, &ds)); - - dsl_dataset_activate_large_blocks_sync_impl(ds->ds_object, tx); - ASSERT(!ds->ds_large_blocks); - ds->ds_large_blocks = B_TRUE; - dsl_dataset_rele(ds, FTAG); -} - -int -dsl_dataset_activate_large_blocks(const char *dsname) -{ - int error; - - error = dsl_sync_task(dsname, - dsl_dataset_activate_large_blocks_check, - dsl_dataset_activate_large_blocks_sync, (void *)dsname, - 1, ZFS_SPACE_CHECK_RESERVED); - - /* - * EALREADY indicates that this dataset already supports large blocks. - */ - if (error == EALREADY) - error = 0; - return (error); -} - /* * Return TRUE if 'earlier' is an earlier snapshot in 'later's timeline. * For example, they could both be snapshots of the same filesystem, and @@ -3452,7 +3457,6 @@ dsl_dataset_is_before(dsl_dataset_t *lat return (ret); } - void dsl_dataset_zapify(dsl_dataset_t *ds, dmu_tx_t *tx) { Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c Wed Aug 12 23:59:17 2015 (r286708) @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. * Copyright (c) 2013 Steven Hartland. All rights reserved. * Copyright (c) 2013 by Joyent, Inc. All rights reserved. */ @@ -267,9 +267,11 @@ dsl_destroy_snapshot_sync_impl(dsl_datas obj = ds->ds_object; - if (ds->ds_large_blocks) { - ASSERT0(zap_contains(mos, obj, DS_FIELD_LARGE_BLOCKS)); - spa_feature_decr(dp->dp_spa, SPA_FEATURE_LARGE_BLOCKS, tx); + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + if (ds->ds_feature_inuse[f]) { + dsl_dataset_deactivate_feature(obj, f, tx); + ds->ds_feature_inuse[f] = B_FALSE; + } } if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { ASSERT3P(ds->ds_prev, ==, NULL); @@ -736,12 +738,16 @@ dsl_destroy_head_sync_impl(dsl_dataset_t ASSERT0(ds->ds_reserved); } - if (ds->ds_large_blocks) - spa_feature_decr(dp->dp_spa, SPA_FEATURE_LARGE_BLOCKS, tx); + obj = ds->ds_object; - dsl_scan_ds_destroyed(ds, tx); + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + if (ds->ds_feature_inuse[f]) { + dsl_dataset_deactivate_feature(obj, f, tx); + ds->ds_feature_inuse[f] = B_FALSE; + } + } - obj = ds->ds_object; + dsl_scan_ds_destroyed(ds, tx); if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { /* This is a clone */ Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Wed Aug 12 23:38:58 2015 (r286707) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Wed Aug 12 23:59:17 2015 (r286708) @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. * Copyright (c) 2013 Steven Hartland. All rights reserved. * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. @@ -38,6 +38,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -145,8 +146,6 @@ typedef struct dsl_dataset { /* only used in syncing context, only valid for non-snapshots: */ struct dsl_dataset *ds_prev; uint64_t ds_bookmarks; /* DMU_OTN_ZAP_METADATA */ - boolean_t ds_large_blocks; - boolean_t ds_need_large_blocks; /* has internal locking: */ dsl_deadlist_t ds_deadlist; @@ -185,6 +184,18 @@ typedef struct dsl_dataset { kmutex_t ds_sendstream_lock; list_t ds_sendstreams; + /* + * For ZFEATURE_FLAG_PER_DATASET features, set if this dataset + * uses this feature. + */ + uint8_t ds_feature_inuse[SPA_FEATURES]; + + /* + * Set if we need to activate the feature on this dataset this txg + * (used only in syncing context). + */ + uint8_t ds_feature_activation_needed[SPA_FEATURES]; + /* Protected by ds_lock; keep at end of struct for better locality */ char ds_snapname[MAXNAMELEN]; } dsl_dataset_t; @@ -264,8 +275,6 @@ int dsl_dataset_space_written(dsl_datase int dsl_dataset_space_wouldfree(dsl_dataset_t *firstsnap, dsl_dataset_t *last, uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); boolean_t dsl_dataset_is_dirty(dsl_dataset_t *ds); -int dsl_dataset_activate_large_blocks(const char *dsname); -void dsl_dataset_activate_large_blocks_sync_impl(uint64_t dsobj, dmu_tx_t *tx); int dsl_dsobj_to_dsname(char *pname, uint64_t obj, char *buf); @@ -305,6 +314,9 @@ void dsl_dataset_set_refreservation_sync void dsl_dataset_zapify(dsl_dataset_t *ds, dmu_tx_t *tx); int dsl_dataset_rollback(const char *fsname, void *owner, nvlist_t *result); +void dsl_dataset_deactivate_feature(uint64_t dsobj, + spa_feature_t f, dmu_tx_t *tx); + #ifdef ZFS_DEBUG #define dprintf_ds(ds, fmt, ...) do { \ if (zfs_flags & ZFS_DEBUG_DPRINTF) { \ Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c Wed Aug 12 23:38:58 2015 (r286707) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c Wed Aug 12 23:59:17 2015 (r286708) @@ -20,7 +20,7 @@ */ /* - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. */ #include @@ -245,7 +245,7 @@ feature_get_refcount_from_disk(spa_t *sp { int err; uint64_t refcount; - uint64_t zapobj = feature->fi_can_readonly ? + uint64_t zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj; /* @@ -296,7 +296,7 @@ feature_sync(spa_t *spa, zfeature_info_t dmu_tx_t *tx) { ASSERT(VALID_FEATURE_OR_NONE(feature->fi_feature)); - uint64_t zapobj = feature->fi_can_readonly ? + uint64_t zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj; VERIFY0(zap_update(spa->spa_meta_objset, zapobj, feature->fi_guid, @@ -322,7 +322,7 @@ feature_sync(spa_t *spa, zfeature_info_t if (refcount == 0) spa_deactivate_mos_feature(spa, feature->fi_guid); - else if (feature->fi_mos) + else if (feature->fi_flags & ZFEATURE_FLAG_MOS) spa_activate_mos_feature(spa, feature->fi_guid, tx); } @@ -333,8 +333,9 @@ feature_sync(spa_t *spa, zfeature_info_t void feature_enable_sync(spa_t *spa, zfeature_info_t *feature, dmu_tx_t *tx) { - uint64_t initial_refcount = feature->fi_activate_on_enable ? 1 : 0; - uint64_t zapobj = feature->fi_can_readonly ? + uint64_t initial_refcount = + (feature->fi_flags & ZFEATURE_FLAG_ACTIVATE_ON_ENABLE) ? 1 : 0; + uint64_t zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj; ASSERT(0 != zapobj); @@ -379,7 +380,7 @@ feature_do_action(spa_t *spa, spa_featur { uint64_t refcount; zfeature_info_t *feature = &spa_feature_table[fid]; - uint64_t zapobj = feature->fi_can_readonly ? + uint64_t zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj; ASSERT(VALID_FEATURE_FID(fid)); From owner-svn-src-head@freebsd.org Thu Aug 13 00:10:37 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0CF849B745B; Thu, 13 Aug 2015 00:10:37 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id ED045EEB; Thu, 13 Aug 2015 00:10:36 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7D0AaVK013837; Thu, 13 Aug 2015 00:10:36 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7D0Aa1x013816; Thu, 13 Aug 2015 00:10:36 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508130010.t7D0Aa1x013816@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Thu, 13 Aug 2015 00:10:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286710 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 00:10:37 -0000 Author: mav Date: Thu Aug 13 00:10:36 2015 New Revision: 286710 URL: https://svnweb.freebsd.org/changeset/base/286710 Log: MFV 286709: 6093 zfsctl_shares_lookup should only VN_RELE() on zfs_zget() success Reviewed by: Gordon Ross Reviewed by: Matthew Ahrens Reviewed by: George Wilson Approved by: Robert Mustacchi Author: Dan McDonald illumos/illumos-gate@0f92170f1ec2737ee5a0e51b5f74093904811452 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c Thu Aug 13 00:07:23 2015 (r286709) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c Thu Aug 13 00:10:36 2015 (r286710) @@ -21,6 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved. */ /* @@ -1149,10 +1150,11 @@ zfsctl_shares_lookup(ap) ZFS_EXIT(zfsvfs); return (SET_ERROR(ENOTSUP)); } - if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) + if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) { error = VOP_LOOKUP(ZTOV(dzp), vpp, cnp); + VN_RELE(ZTOV(dzp)); + } - VN_RELE(ZTOV(dzp)); ZFS_EXIT(zfsvfs); return (error); From owner-svn-src-head@freebsd.org Thu Aug 13 00:13:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 02AB49B74B5; Thu, 13 Aug 2015 00:13:56 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E72A6307; Thu, 13 Aug 2015 00:13:55 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7D0Dtxu014929; Thu, 13 Aug 2015 00:13:55 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7D0DtkF014928; Thu, 13 Aug 2015 00:13:55 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508130013.t7D0DtkF014928@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Thu, 13 Aug 2015 00:13:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286712 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 00:13:56 -0000 Author: mav Date: Thu Aug 13 00:13:55 2015 New Revision: 286712 URL: https://svnweb.freebsd.org/changeset/base/286712 Log: MFV 286711: 6096 ZFS_SMB_ACL_RENAME needs to cleanup better Reviewed by: Matthew Ahrens Reviewed by: Gordon Ross Reviewed by: George Wilson Approved by: Robert Mustacchi illumos/illumos-gate@8f5190a540d64d2debee6664bbc740e4c38f5b7f Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Thu Aug 13 00:12:52 2015 (r286711) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Thu Aug 13 00:13:55 2015 (r286712) @@ -5190,6 +5190,7 @@ zfs_ioc_smb_acl(zfs_cmd_t *zc) if ((error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, zc->zc_iflags, &nvlist)) != 0) { VN_RELE(vp); + VN_RELE(ZTOV(sharedir)); ZFS_EXIT(zfsvfs); return (error); } From owner-svn-src-head@freebsd.org Thu Aug 13 02:31:24 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 67C8D99FBE3; Thu, 13 Aug 2015 02:31:24 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 513F077; Thu, 13 Aug 2015 02:31:24 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7D2VOBR069856; Thu, 13 Aug 2015 02:31:24 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7D2VOhc069855; Thu, 13 Aug 2015 02:31:24 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508130231.t7D2VOhc069855@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Thu, 13 Aug 2015 02:31:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286715 - head/lib/libc/string X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 02:31:24 -0000 Author: araujo Date: Thu Aug 13 02:31:23 2015 New Revision: 286715 URL: https://svnweb.freebsd.org/changeset/base/286715 Log: Remove the mention of memcpy(3) that is build on top of bcopy(3). Fix some phrases to make it more clear. Differential Revision: D3378 Reported by: bde@ Reviewed by: wblock Approved by: bapt, rodrigc (mentor) Sponsored by: gandi.net Modified: head/lib/libc/string/bcopy.3 Modified: head/lib/libc/string/bcopy.3 ============================================================================== --- head/lib/libc/string/bcopy.3 Thu Aug 13 01:04:26 2015 (r286714) +++ head/lib/libc/string/bcopy.3 Thu Aug 13 02:31:23 2015 (r286715) @@ -31,7 +31,7 @@ .\" @(#)bcopy.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd August 11, 2015 +.Dd August 13, 2015 .Dt BCOPY 3 .Os .Sh NAME @@ -58,16 +58,14 @@ If .Fa len is zero, no bytes are copied. .Pp -This function is deprecated (marked as LEGACY in -POSIX.1-2001): use -.Xr memcpy 3 -or +This function is obsolete (marked as LEGACY in +POSIX.1-2001): please use .Xr memmove 3 in new programs. -Note that the first two arguments are -interchanged for -.Xr memcpy 3 -and +Note that +.Fn bcopy +takes its src and dst arguments in the opposite +order from .Xr memmove 3 . POSIX.1-2008 removes the specification of .Fn bcopy . From owner-svn-src-head@freebsd.org Thu Aug 13 02:36:38 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8F5D899FC40; Thu, 13 Aug 2015 02:36:38 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5C5312BB; Thu, 13 Aug 2015 02:36:38 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7D2acVK072046; Thu, 13 Aug 2015 02:36:38 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7D2abrC072044; Thu, 13 Aug 2015 02:36:37 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508130236.t7D2abrC072044@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Thu, 13 Aug 2015 02:36:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286716 - in head/usr.bin: ypcat ypwhich X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 02:36:38 -0000 Author: araujo Date: Thu Aug 13 02:36:37 2015 New Revision: 286716 URL: https://svnweb.freebsd.org/changeset/base/286716 Log: Use nitems instead of "sizeof ypaliases/sizeof ypaliases[0]". Make the if statement more expressive. Differential Revision: D3366 Reviewed by: ed Approved by: bapt, rodrigc (mentor) Modified: head/usr.bin/ypcat/ypcat.c head/usr.bin/ypwhich/ypwhich.c Modified: head/usr.bin/ypcat/ypcat.c ============================================================================== --- head/usr.bin/ypcat/ypcat.c Thu Aug 13 02:31:23 2015 (r286715) +++ head/usr.bin/ypcat/ypcat.c Thu Aug 13 02:36:37 2015 (r286716) @@ -96,7 +96,7 @@ main(int argc, char *argv[]) while ((c = getopt(argc, argv, "xd:kt")) != -1) switch (c) { case 'x': - for (i=0; i Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A3F3999F4F6; Thu, 13 Aug 2015 04:46:24 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from vps1.elischer.org (vps1.elischer.org [204.109.63.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "vps1.elischer.org", Issuer "CA Cert Signing Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 7EB17DD3; Thu, 13 Aug 2015 04:46:24 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from Julian-MBP3.local (ppp121-45-227-250.lns20.per1.internode.on.net [121.45.227.250]) (authenticated bits=0) by vps1.elischer.org (8.15.2/8.15.2) with ESMTPSA id t7D4kIuW001018 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Wed, 12 Aug 2015 21:46:22 -0700 (PDT) (envelope-from julian@freebsd.org) Subject: Re: svn commit: r286687 - head To: Warner Losh , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <201508121900.t7CJ0mhT080491@repo.freebsd.org> From: Julian Elischer Message-ID: <55CC2114.4080904@freebsd.org> Date: Thu, 13 Aug 2015 12:46:12 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <201508121900.t7CJ0mhT080491@repo.freebsd.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 04:46:24 -0000 On 8/13/15 3:00 AM, Warner Losh wrote: > Author: imp > Date: Wed Aug 12 19:00:47 2015 > New Revision: 286687 > URL: https://svnweb.freebsd.org/changeset/base/286687 > > Log: > Document build-tools better. Add rescue back because it builds /bin/sh > which has a build-tools target (see commit for how build-tools and > cross-tools differ). really? do we build ALL of rescue? that contains most of /bin and lots of /usr/bin. that's a lot.. Can we not just build/bin/sh itself? > > Modified: From owner-svn-src-head@freebsd.org Thu Aug 13 04:46:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7F43399F538; Thu, 13 Aug 2015 04:46:56 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail104.syd.optusnet.com.au (mail104.syd.optusnet.com.au [211.29.132.246]) by mx1.freebsd.org (Postfix) with ESMTP id 4548DF1A; Thu, 13 Aug 2015 04:46:55 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from c211-30-166-197.carlnfd1.nsw.optusnet.com.au (c211-30-166-197.carlnfd1.nsw.optusnet.com.au [211.30.166.197]) by mail104.syd.optusnet.com.au (Postfix) with ESMTPS id 5DC12427CD0; Thu, 13 Aug 2015 14:46:48 +1000 (AEST) Date: Thu, 13 Aug 2015 14:46:47 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Marcelo Araujo cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286715 - head/lib/libc/string In-Reply-To: <201508130231.t7D2VOhc069855@repo.freebsd.org> Message-ID: <20150813134548.U1375@besplex.bde.org> References: <201508130231.t7D2VOhc069855@repo.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=XMDNMlVE c=1 sm=1 tr=0 a=KA6XNC2GZCFrdESI5ZmdjQ==:117 a=PO7r1zJSAAAA:8 a=JzwRw_2MAAAA:8 a=kj9zAlcOel0A:10 a=6I5d2MoRAAAA:8 a=CgiagczvAAAA:8 a=MHSe0A3K-JTMyRR2pf8A:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 04:46:56 -0000 On Thu, 13 Aug 2015, Marcelo Araujo wrote: > Author: araujo > Date: Thu Aug 13 02:31:23 2015 > New Revision: 286715 > URL: https://svnweb.freebsd.org/changeset/base/286715 > > Log: > Remove the mention of memcpy(3) that is build on top of bcopy(3). > Fix some phrases to make it more clear. > > Differential Revision: D3378 > Reported by: bde@ > Reviewed by: wblock > Approved by: bapt, rodrigc (mentor) > Sponsored by: gandi.net I don't like this version either :-). > Modified: head/lib/libc/string/bcopy.3 > ============================================================================== > --- head/lib/libc/string/bcopy.3 Thu Aug 13 01:04:26 2015 (r286714) > +++ head/lib/libc/string/bcopy.3 Thu Aug 13 02:31:23 2015 (r286715) > @@ -31,7 +31,7 @@ > .\" @(#)bcopy.3 8.1 (Berkeley) 6/4/93 > .\" $FreeBSD$ > .\" > -.Dd August 11, 2015 > +.Dd August 13, 2015 > .Dt BCOPY 3 > .Os > .Sh NAME > @@ -58,16 +58,14 @@ If > .Fa len > is zero, no bytes are copied. > .Pp > -This function is deprecated (marked as LEGACY in > -POSIX.1-2001): use > -.Xr memcpy 3 > -or > +This function is obsolete (marked as LEGACY in > +POSIX.1-2001): please use This function is not obsolete, but is fully supported in FreeBSD. Its obsoletely doesn't follow at all from the clause in parentheses. LEGACY doesn't even mean obsolencent. In computerspeak it means "old stuff that we don't like". I think you got the "obsolete" wording from NetBSD. But I think NetBSD started deprecating it in 1995. It might really be obsolete for them after 20 years of deprecation. Please don't use pleasant nonsenses like "please" in man pages or comments. > .Xr memmove 3 > in new programs. Still not quite right. New programs should use the best function and that is usually memcpy(). Only old programs that are being roto-tilled should convert bcopy() to memmove() (so as to avoid having to understand them well enough to know if they do overlapped copies). > -Note that the first two arguments are > -interchanged for > -.Xr memcpy 3 > -and > +Note that > +.Fn bcopy > +takes its src and dst arguments in the opposite > +order from > .Xr memmove 3 . OK, except Xr should be Fn. ".Xr memmove 3" is a man page, not a function. Man pages don't take src and dst arguments :-). This normally shows up in the rendering -- in text mode, Fn gives highlighting but Xr doesn't. Now I notice more markup problems: the src and dst arguments are not marked up. In text mode, Fa gives highlighting for args. > POSIX.1-2008 removes the specification of > .Fn bcopy . Better put this before the LEGACY statement and maybe merge the LEGACY statement into the HISTORY section. Since I don't want to deprecate bcopy(), I would put this in the history section too. Technically, this function is not deprecated since it is still a standard BSD function in . The ifdef for this is already quite complicated and broken, thoough it only attempts to keep up with some of the POSIX churn: from strings.h: #if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112 int bcmp(const void *, const void *, size_t) __pure; /* LEGACY */ void bcopy(const void *, void *, size_t); /* LEGACY */ void bzero(void *, size_t); /* LEGACY */ #endif It is POSIX LEGACY, but standard BSD. The POSIX ifdef is quite broken: - before 1996, POSIX didn't have this function, but it also didn't have strings.h so there is no problem (the ifdef is vacuously correct) - between 1996 and 2001, there was an XSI version there may have been a POSIX version that had this function and too. The ifdef is wrong for any such version since it doesn't mention XSI. Such versions are just unsupported. - between 2001 and 2008, POSIX apparently required bcopy() (and the other functions) but didn't declare them anywhere, except in the XSI case it requires them to be declared in . The above supports the non-XSI case of this. The XSI case is broken as in any 1996-2001 versions. - the ifdef is not up to date with changing LEGACY to OBSOLETE, but since LEGACY already resulted in omission of the prototypes in the non-XSI case, nothing needed to be changed in this case, and since the XSI case is unsupported nothing need to be changed to turn off the prototypes for XSI either. Correct code here wouldn't have the POSIX ifdef or LEGACY comments, but might having a comment saying that XSI is intentionally unsupported. XSI messes elswhere are supported, and I am suprised that not supporting it here doesn't cause problems. Ifdefs for historical mistakes would cause much larger messes if they were complete. Just near here, there is the mess of the and . 1980's source code had messy ifdefs in applications for this. C90 didn't exactly help by standardizing the SYSVish . POSIX.1-2001 actively harmed by restoring the BSDish . FreeBSD handles this problem by including in if __BSD_VISIBLE and not documenting the details in man pages. contains mostly BSD functions, and man pages including bcopy(3) say to include , but most applications only include , which was where bcopy() was in 4.4.BSD-Lite, and where it still is by the #include hack, but not where it is according to the man page. The ifdefs here seem to be just messy enough to detect the error of using the wrong include in the !__BSD_VISIBLE case. Bruce From owner-svn-src-head@freebsd.org Thu Aug 13 04:52:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7A45499F68C; Thu, 13 Aug 2015 04:52:01 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pd0-x230.google.com (mail-pd0-x230.google.com [IPv6:2607:f8b0:400e:c02::230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 55B7A30A; Thu, 13 Aug 2015 04:52:01 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by pdco4 with SMTP id o4so15012335pdc.3; Wed, 12 Aug 2015 21:52:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=YnSR2zHwNRff23R7bL0I09K2FGmT9sUHP1H8lcKt9W4=; b=oKjmDOWq7SWqH4PWm8LQORbD/UZlv880MUs5MEFh9FbvsukCA85q1ZTP3RHpVk09Q7 4upFvuLTBF50dXZhUcq9y8DXFMWOigrzY5nNcx5fvSAjlvgSBDYxsGscDHatsBg/UgfG +J2znrzfISf5t/1xBeSuPfaVk75DjC67oBSkApYrVKNj8U8JthwgOpnLK/fFwKbg3n/k 0blYI7ywzP7O1dECxuILcJPO9yareiFvPMlaoID1nNR6TpOs7vfeSC8Bqu1aMbmJ8HHC fvo7vc8gAyGtmFLG23UCGROmFVx+TEka1wj/lSA3YyDJcThO0aDtvn4tYAWCU3wQzebo SAnw== X-Received: by 10.70.129.102 with SMTP id nv6mr73999037pdb.126.1439441520695; Wed, 12 Aug 2015 21:52:00 -0700 (PDT) Received: from ?IPv6:2601:601:800:126d:99cf:7b87:4b2c:ea6c? ([2601:601:800:126d:99cf:7b87:4b2c:ea6c]) by smtp.gmail.com with ESMTPSA id kv10sm874569pbc.2.2015.08.12.21.52.00 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 12 Aug 2015 21:52:00 -0700 (PDT) Content-Type: text/plain; charset=windows-1252 Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) Subject: Re: svn commit: r286687 - head From: Garrett Cooper In-Reply-To: <55CC2114.4080904@freebsd.org> Date: Wed, 12 Aug 2015 21:52:00 -0700 Cc: Warner Losh , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: quoted-printable Message-Id: <7AE78D6D-DE39-4C0F-A2AC-4778F4E304A8@gmail.com> References: <201508121900.t7CJ0mhT080491@repo.freebsd.org> <55CC2114.4080904@freebsd.org> To: Julian Elischer X-Mailer: Apple Mail (2.1878.6) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 04:52:01 -0000 On Aug 12, 2015, at 21:46, Julian Elischer wrote: > On 8/13/15 3:00 AM, Warner Losh wrote: >> Author: imp >> Date: Wed Aug 12 19:00:47 2015 >> New Revision: 286687 >> URL: https://svnweb.freebsd.org/changeset/base/286687 >>=20 >> Log: >> Document build-tools better. Add rescue back because it builds = /bin/sh >> which has a build-tools target (see commit for how build-tools and >> cross-tools differ). > really? do we build ALL of rescue? that contains most of /bin and lots = of /usr/bin. build-tools only builds /bin/sh and bin/tcsh : $ grep BUILDTOOLS rescue/rescue/Makefile=20 CRUNCH_BUILDTOOLS+=3D bin/sh CRUNCH_BUILDTOOLS+=3D bin/csh > that's a lot.. Can we not just build/bin/sh itself? That would.. probably make more sense (especially in a = post-projects/bmake world)=85 but it needs better comments in = Makefile.inc1 . Thanks! -NGie= From owner-svn-src-head@freebsd.org Thu Aug 13 04:53:44 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 704E499F6D4 for ; Thu, 13 Aug 2015 04:53:44 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from mail-pd0-f171.google.com (mail-pd0-f171.google.com [209.85.192.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 460616AE for ; Thu, 13 Aug 2015 04:53:43 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: by pdco4 with SMTP id o4so15027806pdc.3 for ; Wed, 12 Aug 2015 21:53:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:subject:mime-version:content-type:from :in-reply-to:date:cc:message-id:references:to; bh=XBU5IhWUBZtFHsU61goa5ztUaWl2pW/aZlmYxDEiPgA=; b=WkneTrnJZ2jwpXI5cFaTiqg79Txdm4QJvWOVs+AYG8qYjs8RkoqXyhLlbtRH0frWDZ gSP6mDaOPJSQMkpUyF0qtP68AUYm7FAB+ZrlKC2R8lRezX9mrt4TC2WmUCKjCuG+Qye/ 0UteL1tqDbfovFyeMry6pSyIY80VOIb9q3ntR+ltgkj9G+mMMEL8vDz0W1nKXJFi8C4H eOAY0C06ft1dD5opgoo7qpIu9IUQADz4UvedJfHjCqF9F5PJOAEjO+cpy35Bcm9Mg6pG CxnqGxssNMhshcpcaPlBREqaYP4oapRLlYdj5+ghtMulrHKAJWxwyEqzeBATqy/sQUKA k19Q== X-Gm-Message-State: ALoCoQkq4R3N9OPEFHM8e8+LiK+2qVnljHJXzGxjIZoLYjFB2Zm/CGAAQnHTJoPLD7A/snm2r/2T X-Received: by 10.70.43.198 with SMTP id y6mr29158174pdl.4.1439441622687; Wed, 12 Aug 2015 21:53:42 -0700 (PDT) Received: from netflix-mac.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id da6sm879019pdb.22.2015.08.12.21.53.41 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 12 Aug 2015 21:53:41 -0700 (PDT) Sender: Warner Losh Subject: Re: svn commit: r286687 - head Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Content-Type: multipart/signed; boundary="Apple-Mail=_CAD66541-F1E8-458B-A2C9-8D017351FA07"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail 2.5 From: Warner Losh In-Reply-To: <55CC2114.4080904@freebsd.org> Date: Wed, 12 Aug 2015 22:53:44 -0600 Cc: Warner Losh , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: <40CDA168-F933-48B6-8F65-69D5F374B9E7@bsdimp.com> References: <201508121900.t7CJ0mhT080491@repo.freebsd.org> <55CC2114.4080904@freebsd.org> To: Julian Elischer X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 04:53:44 -0000 --Apple-Mail=_CAD66541-F1E8-458B-A2C9-8D017351FA07 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Aug 12, 2015, at 10:46 PM, Julian Elischer = wrote: >=20 > On 8/13/15 3:00 AM, Warner Losh wrote: >> Author: imp >> Date: Wed Aug 12 19:00:47 2015 >> New Revision: 286687 >> URL: https://svnweb.freebsd.org/changeset/base/286687 >>=20 >> Log: >> Document build-tools better. Add rescue back because it builds = /bin/sh >> which has a build-tools target (see commit for how build-tools and >> cross-tools differ). > really? do we build ALL of rescue? that contains most of /bin and lots = of /usr/bin. > that's a lot.. Can we not just build/bin/sh itself? No, we don=E2=80=99t. Check the logs before complaining. It builds the = build-tools target which is empty for the vast majority of rescue. It wasn=E2=80=99t = obvious why it was there, until I deleted it. Then it became obvious, but I thought I=E2=80=99d = document why. Warner --Apple-Mail=_CAD66541-F1E8-458B-A2C9-8D017351FA07 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVzCLZAAoJEGwc0Sh9sBEAeRoP/2RZ/+W4viTQA+iFjxP4gIIq +3+elEnkPOXHslY3v5ayUztw/pw9PayLABHopVPqC6AtIQQaqucyE2N3XR/+nPT3 GX0fzYl3leJ/skd3iRH5Mae618lKtDJIKptz7GOfnayR+dnx8zz0TcxdLwbg6MCr q9yK8KY4D4+XGSVSKJEK3rUYrq83ef+KKZXwyGaBDVZ4w7+W+VQ2l/S6XynIbfPB 7grt/x74yI+6JeKv6Pp3Znz6y+/A2+F7JB4h2f97TYIX1mlcDbPb2fvhVYOo1k/2 PW+2ZumIXb32SQsSas5m7ZIB0BoJ0Hm/3rzrQ3O1MweW6Pc4Vm4WEbBfoYqkQlMa kBt2q6LiWbDb0BdVaCsVI57pYSO3xa1s+nP+Z9wVzYpcxXHL7Peag/aZOBoeAppJ peQkdZh+leWMCLIMlzSvVHUtqXEOk1w0tlvlIlXPlLvklYSX9Ar6WeZTYvAd5b32 fBRwhoqSrT2j395P1SYiuH/gxdyLhLjarYmzIvz9G4BVIzqKH+BvUmbYX+ZcJwGc pB8GCU698iEj2gTho27k/JgendYhNf7HUq9RqLJhGHVnNwhU3Q2rFmXlmgZ9vFbX KCWaIOPBzTwAFn6uk0vaJEiE9A11kQueFXmbuP5Lmme+spgjtRmIV/tg7GamqODZ sraXKOEihS21WFqH2aHM =Fs3O -----END PGP SIGNATURE----- --Apple-Mail=_CAD66541-F1E8-458B-A2C9-8D017351FA07-- From owner-svn-src-head@freebsd.org Thu Aug 13 04:58:45 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3127C99F733 for ; Thu, 13 Aug 2015 04:58:45 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from mail-ig0-f180.google.com (mail-ig0-f180.google.com [209.85.213.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E8E917E2 for ; Thu, 13 Aug 2015 04:58:44 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: by igbjg10 with SMTP id jg10so56674341igb.0 for ; Wed, 12 Aug 2015 21:58:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:subject:mime-version:content-type:from :in-reply-to:date:cc:message-id:references:to; bh=gngmxJkaaaFPSxIKMp2TxxVHLibQtXUbGTFvG4Thark=; b=ZbAgMAy5R3EmpMLjg6SS3DMJ8oynoMTeJwl4U+2VyNb93VeuNaCHY1sDJLf90IeMKr rcFMJ+eURO/3queA/E3F01yT/3RrEyQkcMO+jurg6mhuuTtFRQzZyr8ONWnIcaihl5ja toq+igDper+Qtv+FrO6/+I5AEV8FDzUt5K+zk5cg3tun56WKcrvNcDd+WE8U61KGJ5TH gAkNnYcskpiUIBIhb8hY020Kh/I6GEIo2358IRRz+dmn6zK8aW/B2ER1QDfA9uPfmagR H7HQyK/VzkwHolQoLUix6Wyx2PT3wChGzHnvkQ3bfvpX7JsOQkhepR1v5RCZCUuEdggH MP6w== X-Gm-Message-State: ALoCoQlhlxSgNTZjlK43vj4X07Eam3Of4M44KeBoeKmHE+xXV8bzAH0gOsnzD4ApYS3NjF1tdWku X-Received: by 10.50.61.243 with SMTP id t19mr16034545igr.24.1439441923601; Wed, 12 Aug 2015 21:58:43 -0700 (PDT) Received: from netflix-mac.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id cr1sm798618igb.15.2015.08.12.21.58.42 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 12 Aug 2015 21:58:43 -0700 (PDT) Sender: Warner Losh Subject: Re: svn commit: r286687 - head Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Content-Type: multipart/signed; boundary="Apple-Mail=_3A5AEC53-14D0-48CB-B145-E4826EBCD00C"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail 2.5 From: Warner Losh In-Reply-To: <7AE78D6D-DE39-4C0F-A2AC-4778F4E304A8@gmail.com> Date: Wed, 12 Aug 2015 22:58:47 -0600 Cc: Julian Elischer , Warner Losh , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: References: <201508121900.t7CJ0mhT080491@repo.freebsd.org> <55CC2114.4080904@freebsd.org> <7AE78D6D-DE39-4C0F-A2AC-4778F4E304A8@gmail.com> To: Garrett Cooper X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 04:58:45 -0000 --Apple-Mail=_3A5AEC53-14D0-48CB-B145-E4826EBCD00C Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=windows-1252 > On Aug 12, 2015, at 10:52 PM, Garrett Cooper = wrote: >=20 > On Aug 12, 2015, at 21:46, Julian Elischer wrote: >=20 >> On 8/13/15 3:00 AM, Warner Losh wrote: >>> Author: imp >>> Date: Wed Aug 12 19:00:47 2015 >>> New Revision: 286687 >>> URL: https://svnweb.freebsd.org/changeset/base/286687 >>>=20 >>> Log: >>> Document build-tools better. Add rescue back because it builds = /bin/sh >>> which has a build-tools target (see commit for how build-tools and >>> cross-tools differ). >> really? do we build ALL of rescue? that contains most of /bin and = lots of /usr/bin. >=20 > build-tools only builds /bin/sh and bin/tcsh : >=20 > $ grep BUILDTOOLS rescue/rescue/Makefile > CRUNCH_BUILDTOOLS+=3D bin/sh > CRUNCH_BUILDTOOLS+=3D bin/csh >=20 >> that's a lot.. Can we not just build/bin/sh itself? >=20 > That would.. probably make more sense (especially in a = post-projects/bmake world)=85 but it needs better comments in = Makefile.inc1 . Actually, what we have is totally fine. There=92s nothing to see here. = This is now commented adequately in Makefile.inc1, and listing things in = Makefile.inc1 is totally wrong other than rescue/rescue because rescue builds things with = a different MAKEOBJDIRPREFIX. Rather than have a plethora of =91reach = overs=92 to get the built build-tools, and create the crazy build dependencies, = we waste < 2s of your time. If somebody wants to convert rescue.mk and bsd.crunchgen.mk to something more meta-mode friendly, that might be interesting, but it=92s = independent of Makefile.inc1 (mostly because that=92s unused in Meta mode). Warner --Apple-Mail=_3A5AEC53-14D0-48CB-B145-E4826EBCD00C Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVzCQHAAoJEGwc0Sh9sBEApMoQAK3X49rd6NO2tiwDCrLlWkS6 XpEIRo9Z9ng89LMYPEM4marweTc+z+CFpiBjMREbUtLfFUHI83THaCnfou7eAhff L9u8rw9IxtiZNcIgD70MuIWEsPLRmq6OD5io7a4GHyZqh5g4LA0gv78ihkpUtDfJ YNDKQmqHoDE9rm/a+p6wI5R7lVvWi5kpO7IJQWY6LJ43UcTdSJVFBYSIOaHMneH3 x9FydYfCMB9WY02ZdBmoql3ZcJ2Pw0NeTfY2/9jLqRCOo7H3iEMVCGFjvpBDYGGg BOqQ/2+ud5pH3mgW5/zlu96k0Va6lBuaFI5reBF6/xG17+o7qt3UQ9e9sotPl/Yj uTdoBuRKfQGItdRG62IY9GnrbQKaxIOeMPAdEaffKSK/15XhiR7MS5KDnaxrDJx+ GTRQGZBjnPYYkejnS97Hnj3jc8SQXX4GGfo0BhFUf52iI+AdRKaBRKPP0mJrEFmy UGzN9W1smzT4LwEP2A1Jp2mvk40KM63FiN90I9EouohW/WxONxAR+AUgoZvdFscB niN5oJyrSI0SPaPM8QfYw44+G45fvIZFcPLquFxs253LxzLd5aEpUILQQxp7vvVa 1fg+dUONdbJtlZqJYVIgCShHRy4maQ+vAqALGaJwnwRMVDxVzUU4cpa6Omg7sW4D i1GIh0NkUjEtLin6HdiX =BTXH -----END PGP SIGNATURE----- --Apple-Mail=_3A5AEC53-14D0-48CB-B145-E4826EBCD00C-- From owner-svn-src-head@freebsd.org Thu Aug 13 05:00:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3121399F79C; Thu, 13 Aug 2015 05:00:05 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from vps1.elischer.org (vps1.elischer.org [204.109.63.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "vps1.elischer.org", Issuer "CA Cert Signing Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 09F6C944; Thu, 13 Aug 2015 05:00:04 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from Julian-MBP3.local (ppp121-45-227-250.lns20.per1.internode.on.net [121.45.227.250]) (authenticated bits=0) by vps1.elischer.org (8.15.2/8.15.2) with ESMTPSA id t7D4xvRG001083 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Wed, 12 Aug 2015 22:00:00 -0700 (PDT) (envelope-from julian@freebsd.org) Subject: Re: svn commit: r286687 - head To: Warner Losh References: <201508121900.t7CJ0mhT080491@repo.freebsd.org> <55CC2114.4080904@freebsd.org> <40CDA168-F933-48B6-8F65-69D5F374B9E7@bsdimp.com> Cc: Warner Losh , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org From: Julian Elischer Message-ID: <55CC2447.7040902@freebsd.org> Date: Thu, 13 Aug 2015 12:59:51 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <40CDA168-F933-48B6-8F65-69D5F374B9E7@bsdimp.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 05:00:05 -0000 On 8/13/15 12:53 PM, Warner Losh wrote: >> On Aug 12, 2015, at 10:46 PM, Julian Elischer wrote: >> >> On 8/13/15 3:00 AM, Warner Losh wrote: >>> Author: imp >>> Date: Wed Aug 12 19:00:47 2015 >>> New Revision: 286687 >>> URL: https://svnweb.freebsd.org/changeset/base/286687 >>> >>> Log: >>> Document build-tools better. Add rescue back because it builds /bin/sh >>> which has a build-tools target (see commit for how build-tools and >>> cross-tools differ). >> really? do we build ALL of rescue? that contains most of /bin and lots of /usr/bin. >> that's a lot.. Can we not just build/bin/sh itself? I was confused because you put the entry for the entire rescue. not the subdirectory. > No, we don’t. Check the logs before complaining. It builds the build-tools target > which is empty for the vast majority of rescue. It wasn’t obvious why it was there, > until I deleted it. Then it became obvious, but I thought I’d document why. do we build sh through rescue just to get a static binary? It seems a rather non-obvious way to get one. but if we are building it that way anyhow, maybe we should throw a whole bunch of other build time utils in there as well? might speed up the compile.. > > Warner > From owner-svn-src-head@freebsd.org Thu Aug 13 05:02:02 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6F9EF99F8AE; Thu, 13 Aug 2015 05:02:02 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pd0-x22b.google.com (mail-pd0-x22b.google.com [IPv6:2607:f8b0:400e:c02::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DACAAD57; Thu, 13 Aug 2015 05:02:01 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by pdrg1 with SMTP id g1so14944441pdr.2; Wed, 12 Aug 2015 22:02:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=ZpuFmJUMuscmzvclYk5uuoLBPTAzcFz4fFbT95vf2k8=; b=O/YeCcdqBup6/TpSNOwg1E9CK1Z4BNcDigbmetMFWmwIZ0Deoi4dKYdUrjN3fjHNp8 PrRXGEQyh00RKVP4NZCSwPtkVXBaN2+XFK9Jljk+lZw6RQsPQkW7gsdmY3UCnctLnFHx Cnn6FZFJ0qOObznW6NXiRrZXk2fo7VfA/CbQHKrGo1anjd6AKi4V4L0XmuF/bJT3TOQ8 Xte5ZnYQ2zxJs9TFmMJV+XAcgtu8mJNnDzIIOUQ5ThlJbcHStXIHmwOAbtv+L2ME8VaY 4JiOQtW1v3w7BzXBdZCrFzOsWHnWwbldlH1kQrNouAx0LMDSpfulfhwJyYtYanlHHA8i 1vpg== X-Received: by 10.70.38.231 with SMTP id j7mr75445413pdk.146.1439442121100; Wed, 12 Aug 2015 22:02:01 -0700 (PDT) Received: from ?IPv6:2601:601:800:126d:99cf:7b87:4b2c:ea6c? ([2601:601:800:126d:99cf:7b87:4b2c:ea6c]) by smtp.gmail.com with ESMTPSA id xs13sm914065pac.3.2015.08.12.22.02.00 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 12 Aug 2015 22:02:00 -0700 (PDT) Content-Type: text/plain; charset=windows-1252 Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) Subject: Re: svn commit: r286687 - head From: Garrett Cooper In-Reply-To: <55CC2447.7040902@freebsd.org> Date: Wed, 12 Aug 2015 22:02:01 -0700 Cc: Warner Losh , Warner Losh , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: quoted-printable Message-Id: <2340246B-FDDB-419B-B9E4-25ADA6A15FF1@gmail.com> References: <201508121900.t7CJ0mhT080491@repo.freebsd.org> <55CC2114.4080904@freebsd.org> <40CDA168-F933-48B6-8F65-69D5F374B9E7@bsdimp.com> <55CC2447.7040902@freebsd.org> To: Julian Elischer X-Mailer: Apple Mail (2.1878.6) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 05:02:02 -0000 On Aug 12, 2015, at 21:59, Julian Elischer wrote: > On 8/13/15 12:53 PM, Warner Losh wrote: >>> On Aug 12, 2015, at 10:46 PM, Julian Elischer = wrote: >>>=20 >>> On 8/13/15 3:00 AM, Warner Losh wrote: >>>> Author: imp >>>> Date: Wed Aug 12 19:00:47 2015 >>>> New Revision: 286687 >>>> URL: https://svnweb.freebsd.org/changeset/base/286687 >>>>=20 >>>> Log: >>>> Document build-tools better. Add rescue back because it builds = /bin/sh >>>> which has a build-tools target (see commit for how build-tools = and >>>> cross-tools differ). >>> really? do we build ALL of rescue? that contains most of /bin and = lots of /usr/bin. >>> that's a lot.. Can we not just build/bin/sh itself? > I was confused because you put the entry for the entire rescue. not = the subdirectory. >> No, we don=92t. Check the logs before complaining. It builds the = build-tools target >> which is empty for the vast majority of rescue. It wasn=92t obvious = why it was there, >> until I deleted it. Then it became obvious, but I thought I=92d = document why. >=20 > do we build sh through rescue just to get a static binary? > It seems a rather non-obvious way to get one. but if we are building = it that way anyhow, > maybe we should throw a whole bunch of other build time utils in there = as well? > might speed up the compile.. No. It=92s only building bits and pieces needed to bootstrap /bin/sh and = /bin/tcsh for /rescue/rescue .= From owner-svn-src-head@freebsd.org Thu Aug 13 05:42:57 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B0E7F99FF9C; Thu, 13 Aug 2015 05:42:57 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9C2F3D6F; Thu, 13 Aug 2015 05:42:57 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7D5gvXq050036; Thu, 13 Aug 2015 05:42:57 GMT (envelope-from peter@FreeBSD.org) Received: (from peter@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7D5gvw0050035; Thu, 13 Aug 2015 05:42:57 GMT (envelope-from peter@FreeBSD.org) Message-Id: <201508130542.t7D5gvw0050035@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: peter set sender to peter@FreeBSD.org using -f From: Peter Wemm Date: Thu, 13 Aug 2015 05:42:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286718 - head/sys/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 05:42:57 -0000 Author: peter Date: Thu Aug 13 05:42:56 2015 New Revision: 286718 URL: https://svnweb.freebsd.org/changeset/base/286718 Log: Add missing cddl/contrib/opensolaris/uts/common/fs/zfs/bqueue.c that was left out of r286705. Forgotten by: mav Modified: head/sys/conf/files Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Thu Aug 13 05:02:04 2015 (r286717) +++ head/sys/conf/files Thu Aug 13 05:42:56 2015 (r286718) @@ -145,6 +145,7 @@ cddl/contrib/opensolaris/uts/common/fs/z cddl/contrib/opensolaris/uts/common/fs/zfs/bplist.c optional zfs compile-with "${ZFS_C}" cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c optional zfs compile-with "${ZFS_C}" cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c optional zfs compile-with "${ZFS_C}" +cddl/contrib/opensolaris/uts/common/fs/zfs/bqueue.c optional zfs compile-with "${ZFS_C}" cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c optional zfs compile-with "${ZFS_C}" cddl/contrib/opensolaris/uts/common/fs/zfs/ddt.c optional zfs compile-with "${ZFS_C}" cddl/contrib/opensolaris/uts/common/fs/zfs/ddt_zap.c optional zfs compile-with "${ZFS_C}" From owner-svn-src-head@freebsd.org Thu Aug 13 06:52:00 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 63DD89A0DB9; Thu, 13 Aug 2015 06:52:00 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from mail-ob0-x232.google.com (mail-ob0-x232.google.com [IPv6:2607:f8b0:4003:c01::232]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 25659F18; Thu, 13 Aug 2015 06:52:00 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by obbop1 with SMTP id op1so30617827obb.2; Wed, 12 Aug 2015 23:51:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=ZtRi7bNf9mlA70EKM+DELbn0tylFQ/RYtP3EJStl8zo=; b=EWauCCjeVCHnr+yv+pRjRr9QIc05sVx3yQpLkfDVvEcSAYenXitYt4MHE9P1EBq/hk jkjSvpZRfaTtL4gzvkaOkNFdgk2nz1mf1rp7kTJtHqtmBNDZUH8Cq8P4uKD+BCrlNOK/ brl5b0mXXzSKB9tge3vd6AP2Q1AUXRLs5PzJg69uGaaMf/VEMQPvPcUOnowH954kp759 lxVJbIfFNTKrLmqAoTHOB9uCKfl3VwMoXdXJ/PXnG9DlTRxI+Fu57stplO9VbkjNxq5v NRoliT1TbZej5w4pRedYjk0ddJyzxR76v4VUDRxnHh0ndcD4VAbRRj7Xevxd97m2R6E0 cOUQ== MIME-Version: 1.0 X-Received: by 10.182.91.4 with SMTP id ca4mr32747683obb.11.1439448719410; Wed, 12 Aug 2015 23:51:59 -0700 (PDT) Received: by 10.202.11.193 with HTTP; Wed, 12 Aug 2015 23:51:59 -0700 (PDT) Reply-To: araujo@FreeBSD.org In-Reply-To: <20150813134548.U1375@besplex.bde.org> References: <201508130231.t7D2VOhc069855@repo.freebsd.org> <20150813134548.U1375@besplex.bde.org> Date: Thu, 13 Aug 2015 14:51:59 +0800 Message-ID: Subject: Re: svn commit: r286715 - head/lib/libc/string From: Marcelo Araujo To: Bruce Evans Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: multipart/mixed; boundary=e89a8fb1f33c980c3e051d2bc5b7 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 06:52:00 -0000 --e89a8fb1f33c980c3e051d2bc5b7 Content-Type: text/plain; charset=UTF-8 Hi Bruce, I sent it already in private to you, as we were talking about the implementation of bcopy(3) on BSD and the POSIX one. So, I will send the patch again here, to let other developer give their opinion about it. Thanks to explain over and over again. Now it is clear to me. All the best. 2015-08-13 12:46 GMT+08:00 Bruce Evans : > On Thu, 13 Aug 2015, Marcelo Araujo wrote: > > Author: araujo >> Date: Thu Aug 13 02:31:23 2015 >> New Revision: 286715 >> URL: https://svnweb.freebsd.org/changeset/base/286715 >> >> Log: >> Remove the mention of memcpy(3) that is build on top of bcopy(3). >> Fix some phrases to make it more clear. >> >> Differential Revision: D3378 >> Reported by: bde@ >> Reviewed by: wblock >> Approved by: bapt, rodrigc (mentor) >> Sponsored by: gandi.net >> > > I don't like this version either :-). > > Modified: head/lib/libc/string/bcopy.3 >> >> ============================================================================== >> --- head/lib/libc/string/bcopy.3 Thu Aug 13 01:04:26 2015 >> (r286714) >> +++ head/lib/libc/string/bcopy.3 Thu Aug 13 02:31:23 2015 >> (r286715) >> @@ -31,7 +31,7 @@ >> .\" @(#)bcopy.3 8.1 (Berkeley) 6/4/93 >> .\" $FreeBSD$ >> .\" >> -.Dd August 11, 2015 >> +.Dd August 13, 2015 >> .Dt BCOPY 3 >> .Os >> .Sh NAME >> @@ -58,16 +58,14 @@ If >> .Fa len >> is zero, no bytes are copied. >> .Pp >> -This function is deprecated (marked as LEGACY in >> -POSIX.1-2001): use >> -.Xr memcpy 3 >> -or >> +This function is obsolete (marked as LEGACY in >> +POSIX.1-2001): please use >> > > This function is not obsolete, but is fully supported in FreeBSD. > > Its obsoletely doesn't follow at all from the clause in parentheses. > LEGACY doesn't even mean obsolencent. In computerspeak it means > "old stuff that we don't like". > > I think you got the "obsolete" wording from NetBSD. But I think > NetBSD started deprecating it in 1995. It might really be obsolete > for them after 20 years of deprecation. > > Please don't use pleasant nonsenses like "please" in man pages or > comments. > > .Xr memmove 3 >> in new programs. >> > > Still not quite right. New programs should use the best function and > that is usually memcpy(). Only old programs that are being roto-tilled > should convert bcopy() to memmove() (so as to avoid having to understand > them well enough to know if they do overlapped copies). > > -Note that the first two arguments are >> -interchanged for >> -.Xr memcpy 3 >> -and >> +Note that >> +.Fn bcopy >> +takes its src and dst arguments in the opposite >> +order from >> .Xr memmove 3 . >> > > OK, except Xr should be Fn. ".Xr memmove 3" is a man page, not a function. > Man pages don't take src and dst arguments :-). This normally shows up > in the rendering -- in text mode, Fn gives highlighting but Xr doesn't. > > Now I notice more markup problems: the src and dst arguments are not marked > up. In text mode, Fa gives highlighting for args. > > POSIX.1-2008 removes the specification of >> .Fn bcopy . >> > > Better put this before the LEGACY statement and maybe merge the LEGACY > statement into the HISTORY section. Since I don't want to deprecate > bcopy(), I would put this in the history section too. > > Technically, this function is not deprecated since it is still a standard > BSD function in . The ifdef for this is already quite > complicated and broken, thoough it only attempts to keep up with some > of the POSIX churn: from strings.h: > > #if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112 > int bcmp(const void *, const void *, size_t) __pure; /* LEGACY > */ > void bcopy(const void *, void *, size_t); /* LEGACY > */ > void bzero(void *, size_t); /* LEGACY > */ > #endif > > It is POSIX LEGACY, but standard BSD. > > The POSIX ifdef is quite broken: > - before 1996, POSIX didn't have this function, but it also didn't have > strings.h so there is no problem (the ifdef is vacuously correct) > - between 1996 and 2001, there was an XSI version there may have been > a POSIX version that had this function and too. The ifdef > is wrong for any such version since it doesn't mention XSI. Such > versions > are just unsupported. > - between 2001 and 2008, POSIX apparently required bcopy() (and the other > functions) but didn't declare them anywhere, except in the XSI case it > requires them to be declared in . The above supports the > non-XSI case of this. The XSI case is broken as in any 1996-2001 > versions. > - the ifdef is not up to date with changing LEGACY to OBSOLETE, but since > LEGACY already resulted in omission of the prototypes in the non-XSI > case, > nothing needed to be changed in this case, and since the XSI case is > unsupported nothing need to be changed to turn off the prototypes for XSI > either. > > Correct code here wouldn't have the POSIX ifdef or LEGACY comments, but > might having a comment saying that XSI is intentionally unsupported. > XSI messes elswhere are supported, and I am suprised that not supporting > it here doesn't cause problems. > > Ifdefs for historical mistakes would cause much larger messes if they > were complete. Just near here, there is the mess of the > and . 1980's source code had messy ifdefs in applications > for this. C90 didn't exactly help by standardizing the SYSVish > . POSIX.1-2001 actively harmed by restoring the BSDish > . FreeBSD handles this problem by including > in if __BSD_VISIBLE and not documenting the details in man > pages. contains mostly BSD functions, and man pages > including bcopy(3) say to include , but most applications > only include , which was where bcopy() was in 4.4.BSD-Lite, > and where it still is by the #include hack, but not where it is > according to the man page. The ifdefs here seem to be just messy > enough to detect the error of using the wrong include in the > !__BSD_VISIBLE case. > > Bruce > -- -- Marcelo Araujo (__)araujo@FreeBSD.org \\\'',)http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) --e89a8fb1f33c980c3e051d2bc5b7 Content-Type: text/plain; charset=US-ASCII; name="bcopy3.diff" Content-Disposition: attachment; filename="bcopy3.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_id9ukd9l0 SW5kZXg6IGJjb3B5LjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmNvcHkuMwkocmV2aXNpb24gMjg2NzE2KQor KysgYmNvcHkuMwkod29ya2luZyBjb3B5KQpAQCAtNTcsMTggKzU3LDYgQEAKIElmCiAuRmEgbGVu CiBpcyB6ZXJvLCBubyBieXRlcyBhcmUgY29waWVkLgotLlBwCi1UaGlzIGZ1bmN0aW9uIGlzIG9i c29sZXRlIChtYXJrZWQgYXMgTEVHQUNZIGluCi1QT1NJWC4xLTIwMDEpOiBwbGVhc2UgdXNlCi0u WHIgbWVtbW92ZSAzCi1pbiBuZXcgcHJvZ3JhbXMuCi1Ob3RlIHRoYXQKLS5GbiBiY29weQotdGFr ZXMgaXRzIHNyYyBhbmQgZHN0IGFyZ3VtZW50cyBpbiB0aGUgb3Bwb3NpdGUKLW9yZGVyIGZyb20K LS5YciBtZW1tb3ZlIDMgLgotUE9TSVguMS0yMDA4IHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24g b2YKLS5GbiBiY29weSAuCiAuU2ggU0VFIEFMU08KIC5YciBtZW1jY3B5IDMgLAogLlhyIG1lbWNw eSAzICwKQEAgLTg3LDMgKzc1LDE5IEBACiBmb3IKIC5TdCAtcDEwMDMuMS0yMDAxCiBjb21wbGlh bmNlLgorLlBwCitUaGUKKy5TdCAtcDEwMDMuMS0yMDA4CityZW1vdmVzIHRoZSBzcGVjaWZpY2F0 aW9uIG9mCisuRm4gYmNvcHkKK2FuZCBpdCBpcyBtYXJrZWQgYXMgTEVHQUNZIGluCisuU3QgLXAx MDAzLjEtMjAwNAorTmV3IHByb2dyYW1zIHNob3VsZCB1c2U6CisuRm4gbWVtY3B5CitvcgorLkZu IG1lbW1vdmUgLgorTm90ZSB0aGF0CisuRm4gYmNvcHkKK3Rha2VzIGl0cyBzcmMgYW5kIGRzdCBh cmd1bWVudHMgaW4gdGhlCitvcHBvc2l0ZSBvcmRlciBmcm9tCisuRm4gbWVtbW92ZSAuCg== --e89a8fb1f33c980c3e051d2bc5b7-- From owner-svn-src-head@freebsd.org Thu Aug 13 07:11:46 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0920899F51A; Thu, 13 Aug 2015 07:11:46 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from mail-oi0-x22f.google.com (mail-oi0-x22f.google.com [IPv6:2607:f8b0:4003:c06::22f]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BB840B15; Thu, 13 Aug 2015 07:11:45 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by oiew67 with SMTP id w67so3505913oie.2; Thu, 13 Aug 2015 00:11:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=yxR3gLL9Zpe4JSxyHBaOW6r3WkDBFQDooxFGbS7r5Ko=; b=mfIGzL13IEY9Ib2m/77/hl7XK2yp0QAYwYtwUezDxPilbDwyoZkqDSKESUe+QPtkTB YY7NXkdhAFefydHQfz4u5GvQz1m/qiuhKzp1t9hxg8TGzL5ufAiHSxfo164pxVOg3jQ9 oXkZo1zYV6Waw+BtvVRihAw+MZfZM5j0UwyBn41eELZcNoqkm1XhT05xGwTp7raxScew 2A/z62U1PiE5v5E0incJzLksIX6LK3YT+rtDXcWZsR1QkeS8pr6hI/7XPttHUuoQtMgQ qVjMFCqtphMps2GyXQndFL9ku92jr2HE7xfsOc46NzIgmWB56pr5UXgYe7TVWoOAZJN5 aiUQ== MIME-Version: 1.0 X-Received: by 10.202.84.78 with SMTP id i75mr20018623oib.114.1439449904926; Thu, 13 Aug 2015 00:11:44 -0700 (PDT) Received: by 10.202.11.193 with HTTP; Thu, 13 Aug 2015 00:11:44 -0700 (PDT) Reply-To: araujo@FreeBSD.org In-Reply-To: References: <201508130231.t7D2VOhc069855@repo.freebsd.org> <20150813134548.U1375@besplex.bde.org> Date: Thu, 13 Aug 2015 15:11:44 +0800 Message-ID: Subject: Re: svn commit: r286715 - head/lib/libc/string From: Marcelo Araujo To: Marcelo Araujo Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 07:11:46 -0000 2015-08-13 14:51 GMT+08:00 Marcelo Araujo : > Hi Bruce, > > I sent it already in private to you, as we were talking about the > implementation of bcopy(3) on BSD and the POSIX one. > > So, I will send the patch again here, to let other developer give their > opinion about it. > > Thanks to explain over and over again. Now it is clear to me. > > > All the best. > > 2015-08-13 12:46 GMT+08:00 Bruce Evans : > >> On Thu, 13 Aug 2015, Marcelo Araujo wrote: >> >> Author: araujo >>> Date: Thu Aug 13 02:31:23 2015 >>> New Revision: 286715 >>> URL: https://svnweb.freebsd.org/changeset/base/286715 >>> >>> Log: >>> Remove the mention of memcpy(3) that is build on top of bcopy(3). >>> Fix some phrases to make it more clear. >>> >>> Differential Revision: D3378 >>> Reported by: bde@ >>> Reviewed by: wblock >>> Approved by: bapt, rodrigc (mentor) >>> Sponsored by: gandi.net >>> >> >> I don't like this version either :-). >> >> Modified: head/lib/libc/string/bcopy.3 >>> >>> ============================================================================== >>> --- head/lib/libc/string/bcopy.3 Thu Aug 13 01:04:26 2015 >>> (r286714) >>> +++ head/lib/libc/string/bcopy.3 Thu Aug 13 02:31:23 2015 >>> (r286715) >>> @@ -31,7 +31,7 @@ >>> .\" @(#)bcopy.3 8.1 (Berkeley) 6/4/93 >>> .\" $FreeBSD$ >>> .\" >>> -.Dd August 11, 2015 >>> +.Dd August 13, 2015 >>> .Dt BCOPY 3 >>> .Os >>> .Sh NAME >>> @@ -58,16 +58,14 @@ If >>> .Fa len >>> is zero, no bytes are copied. >>> .Pp >>> -This function is deprecated (marked as LEGACY in >>> -POSIX.1-2001): use >>> -.Xr memcpy 3 >>> -or >>> +This function is obsolete (marked as LEGACY in >>> +POSIX.1-2001): please use >>> >> >> This function is not obsolete, but is fully supported in FreeBSD. >> >> Its obsoletely doesn't follow at all from the clause in parentheses. >> LEGACY doesn't even mean obsolencent. In computerspeak it means >> "old stuff that we don't like". >> >> I think you got the "obsolete" wording from NetBSD. But I think >> NetBSD started deprecating it in 1995. It might really be obsolete >> for them after 20 years of deprecation. >> >> Please don't use pleasant nonsenses like "please" in man pages or >> comments. >> >> .Xr memmove 3 >>> in new programs. >>> >> >> Still not quite right. New programs should use the best function and >> that is usually memcpy(). Only old programs that are being roto-tilled >> should convert bcopy() to memmove() (so as to avoid having to understand >> them well enough to know if they do overlapped copies). >> >> -Note that the first two arguments are >>> -interchanged for >>> -.Xr memcpy 3 >>> -and >>> +Note that >>> +.Fn bcopy >>> +takes its src and dst arguments in the opposite >>> +order from >>> .Xr memmove 3 . >>> >> >> OK, except Xr should be Fn. ".Xr memmove 3" is a man page, not a >> function. >> Man pages don't take src and dst arguments :-). This normally shows up >> in the rendering -- in text mode, Fn gives highlighting but Xr doesn't. >> >> Now I notice more markup problems: the src and dst arguments are not >> marked >> up. In text mode, Fa gives highlighting for args. >> >> POSIX.1-2008 removes the specification of >>> .Fn bcopy . >>> >> >> Better put this before the LEGACY statement and maybe merge the LEGACY >> statement into the HISTORY section. Since I don't want to deprecate >> bcopy(), I would put this in the history section too. >> >> Technically, this function is not deprecated since it is still a standard >> BSD function in . The ifdef for this is already quite >> complicated and broken, thoough it only attempts to keep up with some >> of the POSIX churn: from strings.h: >> >> #if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112 >> int bcmp(const void *, const void *, size_t) __pure; /* LEGACY >> */ >> void bcopy(const void *, void *, size_t); /* LEGACY >> */ >> void bzero(void *, size_t); /* LEGACY >> */ >> #endif >> >> It is POSIX LEGACY, but standard BSD. >> >> The POSIX ifdef is quite broken: >> - before 1996, POSIX didn't have this function, but it also didn't have >> strings.h so there is no problem (the ifdef is vacuously correct) >> - between 1996 and 2001, there was an XSI version there may have been >> a POSIX version that had this function and too. The ifdef >> is wrong for any such version since it doesn't mention XSI. Such >> versions >> are just unsupported. >> - between 2001 and 2008, POSIX apparently required bcopy() (and the other >> functions) but didn't declare them anywhere, except in the XSI case it >> requires them to be declared in . The above supports the >> non-XSI case of this. The XSI case is broken as in any 1996-2001 >> versions. >> - the ifdef is not up to date with changing LEGACY to OBSOLETE, but since >> LEGACY already resulted in omission of the prototypes in the non-XSI >> case, >> nothing needed to be changed in this case, and since the XSI case is >> unsupported nothing need to be changed to turn off the prototypes for >> XSI >> either. >> >> Correct code here wouldn't have the POSIX ifdef or LEGACY comments, but >> might having a comment saying that XSI is intentionally unsupported. >> XSI messes elswhere are supported, and I am suprised that not supporting >> it here doesn't cause problems. >> >> Ifdefs for historical mistakes would cause much larger messes if they >> were complete. Just near here, there is the mess of the >> and . 1980's source code had messy ifdefs in applications >> for this. C90 didn't exactly help by standardizing the SYSVish >> . POSIX.1-2001 actively harmed by restoring the BSDish >> . FreeBSD handles this problem by including >> in if __BSD_VISIBLE and not documenting the details in man >> pages. contains mostly BSD functions, and man pages >> including bcopy(3) say to include , but most applications >> only include , which was where bcopy() was in 4.4.BSD-Lite, >> and where it still is by the #include hack, but not where it is >> according to the man page. The ifdefs here seem to be just messy >> enough to detect the error of using the wrong include in the >> !__BSD_VISIBLE case. >> >> Bruce >> > > Hi guys, Here is the review: https://reviews.freebsd.org/D3374 The bcopy() was removed in IEEE Std 1003.1-2008 and it is marked as LEGACY in IEEE Std 1003.1-2004. However, BSD has its implementation before IEEE Std 1003.1-2001. In my understood it is obsolete on POSIX, but not truly obsolete for FreeBSD. So I believe, this patch now address it in the correct way. Feel free to add yourself in the review and share with me your point of view, or reply here or even direct to me. Best Regards, -- -- Marcelo Araujo (__)araujo@FreeBSD.org \\\'',)http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) From owner-svn-src-head@freebsd.org Thu Aug 13 07:24:52 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7969599F859; Thu, 13 Aug 2015 07:24:52 +0000 (UTC) (envelope-from theraven@FreeBSD.org) Received: from theravensnest.org (theraven.freebsd.your.org [216.14.102.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cloud.theravensnest.org", Issuer "StartCom Class 1 Primary Intermediate Server CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 3F32117C; Thu, 13 Aug 2015 07:24:51 +0000 (UTC) (envelope-from theraven@FreeBSD.org) Received: from [192.168.0.7] (cpc16-cmbg15-2-0-cust60.5-4.cable.virginm.net [86.5.162.61]) (authenticated bits=0) by theravensnest.org (8.15.1/8.15.1) with ESMTPSA id t7D7OeZF087770 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 13 Aug 2015 07:24:43 GMT (envelope-from theraven@FreeBSD.org) X-Authentication-Warning: theravensnest.org: Host cpc16-cmbg15-2-0-cust60.5-4.cable.virginm.net [86.5.162.61] claimed to be [192.168.0.7] Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Subject: Re: svn commit: r286715 - head/lib/libc/string From: David Chisnall In-Reply-To: Date: Thu, 13 Aug 2015 08:24:42 +0100 Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Transfer-Encoding: quoted-printable Message-Id: <0CFBA0CC-FEEE-40CE-BC47-065613C64293@FreeBSD.org> References: <201508130231.t7D2VOhc069855@repo.freebsd.org> <20150813134548.U1375@besplex.bde.org> To: araujo@FreeBSD.org X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 07:24:52 -0000 On 13 Aug 2015, at 08:11, Marcelo Araujo = wrote: >=20 > The bcopy() was removed in IEEE Std 1003.1-2008 and it is marked as = LEGACY in IEEE Std 1003.1-2004. However, BSD has its implementation = before IEEE Std 1003.1-2001. >=20 > In my understood it is obsolete on POSIX, but not truly obsolete for = FreeBSD. > So I believe, this patch now address it in the correct way. Its use should be strongly discouraged in FreeBSD (or, ideally, replaced = with the macro from the POSIX man page). LLVM does a load of = optimisations for memmove and memcpy - using bcopy is a really good way = of bypassing all of these. David From owner-svn-src-head@freebsd.org Thu Aug 13 07:56:32 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 844D99B7010; Thu, 13 Aug 2015 07:56:32 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from mail-ob0-x229.google.com (mail-ob0-x229.google.com [IPv6:2607:f8b0:4003:c01::229]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 408DCFDD; Thu, 13 Aug 2015 07:56:32 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by obbfr1 with SMTP id fr1so31319336obb.1; Thu, 13 Aug 2015 00:56:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=lDxnUKqI25p1Zdh4te9zSvbtNH4FHR9Bv9Q7w4Xk/D0=; b=NKOkjxzDbIduoTDsixmGCiogUe4sy6u4TThuUIn+v8HcULND9UzdfyQgQ3E0ETyvXv j/BLBkvDk6mTqKx+3m/IUrisPQfvkFXo0pd4vpXFPUY/bKtGt3T3MkHjPcbHvm/pV5B2 A7rtWd9V9VCsYfMXXAieSoRRNwUncWxoL/hhmtzheHUiEDhYPxeIY/FJ4ejXPCU/H3AZ AgOyhdKL/cyu9BZGsHSaqVdnHq1in+XR1aisLaR77hRfanuCMBvY+J5UcTBNJxiLKpwg 2AHFjh/KnoTf4GRsIvHcuMi7I47Bzpno0jFPnD6SCjA9ylLNvxHfHpvE5jGCnx6bhAJL B0bw== MIME-Version: 1.0 X-Received: by 10.60.46.99 with SMTP id u3mr35383142oem.56.1439452591569; Thu, 13 Aug 2015 00:56:31 -0700 (PDT) Received: by 10.202.11.193 with HTTP; Thu, 13 Aug 2015 00:56:31 -0700 (PDT) Reply-To: araujo@FreeBSD.org In-Reply-To: <0CFBA0CC-FEEE-40CE-BC47-065613C64293@FreeBSD.org> References: <201508130231.t7D2VOhc069855@repo.freebsd.org> <20150813134548.U1375@besplex.bde.org> <0CFBA0CC-FEEE-40CE-BC47-065613C64293@FreeBSD.org> Date: Thu, 13 Aug 2015 15:56:31 +0800 Message-ID: Subject: Re: svn commit: r286715 - head/lib/libc/string From: Marcelo Araujo To: David Chisnall Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 07:56:32 -0000 Hi David, So it means, this commit here was right already: https://svnweb.freebsd.org/base?view=revision&revision=286651 Although I made a mistake with the date. All the best. 2015-08-13 15:24 GMT+08:00 David Chisnall : > On 13 Aug 2015, at 08:11, Marcelo Araujo wrote: > > > > The bcopy() was removed in IEEE Std 1003.1-2008 and it is marked as > LEGACY in IEEE Std 1003.1-2004. However, BSD has its implementation before > IEEE Std 1003.1-2001. > > > > In my understood it is obsolete on POSIX, but not truly obsolete for > FreeBSD. > > So I believe, this patch now address it in the correct way. > > Its use should be strongly discouraged in FreeBSD (or, ideally, replaced > with the macro from the POSIX man page). LLVM does a load of optimisations > for memmove and memcpy - using bcopy is a really good way of bypassing all > of these. > > David > > -- -- Marcelo Araujo (__)araujo@FreeBSD.org \\\'',)http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) From owner-svn-src-head@freebsd.org Thu Aug 13 08:01:53 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EDA339B7367; Thu, 13 Aug 2015 08:01:53 +0000 (UTC) (envelope-from theraven@FreeBSD.org) Received: from theravensnest.org (theraven.freebsd.your.org [216.14.102.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cloud.theravensnest.org", Issuer "StartCom Class 1 Primary Intermediate Server CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id BBFED680; Thu, 13 Aug 2015 08:01:53 +0000 (UTC) (envelope-from theraven@FreeBSD.org) Received: from [192.168.0.7] (cpc16-cmbg15-2-0-cust60.5-4.cable.virginm.net [86.5.162.61]) (authenticated bits=0) by theravensnest.org (8.15.1/8.15.1) with ESMTPSA id t7D81n4t087954 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 13 Aug 2015 08:01:52 GMT (envelope-from theraven@FreeBSD.org) X-Authentication-Warning: theravensnest.org: Host cpc16-cmbg15-2-0-cust60.5-4.cable.virginm.net [86.5.162.61] claimed to be [192.168.0.7] Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Subject: Re: svn commit: r286715 - head/lib/libc/string From: David Chisnall In-Reply-To: Date: Thu, 13 Aug 2015 09:01:52 +0100 Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Transfer-Encoding: quoted-printable Message-Id: <2D188186-B215-4417-A003-61DF1F1A24BF@FreeBSD.org> References: <201508130231.t7D2VOhc069855@repo.freebsd.org> <20150813134548.U1375@besplex.bde.org> <0CFBA0CC-FEEE-40CE-BC47-065613C64293@FreeBSD.org> To: araujo@FreeBSD.org X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 08:01:54 -0000 On 13 Aug 2015, at 08:56, Marcelo Araujo = wrote: >=20 > So it means, this commit here was right already: > https://svnweb.freebsd.org/base?view=3Drevision&revision=3D286651 >=20 > Although I made a mistake with the date. More or less. I partly agree with Bruce that suggesting memcpy is = misleading. I=E2=80=99d prefer something like: This function is deprecated (marked as LEGACY in POSIX.1-2001): use .Xr memmove 3 in new programs. If you can guarantee that the input and output buffers do not overlap, = then .Xr memcpy 3 may be more efficient. David From owner-svn-src-head@freebsd.org Thu Aug 13 09:45:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B371799FABC; Thu, 13 Aug 2015 09:45:05 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail108.syd.optusnet.com.au (mail108.syd.optusnet.com.au [211.29.132.59]) by mx1.freebsd.org (Postfix) with ESMTP id 675D8F67; Thu, 13 Aug 2015 09:45:05 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from c211-30-166-197.carlnfd1.nsw.optusnet.com.au (c211-30-166-197.carlnfd1.nsw.optusnet.com.au [211.30.166.197]) by mail108.syd.optusnet.com.au (Postfix) with ESMTPS id C86A61A2DE9; Thu, 13 Aug 2015 19:44:54 +1000 (AEST) Date: Thu, 13 Aug 2015 19:44:53 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: David Chisnall cc: araujo@freebsd.org, "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Subject: Re: svn commit: r286715 - head/lib/libc/string In-Reply-To: <0CFBA0CC-FEEE-40CE-BC47-065613C64293@FreeBSD.org> Message-ID: <20150813175120.F2152@besplex.bde.org> References: <201508130231.t7D2VOhc069855@repo.freebsd.org> <20150813134548.U1375@besplex.bde.org> <0CFBA0CC-FEEE-40CE-BC47-065613C64293@FreeBSD.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=XMDNMlVE c=1 sm=1 tr=0 a=KA6XNC2GZCFrdESI5ZmdjQ==:117 a=PO7r1zJSAAAA:8 a=JzwRw_2MAAAA:8 a=kj9zAlcOel0A:10 a=pGLkceISAAAA:8 a=FXohseXW_oZzt_8xRucA:9 a=gdfBHrrxH7VcuoAt:21 a=Os2WNlZjV-2A-W07:21 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 09:45:05 -0000 On Thu, 13 Aug 2015, David Chisnall wrote: > On 13 Aug 2015, at 08:11, Marcelo Araujo wrote: >> >> The bcopy() was removed in IEEE Std 1003.1-2008 and it is marked as LEGACY in IEEE Std 1003.1-2004. However, BSD has its implementation before IEEE Std 1003.1-2001. >> >> In my understood it is obsolete on POSIX, but not truly obsolete for FreeBSD. >> So I believe, this patch now address it in the correct way. > > Its use should be strongly discouraged in FreeBSD (or, ideally, replaced with the macro from the POSIX man page). LLVM does a load of optimisations for memmove and memcpy - using bcopy is a really good way of bypassing all of these. That is a good reason to use bcopy. Compilers are clueless about caches, so their optimizations tend to be negative. clang has a nice one now, not related to caches. It uses SSE if possible for small fixed-size memcpy's, so takes a few hundred cycles longer for the first memcpy per context switch if SSE would not have otherwise be used. Compilers cannot know if this is a good optimization. If this were important, then someone except me would have noticed that switching to -ffreestanding in the kernel turned off all builtins including the one for memcpy(). But it really is unimportant. Most copying in the kernel is done by pagecopy(), and the possible gains from optimizing that are on the order of 1% except in micro-benchmarks that arrange to do excessive pagecopy()s. The possible gains from optimizations in the memcpy() builtin are much smaller. The possible gains from restoring all builtins may be as much as 1%. I recently noticed bcmp() showing up in benchmarks. Only 1% for makeworld, but that is a lot for a single function. clang doesn't bother optimizing memcmp() and calls the library. gcc-4.2.1 pessimizes memcmp using "rep cmpsb" on x86 (gcc used to use a similar pessimization for memcpy(), but learned better. Strangely, "rep movsb" is now the best method on Haswell except for small counts where gcc used to use it). The library and kernel memcmp()s are not as bad as gcc's, but they still use "rep movs[lq]" and this is still slow on Haswell. Simple C code is more than 6 times faster in micro-benchmarks on Haswell. The FreeBSD library MI C code is a little too simple. It uses bytewise compares, so it it beats "rep cmpsb" but not "rep cmpsl". Bruce From owner-svn-src-head@freebsd.org Thu Aug 13 12:49:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CCF6D9A09AE; Thu, 13 Aug 2015 12:49:34 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebius.int.ru (glebius.int.ru [81.19.69.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebius.int.ru", Issuer "cell.glebius.int.ru" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 5BE37B5D; Thu, 13 Aug 2015 12:49:33 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebius.int.ru (localhost [127.0.0.1]) by cell.glebius.int.ru (8.15.2/8.15.2) with ESMTPS id t7DCnV8s096262 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 13 Aug 2015 15:49:31 +0300 (MSK) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebius.int.ru (8.15.2/8.15.2/Submit) id t7DCnU1S096261; Thu, 13 Aug 2015 15:49:30 +0300 (MSK) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebius.int.ru: glebius set sender to glebius@FreeBSD.org using -f Date: Thu, 13 Aug 2015 15:49:30 +0300 From: Gleb Smirnoff To: Mariusz Zaborski Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286698 - head/sys/kern Message-ID: <20150813124930.GK75813@FreeBSD.org> References: <201508122008.t7CK8sjG009888@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201508122008.t7CK8sjG009888@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 12:49:34 -0000 On Wed, Aug 12, 2015 at 08:08:54PM +0000, Mariusz Zaborski wrote: M> Author: oshogbo M> Date: Wed Aug 12 20:08:54 2015 M> New Revision: 286698 M> URL: https://svnweb.freebsd.org/changeset/base/286698 M> M> Log: M> When the wait*(2) syscalls wait for any process (P_ALL), they should M> ignore processes created with the pdfork(2) syscall. M> M> PR: 201054 M> Approved by: pjd (mentor) M> Discussed with: emaste, rwatson I believe this behaviour has a good reason, but it is counterintuitive to a person who knows classical fork/wait syscalls and isn't very much into the process descriptors. Thus, this behaviour must be documented in wait.2 manual page. And of course wait.2 must reference pdwait4.2. -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Thu Aug 13 13:19:57 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AD5BA9A0DF5; Thu, 13 Aug 2015 13:19:57 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9E9CCA1A; Thu, 13 Aug 2015 13:19:57 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DDJvkH033985; Thu, 13 Aug 2015 13:19:57 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DDJvRl033984; Thu, 13 Aug 2015 13:19:57 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508131319.t7DDJvRl033984@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Thu, 13 Aug 2015 13:19:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286719 - head/lib/libgeom X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 13:19:57 -0000 Author: mav Date: Thu Aug 13 13:19:56 2015 New Revision: 286719 URL: https://svnweb.freebsd.org/changeset/base/286719 Log: Revert part of r280687, reporting "1" (true) for empty value. For example, it made gpart partitions without label report "1" as label. PR: 202089 MFC after: 3 days Modified: head/lib/libgeom/geom_xml2tree.c Modified: head/lib/libgeom/geom_xml2tree.c ============================================================================== --- head/lib/libgeom/geom_xml2tree.c Thu Aug 13 05:42:56 2015 (r286718) +++ head/lib/libgeom/geom_xml2tree.c Thu Aug 13 13:19:56 2015 (r286719) @@ -286,7 +286,7 @@ EndElement(void *userData, const char *n "element", name); return; } - gc->lg_val = p ? p : strdup("1"); + gc->lg_val = p; LIST_INSERT_HEAD(c, gc, lg_config); return; } From owner-svn-src-head@freebsd.org Thu Aug 13 13:20:30 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9E97B9B7024; Thu, 13 Aug 2015 13:20:30 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8F525BC7; Thu, 13 Aug 2015 13:20:30 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DDKU4I035099; Thu, 13 Aug 2015 13:20:30 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DDKUT2035098; Thu, 13 Aug 2015 13:20:30 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201508131320.t7DDKUT2035098@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Thu, 13 Aug 2015 13:20:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286720 - head/sys/dev/md X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 13:20:30 -0000 Author: ae Date: Thu Aug 13 13:20:29 2015 New Revision: 286720 URL: https://svnweb.freebsd.org/changeset/base/286720 Log: Use g_conf_printf_escaped() to escape illegal symbols in file name. PR: 202289 MFC after: 1 week Modified: head/sys/dev/md/md.c Modified: head/sys/dev/md/md.c ============================================================================== --- head/sys/dev/md/md.c Thu Aug 13 13:19:56 2015 (r286719) +++ head/sys/dev/md/md.c Thu Aug 13 13:20:29 2015 (r286720) @@ -89,6 +89,7 @@ #include #include +#include #include #include @@ -1660,9 +1661,11 @@ g_md_dumpconf(struct sbuf *sb, const cha "read-only"); sbuf_printf(sb, "%s%s\n", indent, type); - if (mp->type == MD_VNODE && mp->vnode != NULL) - sbuf_printf(sb, "%s%s\n", - indent, mp->file); + if (mp->type == MD_VNODE && mp->vnode != NULL) { + sbuf_printf(sb, "%s", indent); + g_conf_printf_escaped(sb, "%s", mp->file); + sbuf_printf(sb, "\n"); + } } } } From owner-svn-src-head@freebsd.org Thu Aug 13 13:21:01 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3D4E39B7131; Thu, 13 Aug 2015 13:21:01 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1451DE86; Thu, 13 Aug 2015 13:21:01 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DDL02U035845; Thu, 13 Aug 2015 13:21:00 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DDL0eh035844; Thu, 13 Aug 2015 13:21:00 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508131321.t7DDL0eh035844@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Thu, 13 Aug 2015 13:21:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286721 - head/sys/arm64/arm64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 13:21:01 -0000 Author: emaste Date: Thu Aug 13 13:21:00 2015 New Revision: 286721 URL: https://svnweb.freebsd.org/changeset/base/286721 Log: arm64: turn unknown el0 exception into a SIGILL It seems we get EXCP_UNKNOWN from QEMU when executing zeroed memory. Print a register dump here and signal illegal instruction. Also print a register dump for other invalid exceptions, before panic. Reviewed by: andrew Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D3370 Modified: head/sys/arm64/arm64/trap.c Modified: head/sys/arm64/arm64/trap.c ============================================================================== --- head/sys/arm64/arm64/trap.c Thu Aug 13 13:20:29 2015 (r286720) +++ head/sys/arm64/arm64/trap.c Thu Aug 13 13:21:00 2015 (r286721) @@ -229,6 +229,21 @@ data_abort(struct trapframe *frame, uint userret(td, frame); } +static void +print_registers(struct trapframe *frame) +{ + u_int reg; + + for (reg = 0; reg < 31; reg++) { + printf(" %sx%d: %16lx\n", (reg < 10) ? " " : "", reg, + frame->tf_x[reg]); + } + printf(" sp: %16lx\n", frame->tf_sp); + printf(" lr: %16lx\n", frame->tf_lr); + printf(" elr: %16lx\n", frame->tf_elr); + printf("spsr: %16lx\n", frame->tf_spsr); +} + void do_el1h_sync(struct trapframe *frame) { @@ -265,6 +280,7 @@ do_el1h_sync(struct trapframe *frame) switch(exception) { case EXCP_FP_SIMD: case EXCP_TRAP_FP: + print_registers(frame); panic("VFP exception in the kernel"); case EXCP_DATA_ABORT: data_abort(frame, esr, 0); @@ -286,11 +302,30 @@ do_el1h_sync(struct trapframe *frame) #endif break; default: + print_registers(frame); panic("Unknown kernel exception %x esr_el1 %lx\n", exception, esr); } } +/* + * We get EXCP_UNKNOWN from QEMU when executing zeroed memory. For now turn + * this into a SIGILL. + */ +static void +el0_excp_unknown(struct trapframe *frame) +{ + struct thread *td; + uint64_t far; + + td = curthread; + far = READ_SPECIALREG(far_el1); + printf("el0 EXCP_UNKNOWN exception\n"); + print_registers(frame); + call_trapsignal(td, SIGILL, ILL_ILLTRP, (void *)far); + userret(td, frame); +} + void do_el0_sync(struct trapframe *frame) { @@ -332,7 +367,11 @@ do_el0_sync(struct trapframe *frame) case EXCP_DATA_ABORT: data_abort(frame, esr, 1); break; + case EXCP_UNKNOWN: + el0_excp_unknown(frame); + break; default: + print_registers(frame); panic("Unknown userland exception %x esr_el1 %lx\n", exception, esr); } From owner-svn-src-head@freebsd.org Thu Aug 13 13:38:10 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D01659B7362; Thu, 13 Aug 2015 13:38:10 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C03F4A61; Thu, 13 Aug 2015 13:38:10 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DDcAfc042267; Thu, 13 Aug 2015 13:38:10 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DDcAQG042266; Thu, 13 Aug 2015 13:38:10 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201508131338.t7DDcAQG042266@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Thu, 13 Aug 2015 13:38:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286722 - head/sys/netinet X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 13:38:11 -0000 Author: melifaro Date: Thu Aug 13 13:38:09 2015 New Revision: 286722 URL: https://svnweb.freebsd.org/changeset/base/286722 Log: Move lle update code from from gigantic ip_arpinput() to separate bunch of functions. The goal is to isolate actual lle updates to permit more fine-grained locking. Do all lle link-level update under AFDATA wlock. Sponsored by: Yandex LLC Modified: head/sys/netinet/if_ether.c Modified: head/sys/netinet/if_ether.c ============================================================================== --- head/sys/netinet/if_ether.c Thu Aug 13 13:21:00 2015 (r286721) +++ head/sys/netinet/if_ether.c Thu Aug 13 13:38:09 2015 (r286722) @@ -130,6 +130,13 @@ static void arptimer(void *); static void in_arpinput(struct mbuf *); #endif +static void arp_check_update_lle(struct arphdr *ah, struct in_addr isaddr, + struct ifnet *ifp, int bridged, struct llentry *la); +static void arp_update_lle(struct arphdr *ah, struct ifnet *ifp, + struct llentry *la); +static void arp_mark_lle_reachable(struct llentry *la); + + static const struct netisr_handler arp_nh = { .nh_name = "arp", .nh_handler = arpintr, @@ -576,10 +583,10 @@ in_arpinput(struct mbuf *m) struct sockaddr sa; struct in_addr isaddr, itaddr, myaddr; u_int8_t *enaddr = NULL; - int op, flags; + int op; int req_len; int bridged = 0, is_bridge = 0; - int carped, create; + int carped; struct sockaddr_in sin; sin.sin_len = sizeof(struct sockaddr_in); sin.sin_family = AF_INET; @@ -708,6 +715,16 @@ match: "%s!\n", inet_ntoa(isaddr)); goto drop; } + + if (ifp->if_addrlen != ah->ar_hln) { + LLE_WUNLOCK(la); + ARP_LOG(LOG_WARNING, "from %*D: addr len: new %d, " + "i/f %d (ignored)\n", ifp->if_addrlen, + (u_char *) ar_sha(ah), ":", ah->ar_hln, + ifp->if_addrlen); + goto drop; + } + /* * Warn if another host is using the same IP address, but only if the * IP address isn't 0.0.0.0, which is used for DHCP only, in which @@ -730,100 +747,22 @@ match: sin.sin_len = sizeof(struct sockaddr_in); sin.sin_family = AF_INET; sin.sin_addr = isaddr; - create = (itaddr.s_addr == myaddr.s_addr) ? 1 : 0; - flags = LLE_EXCLUSIVE; - IF_AFDATA_LOCK(ifp); - if (create != 0) - la = lla_create(LLTABLE(ifp), 0, (struct sockaddr *)&sin); - else - la = lla_lookup(LLTABLE(ifp), flags, (struct sockaddr *)&sin); - IF_AFDATA_UNLOCK(ifp); - if (la != NULL) { - /* the following is not an error when doing bridging */ - if (!bridged && la->lle_tbl->llt_ifp != ifp) { - if (log_arp_wrong_iface) - ARP_LOG(LOG_WARNING, "%s is on %s " - "but got reply from %*D on %s\n", - inet_ntoa(isaddr), - la->lle_tbl->llt_ifp->if_xname, - ifp->if_addrlen, (u_char *)ar_sha(ah), ":", - ifp->if_xname); - LLE_WUNLOCK(la); - goto reply; - } - if ((la->la_flags & LLE_VALID) && - bcmp(ar_sha(ah), &la->ll_addr, ifp->if_addrlen)) { - if (la->la_flags & LLE_STATIC) { - LLE_WUNLOCK(la); - if (log_arp_permanent_modify) - ARP_LOG(LOG_ERR, - "%*D attempts to modify " - "permanent entry for %s on %s\n", - ifp->if_addrlen, - (u_char *)ar_sha(ah), ":", - inet_ntoa(isaddr), ifp->if_xname); - goto reply; - } - if (log_arp_movements) { - ARP_LOG(LOG_INFO, "%s moved from %*D " - "to %*D on %s\n", - inet_ntoa(isaddr), - ifp->if_addrlen, - (u_char *)&la->ll_addr, ":", - ifp->if_addrlen, (u_char *)ar_sha(ah), ":", - ifp->if_xname); - } - } - - if (ifp->if_addrlen != ah->ar_hln) { - LLE_WUNLOCK(la); - ARP_LOG(LOG_WARNING, "from %*D: addr len: new %d, " - "i/f %d (ignored)\n", ifp->if_addrlen, - (u_char *) ar_sha(ah), ":", ah->ar_hln, - ifp->if_addrlen); - goto drop; - } - (void)memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen); - la->la_flags |= LLE_VALID; - - EVENTHANDLER_INVOKE(lle_event, la, LLENTRY_RESOLVED); - - if (!(la->la_flags & LLE_STATIC)) { - int canceled; - - LLE_ADDREF(la); - la->la_expire = time_uptime + V_arpt_keep; - canceled = callout_reset(&la->lle_timer, - hz * V_arpt_keep, arptimer, la); - if (canceled) - LLE_REMREF(la); - } - la->la_asked = 0; - la->la_preempt = V_arp_maxtries; + IF_AFDATA_RLOCK(ifp); + la = lla_lookup(LLTABLE(ifp), LLE_EXCLUSIVE, (struct sockaddr *)&sin); + IF_AFDATA_RUNLOCK(ifp); + if (la != NULL) + arp_check_update_lle(ah, isaddr, ifp, bridged, la); + else if (itaddr.s_addr == myaddr.s_addr) { /* - * The packets are all freed within the call to the output - * routine. - * - * NB: The lock MUST be released before the call to the - * output routine. + * Reply to our address, but no lle exists yet. + * do we really have to create an entry? */ - if (la->la_hold != NULL) { - struct mbuf *m_hold, *m_hold_next; - - m_hold = la->la_hold; - la->la_hold = NULL; - la->la_numheld = 0; - lltable_fill_sa_entry(la, (struct sockaddr *)&sa); - LLE_WUNLOCK(la); - for (; m_hold != NULL; m_hold = m_hold_next) { - m_hold_next = m_hold->m_nextpkt; - m_hold->m_nextpkt = NULL; - /* Avoid confusing lower layers. */ - m_clrprotoflags(m_hold); - (*ifp->if_output)(ifp, m_hold, &sa, NULL); - } - } else - LLE_WUNLOCK(la); + IF_AFDATA_WLOCK(ifp); + la = lla_create(LLTABLE(ifp), 0, (struct sockaddr *)&sin); + arp_update_lle(ah, ifp, la); + IF_AFDATA_WUNLOCK(ifp); + arp_mark_lle_reachable(la); + LLE_WUNLOCK(la); } reply: if (op != ARPOP_REQUEST) @@ -934,6 +873,140 @@ drop: } #endif +/* + * Checks received arp data against existing @la. + * Updates lle state/performs notification if necessary. + */ +static void +arp_check_update_lle(struct arphdr *ah, struct in_addr isaddr, struct ifnet *ifp, + int bridged, struct llentry *la) +{ + struct sockaddr sa; + struct mbuf *m_hold, *m_hold_next; + + LLE_WLOCK_ASSERT(la); + + /* the following is not an error when doing bridging */ + if (!bridged && la->lle_tbl->llt_ifp != ifp) { + if (log_arp_wrong_iface) + ARP_LOG(LOG_WARNING, "%s is on %s " + "but got reply from %*D on %s\n", + inet_ntoa(isaddr), + la->lle_tbl->llt_ifp->if_xname, + ifp->if_addrlen, (u_char *)ar_sha(ah), ":", + ifp->if_xname); + LLE_WUNLOCK(la); + return; + } + if ((la->la_flags & LLE_VALID) && + bcmp(ar_sha(ah), &la->ll_addr, ifp->if_addrlen)) { + if (la->la_flags & LLE_STATIC) { + LLE_WUNLOCK(la); + if (log_arp_permanent_modify) + ARP_LOG(LOG_ERR, + "%*D attempts to modify " + "permanent entry for %s on %s\n", + ifp->if_addrlen, + (u_char *)ar_sha(ah), ":", + inet_ntoa(isaddr), ifp->if_xname); + return; + } + if (log_arp_movements) { + ARP_LOG(LOG_INFO, "%s moved from %*D " + "to %*D on %s\n", + inet_ntoa(isaddr), + ifp->if_addrlen, + (u_char *)&la->ll_addr, ":", + ifp->if_addrlen, (u_char *)ar_sha(ah), ":", + ifp->if_xname); + } + } + + /* Check if something has changed */ + if (memcmp(&la->ll_addr, ar_sha(ah), ifp->if_addrlen) != 0 || + (la->la_flags & LLE_VALID) == 0) { + /* Perform real LLE update */ + /* use afdata WLOCK to update fields */ + LLE_ADDREF(la); + LLE_WUNLOCK(la); + IF_AFDATA_WLOCK(ifp); + LLE_WLOCK(la); + + /* + * Since we droppped LLE lock, other thread might have deleted + * this lle. Check and return + */ + if ((la->la_flags & LLE_DELETED) != 0) { + IF_AFDATA_WUNLOCK(ifp); + LLE_FREE_LOCKED(la); + return; + } + + /* Update data */ + arp_update_lle(ah, ifp, la); + + IF_AFDATA_WUNLOCK(ifp); + LLE_REMREF(la); + } + + arp_mark_lle_reachable(la); + + /* + * The packets are all freed within the call to the output + * routine. + * + * NB: The lock MUST be released before the call to the + * output routine. + */ + if (la->la_hold != NULL) { + m_hold = la->la_hold; + la->la_hold = NULL; + la->la_numheld = 0; + lltable_fill_sa_entry(la, &sa); + LLE_WUNLOCK(la); + for (; m_hold != NULL; m_hold = m_hold_next) { + m_hold_next = m_hold->m_nextpkt; + m_hold->m_nextpkt = NULL; + /* Avoid confusing lower layers. */ + m_clrprotoflags(m_hold); + (*ifp->if_output)(ifp, m_hold, &sa, NULL); + } + } else + LLE_WUNLOCK(la); +} + +/* + * Updates @la fields used by fast path code. + */ +static void +arp_update_lle(struct arphdr *ah, struct ifnet *ifp, struct llentry *la) +{ + + memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen); + la->la_flags |= LLE_VALID; +} + +static void +arp_mark_lle_reachable(struct llentry *la) +{ + int canceled; + + LLE_WLOCK_ASSERT(la); + + EVENTHANDLER_INVOKE(lle_event, la, LLENTRY_RESOLVED); + + if (!(la->la_flags & LLE_STATIC)) { + LLE_ADDREF(la); + la->la_expire = time_uptime + V_arpt_keep; + canceled = callout_reset(&la->lle_timer, + hz * V_arpt_keep, arptimer, la); + if (canceled) + LLE_REMREF(la); + } + la->la_asked = 0; + la->la_preempt = V_arp_maxtries; +} + void arp_ifinit(struct ifnet *ifp, struct ifaddr *ifa) { From owner-svn-src-head@freebsd.org Thu Aug 13 14:43:13 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 092A49A0201; Thu, 13 Aug 2015 14:43:13 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D460EF28; Thu, 13 Aug 2015 14:43:12 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DEhCZZ070750; Thu, 13 Aug 2015 14:43:12 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DEhCJL070748; Thu, 13 Aug 2015 14:43:12 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508131443.t7DEhCJL070748@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Thu, 13 Aug 2015 14:43:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286723 - head/sys/dev/vt/hw/vga X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 14:43:13 -0000 Author: marcel Date: Thu Aug 13 14:43:11 2015 New Revision: 286723 URL: https://svnweb.freebsd.org/changeset/base/286723 Log: Fix text mode operation. We first map 64KB at 0xA0000 and then determine whether to work in text or graphics mode. When graphics mode, the mapping is precisely what we need and everything is fine. But text mode, has the frame buffer relocated to 0xB8000. We didn't map that much to safely add 0x18000 bytes to the base address. Now we first check whether to work in text or graphics mode and then map the frame buffer at the right address and with the right size (0xA0000+64KB for graphics, 0xB8000+32KB for text). PR: 202276 Tested by: ed@ Modified: head/sys/dev/vt/hw/vga/vt_vga.c head/sys/dev/vt/hw/vga/vt_vga_reg.h Modified: head/sys/dev/vt/hw/vga/vt_vga.c ============================================================================== --- head/sys/dev/vt/hw/vga/vt_vga.c Thu Aug 13 13:38:09 2015 (r286722) +++ head/sys/dev/vt/hw/vga/vt_vga.c Thu Aug 13 14:43:11 2015 (r286723) @@ -883,9 +883,9 @@ vga_bitblt_text_txtmode(struct vt_device /* Convert colors to VGA attributes. */ attr = bg << 4 | fg; - MEM_WRITE1(sc, 0x18000 + (row * 80 + col) * 2 + 0, + MEM_WRITE1(sc, (row * 80 + col) * 2 + 0, ch); - MEM_WRITE1(sc, 0x18000 + (row * 80 + col) * 2 + 1, + MEM_WRITE1(sc, (row * 80 + col) * 2 + 1, attr); } } @@ -1226,8 +1226,6 @@ vga_init(struct vt_device *vd) # error "Architecture not yet supported!" #endif - bus_space_map(sc->vga_fb_tag, VGA_MEM_BASE, VGA_MEM_SIZE, 0, - &sc->vga_fb_handle); bus_space_map(sc->vga_reg_tag, VGA_REG_BASE, VGA_REG_SIZE, 0, &sc->vga_reg_handle); @@ -1236,9 +1234,13 @@ vga_init(struct vt_device *vd) vd->vd_flags |= VDF_TEXTMODE; vd->vd_width = 80; vd->vd_height = 25; + bus_space_map(sc->vga_fb_tag, VGA_TXT_BASE, VGA_TXT_SIZE, 0, + &sc->vga_fb_handle); } else { vd->vd_width = VT_VGA_WIDTH; vd->vd_height = VT_VGA_HEIGHT; + bus_space_map(sc->vga_fb_tag, VGA_MEM_BASE, VGA_MEM_SIZE, 0, + &sc->vga_fb_handle); } if (vga_initialize(vd, textmode) != 0) return (CN_DEAD); Modified: head/sys/dev/vt/hw/vga/vt_vga_reg.h ============================================================================== --- head/sys/dev/vt/hw/vga/vt_vga_reg.h Thu Aug 13 13:38:09 2015 (r286722) +++ head/sys/dev/vt/hw/vga/vt_vga_reg.h Thu Aug 13 14:43:11 2015 (r286723) @@ -49,6 +49,8 @@ #define VGA_MEM_BASE 0xA0000 #define VGA_MEM_SIZE 0x10000 +#define VGA_TXT_BASE 0xB8000 +#define VGA_TXT_SIZE 0x08000 #define VGA_REG_BASE 0x3c0 #define VGA_REG_SIZE 0x10+0x0c From owner-svn-src-head@freebsd.org Thu Aug 13 14:43:27 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1349F9A0246; Thu, 13 Aug 2015 14:43:27 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 04B88117; Thu, 13 Aug 2015 14:43:27 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DEhQqJ070819; Thu, 13 Aug 2015 14:43:26 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DEhQGs070817; Thu, 13 Aug 2015 14:43:26 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508131443.t7DEhQGs070817@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Thu, 13 Aug 2015 14:43:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286724 - head/sys/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 14:43:27 -0000 Author: ian Date: Thu Aug 13 14:43:25 2015 New Revision: 286724 URL: https://svnweb.freebsd.org/changeset/base/286724 Log: Constify the pointers to eventtimer and timecounter name strings. The need for this appears as soon as you try to set the names to something that isn't a "quoted literal". (I'm actually confused why quoted strings aren't a problem as well, we must have some warning disabled.) Modified: head/sys/sys/timeet.h head/sys/sys/timetc.h Modified: head/sys/sys/timeet.h ============================================================================== --- head/sys/sys/timeet.h Thu Aug 13 14:43:11 2015 (r286723) +++ head/sys/sys/timeet.h Thu Aug 13 14:43:25 2015 (r286724) @@ -53,7 +53,7 @@ typedef int et_deregister_cb_t(struct ev struct eventtimer { SLIST_ENTRY(eventtimer) et_all; /* Pointer to the next event timer. */ - char *et_name; + const char *et_name; /* Name of the event timer. */ int et_flags; /* Set of capabilities flags: */ Modified: head/sys/sys/timetc.h ============================================================================== --- head/sys/sys/timetc.h Thu Aug 13 14:43:11 2015 (r286723) +++ head/sys/sys/timetc.h Thu Aug 13 14:43:25 2015 (r286724) @@ -49,7 +49,7 @@ struct timecounter { /* This mask should mask off any unimplemented bits. */ uint64_t tc_frequency; /* Frequency of the counter in Hz. */ - char *tc_name; + const char *tc_name; /* Name of the timecounter. */ int tc_quality; /* From owner-svn-src-head@freebsd.org Thu Aug 13 14:50:12 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9CF309A0378; Thu, 13 Aug 2015 14:50:12 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 743F681C; Thu, 13 Aug 2015 14:50:12 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DEoC39071272; Thu, 13 Aug 2015 14:50:12 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DEoBx6071268; Thu, 13 Aug 2015 14:50:11 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508131450.t7DEoBx6071268@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Thu, 13 Aug 2015 14:50:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286725 - in head/sys/arm: arm include X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 14:50:12 -0000 Author: marcel Date: Thu Aug 13 14:50:11 2015 New Revision: 286725 URL: https://svnweb.freebsd.org/changeset/base/286725 Log: The Broadcom BCM56060 chip has a Cortex-A9R4 core. Submitted by: Steve Kiernan Reviewed by: imp@ Differential Revision: https://reviews.freebsd.org/D3357 Modified: head/sys/arm/arm/cpufunc.c head/sys/arm/arm/identcpu.c head/sys/arm/include/armreg.h Modified: head/sys/arm/arm/cpufunc.c ============================================================================== --- head/sys/arm/arm/cpufunc.c Thu Aug 13 14:43:25 2015 (r286724) +++ head/sys/arm/arm/cpufunc.c Thu Aug 13 14:50:11 2015 (r286725) @@ -904,6 +904,7 @@ set_cpufuncs() cputype == CPU_ID_CORTEXA9R1 || cputype == CPU_ID_CORTEXA9R2 || cputype == CPU_ID_CORTEXA9R3 || + cputype == CPU_ID_CORTEXA9R4 || cputype == CPU_ID_CORTEXA12R0 || cputype == CPU_ID_CORTEXA15R0 || cputype == CPU_ID_CORTEXA15R1 || Modified: head/sys/arm/arm/identcpu.c ============================================================================== --- head/sys/arm/arm/identcpu.c Thu Aug 13 14:43:25 2015 (r286724) +++ head/sys/arm/arm/identcpu.c Thu Aug 13 14:50:11 2015 (r286725) @@ -185,6 +185,8 @@ const struct cpuidtab cpuids[] = { generic_steppings }, { CPU_ID_CORTEXA9R3, CPU_CLASS_CORTEXA, "Cortex A9-r3", generic_steppings }, + { CPU_ID_CORTEXA9R4, CPU_CLASS_CORTEXA, "Cortex A9-r4", + generic_steppings }, { CPU_ID_CORTEXA12R0, CPU_CLASS_CORTEXA, "Cortex A12-r0", generic_steppings }, { CPU_ID_CORTEXA15R0, CPU_CLASS_CORTEXA, "Cortex A15-r0", Modified: head/sys/arm/include/armreg.h ============================================================================== --- head/sys/arm/include/armreg.h Thu Aug 13 14:43:25 2015 (r286724) +++ head/sys/arm/include/armreg.h Thu Aug 13 14:50:11 2015 (r286725) @@ -133,6 +133,7 @@ #define CPU_ID_CORTEXA9R1 0x411fc090 #define CPU_ID_CORTEXA9R2 0x412fc090 #define CPU_ID_CORTEXA9R3 0x413fc090 +#define CPU_ID_CORTEXA9R4 0x414fc090 #define CPU_ID_CORTEXA12R0 0x410fc0d0 #define CPU_ID_CORTEXA15R0 0x410fc0f0 #define CPU_ID_CORTEXA15R1 0x411fc0f0 From owner-svn-src-head@freebsd.org Thu Aug 13 14:53:30 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C49D29A04D5; Thu, 13 Aug 2015 14:53:30 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B57CABF5; Thu, 13 Aug 2015 14:53:30 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DErUj4075061; Thu, 13 Aug 2015 14:53:30 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DErU8a075060; Thu, 13 Aug 2015 14:53:30 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508131453.t7DErU8a075060@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Thu, 13 Aug 2015 14:53:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286726 - head/sys/arm/arm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 14:53:30 -0000 Author: marcel Date: Thu Aug 13 14:53:29 2015 New Revision: 286726 URL: https://svnweb.freebsd.org/changeset/base/286726 Log: Instead of having separate do_sync functions for ARM_ARCH 6 vs. ARM_ARCH >= 7, use the dmb() macro defined in machine/atomic.h Submitted by: Steve Kiernan Reviewed by: imp@ Differential Revision: https://reviews.freebsd.org/D3355 Modified: head/sys/arm/arm/stdatomic.c Modified: head/sys/arm/arm/stdatomic.c ============================================================================== --- head/sys/arm/arm/stdatomic.c Thu Aug 13 14:50:11 2015 (r286725) +++ head/sys/arm/arm/stdatomic.c Thu Aug 13 14:53:29 2015 (r286726) @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -67,19 +68,12 @@ do_sync(void) __asm volatile ("" : : : "memory"); } -#elif __ARM_ARCH >= 7 -static inline void -do_sync(void) -{ - - __asm volatile ("dmb" : : : "memory"); -} #elif __ARM_ARCH >= 6 static inline void do_sync(void) { - __asm volatile ("mcr p15, 0, %0, c7, c10, 5" : : "r" (0) : "memory"); + dmb(); } #endif From owner-svn-src-head@freebsd.org Thu Aug 13 15:16:35 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CAA529A0866; Thu, 13 Aug 2015 15:16:35 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BAC37A1B; Thu, 13 Aug 2015 15:16:35 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DFGZaO084849; Thu, 13 Aug 2015 15:16:35 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DFGYVS084845; Thu, 13 Aug 2015 15:16:34 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508131516.t7DFGYVS084845@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Thu, 13 Aug 2015 15:16:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286727 - in head/sys: conf dev/md X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 15:16:35 -0000 Author: marcel Date: Thu Aug 13 15:16:34 2015 New Revision: 286727 URL: https://svnweb.freebsd.org/changeset/base/286727 Log: Change md(4) to use weak symbols as start, end and size for the embedded root disk. The embedded image is linked into the kernel in the .mfs section. Add rules and variables to kern.pre.mk and kern.post.mk that handle the linking of the image. First objcopy is used to generate an object file. Then, the object file is linked into the kernel. Submitted by: Steve Kiernan Reviewed by: brooks@ Obtained from: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D2903 Modified: head/sys/conf/Makefile.arm head/sys/conf/kern.post.mk head/sys/conf/kern.pre.mk head/sys/dev/md/md.c Modified: head/sys/conf/Makefile.arm ============================================================================== --- head/sys/conf/Makefile.arm Thu Aug 13 14:53:29 2015 (r286726) +++ head/sys/conf/Makefile.arm Thu Aug 13 15:16:34 2015 (r286727) @@ -66,10 +66,6 @@ SYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADE ${KERNEL_KO}.bin; \ rm ${FULLKERNEL}.noheader -.if defined(MFS_IMAGE) -SYSTEM_LD_TAIL += ;sh ${S}/tools/embed_mfs.sh ${KERNEL_KO}.bin ${MFS_IMAGE}; -.endif - FILES_CPU_FUNC = \ $S/$M/$M/cpufunc_asm_arm9.S \ $S/$M/$M/cpufunc_asm_arm10.S \ Modified: head/sys/conf/kern.post.mk ============================================================================== --- head/sys/conf/kern.post.mk Thu Aug 13 14:53:29 2015 (r286726) +++ head/sys/conf/kern.post.mk Thu Aug 13 15:16:34 2015 (r286727) @@ -121,7 +121,7 @@ gdbinit: .endif .endif -${FULLKERNEL}: ${SYSTEM_DEP} vers.o ${MFS_IMAGE} +${FULLKERNEL}: ${SYSTEM_DEP} vers.o @rm -f ${.TARGET} @echo linking ${.TARGET} ${SYSTEM_LD} @@ -133,9 +133,6 @@ ${FULLKERNEL}: ${SYSTEM_DEP} vers.o ${MF ${OBJCOPY} --strip-debug ${.TARGET} .endif ${SYSTEM_LD_TAIL} -.if defined(MFS_IMAGE) - sh ${S}/tools/embed_mfs.sh ${FULLKERNEL} ${MFS_IMAGE} -.endif .if !exists(${.OBJDIR}/.depend) ${SYSTEM_OBJS}: assym.s vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} @@ -301,6 +298,27 @@ vnode_if_newproto.h: vnode_if_typedef.h: ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -q +.if ${MFS_IMAGE:Uno} != "no" +# Generate an object file from the file system image to embed in the kernel +# via linking. Make sure the contents are in the mfs section and rename the +# start/end/size variables to __start_mfs, __stop_mfs, and mfs_size, +# respectively. +embedfs_${MFS_IMAGE:T:R}.o: ${MFS_IMAGE} + ${OBJCOPY} --input-target binary \ + --output-target ${EMBEDFS_FORMAT.${MACHINE_ARCH}} \ + --binary-architecture ${EMBEDFS_ARCH.${MACHINE_ARCH}} \ + ${MFS_IMAGE} ${.TARGET} + ${OBJCOPY} \ + --rename-section .data=mfs,contents,alloc,load,readonly,data \ + --redefine-sym \ + _binary_${MFS_IMAGE:C,[^[:alnum:]],_,g}_size=__mfs_root_size \ + --redefine-sym \ + _binary_${MFS_IMAGE:C,[^[:alnum:]],_,g}_start=mfs_root \ + --redefine-sym \ + _binary_${MFS_IMAGE:C,[^[:alnum:]],_,g}_end=mfs_root_end \ + ${.TARGET} +.endif + # XXX strictly, everything depends on Makefile because changes to ${PROF} # only appear there, but we don't handle that. Modified: head/sys/conf/kern.pre.mk ============================================================================== --- head/sys/conf/kern.pre.mk Thu Aug 13 14:53:29 2015 (r286726) +++ head/sys/conf/kern.pre.mk Thu Aug 13 15:16:34 2015 (r286727) @@ -191,6 +191,9 @@ SYSTEM_DEP= Makefile ${SYSTEM_OBJS} SYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS} SYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o} SYSTEM_OBJS+= hack.So +.if ${MFS_IMAGE:Uno} != "no" +SYSTEM_OBJS+= embedfs_${MFS_IMAGE:T:R}.o +.endif SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} ${_LDFLAGS} --no-warn-mismatch \ --warn-common --export-dynamic --dynamic-linker /red/herring \ -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o @@ -222,6 +225,32 @@ MKMODULESENV+= DEBUG_FLAGS="${DEBUG}" .endif MKMODULESENV+= _MPATH="${_MPATH}" +# Architecture and output format arguments for objdump to convert image to +# object file +.if ${MFS_IMAGE:Uno} != "no" + +.if !defined(EMBEDFS_FORMAT.${MACHINE_ARCH}) +EMBEDFS_FORMAT.${MACHINE_ARCH}!= awk -F'"' '/OUTPUT_FORMAT/ {print $$2}' ${LDSCRIPT} +.if empty(EMBEDFS_FORMAT.${MACHINE_ARCH}) +.undef EMBEDFS_FORMAT.${MACHINE_ARCH} +.endif +.endif + +.if !defined(EMBEDFS_ARCH.${MACHINE_ARCH}) +EMBEDFS_ARCH.${MACHINE_ARCH}!= sed -n '/OUTPUT_ARCH/s/.*(\(.*\)).*/\1/p' ${LDSCRIPT} +.if empty(EMBEDFS_ARCH.${MACHINE_ARCH}) +.undef EMBEDFS_ARCH.${MACHINE_ARCH} +.endif +.endif + +EMBEDFS_FORMAT.arm?= elf32-littlearm +EMBEDFS_FORMAT.armv6?= elf32-littlearm +EMBEDFS_FORMAT.mips?= elf32-tradbigmips +EMBEDFS_FORMAT.mipsel?= elf32-tradlittlemips +EMBEDFS_FORMAT.mips64?= elf64-tradbigmips +EMBEDFS_FORMAT.mips64el?= elf64-tradlittlemips +.endif + # Detect kernel config options that force stack frames to be turned on. DDB_ENABLED!= grep DDB opt_ddb.h || true ; echo DTR_ENABLED!= grep KDTRACE_FRAME opt_kdtrace.h || true ; echo Modified: head/sys/dev/md/md.c ============================================================================== --- head/sys/dev/md/md.c Thu Aug 13 14:53:29 2015 (r286726) +++ head/sys/dev/md/md.c Thu Aug 13 15:16:34 2015 (r286727) @@ -122,9 +122,12 @@ SYSCTL_INT(_vm, OID_AUTO, md_malloc_wait #define MD_ROOT_FSTYPE "ufs" #endif -#if defined(MD_ROOT) && defined(MD_ROOT_SIZE) +#if defined(MD_ROOT) /* * Preloaded image gets put here. + */ +#if defined(MD_ROOT_SIZE) +/* * Applications that patch the object with the image can determine * the size looking at the start and end markers (strings), * so we want them contiguous. @@ -136,6 +139,14 @@ static struct { .start = "MFS Filesystem goes here", .end = "MFS Filesystem had better STOP here", }; +const int mfs_root_size = sizeof(mfs_root.start); +#else +extern volatile u_char __weak_symbol mfs_root; +extern volatile u_char __weak_symbol mfs_root_end; +__GLOBL(mfs_root); +__GLOBL(mfs_root_end); +#define mfs_root_size ((uintptr_t)(&mfs_root_end - &mfs_root)) +#endif #endif static g_init_t g_md_init; @@ -1553,6 +1564,9 @@ md_preloaded(u_char *image, size_t lengt if (name != NULL) { printf("%s%d: Preloaded image <%s> %zd bytes at %p\n", MD_NAME, sc->unit, name, length, image); + } else { + printf("%s%d: Embedded image %zd bytes as %p\n", + MD_NAME, sc->unit, length, image); } } @@ -1572,10 +1586,13 @@ g_md_init(struct g_class *mp __unused) sx_init(&md_sx, "MD config lock"); g_topology_unlock(); md_uh = new_unrhdr(0, INT_MAX, NULL); -#ifdef MD_ROOT_SIZE - sx_xlock(&md_sx); - md_preloaded(mfs_root.start, sizeof(mfs_root.start), NULL); - sx_xunlock(&md_sx); +#ifdef MD_ROOT + if (mfs_root_size != 0) { + sx_xlock(&md_sx); + md_preloaded(__DEVOLATILE(u_char *, &mfs_root), mfs_root_size, + NULL); + sx_xunlock(&md_sx); + } #endif /* XXX: are preload_* static or do they need Giant ? */ while ((mod = preload_search_next_name(mod)) != NULL) { From owner-svn-src-head@freebsd.org Thu Aug 13 15:19:32 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2E8F19A08FC; Thu, 13 Aug 2015 15:19:32 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1D30CBF2; Thu, 13 Aug 2015 15:19:32 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DFJW16085012; Thu, 13 Aug 2015 15:19:32 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DFJU7T085005; Thu, 13 Aug 2015 15:19:30 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508131519.t7DFJU7T085005@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Thu, 13 Aug 2015 15:19:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286728 - in head: share/man/man4/man4.arm sys/arm/conf sys/arm/ti/am335x sys/modules/am335x_dmtpps X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 15:19:32 -0000 Author: ian Date: Thu Aug 13 15:19:30 2015 New Revision: 286728 URL: https://svnweb.freebsd.org/changeset/base/286728 Log: Add a new PPS driver for AM335x (beaglebone) timer hardware. This can be used as a module or compiled-in. Added: head/share/man/man4/man4.arm/am335x_dmtpps.4 (contents, props changed) head/sys/arm/ti/am335x/am335x_dmtpps.c (contents, props changed) head/sys/modules/am335x_dmtpps/ head/sys/modules/am335x_dmtpps/Makefile (contents, props changed) Modified: head/sys/arm/conf/BEAGLEBONE head/sys/arm/ti/am335x/files.am335x Added: head/share/man/man4/man4.arm/am335x_dmtpps.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/man4.arm/am335x_dmtpps.4 Thu Aug 13 15:19:30 2015 (r286728) @@ -0,0 +1,163 @@ +.\" +.\" Copyright (c) 2015 Ian Lepore +.\" 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 ``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 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$ +.\" +.Dd August 12, 2015 +.Dt AM335X_DMTPPS 4 +.Os +.Sh NAME +.Nm am335x_dmtpps +.Nd RFC 2783 Pulse Per Second API driver for AM335x systems +.Sh SYNOPSIS +.Cd "device am335x_dmtpps" +.Pp +Optional in +.Pa /boot/loader.conf : +.Cd hw.am335x_dmtpps.input="pin name" +.\" +.Sh DESCRIPTION +The +.Nm +device driver provides a system time counter that includes precise +capture of Pulse Per Second (PPS) signals emitted by GPS receivers +and other timing devices. +The +.Nm +driver may be compiled into the kernel or loaded as a module. +.Pp +The AM335x timer hardware captures the value of the system time counter +on the leading edge of the PPS pulse. +Because the capture is done by the hardware there is no interrupt +latency in the measurement. +The time counter runs at 24Mhz, providing a measurement resolution +of 42 nanoseconds. +.Pp +To use the PPS timing information provided by this driver with +.Xr ntpd 8 , +symlink the +.Va /dev/dmtpps +device to +.Va /dev/pps0 +and configure server +.Va 127.127.22.0 +in +.Xr ntp.conf 5 +to configure a type 22 (ATOM) refclock. +.\" +.Sh DRIVER CONFIGURATION +The AM335x hardware provides four timer devices with a capture input +pin, DMTimer4 through DMTimer7. +Because it also provides the active system time counter, +only one instance of the +.Nm +driver can be active at a time. +The driver uses system pin configuration to determine which hardware +timer device to use. +Configure the timer input pin in the system's FDT data, or by +supplying the pin name using a tunable variable in +.Xr loader.conf 5 . +.Pp +To use a standard kernel and FDT data, use +.Xr loader.conf 5 +to load the +.Nm +module and set the +.Va hw.am335x_dmtpps.input +tunable variable to the name of the input pin, one of the following: +.Pp +.Bl -tag -width "GPMC_ADVn_ALE MMMM" -offset MMMM -compact +.It Em Name +.Em Hardware +.It P8-7 +DMTimer4; Beaglebone P8 header pin 7. +.It P8-8 +DMTimer7; Beaglebone P8 header pin 8. +.It P8-9 +DMTimer5; Beaglebone P8 header pin 9. +.It P8-10 +DMTimer6; Beaglebone P8 header pin 10. +.It GPMC_ADVn_ALE +DMTimer4. +.It GPMC_BEn0_CLE +DMTimer5. +.It GPMC_WEn +DMTimer6. +.It GPMC_OEn_REn +DMTimer7. +.El +.Pp +To configure the +.Nm +driver using FDT data, create a new pinctrl node by referencing the standard +.Va am33xx_pinmux +driver node (which is defined in am33xx.dtsi) in your dts file. +For example: +.Bd -literal + &am33xx_pinmux { + timer4_pins: timer4_pins { + pinctrl-single,pins = <0x90 (PIN_INPUT | MUX_MODE2)>; + }; + }; +.Ed +.Pp +Add pinctrl properties referencing +.Va timer4_pins +to the standard +.Va timer4 +device node (also defined in am33xx.dtsi) by referencing it in +your dts file as follows: +.Bd -literal + &timer4 { + pinctrl-names = "default"; + pinctrl-0 = <&timer4_pins>; + }; +.Ed +.\" +.Sh FILES +.Bl -tag -width ".Pa /dev/dmtpps" -compact +.It Pa /dev/dmtpps +The device providing +.Xr ioctl 2 +access to the RFC 2783 API. +.El +.\" +.Sh SEE ALSO +.Xr timecounters 4 , +.Xr loader.conf 5 , +.Xr ntp.conf 5 , +.Xr ntpd 8 +.\" +.Sh HISTORY +The +.Nm +device driver first appeared in +.Fx 11.0 . +.\" +.Sh AUTHORS +The +.Nm +device driver and this manual page were written by +.An Ian Lepore Aq Mt ian@freebsd.org . Modified: head/sys/arm/conf/BEAGLEBONE ============================================================================== --- head/sys/arm/conf/BEAGLEBONE Thu Aug 13 15:16:34 2015 (r286727) +++ head/sys/arm/conf/BEAGLEBONE Thu Aug 13 15:19:30 2015 (r286728) @@ -26,7 +26,7 @@ ident BEAGLEBONE include "std.armv6" include "../ti/am335x/std.am335x" -makeoptions MODULES_EXTRA="dtb/am335x" +makeoptions MODULES_EXTRA="dtb/am335x am335x_dmtpps" # DTrace support options KDTRACE_HOOKS # Kernel DTrace hooks @@ -77,6 +77,7 @@ device ti_i2c device am335x_pmic # AM335x Power Management IC (TPC65217) device am335x_rtc # RTC support (power management only) +#define am335x_dmtpps # Pulse Per Second capture driver # Console and misc device uart Added: head/sys/arm/ti/am335x/am335x_dmtpps.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/ti/am335x/am335x_dmtpps.c Thu Aug 13 15:19:30 2015 (r286728) @@ -0,0 +1,549 @@ +/*- + * Copyright (c) 2015 Ian lepore + * 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. + */ + +/* + * AM335x PPS driver using DMTimer capture. + * + * Note that this PPS driver does not use an interrupt. Instead it uses the + * hardware's ability to latch the timer's count register in response to a + * signal on an IO pin. Each of timers 4-7 have an associated pin, and this + * code allows any one of those to be used. + * + * The timecounter routines in kern_tc.c call the pps poll routine periodically + * to see if a new counter value has been latched. When a new value has been + * latched, the only processing done in the poll routine is to capture the + * current set of timecounter timehands (done with pps_capture()) and the + * latched value from the timer. The remaining work (done by pps_event() while + * holding a mutex) is scheduled to be done later in a non-interrupt context. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include "am335x_dmtreg.h" + +#define PPS_CDEV_NAME "dmtpps" + +struct dmtpps_softc { + device_t dev; + int mem_rid; + struct resource * mem_res; + int tmr_num; /* N from hwmod str "timerN" */ + char tmr_name[12]; /* "DMTimerN" */ + uint32_t tclr; /* Cached TCLR register. */ + struct timecounter tc; + int pps_curmode; /* Edge mode now set in hw. */ + struct task pps_task; /* For pps_event handling. */ + struct cdev * pps_cdev; + struct pps_state pps_state; + struct mtx pps_mtx; +}; + +static int dmtpps_tmr_num; /* Set by probe() */ + +/* List of compatible strings for FDT tree */ +static struct ofw_compat_data compat_data[] = { + {"ti,am335x-timer", 1}, + {"ti,am335x-timer-1ms", 1}, + {NULL, 0}, +}; + +/* + * A table relating pad names to the hardware timer number they can be mux'd to. + */ +struct padinfo { + char * ballname; + int tmr_num; +}; +static struct padinfo dmtpps_padinfo[] = { + {"GPMC_ADVn_ALE", 4}, + {"I2C0_SDA", 4}, + {"MII1_TX_EN", 4}, + {"XDMA_EVENT_INTR0", 4}, + {"GPMC_BEn0_CLE", 5}, + {"MDC", 5}, + {"MMC0_DAT3", 5}, + {"UART1_RTSn", 5}, + {"GPMC_WEn", 6}, + {"MDIO", 6}, + {"MMC0_DAT2", 6}, + {"UART1_CTSn", 6}, + {"GPMC_OEn_REn", 7}, + {"I2C0_SCL", 7}, + {"UART0_CTSn", 7}, + {"XDMA_EVENT_INTR1", 7}, + {NULL, 0} +}; + +/* + * This is either brilliantly user-friendly, or utterly lame... + * + * The am335x chip is used on the popular Beaglebone boards. Those boards have + * pins for all four capture-capable timers available on the P8 header. Allow + * users to configure the input pin by giving the name of the header pin. + */ +struct nicknames { + const char * nick; + const char * name; +}; +static struct nicknames dmtpps_pin_nicks[] = { + {"P8-7", "GPMC_ADVn_ALE"}, + {"P8-9", "GPMC_BEn0_CLE"}, + {"P8-10", "GPMC_WEn"}, + {"P8-8", "GPMC_OEn_REn",}, + {NULL, NULL} +}; + +#define DMTIMER_READ4(sc, reg) bus_read_4((sc)->mem_res, (reg)) +#define DMTIMER_WRITE4(sc, reg, val) bus_write_4((sc)->mem_res, (reg), (val)) + +/* + * Translate a short friendly case-insensitive name to its canonical name. + */ +static const char * +dmtpps_translate_nickname(const char *nick) +{ + struct nicknames *nn; + + for (nn = dmtpps_pin_nicks; nn->nick != NULL; nn++) + if (strcasecmp(nick, nn->nick) == 0) + return nn->name; + return (nick); +} + +/* + * See if our tunable is set to the name of the input pin. If not, that's NOT + * an error, return 0. If so, try to configure that pin as a timer capture + * input pin, and if that works, then we have our timer unit number and if it + * fails that IS an error, return -1. + */ +static int +dmtpps_find_tmr_num_by_tunable() +{ + struct padinfo *pi; + char iname[20]; + char muxmode[12]; + const char * ballname; + int err; + + if (!TUNABLE_STR_FETCH("hw.am335x_dmtpps.input", iname, sizeof(iname))) + return (0); + ballname = dmtpps_translate_nickname(iname); + for (pi = dmtpps_padinfo; pi->ballname != NULL; pi++) { + if (strcmp(ballname, pi->ballname) != 0) + continue; + snprintf(muxmode, sizeof(muxmode), "timer%d", pi->tmr_num); + err = ti_pinmux_padconf_set(pi->ballname, muxmode, + PADCONF_INPUT); + if (err != 0) { + printf("am335x_dmtpps: unable to configure capture pin " + "for %s to input mode\n", muxmode); + return (-1); + } else if (bootverbose) { + printf("am335x_dmtpps: configured pin %s as input " + "for %s\n", iname, muxmode); + } + return (pi->tmr_num); + } + + /* Invalid name in the tunable, that's an error. */ + printf("am335x_dmtpps: unknown pin name '%s'\n", iname); + return (-1); +} + +/* + * Ask the pinmux driver whether any pin has been configured as a TIMER4..TIMER7 + * input pin. If so, return the timer number, if not return 0. + */ +static int +dmtpps_find_tmr_num_by_padconf() +{ + int err; + unsigned int padstate; + const char * padmux; + struct padinfo *pi; + char muxmode[12]; + + for (pi = dmtpps_padinfo; pi->ballname != NULL; pi++) { + err = ti_pinmux_padconf_get(pi->ballname, &padmux, &padstate); + snprintf(muxmode, sizeof(muxmode), "timer%d", pi->tmr_num); + if (err == 0 && (padstate & RXACTIVE) != 0 && + strcmp(muxmode, padmux) == 0) + return (pi->tmr_num); + } + /* Nothing found, not an error. */ + return (0); +} + +/* + * Figure out which hardware timer number to use based on input pin + * configuration. This is done just once, the first time probe() runs. + */ +static int +dmtpps_find_tmr_num() +{ + int tmr_num; + + if ((tmr_num = dmtpps_find_tmr_num_by_tunable()) == 0) + tmr_num = dmtpps_find_tmr_num_by_padconf(); + + if (tmr_num <= 0) { + printf("am335x_dmtpps: PPS driver not enabled: unable to find " + "or configure a capture input pin\n"); + tmr_num = -1; /* Must return non-zero to prevent re-probing. */ + } + return (tmr_num); +} + +static void +dmtpps_set_hw_capture(struct dmtpps_softc *sc, bool force_off) +{ + int newmode; + + if (force_off) + newmode = 0; + else + newmode = sc->pps_state.ppsparam.mode & PPS_CAPTUREASSERT; + + if (newmode == sc->pps_curmode) + return; + sc->pps_curmode = newmode; + + if (newmode == PPS_CAPTUREASSERT) + sc->tclr |= DMT_TCLR_CAPTRAN_LOHI; + else + sc->tclr &= ~DMT_TCLR_CAPTRAN_MASK; + DMTIMER_WRITE4(sc, DMT_TCLR, sc->tclr); +} + +static unsigned +dmtpps_get_timecount(struct timecounter *tc) +{ + struct dmtpps_softc *sc; + + sc = tc->tc_priv; + + return (DMTIMER_READ4(sc, DMT_TCRR)); +} + +static void +dmtpps_poll(struct timecounter *tc) +{ + struct dmtpps_softc *sc; + + sc = tc->tc_priv; + + /* + * If a new value has been latched we've got a PPS event. Capture the + * timecounter data, then override the capcount field (pps_capture() + * populates it from the current DMT_TCRR register) with the latched + * value from the TCAR1 register. + * + * There is no locking here, by design. pps_capture() writes into an + * area of struct pps_state which is read only by pps_event(). The + * synchronization of access to that area is temporal rather than + * interlock based... we write in this routine and trigger the task that + * will read the data, so no simultaneous access can occur. + * + * Note that we don't have the TCAR interrupt enabled, but the hardware + * still provides the status bits in the "RAW" status register even when + * they're masked from generating an irq. However, when clearing the + * TCAR status to re-arm the capture for the next second, we have to + * write to the IRQ status register, not the RAW register. Quirky. + */ + if (DMTIMER_READ4(sc, DMT_IRQSTATUS_RAW) & DMT_IRQ_TCAR) { + pps_capture(&sc->pps_state); + sc->pps_state.capcount = DMTIMER_READ4(sc, DMT_TCAR1); + DMTIMER_WRITE4(sc, DMT_IRQSTATUS, DMT_IRQ_TCAR); + taskqueue_enqueue_fast(taskqueue_fast, &sc->pps_task); + } +} + +static void +dmtpps_event(void *arg, int pending) +{ + struct dmtpps_softc *sc; + + sc = arg; + + /* This is the task function that gets enqueued by poll_pps. Once the + * time has been captured by the timecounter polling code which runs in + * primary interrupt context, the remaining (more expensive) work to + * process the event is done later in a threaded context. + * + * Here there is an interlock that protects the event data in struct + * pps_state. That data can be accessed at any time from userland via + * ioctl() calls so we must ensure that there is no read access to + * partially updated data while pps_event() does its work. + */ + mtx_lock(&sc->pps_mtx); + pps_event(&sc->pps_state, PPS_CAPTUREASSERT); + mtx_unlock(&sc->pps_mtx); +} + +static int +dmtpps_open(struct cdev *dev, int flags, int fmt, + struct thread *td) +{ + struct dmtpps_softc *sc; + + sc = dev->si_drv1; + + /* + * Begin polling for pps and enable capture in the hardware whenever the + * device is open. Doing this stuff again is harmless if this isn't the + * first open. + */ + sc->tc.tc_poll_pps = dmtpps_poll; + dmtpps_set_hw_capture(sc, false); + + return 0; +} + +static int +dmtpps_close(struct cdev *dev, int flags, int fmt, + struct thread *td) +{ + struct dmtpps_softc *sc; + + sc = dev->si_drv1; + + /* + * Stop polling and disable capture on last close. Use the force-off + * flag to override the configured mode and turn off the hardware. + */ + sc->tc.tc_poll_pps = NULL; + dmtpps_set_hw_capture(sc, true); + + return 0; +} + +static int +dmtpps_ioctl(struct cdev *dev, u_long cmd, caddr_t data, + int flags, struct thread *td) +{ + struct dmtpps_softc *sc; + int err; + + sc = dev->si_drv1; + + /* Let the kernel do the heavy lifting for ioctl. */ + mtx_lock(&sc->pps_mtx); + err = pps_ioctl(cmd, data, &sc->pps_state); + mtx_unlock(&sc->pps_mtx); + if (err != 0) + return (err); + + /* + * The capture mode could have changed, set the hardware to whatever + * mode is now current. Effectively a no-op if nothing changed. + */ + dmtpps_set_hw_capture(sc, false); + + return (err); +} + +static struct cdevsw dmtpps_cdevsw = { + .d_version = D_VERSION, + .d_open = dmtpps_open, + .d_close = dmtpps_close, + .d_ioctl = dmtpps_ioctl, + .d_name = PPS_CDEV_NAME, +}; + +static int +dmtpps_probe(device_t dev) +{ + char strbuf[64]; + int tmr_num; + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + /* + * If we haven't chosen which hardware timer to use yet, go do that now. + * We need to know that to decide whether to return success for this + * hardware timer instance or not. + */ + if (dmtpps_tmr_num == 0) + dmtpps_tmr_num = dmtpps_find_tmr_num(); + + /* + * Figure out which hardware timer is being probed and see if it matches + * the configured timer number determined earlier. + */ + tmr_num = ti_hwmods_get_unit(dev, "timer"); + if (dmtpps_tmr_num != tmr_num) + return (ENXIO); + + snprintf(strbuf, sizeof(strbuf), "AM335x PPS-Capture DMTimer%d", + tmr_num); + device_set_desc_copy(dev, strbuf); + + return(BUS_PROBE_DEFAULT); +} + +static int +dmtpps_attach(device_t dev) +{ + struct dmtpps_softc *sc; + clk_ident_t timer_id; + int err, sysclk_freq; + + sc = device_get_softc(dev); + sc->dev = dev; + + /* Get the base clock frequency. */ + err = ti_prcm_clk_get_source_freq(SYS_CLK, &sysclk_freq); + + /* Enable clocks and power on the device. */ + if ((timer_id = ti_hwmods_get_clock(dev)) == INVALID_CLK_IDENT) + return (ENXIO); + if ((err = ti_prcm_clk_set_source(timer_id, SYSCLK_CLK)) != 0) + return (err); + if ((err = ti_prcm_clk_enable(timer_id)) != 0) + return (err); + + /* Request the memory resources. */ + sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, + &sc->mem_rid, RF_ACTIVE); + if (sc->mem_res == NULL) { + return (ENXIO); + } + + /* Figure out which hardware timer this is and set the name string. */ + sc->tmr_num = ti_hwmods_get_unit(dev, "timer"); + snprintf(sc->tmr_name, sizeof(sc->tmr_name), "DMTimer%d", sc->tmr_num); + + /* Set up timecounter hardware, start it. */ + DMTIMER_WRITE4(sc, DMT_TSICR, DMT_TSICR_RESET); + while (DMTIMER_READ4(sc, DMT_TIOCP_CFG) & DMT_TIOCP_RESET) + continue; + + sc->tclr |= DMT_TCLR_START | DMT_TCLR_AUTOLOAD; + DMTIMER_WRITE4(sc, DMT_TLDR, 0); + DMTIMER_WRITE4(sc, DMT_TCRR, 0); + DMTIMER_WRITE4(sc, DMT_TCLR, sc->tclr); + + /* Register the timecounter. */ + sc->tc.tc_name = sc->tmr_name; + sc->tc.tc_get_timecount = dmtpps_get_timecount; + sc->tc.tc_counter_mask = ~0u; + sc->tc.tc_frequency = sysclk_freq; + sc->tc.tc_quality = 1000; + sc->tc.tc_priv = sc; + + tc_init(&sc->tc); + + /* + * Indicate our PPS capabilities. Have the kernel init its part of the + * pps_state struct and add its capabilities. + * + * While the hardware has a mode to capture each edge, it's not clear we + * can use it that way, because there's only a single interrupt/status + * bit to say something was captured, but not which edge it was. For + * now, just say we can only capture assert events (the positive-going + * edge of the pulse). + */ + mtx_init(&sc->pps_mtx, "dmtpps", NULL, MTX_DEF); + sc->pps_state.ppscap = PPS_CAPTUREASSERT; + sc->pps_state.driver_abi = PPS_ABI_VERSION; + sc->pps_state.driver_mtx = &sc->pps_mtx; + pps_init_abi(&sc->pps_state); + + /* + * Init the task that does deferred pps_event() processing after + * the polling routine has captured a pps pulse time. + */ + TASK_INIT(&sc->pps_task, 0, dmtpps_event, sc); + + /* Create the PPS cdev. */ + sc->pps_cdev = make_dev(&dmtpps_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, + PPS_CDEV_NAME); + sc->pps_cdev->si_drv1 = sc; + + if (bootverbose) + device_printf(sc->dev, "Using %s for PPS device /dev/%s\n", + sc->tmr_name, PPS_CDEV_NAME); + + return (0); +} + +static int +dmtpps_detach(device_t dev) +{ + + /* + * There is no way to remove a timecounter once it has been registered, + * even if it's not in use, so we can never detach. If we were + * dynamically loaded as a module this will prevent unloading. + */ + return (EBUSY); +} + +static device_method_t dmtpps_methods[] = { + DEVMETHOD(device_probe, dmtpps_probe), + DEVMETHOD(device_attach, dmtpps_attach), + DEVMETHOD(device_detach, dmtpps_detach), + { 0, 0 } +}; + +static driver_t dmtpps_driver = { + "am335x_dmtpps", + dmtpps_methods, + sizeof(struct dmtpps_softc), +}; + +static devclass_t dmtpps_devclass; + +DRIVER_MODULE(am335x_dmtpps, simplebus, dmtpps_driver, dmtpps_devclass, 0, 0); +MODULE_DEPEND(am335x_dmtpps, am335x_prcm, 1, 1, 1); + Modified: head/sys/arm/ti/am335x/files.am335x ============================================================================== --- head/sys/arm/ti/am335x/files.am335x Thu Aug 13 15:16:34 2015 (r286727) +++ head/sys/arm/ti/am335x/files.am335x Thu Aug 13 15:19:30 2015 (r286728) @@ -3,6 +3,7 @@ arm/ti/aintc.c standard arm/ti/am335x/am335x_dmtimer.c standard +arm/ti/am335x/am335x_dmtpps.c optional am335x_dmtpps arm/ti/am335x/am335x_gpio.c optional gpio arm/ti/am335x/am335x_lcd.c optional sc | vt arm/ti/am335x/am335x_lcd_syscons.c optional sc Added: head/sys/modules/am335x_dmtpps/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/modules/am335x_dmtpps/Makefile Thu Aug 13 15:19:30 2015 (r286728) @@ -0,0 +1,8 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/../../arm/ti/am335x + +KMOD= am335x_dmtpps +SRCS= am335x_dmtpps.c + +.include From owner-svn-src-head@freebsd.org Thu Aug 13 15:24:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 32B489A0B11; Thu, 13 Aug 2015 15:24:34 +0000 (UTC) (envelope-from oshogbo.vx@gmail.com) Received: from mail-wi0-x22b.google.com (mail-wi0-x22b.google.com [IPv6:2a00:1450:400c:c05::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BC14AF9; Thu, 13 Aug 2015 15:24:33 +0000 (UTC) (envelope-from oshogbo.vx@gmail.com) Received: by wicne3 with SMTP id ne3so264068571wic.1; Thu, 13 Aug 2015 08:24:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=wlvY+VFEzpv1xib2EtlbQflwwA8gm6eO2dAOF1G45c4=; b=dPxWD6XgSwj4tR7rdVOpS1wk9XSIBmiy1rGQ0Xd3ma1j+T2/plU7H14wXCOIZAgY/k F3k/92c3/iwXU70Ov4tT4tPNnOYo1UOfmMWy1lkMCUUi7z/0RYb0UD7WHykbmErSOoi8 HaUUjRmzZ4UKyY1nIx+KqUYTuHjt138hSDpd7aP9rCbLjVnCgWyefjNWzMoRPVtomqG7 pvQ911MPeW7Plc8XODEvuzsOZHXZ4kHVE+rj+Jb/wzjzj8dGmnU6AN6XwzMV1bzDZoEA aQZdp7MJQ1TbP/zXI153FdDjQKQnXOW476BAntEotGbtvIHB91glfufX0ilUf+q8dHiv VEQg== X-Received: by 10.194.89.5 with SMTP id bk5mr82841972wjb.144.1439479472183; Thu, 13 Aug 2015 08:24:32 -0700 (PDT) Received: from jarvis.whl (58.wheelsystems.com. [83.12.187.58]) by smtp.gmail.com with ESMTPSA id gt10sm3872187wib.20.2015.08.13.08.24.31 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Aug 2015 08:24:31 -0700 (PDT) Sender: Mariusz Zaborski Date: Thu, 13 Aug 2015 17:24:58 +0200 From: Mariusz Zaborski To: Gleb Smirnoff Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286698 - head/sys/kern Message-ID: <20150813152456.GA99246@jarvis.whl> References: <201508122008.t7CK8sjG009888@repo.freebsd.org> <20150813124930.GK75813@FreeBSD.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="CE+1k2dSO48ffgeK" Content-Disposition: inline In-Reply-To: <20150813124930.GK75813@FreeBSD.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 15:24:34 -0000 --CE+1k2dSO48ffgeK Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Aug 13, 2015 at 03:49:30PM +0300, Gleb Smirnoff wrote: > On Wed, Aug 12, 2015 at 08:08:54PM +0000, Mariusz Zaborski wrote: > M> Author: oshogbo > M> Date: Wed Aug 12 20:08:54 2015 > M> New Revision: 286698 > M> URL: https://svnweb.freebsd.org/changeset/base/286698 > M>=20 > M> Log: > M> When the wait*(2) syscalls wait for any process (P_ALL), they should > M> ignore processes created with the pdfork(2) syscall. > M> =20 > M> PR: 201054 > M> Approved by: pjd (mentor) > M> Discussed with: emaste, rwatson >=20 > I believe this behaviour has a good reason, but it is counterintuitive to > a person who knows classical fork/wait syscalls and isn't very much into > the process descriptors. >=20 > Thus, this behaviour must be documented in wait.2 manual page. And of > course wait.2 must reference pdwait4.2. Thanks Gleb, I will do as you suggested. Cheers, Mariusz --CE+1k2dSO48ffgeK Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQJ8BAEBCgBmBQJVzLa6XxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRBQ0I3NjA5RUE2Q0JEMTM5QUE5NUU2Mjg1 NDFFNzc1RTk2N0Y4OUNGAAoJEFQed16Wf4nP1e4QAIMuQkmlUzXumYSVRvQWE1Mf Wa8/f+AkFNO5MAkBHccSm3WsgP4ktvbmaRpYiof9/GXXWqpW/aHV3Imj5aExLTws kXasox8cgMfLDz6HMFg57TjktmRAC/7vuecae3RoOvmVd03XmxJ397T1RgkJErbo xpsV3edkWOv7b2S//t4XCcOalEmQCMOVPKnbfp/ICjsSaYg67JTxpLcV7cVXJpAd hbkkcnEnvk8kcKp9xChrNzi/AS8Ll6SKE03wR5BQDGjFq3aDTSL2S0ZcalgSPmrd sEqo/RtxDgpPuMCSvSfopqD2eOYDvAC5x2VxlhRTcFIPiVgs5kcMoEeft0Z5w0sX 3xZZ2VWBP6Acmbo9gwPyyVpnbpKPYtQf/cErAzE6O7slbmohd00FKAbF9p6nQqA1 CAf+gSrQ0NnBwKTZonvujU02ylhU9vNTi2NQI0ksxrHD15mdRe4aaTldIKS+XpCl P6HwgcOT2erBeJ53+3qDY05sye1i50fLVFWU3daQpKYqCL4z/W+xdGggUlexrpPt zLZ0gJxkOhLzj4CxPo1n5S/fHOxpmk6z6tSjYfd2/VQjSzepAVmk37Xl0K0bXEHu KJIsZgGVtfOKIg5zkIDm3BFLHySqFt3A0dxQ5+LlN7Zj1vwF/btXguFabCRp/iP/ eMSAXouUE9CyL8BigTMs =snhe -----END PGP SIGNATURE----- --CE+1k2dSO48ffgeK-- From owner-svn-src-head@freebsd.org Thu Aug 13 15:25:37 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 01E019A0B6E for ; Thu, 13 Aug 2015 15:25:37 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from nm19-vm0.bullet.mail.bf1.yahoo.com (nm19-vm0.bullet.mail.bf1.yahoo.com [98.139.213.162]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 960F827E for ; Thu, 13 Aug 2015 15:25:36 +0000 (UTC) (envelope-from pfg@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1439479533; bh=qiG4bYX7Xhp+hrcxaMo7R2OWnyHgbMFGhg00cicDNhU=; h=Date:From:To:CC:Subject:References:In-Reply-To:From:Subject; b=ncm0bRRhLH80xUe7qU9CQzk7fFdgopH25ItRs0HHr4go3bFdMaCYPd8jLy98E2fSpAZFK+NDhyisxCl6fJIM8K+4sF9PxbIfIWa91Yr+HG37I0LqBHxTt+axGqPNMGg9a4YBgdm/UI/ou2Re8jrT5bYmE/8hLNlBjTM5g2rFa1JdFJp3RUp5yuMDOcBiiQOWvBtuB1ivqLUMIQAR8+8yyY2/3YGhaMnOoua4kxqiqEnTgn7rMY/oYmBPLRdQnbnQXWdNwvt4hIaWn7ViRaOb6KItFWPqOJ99EJUJxLvV+ORg5d3YdvpsSmntKtioOEaD8TvId4AD8t6mPQP1vB0RRQ== Received: from [98.139.170.181] by nm19.bullet.mail.bf1.yahoo.com with NNFMP; 13 Aug 2015 15:25:33 -0000 Received: from [98.139.211.205] by tm24.bullet.mail.bf1.yahoo.com with NNFMP; 13 Aug 2015 15:25:33 -0000 Received: from [127.0.0.1] by smtp214.mail.bf1.yahoo.com with NNFMP; 13 Aug 2015 15:25:33 -0000 X-Yahoo-Newman-Id: 710734.59902.bm@smtp214.mail.bf1.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: fdkqyS8VM1nIQ5xRy7G.Y.BseQuyoev4XT8byom95mih8Z2 3pqwPLwBjorRgfSaDGuuj3d9s01hNIT9U2G6oWokj88Tahk.7HuwfuqdjVVN EDAUuuo4WhkEJtDJuC1Q6FcaLaeKrw.DpE5WpciyWu.4lElZcNbFCd4UxjDh pBmkMf07.xxVWpHRG_Wf47oXwSoO9HkyxKz9Zg7pxOTpCYJx6dOlUs9EtWbw e6dgLlKO_vNLvn4HSPNZ.i2vUErhd0fF9kQ1dCcHjR3VCvgMyUaYukf9sFp2 3gzDPXMbMfVk1xaBACd7BqTFsBsHSNwKtP7j1afybbGn4j3HRLenxHMCEqkU xxk2nJ4J3auB8cLPGM7M72LOXzfRs.ZbVKZtLY4QPApuPjKAZ7XaXjASIA2v bqdYPKSg1WSFOIpI_9MU573ssccu1qjqtM6KhE3H31VNOU9LvCw3v5A8PhF6 6qBbhXNxtxRqoQCwf5dUrLVB.nDryCVJpVgZwHCknhtCVsrGken9IkGSNRQd y5EdU0ykIKHBGeB3q4eaEpSGhM7SihTTU X-Yahoo-SMTP: xcjD0guswBAZaPPIbxpWwLcp9Unf Message-ID: <55CCB6F2.7080008@FreeBSD.org> Date: Thu, 13 Aug 2015 10:25:38 -0500 From: Pedro Giffuni Organization: FreeBSD Project User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: araujo@FreeBSD.org, David Chisnall CC: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Subject: Re: svn commit: r286715 - head/lib/libc/string References: <201508130231.t7D2VOhc069855@repo.freebsd.org> <20150813134548.U1375@besplex.bde.org> <0CFBA0CC-FEEE-40CE-BC47-065613C64293@FreeBSD.org> In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 15:25:37 -0000 FWIW; I think the posix manpage is in the right direction. For a more detailed discussion about replacing bcopys you may read Ted Unangst's blog post[1], but of course OpenBSD is not FreeBSD. I honesly would sepnd much time in bcopy, it is one of those things that will stay in FreeBSD for a long while. I would focus on strtoq() and strtouq() which carry this *comical* notice in stdlib.h : /* Deprecated interfaces, to be removed in FreeBSD 6.0. */ Cheers, Pedro. [1] http://www.tedunangst.com/flak/post/memcpy-vs-memmove On 13/08/2015 02:56 a.m., Marcelo Araujo wrote: > Hi David, > > So it means, this commit here was right already: > https://svnweb.freebsd.org/base?view=revision&revision=286651 > > Although I made a mistake with the date. > > > All the best. > > 2015-08-13 15:24 GMT+08:00 David Chisnall >: > > On 13 Aug 2015, at 08:11, Marcelo Araujo > wrote: > > > > The bcopy() was removed in IEEE Std 1003.1-2008 and it is marked > as LEGACY in IEEE Std 1003.1-2004. However, BSD has its > implementation before IEEE Std 1003.1-2001. > > > > In my understood it is obsolete on POSIX, but not truly obsolete > for FreeBSD. > > So I believe, this patch now address it in the correct way. > > Its use should be strongly discouraged in FreeBSD (or, ideally, > replaced with the macro from the POSIX man page). LLVM does a > load of optimisations for memmove and memcpy - using bcopy is a > really good way of bypassing all of these. > > David > > > > > -- > > -- > Marcelo Araujo (__) > araujo@FreeBSD.org \\\'',) > http://www.FreeBSD.org \/ \ ^ > Power To Server. .\. /_) From owner-svn-src-head@freebsd.org Thu Aug 13 16:11:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 12DAC9B845A; Thu, 13 Aug 2015 16:11:05 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0367DBD2; Thu, 13 Aug 2015 16:11:05 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DGB40U009427; Thu, 13 Aug 2015 16:11:04 GMT (envelope-from brueffer@FreeBSD.org) Received: (from brueffer@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DGB45Q009426; Thu, 13 Aug 2015 16:11:04 GMT (envelope-from brueffer@FreeBSD.org) Message-Id: <201508131611.t7DGB45Q009426@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brueffer set sender to brueffer@FreeBSD.org using -f From: Christian Brueffer Date: Thu, 13 Aug 2015 16:11:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286729 - head/share/man/man4/man4.arm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 16:11:05 -0000 Author: brueffer Date: Thu Aug 13 16:11:04 2015 New Revision: 286729 URL: https://svnweb.freebsd.org/changeset/base/286729 Log: Small cleanup. - fix mandoc -Tlint warnings - use appropriate macros - canonize FreeBSD spelling Modified: head/share/man/man4/man4.arm/am335x_dmtpps.4 Modified: head/share/man/man4/man4.arm/am335x_dmtpps.4 ============================================================================== --- head/share/man/man4/man4.arm/am335x_dmtpps.4 Thu Aug 13 15:19:30 2015 (r286728) +++ head/share/man/man4/man4.arm/am335x_dmtpps.4 Thu Aug 13 16:11:04 2015 (r286729) @@ -57,10 +57,10 @@ of 42 nanoseconds. .Pp To use the PPS timing information provided by this driver with .Xr ntpd 8 , -symlink the -.Va /dev/dmtpps +symlink the +.Pa /dev/dmtpps device to -.Va /dev/pps0 +.Pa /dev/pps0 and configure server .Va 127.127.22.0 in @@ -77,7 +77,7 @@ driver can be active at a time. The driver uses system pin configuration to determine which hardware timer device to use. Configure the timer input pin in the system's FDT data, or by -supplying the pin name using a tunable variable in +supplying the pin name using a tunable variable in .Xr loader.conf 5 . .Pp To use a standard kernel and FDT data, use @@ -127,7 +127,7 @@ Add pinctrl properties referencing .Va timer4_pins to the standard .Va timer4 -device node (also defined in am33xx.dtsi) by referencing it in +device node (also defined in am33xx.dtsi) by referencing it in your dts file as follows: .Bd -literal &timer4 { @@ -160,4 +160,4 @@ device driver first appeared in The .Nm device driver and this manual page were written by -.An Ian Lepore Aq Mt ian@freebsd.org . +.An Ian Lepore Aq Mt ian@FreeBSD.org . From owner-svn-src-head@freebsd.org Thu Aug 13 17:50:50 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0E78F9B8259; Thu, 13 Aug 2015 17:50:50 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E7B56AD2; Thu, 13 Aug 2015 17:50:49 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DHonMw062466; Thu, 13 Aug 2015 17:50:49 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DHolFo062459; Thu, 13 Aug 2015 17:50:47 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508131750.t7DHolFo062459@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Thu, 13 Aug 2015 17:50:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286730 - in head: . gnu/usr.bin/binutils lib targets/pseudo/toolchain tools/build/mk tools/build/options usr.bin X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 17:50:50 -0000 Author: emaste Date: Thu Aug 13 17:50:47 2015 New Revision: 286730 URL: https://svnweb.freebsd.org/changeset/base/286730 Log: Roll WITHOUT_ELFTOOLCHAIN_TOOLS into WITHOUT_TOOLCHAIN The option was added only to ease the transition from GNU Binutils to ELF Tool Chain tools, and that process is now complete (for the viable replacements). Noting the removal in UPDATING is sufficient as we have not shipped a release with the option. Reviewed by: brooks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D3240 Deleted: head/tools/build/options/WITHOUT_ELFTOOLCHAIN_TOOLS Modified: head/Makefile.inc1 head/UPDATING head/gnu/usr.bin/binutils/Makefile head/lib/Makefile head/targets/pseudo/toolchain/Makefile.depend head/tools/build/mk/OptionalObsoleteFiles.inc head/usr.bin/Makefile Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Thu Aug 13 16:11:04 2015 (r286729) +++ head/Makefile.inc1 Thu Aug 13 17:50:47 2015 (r286730) @@ -1493,8 +1493,6 @@ _btxld= usr.sbin/btxld .if ${XAS:M/*} == "" .if ${MK_BINUTILS_BOOTSTRAP} != "no" _binutils= gnu/usr.bin/binutils -.endif -.if ${MK_ELFTOOLCHAIN_TOOLS} != "no" _elftctools= lib/libelftc \ usr.bin/elfcopy \ usr.bin/nm \ @@ -1504,7 +1502,7 @@ _elftctools= lib/libelftc \ # cross-build on a FreeBSD 10 host: _elftctools+= usr.bin/addr2line .endif -.elif ${TARGET_ARCH} != ${MACHINE_ARCH} && ${MK_ELFTOOLCHAIN_TOOLS} != "no" +.elif ${TARGET_ARCH} != ${MACHINE_ARCH} && ${MK_BINUTILS_BOOTSTRAP} != "no" # If cross-building with an external binutils we still need to build strip for # the target (for at least crunchide). _elftctools= lib/libelftc \ Modified: head/UPDATING ============================================================================== --- head/UPDATING Thu Aug 13 16:11:04 2015 (r286729) +++ head/UPDATING Thu Aug 13 17:50:47 2015 (r286730) @@ -31,6 +31,11 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11 disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20150813: + The WITHOUT_ELFTOOLCHAIN_TOOLS src.conf(5) knob has been retired. + Control over building the ELF Tool Chain tools is now provided by + the WITHOUT_TOOLCHAIN knob. + 20150810: The polarity of Pulse Per Second (PPS) capture events with the uart(4) driver has been corrected. Prior to this change the PPS Modified: head/gnu/usr.bin/binutils/Makefile ============================================================================== --- head/gnu/usr.bin/binutils/Makefile Thu Aug 13 16:11:04 2015 (r286729) +++ head/gnu/usr.bin/binutils/Makefile Thu Aug 13 17:50:47 2015 (r286730) @@ -12,7 +12,7 @@ SUBDIR= doc\ ${_objcopy} \ objdump \ -.if ${MK_ELFTOOLCHAIN_TOOLS} == "no" || ${MK_ELFCOPY_AS_OBJCOPY} == "no" +.if ${MK_ELFCOPY_AS_OBJCOPY} == "no" _objcopy= objcopy .endif Modified: head/lib/Makefile ============================================================================== --- head/lib/Makefile Thu Aug 13 16:11:04 2015 (r286729) +++ head/lib/Makefile Thu Aug 13 17:50:47 2015 (r286730) @@ -182,7 +182,7 @@ _clang= clang _cuse= libcuse .endif -.if ${MK_ELFTOOLCHAIN_TOOLS} != "no" +.if ${MK_TOOLCHAIN} != "no" _libelftc= libelftc .endif Modified: head/targets/pseudo/toolchain/Makefile.depend ============================================================================== --- head/targets/pseudo/toolchain/Makefile.depend Thu Aug 13 16:11:04 2015 (r286729) +++ head/targets/pseudo/toolchain/Makefile.depend Thu Aug 13 17:50:47 2015 (r286730) @@ -9,7 +9,7 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,, .endif DIRDEPS= -.if ${MK_ELFTOOLCHAIN_TOOLS} == "yes" +.if ${MK_TOOLCHAIN} == "yes" DIRDEPS+= \ usr.bin/addr2line \ usr.bin/cxxflit \ Modified: head/tools/build/mk/OptionalObsoleteFiles.inc ============================================================================== --- head/tools/build/mk/OptionalObsoleteFiles.inc Thu Aug 13 16:11:04 2015 (r286729) +++ head/tools/build/mk/OptionalObsoleteFiles.inc Thu Aug 13 17:50:47 2015 (r286730) @@ -184,7 +184,7 @@ OLD_DIRS+=usr/share/examples/bhyve .if ${MK_BINUTILS} == no OLD_FILES+=usr/bin/as OLD_FILES+=usr/bin/ld -.if ${MK_ELFTOOLCHAIN_TOOLS} != no && ${MK_ELFCOPY_AS_OBJCOPY} == no +.if ${MK_ELFCOPY_AS_OBJCOPY} == no OLD_FILES+=usr/bin/objcopy .endif OLD_FILES+=usr/bin/objdump @@ -203,7 +203,7 @@ OLD_FILES+=usr/libdata/ldscripts/elf_x86 OLD_FILES+=usr/libdata/ldscripts/elf_x86_64_fbsd.xw OLD_FILES+=usr/share/man/man1/as.1.gz OLD_FILES+=usr/share/man/man1/ld.1.gz -.if ${MK_ELFTOOLCHAIN_TOOLS} != no && ${MK_ELFCOPY_AS_OBJCOPY} == no +.if ${MK_ELFCOPY_AS_OBJCOPY} == no OLD_FILES+=usr/share/man/man1/objcopy.1.gz .endif OLD_FILES+=usr/share/man/man1/objdump.1.gz @@ -1647,29 +1647,6 @@ OLD_FILES+=usr/share/nls/ru_RU.KOI8-R/ee OLD_FILES+=usr/share/nls/uk_UA.KOI8-U/ee.cat .endif -.if ${MK_ELFTOOLCHAIN_TOOLS} == no || \ - (${MK_ELFTOOLCHAIN_TOOLS} != no && ${MK_ELFCOPY_AS_OBJCOPY} != no) -OLD_FILES+=usr/bin/elfcopy -OLD_FILES+=usr/share/man/man1/elfcopy.1.gz -.endif - -.if ${MK_ELFTOOLCHAIN_TOOLS} == no -OLD_FILES+=usr/bin/addr2line -OLD_FILES+=usr/bin/c++filt -OLD_FILES+=usr/bin/nm -OLD_FILES+=usr/bin/readelf -OLD_FILES+=usr/bin/size -OLD_FILES+=usr/bin/strings -OLD_FILES+=usr/bin/strip -OLD_FILES+=usr/share/man/man1/addr2line.1.gz -OLD_FILES+=usr/share/man/man1/c++filt.1.gz -OLD_FILES+=usr/share/man/man1/nm.1.gz -OLD_FILES+=usr/share/man/man1/readelf.1.gz -OLD_FILES+=usr/share/man/man1/size.1.gz -OLD_FILES+=usr/share/man/man1/strings.1.gz -OLD_FILES+=usr/share/man/man1/strip.1.gz -.endif - #.if ${MK_EXAMPLES} == no # to be filled in #.endif @@ -7530,8 +7507,25 @@ OLD_FILES+=usr/share/man/man1/ul.1.gz .endif #.if ${MK_TOOLCHAIN} == no -# to be filled in +OLD_FILES+=usr/bin/addr2line +OLD_FILES+=usr/bin/c++filt +OLD_FILES+=usr/bin/nm +OLD_FILES+=usr/bin/readelf +OLD_FILES+=usr/bin/size +OLD_FILES+=usr/bin/strings +OLD_FILES+=usr/bin/strip +OLD_FILES+=usr/share/man/man1/addr2line.1.gz +OLD_FILES+=usr/share/man/man1/c++filt.1.gz +OLD_FILES+=usr/share/man/man1/nm.1.gz +OLD_FILES+=usr/share/man/man1/readelf.1.gz +OLD_FILES+=usr/share/man/man1/size.1.gz +OLD_FILES+=usr/share/man/man1/strings.1.gz +OLD_FILES+=usr/share/man/man1/strip.1.gz #.endif +.if ${MK_TOOLCHAIN} == no || ${MK_ELFCOPY_AS_OBJCOPY} != no +OLD_FILES+=usr/bin/elfcopy +OLD_FILES+=usr/share/man/man1/elfcopy.1.gz +.endif .if ${MK_UNBOUND} == no OLD_FILES+=etc/rc.d/local_unbound Modified: head/usr.bin/Makefile ============================================================================== --- head/usr.bin/Makefile Thu Aug 13 16:11:04 2015 (r286729) +++ head/usr.bin/Makefile Thu Aug 13 17:50:47 2015 (r286730) @@ -218,16 +218,6 @@ SUBDIR+= clang SUBDIR+= ee .endif -.if ${MK_ELFTOOLCHAIN_TOOLS} != "no" -SUBDIR+= addr2line -SUBDIR+= cxxfilt -SUBDIR+= elfcopy -SUBDIR+= nm -SUBDIR+= readelf -SUBDIR+= size -SUBDIR+= strings -.endif - .if ${MK_FILE} != "no" SUBDIR+= file .endif @@ -361,10 +351,13 @@ SUBDIR+= tftp .endif .if ${MK_TOOLCHAIN} != "no" +SUBDIR+= addr2line SUBDIR+= ar SUBDIR+= c89 SUBDIR+= c99 SUBDIR+= ctags +SUBDIR+= cxxfilt +SUBDIR+= elfcopy SUBDIR+= file2c .if ${MACHINE_ARCH} != "aarch64" # ARM64TODO gprof does not build SUBDIR+= gprof @@ -372,8 +365,12 @@ SUBDIR+= gprof SUBDIR+= indent SUBDIR+= lex SUBDIR+= mkstr +SUBDIR+= nm +SUBDIR+= readelf SUBDIR+= rpcgen SUBDIR+= unifdef +SUBDIR+= size +SUBDIR+= strings .if ${MACHINE_ARCH} != "aarch64" # ARM64TODO xlint does not build SUBDIR+= xlint .endif From owner-svn-src-head@freebsd.org Thu Aug 13 17:54:29 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D5FAA9B83AC; Thu, 13 Aug 2015 17:54:29 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C695CE50; Thu, 13 Aug 2015 17:54:29 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DHsTZm065734; Thu, 13 Aug 2015 17:54:29 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DHsTLD065733; Thu, 13 Aug 2015 17:54:29 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508131754.t7DHsTLD065733@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Thu, 13 Aug 2015 17:54:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286731 - head/share/man/man5 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 17:54:29 -0000 Author: emaste Date: Thu Aug 13 17:54:28 2015 New Revision: 286731 URL: https://svnweb.freebsd.org/changeset/base/286731 Log: Update src.conf(5) after r286730 Modified: head/share/man/man5/src.conf.5 Modified: head/share/man/man5/src.conf.5 ============================================================================== --- head/share/man/man5/src.conf.5 Thu Aug 13 17:50:47 2015 (r286730) +++ head/share/man/man5/src.conf.5 Thu Aug 13 17:54:28 2015 (r286731) @@ -1,7 +1,7 @@ .\" DO NOT EDIT-- this file is automatically generated. .\" from FreeBSD: head/tools/build/options/makeman 284708 2015-06-22 20:21:57Z sjg .\" $FreeBSD$ -.Dd August 1, 2015 +.Dd August 13, 2015 .Dt SRC.CONF 5 .Os .Sh NAME @@ -137,9 +137,8 @@ associated utilities, and examples. .Pp This option only affects amd64/amd64. .It Va WITHOUT_BINUTILS -.\" from FreeBSD: head/tools/build/options/WITHOUT_BINUTILS 286036 2015-07-29 20:02:20Z emaste -Set to not build or install binutils (as, c++-filt, -ld, nm, objcopy, objdump, readelf, size and strip) as part +.\" from FreeBSD: head/tools/build/options/WITHOUT_BINUTILS 286332 2015-08-05 18:30:00Z emaste +Set to not build or install binutils (as, ld, objcopy, and objdump ) as part of the normal system build. The resulting system cannot build programs from source. .Pp @@ -457,18 +456,6 @@ instead of the one from GNU Binutils. .Pp It is a default setting on arm64/aarch64. -.It Va WITHOUT_ELFTOOLCHAIN_TOOLS -.\" from FreeBSD: head/tools/build/options/WITHOUT_ELFTOOLCHAIN_TOOLS 286016 2015-07-29 15:42:22Z emaste -Set to use -.Xr addr2line 1 , -.Xr c++filt 1 , -.Xr nm 1 , -.Xr readelf 1 , -.Xr size 1 , -.Xr strings 1 , -and -.Xr strip 1 -from GNU binutils instead of the ELF Tool Chain project. .It Va WITHOUT_EXAMPLES .\" from FreeBSD: head/tools/build/options/WITHOUT_EXAMPLES 156938 2006-03-21 09:06:24Z ru Set to avoid installing examples to From owner-svn-src-head@freebsd.org Thu Aug 13 18:01:51 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B96AF9B850A; Thu, 13 Aug 2015 18:01:51 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AA8FC30C; Thu, 13 Aug 2015 18:01:51 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DI1pFZ069283; Thu, 13 Aug 2015 18:01:51 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DI1poE069282; Thu, 13 Aug 2015 18:01:51 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508131801.t7DI1poE069282@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Thu, 13 Aug 2015 18:01:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286732 - head/share/mk X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 18:01:51 -0000 Author: emaste Date: Thu Aug 13 18:01:50 2015 New Revision: 286732 URL: https://svnweb.freebsd.org/changeset/base/286732 Log: Remove remnant of WITHOUT_ELFTOOLCHAIN_TOOLS missed in r286730 Modified: head/share/mk/src.opts.mk Modified: head/share/mk/src.opts.mk ============================================================================== --- head/share/mk/src.opts.mk Thu Aug 13 17:54:28 2015 (r286731) +++ head/share/mk/src.opts.mk Thu Aug 13 18:01:50 2015 (r286732) @@ -80,7 +80,6 @@ __DEFAULT_YES_OPTIONS = \ DYNAMICROOT \ ED_CRYPTO \ EE \ - ELFTOOLCHAIN_TOOLS \ EXAMPLES \ FDT \ FILE \ From owner-svn-src-head@freebsd.org Thu Aug 13 18:01:45 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7ECC79B84F6 for ; Thu, 13 Aug 2015 18:01:45 +0000 (UTC) (envelope-from ian@freebsd.org) Received: from erouter6.ore.mailhop.org (erouter6.ore.mailhop.org [54.187.213.119]) by mx1.freebsd.org (Postfix) with SMTP id 40CAC2FD for ; Thu, 13 Aug 2015 18:01:44 +0000 (UTC) (envelope-from ian@freebsd.org) Received: from ilsoft.org (unknown [73.34.117.227]) by outbound3.ore.mailhop.org (Halon Mail Gateway) with ESMTPSA; Thu, 13 Aug 2015 17:58:57 +0000 (UTC) Received: from rev (rev [172.22.42.240]) by ilsoft.org (8.14.9/8.14.9) with ESMTP id t7DI1fxJ002207; Thu, 13 Aug 2015 12:01:41 -0600 (MDT) (envelope-from ian@freebsd.org) Message-ID: <1439488901.242.19.camel@freebsd.org> Subject: Re: svn commit: r286729 - head/share/man/man4/man4.arm From: Ian Lepore To: Christian Brueffer Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Date: Thu, 13 Aug 2015 12:01:41 -0600 In-Reply-To: <201508131611.t7DGB45Q009426@repo.freebsd.org> References: <201508131611.t7DGB45Q009426@repo.freebsd.org> Content-Type: text/plain; charset="us-ascii" X-Mailer: Evolution 3.12.10 FreeBSD GNOME Team Port Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 18:01:45 -0000 On Thu, 2015-08-13 at 16:11 +0000, Christian Brueffer wrote: > Author: brueffer > Date: Thu Aug 13 16:11:04 2015 > New Revision: 286729 > URL: https://svnweb.freebsd.org/changeset/base/286729 > > Log: > Small cleanup. > > - fix mandoc -Tlint warnings > - use appropriate macros > - canonize FreeBSD spelling Thank you, both for the fixes and for the "mandoc -Tlint" clue, I'll try to remember to do that for myself in the future. -- Ian From owner-svn-src-head@freebsd.org Thu Aug 13 18:24:42 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 89F049B88DA; Thu, 13 Aug 2015 18:24:42 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7A2DA6B4; Thu, 13 Aug 2015 18:24:42 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DIOgGC078511; Thu, 13 Aug 2015 18:24:42 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DIOgXD078510; Thu, 13 Aug 2015 18:24:42 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201508131824.t7DIOgXD078510@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Thu, 13 Aug 2015 18:24:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286733 - head/sys/dev/bxe X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 18:24:42 -0000 Author: dim Date: Thu Aug 13 18:24:41 2015 New Revision: 286733 URL: https://svnweb.freebsd.org/changeset/base/286733 Log: Avoid left-shifting negative signed values in bxe(4). Reviewed by: davidcs MFC after: 3 days Modified: head/sys/dev/bxe/ecore_hsi.h Modified: head/sys/dev/bxe/ecore_hsi.h ============================================================================== --- head/sys/dev/bxe/ecore_hsi.h Thu Aug 13 18:01:50 2015 (r286732) +++ head/sys/dev/bxe/ecore_hsi.h Thu Aug 13 18:24:41 2015 (r286733) @@ -2536,9 +2536,9 @@ struct shmem2_region { #define SHMEM_EEE_SUPPORTED_MASK 0x000f0000 #define SHMEM_EEE_SUPPORTED_SHIFT 16 #define SHMEM_EEE_ADV_STATUS_MASK 0x00f00000 - #define SHMEM_EEE_100M_ADV (1<<0) - #define SHMEM_EEE_1G_ADV (1<<1) - #define SHMEM_EEE_10G_ADV (1<<2) + #define SHMEM_EEE_100M_ADV (1U<<0) + #define SHMEM_EEE_1G_ADV (1U<<1) + #define SHMEM_EEE_10G_ADV (1U<<2) #define SHMEM_EEE_ADV_STATUS_SHIFT 20 #define SHMEM_EEE_LP_ADV_STATUS_MASK 0x0f000000 #define SHMEM_EEE_LP_ADV_STATUS_SHIFT 24 From owner-svn-src-head@freebsd.org Thu Aug 13 18:45:53 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 31E4F9B8E6D; Thu, 13 Aug 2015 18:45:53 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 22715182D; Thu, 13 Aug 2015 18:45:53 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DIjrhW087189; Thu, 13 Aug 2015 18:45:53 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DIjrg9087188; Thu, 13 Aug 2015 18:45:53 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201508131845.t7DIjrg9087188@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Thu, 13 Aug 2015 18:45:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286737 - head/cddl/contrib/opensolaris/cmd/ztest X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 18:45:53 -0000 Author: delphij Date: Thu Aug 13 18:45:52 2015 New Revision: 286737 URL: https://svnweb.freebsd.org/changeset/base/286737 Log: Plug a memory leak. MFC after: 2 weeks Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Thu Aug 13 18:41:53 2015 (r286736) +++ head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Thu Aug 13 18:45:52 2015 (r286737) @@ -5908,6 +5908,7 @@ ztest_init(ztest_shared_t *zs) } VERIFY3U(0, ==, spa_create(ztest_opts.zo_pool, nvroot, props, NULL)); nvlist_free(nvroot); + nvlist_free(props); VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG)); zs->zs_metaslab_sz = From owner-svn-src-head@freebsd.org Thu Aug 13 19:05:19 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D59D49B825E; Thu, 13 Aug 2015 19:05:19 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 90ED0AF7; Thu, 13 Aug 2015 19:05:19 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DJ5Jtp095697; Thu, 13 Aug 2015 19:05:19 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DJ5JPt095696; Thu, 13 Aug 2015 19:05:19 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201508131905.t7DJ5JPt095696@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Thu, 13 Aug 2015 19:05:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286740 - head/sys/arm64/arm64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 19:05:19 -0000 Author: emaste Date: Thu Aug 13 19:05:18 2015 New Revision: 286740 URL: https://svnweb.freebsd.org/changeset/base/286740 Log: Remove arm64 workaround for Clang 3.4 crash Modified: head/sys/arm64/arm64/exception.S Modified: head/sys/arm64/arm64/exception.S ============================================================================== --- head/sys/arm64/arm64/exception.S Thu Aug 13 19:04:41 2015 (r286739) +++ head/sys/arm64/arm64/exception.S Thu Aug 13 19:05:18 2015 (r286740) @@ -104,7 +104,7 @@ __FBSDID("$FreeBSD$"); /* Read the current thread flags */ 1: ldr x1, [x18, #PC_CURTHREAD] /* Load curthread */ - ldr x2, [x1, #TD_FLAGS]! /* TODO: No need for the ! but clang fails without it */ + ldr x2, [x1, #TD_FLAGS] /* Check if we have either bits set */ mov x3, #((TDF_ASTPENDING|TDF_NEEDRESCHED) >> 8) From owner-svn-src-head@freebsd.org Thu Aug 13 19:12:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 81FC89B83BF; Thu, 13 Aug 2015 19:12:56 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6CFFFF9D; Thu, 13 Aug 2015 19:12:56 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DJCuh5099713; Thu, 13 Aug 2015 19:12:56 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DJCuTd099712; Thu, 13 Aug 2015 19:12:56 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508131912.t7DJCuTd099712@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Thu, 13 Aug 2015 19:12:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286741 - head/sys/dev/md X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 19:12:56 -0000 Author: marcel Date: Thu Aug 13 19:12:55 2015 New Revision: 286741 URL: https://svnweb.freebsd.org/changeset/base/286741 Log: s/as/at/ in previous commit. Pointed out by: jmallett@ Modified: head/sys/dev/md/md.c Modified: head/sys/dev/md/md.c ============================================================================== --- head/sys/dev/md/md.c Thu Aug 13 19:05:18 2015 (r286740) +++ head/sys/dev/md/md.c Thu Aug 13 19:12:55 2015 (r286741) @@ -1565,7 +1565,7 @@ md_preloaded(u_char *image, size_t lengt printf("%s%d: Preloaded image <%s> %zd bytes at %p\n", MD_NAME, sc->unit, name, length, image); } else { - printf("%s%d: Embedded image %zd bytes as %p\n", + printf("%s%d: Embedded image %zd bytes at %p\n", MD_NAME, sc->unit, length, image); } } From owner-svn-src-head@freebsd.org Thu Aug 13 22:04:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B004D99F487; Thu, 13 Aug 2015 22:04:31 +0000 (UTC) (envelope-from antoine@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 98CAFB6B; Thu, 13 Aug 2015 22:04:31 +0000 (UTC) (envelope-from antoine@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DM4V6f070953; Thu, 13 Aug 2015 22:04:31 GMT (envelope-from antoine@FreeBSD.org) Received: (from antoine@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DM4VUm070952; Thu, 13 Aug 2015 22:04:31 GMT (envelope-from antoine@FreeBSD.org) Message-Id: <201508132204.t7DM4VUm070952@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: antoine set sender to antoine@FreeBSD.org using -f From: Antoine Brodin Date: Thu, 13 Aug 2015 22:04:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286745 - head/tools/build/mk X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 22:04:31 -0000 Author: antoine Date: Thu Aug 13 22:04:30 2015 New Revision: 286745 URL: https://svnweb.freebsd.org/changeset/base/286745 Log: Stop removing ELF toolchain tools Modified: head/tools/build/mk/OptionalObsoleteFiles.inc Modified: head/tools/build/mk/OptionalObsoleteFiles.inc ============================================================================== --- head/tools/build/mk/OptionalObsoleteFiles.inc Thu Aug 13 22:01:13 2015 (r286744) +++ head/tools/build/mk/OptionalObsoleteFiles.inc Thu Aug 13 22:04:30 2015 (r286745) @@ -7506,7 +7506,7 @@ OLD_FILES+=usr/share/man/man1/colcrt.1.g OLD_FILES+=usr/share/man/man1/ul.1.gz .endif -#.if ${MK_TOOLCHAIN} == no +.if ${MK_TOOLCHAIN} == no OLD_FILES+=usr/bin/addr2line OLD_FILES+=usr/bin/c++filt OLD_FILES+=usr/bin/nm @@ -7521,7 +7521,7 @@ OLD_FILES+=usr/share/man/man1/readelf.1. OLD_FILES+=usr/share/man/man1/size.1.gz OLD_FILES+=usr/share/man/man1/strings.1.gz OLD_FILES+=usr/share/man/man1/strip.1.gz -#.endif +.endif .if ${MK_TOOLCHAIN} == no || ${MK_ELFCOPY_AS_OBJCOPY} != no OLD_FILES+=usr/bin/elfcopy OLD_FILES+=usr/share/man/man1/elfcopy.1.gz From owner-svn-src-head@freebsd.org Thu Aug 13 22:32:43 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1519999F9A6; Thu, 13 Aug 2015 22:32:43 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F30B8A1F; Thu, 13 Aug 2015 22:32:42 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DMWgPk083062; Thu, 13 Aug 2015 22:32:42 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DMWgLt083061; Thu, 13 Aug 2015 22:32:42 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201508132232.t7DMWgLt083061@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Thu, 13 Aug 2015 22:32:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286747 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 22:32:43 -0000 Author: imp Date: Thu Aug 13 22:32:42 2015 New Revision: 286747 URL: https://svnweb.freebsd.org/changeset/base/286747 Log: Spell binaries in the customary way. Submitted by: jhb@ Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Thu Aug 13 22:29:26 2015 (r286746) +++ head/Makefile.inc1 Thu Aug 13 22:32:42 2015 (r286747) @@ -220,7 +220,7 @@ INSTALLTMP!= /usr/bin/mktemp -d -u -t in # This stage is responsible for creating the object # tree and building any tools that are needed during # the build process. Some programs are listed during -# this phase because they build binaires to generate +# this phase because they build binaries to generate # files needed to build these programs. This stage also # builds the 'build-tools' target rather than 'all'. # 3. cross-tools stage [XMAKE] From owner-svn-src-head@freebsd.org Thu Aug 13 23:57:47 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B6A879B8A1C; Thu, 13 Aug 2015 23:57:47 +0000 (UTC) (envelope-from edwin@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A655816CE; Thu, 13 Aug 2015 23:57:47 +0000 (UTC) (envelope-from edwin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7DNvlPU016081; Thu, 13 Aug 2015 23:57:47 GMT (envelope-from edwin@FreeBSD.org) Received: (from edwin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7DNvjFx016073; Thu, 13 Aug 2015 23:57:45 GMT (envelope-from edwin@FreeBSD.org) Message-Id: <201508132357.t7DNvjFx016073@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: edwin set sender to edwin@FreeBSD.org using -f From: Edwin Groothuis Date: Thu, 13 Aug 2015 23:57:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286750 - head/contrib/tzdata X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2015 23:57:47 -0000 Author: edwin Date: Thu Aug 13 23:57:44 2015 New Revision: 286750 URL: https://svnweb.freebsd.org/changeset/base/286750 Log: MFV of 286748,tzdata2015f Update to tzdata2015f: Changes affecting future time stamps North Korea switches to +0830 on 2015-08-15. (Thanks to Steffen Thorsen.) The abbreviation remains "KST". (Thanks to Robert Elz.) Uruguay no longer observes DST. (Thanks to Steffen Thorsen and Pablo Camargo.) Changes affecting past and future time stamps Moldova starts and ends DST at 00:00 UTC, not at 01:00 UTC. (Thanks to Roman Tudos.) Modified: head/contrib/tzdata/africa head/contrib/tzdata/asia head/contrib/tzdata/europe head/contrib/tzdata/leap-seconds.list head/contrib/tzdata/northamerica head/contrib/tzdata/southamerica head/contrib/tzdata/zone.tab head/contrib/tzdata/zone1970.tab Directory Properties: head/contrib/tzdata/ (props changed) Modified: head/contrib/tzdata/africa ============================================================================== --- head/contrib/tzdata/africa Thu Aug 13 23:57:15 2015 (r286749) +++ head/contrib/tzdata/africa Thu Aug 13 23:57:44 2015 (r286750) @@ -538,7 +538,7 @@ Zone Africa/Tripoli 0:52:44 - LMT 1920 # From Alex Krivenyshev (2008-07-11): # Seems that English language article "The revival of daylight saving -# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally +# time: Energy conservation?"- No. 16578 (07/11/2008) was originally # published on Monday, June 30, 2008... # # I guess that article in French "Le gouvernement avance l'introduction @@ -670,7 +670,7 @@ Zone Indian/Mauritius 3:50:00 - LMT 1907 # Here is a link to official document from Royaume du Maroc Premier Ministre, # Ministère de la Modernisation des Secteurs Publics # -# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967) +# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 June 1967) # concerning the amendment of the legal time, the Ministry of Modernization of # Public Sectors announced that the official time in the Kingdom will be # advanced 60 minutes from Sunday 31 May 2009 at midnight. Modified: head/contrib/tzdata/asia ============================================================================== --- head/contrib/tzdata/asia Thu Aug 13 23:57:15 2015 (r286749) +++ head/contrib/tzdata/asia Thu Aug 13 23:57:44 2015 (r286750) @@ -6,7 +6,7 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2014-10-31): +# From Paul Eggert (2015-08-08): # # Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), @@ -43,7 +43,7 @@ # 2:00 EET EEST Eastern European Time # 2:00 IST IDT Israel # 3:00 AST ADT Arabia* -# 3:30 IRST IRDT Iran +# 3:30 IRST IRDT Iran* # 4:00 GST Gulf* # 5:30 IST India # 7:00 ICT Indochina, most times and locations* @@ -52,10 +52,11 @@ # 8:00 CST China # 8:00 IDT Indochina, 1943-45, 1947-55, 1960-75 (some locations)* # 8:00 JWST Western Standard Time (Japan, 1896/1937)* +# 8:30 KST KDT Korea when at +0830* # 9:00 JCST Central Standard Time (Japan, 1896/1937) # 9:00 WIT east Indonesia (Waktu Indonesia Timur) # 9:00 JST JDT Japan -# 9:00 KST KDT Korea +# 9:00 KST KDT Korea when at +09 # 9:30 ACST Australian Central Standard Time # # See the 'europe' file for Russia and Turkey in Asia. @@ -1027,7 +1028,7 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 No # # From Roozbeh Pournader (2007-11-05): # This is quoted from Official Gazette of the Islamic Republic of -# Iran, Volume 63, Number 18242, dated Tuesday 1386/6/24 +# Iran, Volume 63, No. 18242, dated Tuesday 1386/6/24 # [2007-10-16]. I am doing the best translation I can:... # The official time of the country will be moved forward for one hour # on the 24 hours of the first day of the month of Farvardin and will @@ -1557,7 +1558,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00. # - Oral switched from +5:00 to +4:00 in spring 1989. -# From Kazakhstan Embassy's News Bulletin #11 +# From Kazakhstan Embassy's News Bulletin No. 11 # (2005-03-21): # The Government of Kazakhstan passed a resolution March 15 abolishing # daylight saving time citing lack of economic benefits and health @@ -1711,6 +1712,17 @@ Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S # # For Pyongyang we have no information; guess no changes since World War II. +# From Steffen Thorsen (2015-08-07): +# According to many news sources, North Korea is going to change to +# the 8:30 time zone on August 15, one example: +# http://www.bbc.com/news/world-asia-33815049 +# +# From Paul Eggert (2015-08-07): +# No transition time is specified; assume 00:00. +# There is no common English-language abbreviation for this time zone. +# Use %z rather than invent one. We can't assume %z works everywhere yet, +# so for now substitute its output manually. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1 8:30 - KST 1912 Jan 1 @@ -1723,7 +1735,8 @@ Zone Asia/Pyongyang 8:23:00 - LMT 1908 A 8:30 - KST 1912 Jan 1 9:00 - JCST 1937 Oct 1 9:00 - JST 1945 Aug 24 - 9:00 - KST + 9:00 - KST 2015 Aug 15 + 8:30 - KST ############################################################################### Modified: head/contrib/tzdata/europe ============================================================================== --- head/contrib/tzdata/europe Thu Aug 13 23:57:15 2015 (r286749) +++ head/contrib/tzdata/europe Thu Aug 13 23:57:44 2015 (r286750) @@ -193,11 +193,14 @@ # republished in Finest Hour (Spring 2002) 1(114):26 # http://www.winstonchurchill.org/images/finesthour/Vol.01%20No.114.pdf -# From Paul Eggert (1996-09-03): +# From Paul Eggert (2015-08-08): # The OED Supplement says that the English originally said "Daylight Saving" # when they were debating the adoption of DST in 1908; but by 1916 this # term appears only in quotes taken from DST's opponents, whereas the # proponents (who eventually won the argument) are quoted as using "Summer". +# The term "Summer Time" was introduced by Herbert Samuel, Home Secretary; see: +# Viscount Samuel. Leisure in a Democracy. Cambridge University Press +# ISBN 978-1-107-49471-8 (1949, reissued 2015), p 8. # From Arthur David Olson (1989-01-19): # A source at the British Information Office in New York avers that it's @@ -343,7 +346,7 @@ # From an anonymous contributor (1996-06-02): # The law governing time in Ireland is under Statutory Instrument SI 395/94, -# which gives force to European Union 7th Council Directive # 94/21/EC. +# which gives force to European Union 7th Council Directive No. 94/21/EC. # Under this directive, the Minister for Justice in Ireland makes appropriate # regulations. I spoke this morning with the Secretary of the Department of # Justice (tel +353 1 678 9711) who confirmed to me that the correct name is @@ -592,11 +595,11 @@ Rule Russia 1921 only - Feb 14 23:00 1:0 Rule Russia 1921 only - Mar 20 23:00 2:00 MSM # Midsummer Rule Russia 1921 only - Sep 1 0:00 1:00 MSD Rule Russia 1921 only - Oct 1 0:00 0 - -# Act No.925 of the Council of Ministers of the USSR (1980-10-24): +# Act No. 925 of the Council of Ministers of the USSR (1980-10-24): Rule Russia 1981 1984 - Apr 1 0:00 1:00 S Rule Russia 1981 1983 - Oct 1 0:00 0 - -# Act No.967 of the Council of Ministers of the USSR (1984-09-13), repeated in -# Act No.227 of the Council of Ministers of the USSR (1989-03-14): +# Act No. 967 of the Council of Ministers of the USSR (1984-09-13), repeated in +# Act No. 227 of the Council of Ministers of the USSR (1989-03-14): Rule Russia 1984 1991 - Sep lastSun 2:00s 0 - Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S # @@ -828,7 +831,7 @@ Zone Europe/Brussels 0:17:30 - LMT 1880 # Bulgaria # # From Plamen Simenov via Steffen Thorsen (1999-09-09): -# A document of Government of Bulgaria (No.94/1997) says: +# A document of Government of Bulgaria (No. 94/1997) says: # EET -> EETDST is in 03:00 Local time in last Sunday of March ... # EETDST -> EET is in 04:00 Local time in last Sunday of October # @@ -845,7 +848,7 @@ Zone Europe/Sofia 1:33:16 - LMT 1880 1:00 C-Eur CE%sT 1945 1:00 - CET 1945 Apr 2 3:00 2:00 - EET 1979 Mar 31 23:00 - 2:00 Bulg EE%sT 1982 Sep 26 2:00 + 2:00 Bulg EE%sT 1982 Sep 26 3:00 2:00 C-Eur EE%sT 1991 2:00 E-Eur EE%sT 1997 2:00 EU EE%sT @@ -1062,8 +1065,8 @@ Zone America/Thule -4:35:08 - LMT 1916 J # after that. # From Mart Oruaas (2000-01-29): -# Regulation no. 301 (1999-10-12) obsoletes previous regulation -# no. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all +# Regulation No. 301 (1999-10-12) obsoletes previous regulation +# No. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all # the year round. The regulation is effective 1999-11-01. # From Toomas Soome (2002-02-21): @@ -1084,7 +1087,7 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880 3:00 Russia MSK/MSD 1989 Mar 26 2:00s 2:00 1:00 EEST 1989 Sep 24 2:00s 2:00 C-Eur EE%sT 1998 Sep 22 - 2:00 EU EE%sT 1999 Nov 1 + 2:00 EU EE%sT 1999 Oct 31 4:00 2:00 - EET 2002 Feb 21 2:00 EU EE%sT @@ -1527,21 +1530,21 @@ Link Europe/Rome Europe/San_Marino # correct data in juridical acts and I found some juridical documents about # changes in the counting of time in Latvia from 1981.... # -# Act No.35 of the Council of Ministers of Latvian SSR of 1981-01-22 ... -# according to the Act No.925 of the Council of Ministers of USSR of 1980-10-24 +# Act No. 35 of the Council of Ministers of Latvian SSR of 1981-01-22 ... +# according to the Act No. 925 of the Council of Ministers of USSR of 1980-10-24 # ...: all year round the time of 2nd time zone + 1 hour, in addition turning # the hands of the clock 1 hour forward on 1 April at 00:00 (GMT 31 March 21:00) # and 1 hour backward on the 1 October at 00:00 (GMT 30 September 20:00). # -# Act No.592 of the Council of Ministers of Latvian SSR of 1984-09-24 ... -# according to the Act No.967 of the Council of Ministers of USSR of 1984-09-13 +# Act No. 592 of the Council of Ministers of Latvian SSR of 1984-09-24 ... +# according to the Act No. 967 of the Council of Ministers of USSR of 1984-09-13 # ...: all year round the time of 2nd time zone + 1 hour, in addition turning # the hands of the clock 1 hour forward on the last Sunday of March at 02:00 # (GMT 23:00 on the previous day) and 1 hour backward on the last Sunday of # September at 03:00 (GMT 23:00 on the previous day). # -# Act No.81 of the Council of Ministers of Latvian SSR of 1989-03-22 ... -# according to the Act No.227 of the Council of Ministers of USSR of 1989-03-14 +# Act No. 81 of the Council of Ministers of Latvian SSR of 1989-03-22 ... +# according to the Act No. 227 of the Council of Ministers of USSR of 1989-03-14 # ...: since the last Sunday of March 1989 in Lithuanian SSR, Latvian SSR, # Estonian SSR and Kaliningrad region of Russian Federation all year round the # time of 2nd time zone (Moscow time minus one hour). On the territory of Latvia @@ -1558,7 +1561,7 @@ Link Europe/Rome Europe/San_Marino # From Andrei Ivanov (2000-03-06): # This year Latvia will not switch to Daylight Savings Time (as specified in # The Regulations of the Cabinet of Ministers of the Rep. of Latvia of -# 29-Feb-2000 (#79) , +# 29-Feb-2000 (No. 79) , # in Latvian for subscribers only). # From RFE/RL Newsline @@ -1763,6 +1766,18 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov # News from Moldova (in russian): # http://ru.publika.md/link_317061.html +# From Roman Tudos (2015-07-02): +# http://lex.justice.md/index.php?action=view&view=doc&lang=1&id=355077 +# From Paul Eggert (2015-07-01): +# The abovementioned official link to IGO1445-868/2014 states that +# 2014-10-26's fallback transition occurred at 03:00 local time. Also, +# http://www.trm.md/en/social/la-30-martie-vom-trece-la-ora-de-vara +# says the 2014-03-30 spring-forward transition was at 02:00 local time. +# Guess that since 1997 Moldova has switched one hour before the EU. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S +Rule Moldova 1997 max - Oct lastSun 3:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Chisinau 1:55:20 - LMT 1880 @@ -1777,7 +1792,7 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880 2:00 Russia EE%sT 1992 2:00 E-Eur EE%sT 1997 # See Romania commentary for the guessed 1997 transition to EU rules. - 2:00 EU EE%sT + 2:00 Moldova EE%sT # Monaco # Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's @@ -2123,7 +2138,7 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 # Russia # From Alexander Krivenyshev (2011-09-15): -# Based on last Russian Government Decree # 725 on August 31, 2011 +# Based on last Russian Government Decree No. 725 on August 31, 2011 # (Government document # http://www.government.ru/gov/results/16355/print/ # in Russian) @@ -2133,7 +2148,7 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 # http://www.worldtimezone.com/dst_news/dst_news_russia36.htm # From Sanjeev Gupta (2011-09-27): -# Scans of [Decree #23 of January 8, 1992] are available at: +# Scans of [Decree No. 23 of January 8, 1992] are available at: # http://government.consultant.ru/page.aspx?1223966 # They are in Cyrillic letters (presumably Russian). @@ -2144,19 +2159,19 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 # One source is # http://government.ru/gov/results/16355/ # which, according to translate.google.com, begins "Decree of August 31, -# 2011 No 725" and contains no other dates or "effective date" information. +# 2011 No. 725" and contains no other dates or "effective date" information. # # Another source is # http://www.rg.ru/2011/09/06/chas-zona-dok.html # which, according to translate.google.com, begins "Resolution of the # Government of the Russian Federation on August 31, 2011 N 725" and also # contains "Date first official publication: September 6, 2011 Posted on: -# in the 'RG' - Federal Issue number 5573 September 6, 2011" but which +# in the 'RG' - Federal Issue No. 5573 September 6, 2011" but which # does not contain any "effective date" information. # # Another source is # http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7 -# which, in note 8, contains "Resolution #725 of August 31, 2011... +# which, in note 8, contains "Resolution No. 725 of August 31, 2011... # Effective as of after 7 days following the day of the official publication" # but which does not contain any reference to September 6, 2011. # @@ -2364,7 +2379,7 @@ Zone Europe/Simferopol 2:16:24 - LMT 18 # changed in May. 2:00 E-Eur EE%sT 1994 May # From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev. - 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s + 3:00 E-Eur MSK/MSD 1996 Mar 31 0:00s 3:00 1:00 MSD 1996 Oct 27 3:00s # IATA SSIM (1997-09) says Crimea switched to EET/EEST. # Assume it happened in March by not changing the clocks. @@ -2499,7 +2514,7 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 191 # from current Russia Zone 6 - Krasnoyarsk Time Zone (KRA) UTC +0700 # to Russia Zone 5 - Novosibirsk Time Zone (NOV) UTC +0600 # -# This is according to Government of Russia decree # 740, on September +# This is according to Government of Russia decree No. 740, on September # 14, 2009 "Application in the territory of the Kemerovo region the Fifth # time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600) # @@ -2922,7 +2937,7 @@ Zone Africa/Ceuta -0:21:16 - LMT 1901 Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C. -1:00 - CANT 1946 Sep 30 1:00 # Canaries T 0:00 - WET 1980 Apr 6 0:00s - 0:00 1:00 WEST 1980 Sep 28 0:00s + 0:00 1:00 WEST 1980 Sep 28 1:00u 0:00 EU WE%sT # IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u. # Ignore this for now, as the Canaries are part of the EU. @@ -3212,7 +3227,7 @@ Link Europe/Istanbul Asia/Istanbul # Ist # From Igor Karpov, who works for the Ukrainian Ministry of Justice, # via Garrett Wollman (2003-01-27): # BTW, I've found the official document on this matter. It's government -# regulations number 509, May 13, 1996. In my poor translation it says: +# regulations No. 509, May 13, 1996. In my poor translation it says: # "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday # of March at 3am the time is changing to 4am and each last Sunday of # October the time at 4am is changing to 3am" @@ -3221,7 +3236,7 @@ Link Europe/Istanbul Asia/Istanbul # Ist # On September 20, 2011 the deputies of the Verkhovna Rada agreed to # abolish the transfer clock to winter time. # -# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got +# Bill No. 8330 of MP from the Party of Regions Oleg Nadoshi got # approval from 266 deputies. # # Ukraine abolishes transfer back to the winter time (in Russian) Modified: head/contrib/tzdata/leap-seconds.list ============================================================================== --- head/contrib/tzdata/leap-seconds.list Thu Aug 13 23:57:15 2015 (r286749) +++ head/contrib/tzdata/leap-seconds.list Thu Aug 13 23:57:44 2015 (r286750) @@ -199,10 +199,10 @@ # current -- the update time stamp, the data and the name of the file # will not change. # -# Updated through IERS Bulletin C49 -# File expires on: 28 December 2015 +# Updated through IERS Bulletin C50 +# File expires on: 28 June 2016 # -#@ 3660249600 +#@ 3676060800 # 2272060800 10 # 1 Jan 1972 2287785600 11 # 1 Jul 1972 @@ -246,4 +246,4 @@ # the hash line is also ignored in the # computation. # -#h 45e70fa7 a9df2033 f4a49ab0 ec648273 7b6c22c +#h 3d037453 3acade76 570bd8f8 be2b8bc9 55ec6fe8 Modified: head/contrib/tzdata/northamerica ============================================================================== --- head/contrib/tzdata/northamerica Thu Aug 13 23:57:15 2015 (r286749) +++ head/contrib/tzdata/northamerica Thu Aug 13 23:57:44 2015 (r286750) @@ -1235,10 +1235,19 @@ Zone America/Goose_Bay -4:01:40 - LMT 18 # west Labrador, Nova Scotia, Prince Edward I -# From Paul Eggert (2006-03-22): +# From Brian Inglis (2015-07-20): +# From the historical weather station records available at: +# https://weatherspark.com/history/28351/1971/Sydney-Nova-Scotia-Canada +# Sydney shares the same time history as Glace Bay, so was +# likely to be the same across the island.... +# Sydney, as the capital and most populous location, or Cape Breton, would +# have been better names for the zone had we known this in 1996. + +# From Paul Eggert (2015-07-20): # Shanks & Pottenger write that since 1970 most of this region has been like # Halifax. Many locales did not observe peacetime DST until 1972; -# Glace Bay, NS is the largest that we know of. +# the Cape Breton area, represented by Glace Bay, is the largest we know of +# (Glace Bay was perhaps not the best name choice but no point changing now). # Shanks & Pottenger also write that Liverpool, NS was the only town # in Canada to observe DST in 1971 but not 1970; for now we'll assume # this is a typo. @@ -1796,13 +1805,13 @@ Zone America/Edmonton -7:33:52 - LMT 190 # Exact date in October unknown; Sunday October 1 is a reasonable guess. # 3. June 1918: switch to Pacific Daylight Time (GMT-7) # Exact date in June unknown; Sunday June 2 is a reasonable guess. -# note#1: +# note 1: # On Oct 27/1918 when daylight saving ended in the rest of Canada, # Creston did not change its clocks. -# note#2: +# note 2: # During WWII when the Federal Government legislated a mandatory clock change, # Creston did not oblige. -# note#3: +# note 3: # There is no guarantee that Creston will remain on Mountain Standard Time # (UTC-7) forever. # The subject was debated at least once this year by the town Council. Modified: head/contrib/tzdata/southamerica ============================================================================== --- head/contrib/tzdata/southamerica Thu Aug 13 23:57:15 2015 (r286749) +++ head/contrib/tzdata/southamerica Thu Aug 13 23:57:44 2015 (r286750) @@ -131,7 +131,7 @@ Rule Arg 2000 only - Mar 3 0:00 0 - # Timezone Law (which never was effectively applied) will (would?) be # in effect.... The article is at # http://ar.clarin.com/diario/2001-06-06/e-01701.htm -# ... The Law itself is "Ley No 25155", sanctioned on 1999-08-25, enacted +# ... The Law itself is "Ley No. 25155", sanctioned on 1999-08-25, enacted # 1999-09-17, and published 1999-09-21. The official publication is at: # http://www.boletin.jus.gov.ar/BON/Primera/1999/09-Septiembre/21/PDF/BO21-09-99LEG.PDF # Regretfully, you have to subscribe (and pay) for the on-line version.... @@ -175,15 +175,11 @@ Rule Arg 2000 only - Mar 3 0:00 0 - # http://www.worldtimezone.com/dst_news/dst_news_argentina03.html # http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish) -# From Rodrigo Severo (2008-10-06): -# Here is some info available at a Gentoo bug related to TZ on Argentina's DST: -# ... -# ------- Comment #1 from [jmdocile] 2008-10-06 16:28 0000 ------- -# Hi, there is a problem with timezone-data-2008e and maybe with -# timezone-data-2008f -# Argentinian law [Number] 25.155 is no longer valid. +# From Juan Manuel Docile in https://bugs.gentoo.org/240339 (2008-10-07) +# via Rodrigo Severo: +# Argentinian law No. 25.155 is no longer valid. # http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm -# The new one is law [Number] 26.350 +# The new one is law No. 26.350 # http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm # So there is no summer time in Argentina for now. @@ -771,7 +767,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890 # [ and in a second message (same day): ] # I found the decree. # -# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011 +# DECRETO No. 7.584, DE 13 DE OUTUBRO DE 2011 # Link : # http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6 @@ -1125,7 +1121,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1 # Conflicts between [1] and [2] were resolved as follows: # # - [1] says the 1910 transition was Jan 1, [2] says Jan 10 and cites -# Boletín Nº 1, Aviso Nº 1 (1910). Go with [2]. +# Boletín No. 1, Aviso No. 1 (1910). Go with [2]. # # - [1] says SMT was -4:42:45, [2] says Chile's official time from # 1916 to 1919 was -4:42:46.3, the meridian of Chile's National @@ -1133,7 +1129,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1 # Quinta Normal in Santiago. Go with [2], rounding it to -4:42:46. # # - [1] says the 1918 transition was Sep 1, [2] says Sep 10 and cites -# Boletín Nº 22, Aviso Nº 129/1918 (1918-08-23). Go with [2]. +# Boletín No. 22, Aviso No. 129/1918 (1918-08-23). Go with [2]. # # - [1] does not give times for transitions; assume they occur # at midnight mainland time, the current common practice. However, @@ -1533,7 +1529,7 @@ Rule Para 1997 only - Feb lastSun 0:00 0 # (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27). Rule Para 1998 2001 - Mar Sun>=1 0:00 0 - # From Rives McDow (2002-02-28): -# A decree was issued in Paraguay (no. 16350) on 2002-02-26 that changed the +# A decree was issued in Paraguay (No. 16350) on 2002-02-26 that changed the # dst method to be from the first Sunday in September to the first Sunday in # April. Rule Para 2002 2004 - Apr Sun>=1 0:00 0 - @@ -1713,8 +1709,19 @@ Rule Uruguay 2005 only - Oct 9 2:00 1: Rule Uruguay 2006 only - Mar 12 2:00 0 - # From Jesper Nørgaard Welen (2006-09-06): # http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF -Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S -Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 - +# +# From Steffen Thorsen (2015-06-30): +# ... it looks like they will not be using DST the coming summer: +# http://www.elobservador.com.uy/gobierno-resolvio-que-no-habra-cambio-horario-verano-n656787 +# http://www.republica.com.uy/este-ano-no-se-modificara-el-huso-horario-en-uruguay/523760/ +# From Paul Eggert (2015-06-30): +# Apparently restaurateurs complained that DST caused people to go to the beach +# instead of out to dinner. +# From Pablo Camargo (2015-07-13): +# http://archivo.presidencia.gub.uy/sci/decretos/2015/06/cons_min_201.pdf +# [dated 2015-06-29; repeals Decree 311/006 dated 2006-09-04] +Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 S +Rule Uruguay 2007 2015 - Mar Sun>=8 2:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28 -3:44:44 - MMT 1920 May 1 # Montevideo MT @@ -1723,6 +1730,10 @@ Zone America/Montevideo -3:44:44 - LMT 1 # Venezuela # +# From Paul Eggert (2015-07-28): +# For the 1965 transition see Gaceta Oficial No. 27.619 (1964-12-15), p 205.533 +# http://www.pgr.gob.ve/dmdocuments/1964/27619.pdf +# # From John Stainforth (2007-11-28): # ... the change for Venezuela originally expected for 2007-12-31 has # been brought forward to 2007-12-09. The official announcement was @@ -1734,6 +1745,6 @@ Zone America/Montevideo -3:44:44 - LMT 1 # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Caracas -4:27:44 - LMT 1890 -4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time? - -4:30 - VET 1965 # Venezuela Time + -4:30 - VET 1965 Jan 1 0:00 # Venezuela T. -4:00 - VET 2007 Dec 9 3:00 -4:30 - VET Modified: head/contrib/tzdata/zone.tab ============================================================================== --- head/contrib/tzdata/zone.tab Thu Aug 13 23:57:15 2015 (r286749) +++ head/contrib/tzdata/zone.tab Thu Aug 13 23:57:44 2015 (r286750) @@ -106,8 +106,8 @@ BW -2439+02555 Africa/Gaborone BY +5354+02734 Europe/Minsk BZ +1730-08812 America/Belize CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador -CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI -CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971 +CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (peninsula), PEI +CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia (Cape Breton) CA +4606-06447 America/Moncton Atlantic Time - New Brunswick CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore Modified: head/contrib/tzdata/zone1970.tab ============================================================================== --- head/contrib/tzdata/zone1970.tab Thu Aug 13 23:57:15 2015 (r286749) +++ head/contrib/tzdata/zone1970.tab Thu Aug 13 23:57:44 2015 (r286750) @@ -104,8 +104,8 @@ BT +2728+08939 Asia/Thimphu BY +5354+02734 Europe/Minsk BZ +1730-08812 America/Belize CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador -CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI -CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971 +CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (peninsula), PEI +CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia (Cape Breton) CA +4606-06447 America/Moncton Atlantic Time - New Brunswick CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore From owner-svn-src-head@freebsd.org Fri Aug 14 00:01:09 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2BEC29B8D0E; Fri, 14 Aug 2015 00:01:09 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-io0-x235.google.com (mail-io0-x235.google.com [IPv6:2607:f8b0:4001:c06::235]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E54AB1E1C; Fri, 14 Aug 2015 00:01:08 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: by iods203 with SMTP id s203so69357874iod.0; Thu, 13 Aug 2015 17:01:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=VAXTKNxjThjqNbgdlGnJw9J3FfrUjvQvfPRC244ju28=; b=dS1GWGBBOJJn5b31SKd1f/VGuBFytiS1CNal8IYXpDOVjjVaOsiygy6bI3h7TFDQGG wPftWd2ci/KdDNcbbAIqSGDMRjVMOrFhGqQ8S8qPH/tIAsxijVWqwfkdgwGrH1SdeoZt Gi1HiLPALQl8AYrB7yiKzscG9ymN1kOtdW+NP+v7PMkxJnPQTmL59js4CE4Pp4HuWNIu yAlTjehsY6+CV7JvzzQ9sM6XCsKsa3eOqPh8GeFfy7K0feMePmkWRGKs/ZOi/ayjy5ls ZH1OxtkuWwcnSgY0Q1w7K8o9aAXX//Czt28LoUSBmkqfZxGKET6u5XEtVjvcN4DZTWia GDrw== X-Received: by 10.107.135.79 with SMTP id j76mr31048741iod.29.1439510468128; Thu, 13 Aug 2015 17:01:08 -0700 (PDT) MIME-Version: 1.0 Sender: carpeddiem@gmail.com Received: by 10.107.156.12 with HTTP; Thu, 13 Aug 2015 17:00:48 -0700 (PDT) In-Reply-To: <201508132204.t7DM4VUm070952@repo.freebsd.org> References: <201508132204.t7DM4VUm070952@repo.freebsd.org> From: Ed Maste Date: Thu, 13 Aug 2015 20:00:48 -0400 X-Google-Sender-Auth: O2UNn-qwYfO56OkGtJqKxkgWGjQ Message-ID: Subject: Re: svn commit: r286745 - head/tools/build/mk To: Antoine Brodin Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 00:01:09 -0000 On 13 August 2015 at 18:04, Antoine Brodin wrote: > Author: antoine > Date: Thu Aug 13 22:04:30 2015 > New Revision: 286745 > URL: https://svnweb.freebsd.org/changeset/base/286745 > > Log: > Stop removing ELF toolchain tools Oops! Thanks for fixing this. From owner-svn-src-head@freebsd.org Fri Aug 14 01:27:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3DDB799F0C1; Fri, 14 Aug 2015 01:27:31 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2E35C1C4C; Fri, 14 Aug 2015 01:27:31 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7E1RVoj054569; Fri, 14 Aug 2015 01:27:31 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7E1RVet054568; Fri, 14 Aug 2015 01:27:31 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201508140127.t7E1RVet054568@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Fri, 14 Aug 2015 01:27:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286757 - head/lib/libc/string X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 01:27:31 -0000 Author: araujo Date: Fri Aug 14 01:27:30 2015 New Revision: 286757 URL: https://svnweb.freebsd.org/changeset/base/286757 Log: Make clear the bcopy(3) manpage regards when it was marked as LEGACY as well as when it was removed from POSIX specification. Reviewed by: theraven, wblock, bapt, rodrigc Approved by: bapt, rodrigc (mentor) Differential Revision: D3374 Modified: head/lib/libc/string/bcopy.3 Modified: head/lib/libc/string/bcopy.3 ============================================================================== --- head/lib/libc/string/bcopy.3 Fri Aug 14 00:19:09 2015 (r286756) +++ head/lib/libc/string/bcopy.3 Fri Aug 14 01:27:30 2015 (r286757) @@ -31,7 +31,7 @@ .\" @(#)bcopy.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd August 13, 2015 +.Dd August 14, 2015 .Dt BCOPY 3 .Os .Sh NAME @@ -57,18 +57,6 @@ The two strings may overlap. If .Fa len is zero, no bytes are copied. -.Pp -This function is obsolete (marked as LEGACY in -POSIX.1-2001): please use -.Xr memmove 3 -in new programs. -Note that -.Fn bcopy -takes its src and dst arguments in the opposite -order from -.Xr memmove 3 . -POSIX.1-2008 removes the specification of -.Fn bcopy . .Sh SEE ALSO .Xr memccpy 3 , .Xr memcpy 3 , @@ -87,3 +75,25 @@ before it was moved to for .St -p1003.1-2001 compliance. +.Pp +The +.St -p1003.1-2008 +removes the specification of +.Fn bcopy +and it is marked as LEGACY in +.St -p1003.1-2004 . +New programs should use +.Xr memmove 3 . +If the input and output buffer do not overlap, then +.Xr memcpy 3 +is more efficient. +Note that +.Fn bcopy +takes +.Ar src +and +.Ar dst +in the opposite order from +.Fn memmove +and +.Fn memcpy . From owner-svn-src-head@freebsd.org Fri Aug 14 03:03:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BF0E19A01BE; Fri, 14 Aug 2015 03:03:16 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A388F11A1; Fri, 14 Aug 2015 03:03:16 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7E33Ga7095625; Fri, 14 Aug 2015 03:03:16 GMT (envelope-from pfg@FreeBSD.org) Received: (from pfg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7E33EnN095618; Fri, 14 Aug 2015 03:03:14 GMT (envelope-from pfg@FreeBSD.org) Message-Id: <201508140303.t7E33EnN095618@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: pfg set sender to pfg@FreeBSD.org using -f From: "Pedro F. Giffuni" Date: Fri, 14 Aug 2015 03:03:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286760 - in head/lib/libc: . secure sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 03:03:16 -0000 Author: pfg Date: Fri Aug 14 03:03:13 2015 New Revision: 286760 URL: https://svnweb.freebsd.org/changeset/base/286760 Log: Move the stack protector to a new "secure" directory As part of the code refactoring to support FORTIFY_SOURCE we want a new subdirectory "secure" to keep the files related to security. Move the stack protector functions to this new directory. No functional change. Differential Review: https://reviews.freebsd.org/D3333 Added: head/lib/libc/secure/ head/lib/libc/secure/Makefile.inc (contents, props changed) head/lib/libc/secure/Symbol.map (contents, props changed) head/lib/libc/secure/stack_protector.c - copied unchanged from r286712, head/lib/libc/sys/stack_protector.c head/lib/libc/secure/stack_protector_compat.c - copied unchanged from r286392, head/lib/libc/sys/stack_protector_compat.c Deleted: head/lib/libc/sys/stack_protector.c head/lib/libc/sys/stack_protector_compat.c Modified: head/lib/libc/Makefile head/lib/libc/sys/Makefile.inc head/lib/libc/sys/Symbol.map Modified: head/lib/libc/Makefile ============================================================================== --- head/lib/libc/Makefile Fri Aug 14 02:45:22 2015 (r286759) +++ head/lib/libc/Makefile Fri Aug 14 03:03:13 2015 (r286760) @@ -95,6 +95,7 @@ NOASM= .include "${LIBC_SRCTOP}/stdtime/Makefile.inc" .include "${LIBC_SRCTOP}/string/Makefile.inc" .include "${LIBC_SRCTOP}/sys/Makefile.inc" +.include "${LIBC_SRCTOP}/secure/Makefile.inc" .include "${LIBC_SRCTOP}/rpc/Makefile.inc" .include "${LIBC_SRCTOP}/uuid/Makefile.inc" .include "${LIBC_SRCTOP}/xdr/Makefile.inc" Added: head/lib/libc/secure/Makefile.inc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libc/secure/Makefile.inc Fri Aug 14 03:03:13 2015 (r286760) @@ -0,0 +1,12 @@ +# $FreeBSD$ +# +# libc sources related to security + +.PATH: ${LIBC_SRCTOP}/secure + +# Sources common to both syscall interfaces: +SRCS+= \ + stack_protector.c \ + stack_protector_compat.c + +SYM_MAPS+= ${LIBC_SRCTOP}/secure/Symbol.map Added: head/lib/libc/secure/Symbol.map ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libc/secure/Symbol.map Fri Aug 14 03:03:13 2015 (r286760) @@ -0,0 +1,14 @@ +/* + * $FreeBSD$ + */ + +/* + * It'd be nice to have this automatically generated, but we don't + * know to what version they will eventually belong, so for now + * it has to be manual. + */ +FBSD_1.0 { + __chk_fail; + __stack_chk_fail; + __stack_chk_guard; +}; Copied: head/lib/libc/secure/stack_protector.c (from r286712, head/lib/libc/sys/stack_protector.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libc/secure/stack_protector.c Fri Aug 14 03:03:13 2015 (r286760, copy of r286712, head/lib/libc/sys/stack_protector.c) @@ -0,0 +1,117 @@ +/* $NetBSD: stack_protector.c,v 1.4 2006/11/22 17:23:25 christos Exp $ */ +/* $OpenBSD: stack_protector.c,v 1.10 2006/03/31 05:34:44 deraadt Exp $ */ +/* + * Copyright (c) 2002 Hiroaki Etoh, Federico G. Schwindt, and Miodrag Vallat. + * 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 AUTHORS ``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 AUTHORS 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 "libc_private.h" + +extern int __sysctl(const int *name, u_int namelen, void *oldp, + size_t *oldlenp, void *newp, size_t newlen); + +long __stack_chk_guard[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +static void __guard_setup(void) __attribute__((__constructor__, __used__)); +static void __fail(const char *); +void __stack_chk_fail(void); +void __chk_fail(void); + +/*LINTED used*/ +static void +__guard_setup(void) +{ + static const int mib[2] = { CTL_KERN, KERN_ARND }; + size_t len; + int error; + + if (__stack_chk_guard[0] != 0) + return; + error = _elf_aux_info(AT_CANARY, __stack_chk_guard, + sizeof(__stack_chk_guard)); + if (error == 0 && __stack_chk_guard[0] != 0) + return; + + len = sizeof(__stack_chk_guard); + if (__sysctl(mib, nitems(mib), __stack_chk_guard, &len, NULL, 0) == + -1 || len != sizeof(__stack_chk_guard)) { + /* If sysctl was unsuccessful, use the "terminator canary". */ + ((unsigned char *)(void *)__stack_chk_guard)[0] = 0; + ((unsigned char *)(void *)__stack_chk_guard)[1] = 0; + ((unsigned char *)(void *)__stack_chk_guard)[2] = '\n'; + ((unsigned char *)(void *)__stack_chk_guard)[3] = 255; + } +} + +/*ARGSUSED*/ +static void +__fail(const char *msg) +{ + struct sigaction sa; + sigset_t mask; + + /* Immediately block all signal handlers from running code */ + (void)sigfillset(&mask); + (void)sigdelset(&mask, SIGABRT); + (void)sigprocmask(SIG_BLOCK, &mask, NULL); + + /* This may fail on a chroot jail... */ + syslog(LOG_CRIT, "%s", msg); + + (void)memset(&sa, 0, sizeof(sa)); + (void)sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = SIG_DFL; + (void)sigaction(SIGABRT, &sa, NULL); + (void)kill(getpid(), SIGABRT); + _exit(127); +} + +void +__stack_chk_fail(void) +{ + __fail("stack overflow detected; terminated"); +} + +void +__chk_fail(void) +{ + __fail("buffer overflow detected; terminated"); +} + +#ifndef PIC +__weak_reference(__stack_chk_fail, __stack_chk_fail_local); +#endif Copied: head/lib/libc/secure/stack_protector_compat.c (from r286392, head/lib/libc/sys/stack_protector_compat.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libc/secure/stack_protector_compat.c Fri Aug 14 03:03:13 2015 (r286760, copy of r286392, head/lib/libc/sys/stack_protector_compat.c) @@ -0,0 +1,20 @@ +/* + * Written by Alexander Kabaev + * The file is in public domain. + */ + +#include +__FBSDID("$FreeBSD$"); + +void __stack_chk_fail(void); + +#ifdef PIC +void +__stack_chk_fail_local_hidden(void) +{ + + __stack_chk_fail(); +} + +__sym_compat(__stack_chk_fail_local, __stack_chk_fail_local_hidden, FBSD_1.0); +#endif Modified: head/lib/libc/sys/Makefile.inc ============================================================================== --- head/lib/libc/sys/Makefile.inc Fri Aug 14 02:45:22 2015 (r286759) +++ head/lib/libc/sys/Makefile.inc Fri Aug 14 03:03:13 2015 (r286760) @@ -21,8 +21,6 @@ PSEUDO+= _clock_gettime.o _gettimeofday. # Sources common to both syscall interfaces: SRCS+= \ - stack_protector.c \ - stack_protector_compat.c \ __error.c \ interposing_table.c Modified: head/lib/libc/sys/Symbol.map ============================================================================== --- head/lib/libc/sys/Symbol.map Fri Aug 14 02:45:22 2015 (r286759) +++ head/lib/libc/sys/Symbol.map Fri Aug 14 03:03:13 2015 (r286760) @@ -56,7 +56,6 @@ FBSD_1.0 { bind; chdir; chflags; - __chk_fail; chmod; chown; chroot; @@ -281,8 +280,6 @@ FBSD_1.0 { sigwaitinfo; socket; socketpair; - __stack_chk_fail; - __stack_chk_guard; stat; statfs; swapoff; From owner-svn-src-head@freebsd.org Fri Aug 14 09:25:55 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 520409B8069; Fri, 14 Aug 2015 09:25:55 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 40FFF146F; Fri, 14 Aug 2015 09:25:55 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7E9PttG051323; Fri, 14 Aug 2015 09:25:55 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7E9PtpP051322; Fri, 14 Aug 2015 09:25:55 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508140925.t7E9PtpP051322@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 14 Aug 2015 09:25:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286762 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:25:55 -0000 Author: mav Date: Fri Aug 14 09:25:54 2015 New Revision: 286762 URL: https://svnweb.freebsd.org/changeset/base/286762 Log: Revert part of r205231, introducing multiple ARC state locks. This local implementation will be replaced by one from Illumos to reduce code divergence and make further merges easier. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 04:23:17 2015 (r286761) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:25:54 2015 (r286762) @@ -201,6 +201,9 @@ extern int zfs_prefetch_disable; */ static boolean_t arc_warm; +/* + * These tunables are for performance analysis. + */ uint64_t zfs_arc_max; uint64_t zfs_arc_min; uint64_t zfs_arc_meta_limit = 0; @@ -312,31 +315,13 @@ SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_meta * second level ARC benefit from these fast lookups. */ -#define ARCS_LOCK_PAD CACHE_LINE_SIZE -struct arcs_lock { - kmutex_t arcs_lock; -#ifdef _KERNEL - unsigned char pad[(ARCS_LOCK_PAD - sizeof (kmutex_t))]; -#endif -}; - -/* - * must be power of two for mask use to work - * - */ -#define ARC_BUFC_NUMDATALISTS 16 -#define ARC_BUFC_NUMMETADATALISTS 16 -#define ARC_BUFC_NUMLISTS (ARC_BUFC_NUMMETADATALISTS + ARC_BUFC_NUMDATALISTS) - typedef struct arc_state { + list_t arcs_list[ARC_BUFC_NUMTYPES]; /* list of evictable buffers */ uint64_t arcs_lsize[ARC_BUFC_NUMTYPES]; /* amount of evictable data */ uint64_t arcs_size; /* total amount of data in this state */ - list_t arcs_lists[ARC_BUFC_NUMLISTS]; /* list of evictable buffers */ - struct arcs_lock arcs_locks[ARC_BUFC_NUMLISTS] __aligned(CACHE_LINE_SIZE); + kmutex_t arcs_mtx; } arc_state_t; -#define ARCS_LOCK(s, i) (&((s)->arcs_locks[(i)].arcs_lock)) - /* The 6 states: */ static arc_state_t ARC_anon; static arc_state_t ARC_mru; @@ -362,7 +347,6 @@ typedef struct arc_stats { kstat_named_t arcstat_mfu_ghost_hits; kstat_named_t arcstat_allocated; kstat_named_t arcstat_deleted; - kstat_named_t arcstat_stolen; kstat_named_t arcstat_recycle_miss; /* * Number of buffers that could not be evicted because the hash lock @@ -584,7 +568,6 @@ static arc_stats_t arc_stats = { { "mfu_ghost_hits", KSTAT_DATA_UINT64 }, { "allocated", KSTAT_DATA_UINT64 }, { "deleted", KSTAT_DATA_UINT64 }, - { "stolen", KSTAT_DATA_UINT64 }, { "recycle_miss", KSTAT_DATA_UINT64 }, { "mutex_miss", KSTAT_DATA_UINT64 }, { "evict_skip", KSTAT_DATA_UINT64 }, @@ -1681,23 +1664,6 @@ arc_buf_freeze(arc_buf_t *buf) } static void -get_buf_info(arc_buf_hdr_t *hdr, arc_state_t *state, list_t **list, kmutex_t **lock) -{ - uint64_t buf_hashid = buf_hash(hdr->b_spa, &hdr->b_dva, hdr->b_birth); - - if (arc_buf_type(hdr) == ARC_BUFC_METADATA) - buf_hashid &= (ARC_BUFC_NUMMETADATALISTS - 1); - else { - buf_hashid &= (ARC_BUFC_NUMDATALISTS - 1); - buf_hashid += ARC_BUFC_NUMMETADATALISTS; - } - - *list = &state->arcs_lists[buf_hashid]; - *lock = ARCS_LOCK(state, buf_hashid); -} - - -static void add_reference(arc_buf_hdr_t *hdr, kmutex_t *hash_lock, void *tag) { ASSERT(HDR_HAS_L1HDR(hdr)); @@ -1709,13 +1675,11 @@ add_reference(arc_buf_hdr_t *hdr, kmutex /* We don't use the L2-only state list. */ if (state != arc_l2c_only) { uint64_t delta = hdr->b_size * hdr->b_l1hdr.b_datacnt; + list_t *list = &state->arcs_list[arc_buf_type(hdr)]; uint64_t *size = &state->arcs_lsize[arc_buf_type(hdr)]; - list_t *list; - kmutex_t *lock; - get_buf_info(hdr, state, &list, &lock); - ASSERT(!MUTEX_HELD(lock)); - mutex_enter(lock); + ASSERT(!MUTEX_HELD(&state->arcs_mtx)); + mutex_enter(&state->arcs_mtx); ASSERT(list_link_active(&hdr->b_l1hdr.b_arc_node)); list_remove(list, hdr); if (GHOST_STATE(state)) { @@ -1726,7 +1690,7 @@ add_reference(arc_buf_hdr_t *hdr, kmutex ASSERT(delta > 0); ASSERT3U(*size, >=, delta); atomic_add_64(size, -delta); - mutex_exit(lock); + mutex_exit(&state->arcs_mtx); } /* remove the prefetch flag if we get a reference */ hdr->b_flags &= ~ARC_FLAG_PREFETCH; @@ -1750,18 +1714,15 @@ remove_reference(arc_buf_hdr_t *hdr, kmu if (((cnt = refcount_remove(&hdr->b_l1hdr.b_refcnt, tag)) == 0) && (state != arc_anon)) { uint64_t *size = &state->arcs_lsize[arc_buf_type(hdr)]; - list_t *list; - kmutex_t *lock; - get_buf_info(hdr, state, &list, &lock); - ASSERT(!MUTEX_HELD(lock)); - mutex_enter(lock); + ASSERT(!MUTEX_HELD(&state->arcs_mtx)); + mutex_enter(&state->arcs_mtx); ASSERT(!list_link_active(&hdr->b_l1hdr.b_arc_node)); - list_insert_head(list, hdr); + list_insert_head(&state->arcs_list[arc_buf_type(hdr)], hdr); ASSERT(hdr->b_l1hdr.b_datacnt > 0); atomic_add_64(size, hdr->b_size * hdr->b_l1hdr.b_datacnt); - mutex_exit(lock); + mutex_exit(&state->arcs_mtx); } return (cnt); } @@ -1779,8 +1740,6 @@ arc_change_state(arc_state_t *new_state, uint32_t datacnt; uint64_t from_delta, to_delta; arc_buf_contents_t buftype = arc_buf_type(hdr); - list_t *list; - kmutex_t *lock; /* * We almost always have an L1 hdr here, since we call arc_hdr_realloc() @@ -1813,17 +1772,15 @@ arc_change_state(arc_state_t *new_state, */ if (refcnt == 0) { if (old_state != arc_anon && old_state != arc_l2c_only) { - int use_mutex; + int use_mutex = !MUTEX_HELD(&old_state->arcs_mtx); uint64_t *size = &old_state->arcs_lsize[buftype]; - get_buf_info(hdr, old_state, &list, &lock); - use_mutex = !MUTEX_HELD(lock); if (use_mutex) - mutex_enter(lock); + mutex_enter(&old_state->arcs_mtx); ASSERT(HDR_HAS_L1HDR(hdr)); ASSERT(list_link_active(&hdr->b_l1hdr.b_arc_node)); - list_remove(list, hdr); + list_remove(&old_state->arcs_list[buftype], hdr); /* * If prefetching out of the ghost cache, @@ -1838,10 +1795,10 @@ arc_change_state(arc_state_t *new_state, atomic_add_64(size, -from_delta); if (use_mutex) - mutex_exit(lock); + mutex_exit(&old_state->arcs_mtx); } if (new_state != arc_anon && new_state != arc_l2c_only) { - int use_mutex; + int use_mutex = !MUTEX_HELD(&new_state->arcs_mtx); uint64_t *size = &new_state->arcs_lsize[buftype]; /* @@ -1851,23 +1808,21 @@ arc_change_state(arc_state_t *new_state, * beforehand. */ ASSERT(HDR_HAS_L1HDR(hdr)); - get_buf_info(hdr, new_state, &list, &lock); - use_mutex = !MUTEX_HELD(lock); if (use_mutex) - mutex_enter(lock); + mutex_enter(&new_state->arcs_mtx); - list_insert_head(list, hdr); + list_insert_head(&new_state->arcs_list[buftype], hdr); /* ghost elements have a ghost size */ if (GHOST_STATE(new_state)) { - ASSERT(datacnt == 0); + ASSERT0(datacnt); ASSERT(hdr->b_l1hdr.b_buf == NULL); to_delta = hdr->b_size; } atomic_add_64(size, to_delta); if (use_mutex) - mutex_exit(lock); + mutex_exit(&new_state->arcs_mtx); } } @@ -1889,10 +1844,8 @@ arc_change_state(arc_state_t *new_state, * L2 headers should never be on the L2 state list since they don't * have L1 headers allocated. */ -#ifdef illumos ASSERT(list_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_DATA]) && list_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA])); -#endif } void @@ -2532,41 +2485,55 @@ arc_evict(arc_state_t *state, uint64_t s { arc_state_t *evicted_state; uint64_t bytes_evicted = 0, skipped = 0, missed = 0; - int64_t bytes_remaining; arc_buf_hdr_t *hdr, *hdr_prev = NULL; - list_t *evicted_list, *list, *evicted_list_start, *list_start; - kmutex_t *lock, *evicted_lock; kmutex_t *hash_lock; boolean_t have_lock; void *stolen = NULL; arc_buf_hdr_t marker = { 0 }; int count = 0; - static int evict_metadata_offset, evict_data_offset; - int i, idx, offset, list_count, lists; ASSERT(state == arc_mru || state == arc_mfu); evicted_state = (state == arc_mru) ? arc_mru_ghost : arc_mfu_ghost; /* + * The ghost list lock must be acquired first in order to prevent + * a 3 party deadlock: + * + * - arc_evict_ghost acquires arc_*_ghost->arcs_mtx, followed by + * l2ad_mtx in arc_hdr_realloc + * - l2arc_write_buffers acquires l2ad_mtx, followed by arc_*->arcs_mtx + * - arc_evict acquires arc_*_ghost->arcs_mtx, followed by + * arc_*_ghost->arcs_mtx and forms a deadlock cycle. + * + * This situation is avoided by acquiring the ghost list lock first. + */ + mutex_enter(&evicted_state->arcs_mtx); + mutex_enter(&state->arcs_mtx); + + /* * Decide which "type" (data vs metadata) to recycle from. * * If we are over the metadata limit, recycle from metadata. * If we are under the metadata minimum, recycle from data. * Otherwise, recycle from whichever type has the oldest (least - * recently accessed) header. This is not yet implemented. + * recently accessed) header. */ if (recycle) { + arc_buf_hdr_t *data_hdr = + list_tail(&state->arcs_list[ARC_BUFC_DATA]); + arc_buf_hdr_t *metadata_hdr = + list_tail(&state->arcs_list[ARC_BUFC_METADATA]); arc_buf_contents_t realtype; - if (state->arcs_lsize[ARC_BUFC_DATA] == 0) { + + if (data_hdr == NULL) { realtype = ARC_BUFC_METADATA; - } else if (state->arcs_lsize[ARC_BUFC_METADATA] == 0) { + } else if (metadata_hdr == NULL) { realtype = ARC_BUFC_DATA; } else if (arc_meta_used >= arc_meta_limit) { realtype = ARC_BUFC_METADATA; } else if (arc_meta_used <= arc_meta_min) { realtype = ARC_BUFC_DATA; -#ifdef illumos } else if (HDR_HAS_L1HDR(data_hdr) && HDR_HAS_L1HDR(metadata_hdr) && data_hdr->b_l1hdr.b_arc_access < @@ -2574,11 +2541,6 @@ arc_evict(arc_state_t *state, uint64_t s realtype = ARC_BUFC_DATA; } else { realtype = ARC_BUFC_METADATA; -#else - } else { - /* TODO */ - realtype = type; -#endif } if (realtype != type) { /* @@ -2592,49 +2554,10 @@ arc_evict(arc_state_t *state, uint64_t s } } - if (type == ARC_BUFC_METADATA) { - offset = 0; - list_count = ARC_BUFC_NUMMETADATALISTS; - list_start = &state->arcs_lists[0]; - evicted_list_start = &evicted_state->arcs_lists[0]; - idx = evict_metadata_offset; - } else { - offset = ARC_BUFC_NUMMETADATALISTS; - list_start = &state->arcs_lists[offset]; - evicted_list_start = &evicted_state->arcs_lists[offset]; - list_count = ARC_BUFC_NUMDATALISTS; - idx = evict_data_offset; - } - bytes_remaining = evicted_state->arcs_lsize[type]; - lists = 0; - -evict_start: - list = &list_start[idx]; - evicted_list = &evicted_list_start[idx]; - lock = ARCS_LOCK(state, (offset + idx)); - evicted_lock = ARCS_LOCK(evicted_state, (offset + idx)); - - /* - * The ghost list lock must be acquired first in order to prevent - * a 3 party deadlock: - * - * - arc_evict_ghost acquires arc_*_ghost->arcs_mtx, followed by - * l2ad_mtx in arc_hdr_realloc - * - l2arc_write_buffers acquires l2ad_mtx, followed by arc_*->arcs_mtx - * - arc_evict acquires arc_*_ghost->arcs_mtx, followed by - * arc_*_ghost->arcs_mtx and forms a deadlock cycle. - * - * This situation is avoided by acquiring the ghost list lock first. - */ - mutex_enter(evicted_lock); - mutex_enter(lock); + list_t *list = &state->arcs_list[type]; for (hdr = list_tail(list); hdr; hdr = hdr_prev) { hdr_prev = list_prev(list, hdr); - if (HDR_HAS_L1HDR(hdr)) { - bytes_remaining -= - (hdr->b_size * hdr->b_l1hdr.b_datacnt); - } /* prefetch buffers have a minimum lifespan */ if (HDR_IO_IN_PROGRESS(hdr) || (spa && hdr->b_spa != spa) || @@ -2664,11 +2587,11 @@ evict_start: */ if (!recycle && count++ > arc_evict_iterations) { list_insert_after(list, hdr, &marker); - mutex_exit(lock); - mutex_exit(evicted_lock); + mutex_exit(&state->arcs_mtx); + mutex_exit(&evicted_state->arcs_mtx); kpreempt(KPREEMPT_SYNC); - mutex_enter(evicted_lock); - mutex_enter(lock); + mutex_enter(&evicted_state->arcs_mtx); + mutex_enter(&state->arcs_mtx); hdr_prev = list_prev(list, &marker); list_remove(list, &marker); count = 0; @@ -2738,35 +2661,17 @@ evict_start: mutex_exit(hash_lock); if (bytes >= 0 && bytes_evicted >= bytes) break; - if (bytes_remaining > 0) { - mutex_exit(evicted_lock); - mutex_exit(lock); - idx = ((idx + 1) & (list_count - 1)); - lists++; - goto evict_start; - } } else { missed += 1; } } - mutex_exit(lock); - mutex_exit(evicted_lock); + mutex_exit(&state->arcs_mtx); + mutex_exit(&evicted_state->arcs_mtx); - idx = ((idx + 1) & (list_count - 1)); - lists++; - - if (bytes_evicted < bytes) { - if (lists < list_count) - goto evict_start; - else - dprintf("only evicted %lld bytes from %x", - (longlong_t)bytes_evicted, state); - } - if (type == ARC_BUFC_METADATA) - evict_metadata_offset = idx; - else - evict_data_offset = idx; + if (bytes_evicted < bytes) + dprintf("only evicted %lld bytes from %x", + (longlong_t)bytes_evicted, state); if (skipped) ARCSTAT_INCR(arcstat_evict_skip, skipped); @@ -2781,8 +2686,6 @@ evict_start: * this chore to the arc_reclaim_thread(). */ - if (stolen) - ARCSTAT_BUMP(arcstat_stolen); return (stolen); } @@ -2795,29 +2698,15 @@ arc_evict_ghost(arc_state_t *state, uint { arc_buf_hdr_t *hdr, *hdr_prev; arc_buf_hdr_t marker = { 0 }; - list_t *list, *list_start; - kmutex_t *hash_lock, *lock; + list_t *list = &state->arcs_list[ARC_BUFC_DATA]; + kmutex_t *hash_lock; uint64_t bytes_deleted = 0; uint64_t bufs_skipped = 0; int count = 0; - static int evict_offset; - int list_count, idx = evict_offset; - int offset, lists = 0; ASSERT(GHOST_STATE(state)); - - /* - * data lists come after metadata lists - */ - list_start = &state->arcs_lists[ARC_BUFC_NUMMETADATALISTS]; - list_count = ARC_BUFC_NUMDATALISTS; - offset = ARC_BUFC_NUMMETADATALISTS; - -evict_start: - list = &list_start[idx]; - lock = ARCS_LOCK(state, idx + offset); - - mutex_enter(lock); +top: + mutex_enter(&state->arcs_mtx); for (hdr = list_tail(list); hdr; hdr = hdr_prev) { hdr_prev = list_prev(list, hdr); if (arc_buf_type(hdr) >= ARC_BUFC_NUMTYPES) @@ -2842,9 +2731,9 @@ evict_start: */ if (count++ > arc_evict_iterations) { list_insert_after(list, hdr, &marker); - mutex_exit(lock); + mutex_exit(&state->arcs_mtx); kpreempt(KPREEMPT_SYNC); - mutex_enter(lock); + mutex_enter(&state->arcs_mtx); hdr_prev = list_prev(list, &marker); list_remove(list, &marker); count = 0; @@ -2886,10 +2775,10 @@ evict_start: * available, restart from where we left off. */ list_insert_after(list, hdr, &marker); - mutex_exit(lock); + mutex_exit(&state->arcs_mtx); mutex_enter(hash_lock); mutex_exit(hash_lock); - mutex_enter(lock); + mutex_enter(&state->arcs_mtx); hdr_prev = list_prev(list, &marker); list_remove(list, &marker); } else { @@ -2897,20 +2786,12 @@ evict_start: } } - mutex_exit(lock); - idx = ((idx + 1) & (ARC_BUFC_NUMDATALISTS - 1)); - lists++; - - if (lists < list_count) - goto evict_start; + mutex_exit(&state->arcs_mtx); - evict_offset = idx; - if ((uintptr_t)list > (uintptr_t)&state->arcs_lists[ARC_BUFC_NUMMETADATALISTS] && + if (list == &state->arcs_list[ARC_BUFC_DATA] && (bytes < 0 || bytes_deleted < bytes)) { - list_start = &state->arcs_lists[0]; - list_count = ARC_BUFC_NUMMETADATALISTS; - offset = lists = 0; - goto evict_start; + list = &state->arcs_list[ARC_BUFC_METADATA]; + goto top; } if (bufs_skipped) { @@ -2990,23 +2871,14 @@ arc_adjust(void) static void arc_do_user_evicts(void) { - static arc_buf_t *tmp_arc_eviction_list; - - /* - * Move list over to avoid LOR - */ -restart: mutex_enter(&arc_eviction_mtx); - tmp_arc_eviction_list = arc_eviction_list; - arc_eviction_list = NULL; - mutex_exit(&arc_eviction_mtx); - - while (tmp_arc_eviction_list != NULL) { - arc_buf_t *buf = tmp_arc_eviction_list; - tmp_arc_eviction_list = buf->b_next; + while (arc_eviction_list != NULL) { + arc_buf_t *buf = arc_eviction_list; + arc_eviction_list = buf->b_next; mutex_enter(&buf->b_evict_lock); buf->b_hdr = NULL; mutex_exit(&buf->b_evict_lock); + mutex_exit(&arc_eviction_mtx); if (buf->b_efunc != NULL) VERIFY0(buf->b_efunc(buf->b_private)); @@ -3014,10 +2886,9 @@ restart: buf->b_efunc = NULL; buf->b_private = NULL; kmem_cache_free(buf_cache, buf); + mutex_enter(&arc_eviction_mtx); } - - if (arc_eviction_list != NULL) - goto restart; + mutex_exit(&arc_eviction_mtx); } /* @@ -3065,7 +2936,6 @@ arc_flush(spa_t *spa) void arc_shrink(int64_t to_free) { - if (arc_c > arc_c_min) { DTRACE_PROBE4(arc__shrink, uint64_t, arc_c, uint64_t, arc_c_min, uint64_t, arc_p, uint64_t, to_free); @@ -3903,7 +3773,7 @@ arc_read_done(zio_t *zio) } /* - * "Read" the block block at the specified DVA (in bp) via the + * "Read" the block at the specified DVA (in bp) via the * cache. If the block is found in the cache, invoke the provided * callback immediately and return. Note that the `zio' parameter * in the callback will be NULL in this case, since no IO was @@ -4297,8 +4167,6 @@ arc_clear_callback(arc_buf_t *buf) kmutex_t *hash_lock; arc_evict_func_t *efunc = buf->b_efunc; void *private = buf->b_private; - list_t *list, *evicted_list; - kmutex_t *lock, *evicted_lock; mutex_enter(&buf->b_evict_lock); hdr = buf->b_hdr; @@ -4953,39 +4821,43 @@ arc_init(void) arc_l2c_only = &ARC_l2c_only; arc_size = 0; - for (i = 0; i < ARC_BUFC_NUMLISTS; i++) { - mutex_init(&arc_anon->arcs_locks[i].arcs_lock, - NULL, MUTEX_DEFAULT, NULL); - mutex_init(&arc_mru->arcs_locks[i].arcs_lock, - NULL, MUTEX_DEFAULT, NULL); - mutex_init(&arc_mru_ghost->arcs_locks[i].arcs_lock, - NULL, MUTEX_DEFAULT, NULL); - mutex_init(&arc_mfu->arcs_locks[i].arcs_lock, - NULL, MUTEX_DEFAULT, NULL); - mutex_init(&arc_mfu_ghost->arcs_locks[i].arcs_lock, - NULL, MUTEX_DEFAULT, NULL); - mutex_init(&arc_l2c_only->arcs_locks[i].arcs_lock, - NULL, MUTEX_DEFAULT, NULL); - - list_create(&arc_mru->arcs_lists[i], - sizeof (arc_buf_hdr_t), - offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); - list_create(&arc_mru_ghost->arcs_lists[i], - sizeof (arc_buf_hdr_t), - offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); - list_create(&arc_mfu->arcs_lists[i], - sizeof (arc_buf_hdr_t), - offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); - list_create(&arc_mfu_ghost->arcs_lists[i], - sizeof (arc_buf_hdr_t), - offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); - list_create(&arc_mfu_ghost->arcs_lists[i], - sizeof (arc_buf_hdr_t), - offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); - list_create(&arc_l2c_only->arcs_lists[i], - sizeof (arc_buf_hdr_t), - offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); - } + mutex_init(&arc_anon->arcs_mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc_mru->arcs_mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc_mru_ghost->arcs_mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc_mfu->arcs_mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc_mfu_ghost->arcs_mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc_l2c_only->arcs_mtx, NULL, MUTEX_DEFAULT, NULL); + + list_create(&arc_mru->arcs_list[ARC_BUFC_METADATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_mru->arcs_list[ARC_BUFC_DATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_mru_ghost->arcs_list[ARC_BUFC_METADATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_mru_ghost->arcs_list[ARC_BUFC_DATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_mfu->arcs_list[ARC_BUFC_METADATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_mfu->arcs_list[ARC_BUFC_DATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_mfu_ghost->arcs_list[ARC_BUFC_METADATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_mfu_ghost->arcs_list[ARC_BUFC_DATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); + list_create(&arc_l2c_only->arcs_list[ARC_BUFC_DATA], + sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node)); buf_init(); @@ -5069,8 +4941,6 @@ arc_init(void) void arc_fini(void) { - int i; - mutex_enter(&arc_reclaim_thr_lock); arc_thread_exit = 1; cv_signal(&arc_reclaim_thr_cv); @@ -5091,20 +4961,21 @@ arc_fini(void) mutex_destroy(&arc_reclaim_thr_lock); cv_destroy(&arc_reclaim_thr_cv); - for (i = 0; i < ARC_BUFC_NUMLISTS; i++) { - list_destroy(&arc_mru->arcs_lists[i]); - list_destroy(&arc_mru_ghost->arcs_lists[i]); - list_destroy(&arc_mfu->arcs_lists[i]); - list_destroy(&arc_mfu_ghost->arcs_lists[i]); - list_destroy(&arc_l2c_only->arcs_lists[i]); - - mutex_destroy(&arc_anon->arcs_locks[i].arcs_lock); - mutex_destroy(&arc_mru->arcs_locks[i].arcs_lock); - mutex_destroy(&arc_mru_ghost->arcs_locks[i].arcs_lock); - mutex_destroy(&arc_mfu->arcs_locks[i].arcs_lock); - mutex_destroy(&arc_mfu_ghost->arcs_locks[i].arcs_lock); - mutex_destroy(&arc_l2c_only->arcs_locks[i].arcs_lock); - } + list_destroy(&arc_mru->arcs_list[ARC_BUFC_METADATA]); + list_destroy(&arc_mru_ghost->arcs_list[ARC_BUFC_METADATA]); + list_destroy(&arc_mfu->arcs_list[ARC_BUFC_METADATA]); + list_destroy(&arc_mfu_ghost->arcs_list[ARC_BUFC_METADATA]); + list_destroy(&arc_mru->arcs_list[ARC_BUFC_DATA]); + list_destroy(&arc_mru_ghost->arcs_list[ARC_BUFC_DATA]); + list_destroy(&arc_mfu->arcs_list[ARC_BUFC_DATA]); + list_destroy(&arc_mfu_ghost->arcs_list[ARC_BUFC_DATA]); + + mutex_destroy(&arc_anon->arcs_mtx); + mutex_destroy(&arc_mru->arcs_mtx); + mutex_destroy(&arc_mru_ghost->arcs_mtx); + mutex_destroy(&arc_mfu->arcs_mtx); + mutex_destroy(&arc_mfu_ghost->arcs_mtx); + mutex_destroy(&arc_l2c_only->arcs_mtx); buf_fini(); @@ -5608,27 +5479,26 @@ static list_t * l2arc_list_locked(int list_num, kmutex_t **lock) { list_t *list = NULL; - int idx; - ASSERT(list_num >= 0 && list_num < 2 * ARC_BUFC_NUMLISTS); + ASSERT(list_num >= 0 && list_num <= 3); - if (list_num < ARC_BUFC_NUMMETADATALISTS) { - idx = list_num; - list = &arc_mfu->arcs_lists[idx]; - *lock = ARCS_LOCK(arc_mfu, idx); - } else if (list_num < ARC_BUFC_NUMMETADATALISTS * 2) { - idx = list_num - ARC_BUFC_NUMMETADATALISTS; - list = &arc_mru->arcs_lists[idx]; - *lock = ARCS_LOCK(arc_mru, idx); - } else if (list_num < (ARC_BUFC_NUMMETADATALISTS * 2 + - ARC_BUFC_NUMDATALISTS)) { - idx = list_num - ARC_BUFC_NUMMETADATALISTS; - list = &arc_mfu->arcs_lists[idx]; - *lock = ARCS_LOCK(arc_mfu, idx); - } else { - idx = list_num - ARC_BUFC_NUMLISTS; - list = &arc_mru->arcs_lists[idx]; - *lock = ARCS_LOCK(arc_mru, idx); + switch (list_num) { + case 0: + list = &arc_mfu->arcs_list[ARC_BUFC_METADATA]; + *lock = &arc_mfu->arcs_mtx; + break; + case 1: + list = &arc_mru->arcs_list[ARC_BUFC_METADATA]; + *lock = &arc_mru->arcs_mtx; + break; + case 2: + list = &arc_mfu->arcs_list[ARC_BUFC_DATA]; + *lock = &arc_mfu->arcs_mtx; + break; + case 3: + list = &arc_mru->arcs_list[ARC_BUFC_DATA]; + *lock = &arc_mru->arcs_mtx; + break; } ASSERT(!(MUTEX_HELD(*lock))); @@ -5791,7 +5661,7 @@ l2arc_write_buffers(spa_t *spa, l2arc_de * Copy buffers for L2ARC writing. */ mutex_enter(&dev->l2ad_mtx); - for (try = 0; try < 2 * ARC_BUFC_NUMLISTS; try++) { + for (try = 0; try <= 3; try++) { uint64_t passed_sz = 0; list = l2arc_list_locked(try, &list_lock); @@ -5810,7 +5680,7 @@ l2arc_write_buffers(spa_t *spa, l2arc_de if (hdr == NULL) ARCSTAT_BUMP(arcstat_l2_write_buffer_list_null_iter); - headroom = target_sz * l2arc_headroom * 2 / ARC_BUFC_NUMLISTS; + headroom = target_sz * l2arc_headroom; if (do_headroom_boost) headroom = (headroom * l2arc_headroom_boost) / 100; From owner-svn-src-head@freebsd.org Fri Aug 14 09:31:09 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 181D99B81DF; Fri, 14 Aug 2015 09:31:09 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 05CEB17D6; Fri, 14 Aug 2015 09:31:09 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7E9V8PV054191; Fri, 14 Aug 2015 09:31:08 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7E9V8nF054188; Fri, 14 Aug 2015 09:31:08 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508140931.t7E9V8nF054188@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 14 Aug 2015 09:31:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286763 - in head/sys: cddl/contrib/opensolaris/uts/common cddl/contrib/opensolaris/uts/common/fs/zfs cddl/contrib/opensolaris/uts/common/fs/zfs/sys conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:31:09 -0000 Author: mav Date: Fri Aug 14 09:31:07 2015 New Revision: 286763 URL: https://svnweb.freebsd.org/changeset/base/286763 Log: MFV r277431: 5497 lock contention on arcs_mtx Reviewed by: George Wilson Reviewed by: Matthew Ahrens Reviewed by: Richard Elling Approved by: Dan McDonald Author: Prakash Surya illumos/illumos-gate@244781f10dcd82684fd8163c016540667842f203 This patch attempts to reduce lock contention on the current arc_state_t mutexes. These mutexes are used liberally to protect the number of LRU lists within the ARC (e.g. ARC_mru, ARC_mfu, etc). The granularity at which these locks are acquired has been shown to greatly affect the performance of highly concurrent, cached workloads. Added: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/multilist.c (contents, props changed) head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/multilist.h (contents, props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c head/sys/conf/files Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Fri Aug 14 09:25:54 2015 (r286762) +++ head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Fri Aug 14 09:31:07 2015 (r286763) @@ -68,6 +68,7 @@ ZFS_COMMON_OBJS += \ lz4.o \ lzjb.o \ metaslab.o \ + multilist.o \ range_tree.o \ refcount.o \ rrwlock.o \ Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:25:54 2015 (r286762) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:31:07 2015 (r286763) @@ -129,6 +129,7 @@ #include #include #include +#include #ifdef _KERNEL #include #endif @@ -149,21 +150,39 @@ int arc_procfd; #endif #endif /* illumos */ -static kmutex_t arc_reclaim_thr_lock; -static kcondvar_t arc_reclaim_thr_cv; /* used to signal reclaim thr */ -static uint8_t arc_thread_exit; +static kmutex_t arc_reclaim_lock; +static kcondvar_t arc_reclaim_thread_cv; +static boolean_t arc_reclaim_thread_exit; +static kcondvar_t arc_reclaim_waiters_cv; + +static kmutex_t arc_user_evicts_lock; +static kcondvar_t arc_user_evicts_cv; +static boolean_t arc_user_evicts_thread_exit; uint_t arc_reduce_dnlc_percent = 3; /* - * The number of iterations through arc_evict_*() before we - * drop & reacquire the lock. + * The number of headers to evict in arc_evict_state_impl() before + * dropping the sublist lock and evicting from another sublist. A lower + * value means we're more likely to evict the "correct" header (i.e. the + * oldest header in the arc state), but comes with higher overhead + * (i.e. more invocations of arc_evict_state_impl()). */ -int arc_evict_iterations = 100; +int zfs_arc_evict_batch_limit = 10; + +/* + * The number of sublists used for each of the arc state lists. If this + * is not set to a suitable value by the user, it will be configured to + * the number of CPUs on the system in arc_init(). + */ +int zfs_arc_num_sublists_per_state = 0; /* number of seconds before growing cache again */ static int arc_grow_retry = 60; +/* shift of arc_c for calculating overflow limit in arc_get_data_buf */ +int zfs_arc_overflow_shift = 8; + /* shift of arc_c for calculating both min and max arc_p */ static int arc_p_min_shift = 4; @@ -316,10 +335,19 @@ SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_meta */ typedef struct arc_state { - list_t arcs_list[ARC_BUFC_NUMTYPES]; /* list of evictable buffers */ - uint64_t arcs_lsize[ARC_BUFC_NUMTYPES]; /* amount of evictable data */ - uint64_t arcs_size; /* total amount of data in this state */ - kmutex_t arcs_mtx; + /* + * list of evictable buffers + */ + multilist_t arcs_list[ARC_BUFC_NUMTYPES]; + /* + * total amount of evictable data in this state + */ + uint64_t arcs_lsize[ARC_BUFC_NUMTYPES]; + /* + * total amount of data in this state; this includes: evictable, + * non-evictable, ARC_BUFC_DATA, and ARC_BUFC_METADATA. + */ + uint64_t arcs_size; } arc_state_t; /* The 6 states: */ @@ -347,7 +375,6 @@ typedef struct arc_stats { kstat_named_t arcstat_mfu_ghost_hits; kstat_named_t arcstat_allocated; kstat_named_t arcstat_deleted; - kstat_named_t arcstat_recycle_miss; /* * Number of buffers that could not be evicted because the hash lock * was held by another thread. The lock may not necessarily be held @@ -361,9 +388,15 @@ typedef struct arc_stats { * not from the spa we're trying to evict from. */ kstat_named_t arcstat_evict_skip; + /* + * Number of times arc_evict_state() was unable to evict enough + * buffers to reach it's target amount. + */ + kstat_named_t arcstat_evict_not_enough; kstat_named_t arcstat_evict_l2_cached; kstat_named_t arcstat_evict_l2_eligible; kstat_named_t arcstat_evict_l2_ineligible; + kstat_named_t arcstat_evict_l2_skip; kstat_named_t arcstat_hash_elements; kstat_named_t arcstat_hash_elements_max; kstat_named_t arcstat_hash_collisions; @@ -514,7 +547,7 @@ typedef struct arc_stats { kstat_named_t arcstat_l2_writes_sent; kstat_named_t arcstat_l2_writes_done; kstat_named_t arcstat_l2_writes_error; - kstat_named_t arcstat_l2_writes_hdr_miss; + kstat_named_t arcstat_l2_writes_lock_retry; kstat_named_t arcstat_l2_evict_lock_retry; kstat_named_t arcstat_l2_evict_reading; kstat_named_t arcstat_l2_evict_l1cached; @@ -568,12 +601,13 @@ static arc_stats_t arc_stats = { { "mfu_ghost_hits", KSTAT_DATA_UINT64 }, { "allocated", KSTAT_DATA_UINT64 }, { "deleted", KSTAT_DATA_UINT64 }, - { "recycle_miss", KSTAT_DATA_UINT64 }, { "mutex_miss", KSTAT_DATA_UINT64 }, { "evict_skip", KSTAT_DATA_UINT64 }, + { "evict_not_enough", KSTAT_DATA_UINT64 }, { "evict_l2_cached", KSTAT_DATA_UINT64 }, { "evict_l2_eligible", KSTAT_DATA_UINT64 }, { "evict_l2_ineligible", KSTAT_DATA_UINT64 }, + { "evict_l2_skip", KSTAT_DATA_UINT64 }, { "hash_elements", KSTAT_DATA_UINT64 }, { "hash_elements_max", KSTAT_DATA_UINT64 }, { "hash_collisions", KSTAT_DATA_UINT64 }, @@ -612,7 +646,7 @@ static arc_stats_t arc_stats = { { "l2_writes_sent", KSTAT_DATA_UINT64 }, { "l2_writes_done", KSTAT_DATA_UINT64 }, { "l2_writes_error", KSTAT_DATA_UINT64 }, - { "l2_writes_hdr_miss", KSTAT_DATA_UINT64 }, + { "l2_writes_lock_retry", KSTAT_DATA_UINT64 }, { "l2_evict_lock_retry", KSTAT_DATA_UINT64 }, { "l2_evict_reading", KSTAT_DATA_UINT64 }, { "l2_evict_l1cached", KSTAT_DATA_UINT64 }, @@ -789,7 +823,7 @@ typedef struct l1arc_buf_hdr { /* protected by arc state mutex */ arc_state_t *b_state; - list_node_t b_arc_node; + multilist_node_t b_arc_node; /* updated atomically */ clock_t b_arc_access; @@ -860,7 +894,6 @@ sysctl_vfs_zfs_arc_meta_limit(SYSCTL_HAN #endif static arc_buf_t *arc_eviction_list; -static kmutex_t arc_eviction_mtx; static arc_buf_hdr_t arc_eviction_hdr; #define GHOST_STATE(state) \ @@ -1089,8 +1122,7 @@ static uint8_t l2arc_thread_exit; static void arc_get_data_buf(arc_buf_t *); static void arc_access(arc_buf_hdr_t *, kmutex_t *); -static int arc_evict_needed(arc_buf_contents_t); -static void arc_evict_ghost(arc_state_t *, uint64_t, int64_t); +static boolean_t arc_is_overflowing(); static void arc_buf_watch(arc_buf_t *); static arc_buf_contents_t arc_buf_type(arc_buf_hdr_t *); @@ -1271,6 +1303,7 @@ hdr_full_cons(void *vbuf, void *unused, cv_init(&hdr->b_l1hdr.b_cv, NULL, CV_DEFAULT, NULL); refcount_create(&hdr->b_l1hdr.b_refcnt); mutex_init(&hdr->b_l1hdr.b_freeze_lock, NULL, MUTEX_DEFAULT, NULL); + multilist_link_init(&hdr->b_l1hdr.b_arc_node); arc_space_consume(HDR_FULL_SIZE, ARC_SPACE_HDRS); return (0); @@ -1315,6 +1348,7 @@ hdr_full_dest(void *vbuf, void *unused) cv_destroy(&hdr->b_l1hdr.b_cv); refcount_destroy(&hdr->b_l1hdr.b_refcnt); mutex_destroy(&hdr->b_l1hdr.b_freeze_lock); + ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node)); arc_space_return(HDR_FULL_SIZE, ARC_SPACE_HDRS); } @@ -1351,7 +1385,7 @@ hdr_recl(void *unused) * which is after we do arc_fini(). */ if (!arc_dead) - cv_signal(&arc_reclaim_thr_cv); + cv_signal(&arc_reclaim_thread_cv); } static void @@ -1430,18 +1464,31 @@ arc_hdr_realloc(arc_buf_hdr_t *hdr, kmem * l2c_only even though it's about to change. */ nhdr->b_l1hdr.b_state = arc_l2c_only; + + /* Verify previous threads set to NULL before freeing */ + ASSERT3P(nhdr->b_l1hdr.b_tmp_cdata, ==, NULL); } else { ASSERT(hdr->b_l1hdr.b_buf == NULL); ASSERT0(hdr->b_l1hdr.b_datacnt); - ASSERT(!list_link_active(&hdr->b_l1hdr.b_arc_node)); + /* - * We might be removing the L1hdr of a buffer which was just - * written out to L2ARC. If such a buffer is compressed then we - * need to free its b_tmp_cdata before destroying the header. - */ - if (hdr->b_l1hdr.b_tmp_cdata != NULL && - HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF) - l2arc_release_cdata_buf(hdr); + * If we've reached here, We must have been called from + * arc_evict_hdr(), as such we should have already been + * removed from any ghost list we were previously on + * (which protects us from racing with arc_evict_state), + * thus no locking is needed during this check. + */ + ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node)); + + /* + * A buffer must not be moved into the arc_l2c_only + * state if it's not finished being written out to the + * l2arc device. Otherwise, the b_l1hdr.b_tmp_cdata field + * might try to be accessed, even though it was removed. + */ + VERIFY(!HDR_L2_WRITING(hdr)); + VERIFY3P(hdr->b_l1hdr.b_tmp_cdata, ==, NULL); + nhdr->b_flags &= ~ARC_FLAG_HAS_L1HDR; } /* @@ -1674,14 +1721,13 @@ add_reference(arc_buf_hdr_t *hdr, kmutex (state != arc_anon)) { /* We don't use the L2-only state list. */ if (state != arc_l2c_only) { + arc_buf_contents_t type = arc_buf_type(hdr); uint64_t delta = hdr->b_size * hdr->b_l1hdr.b_datacnt; - list_t *list = &state->arcs_list[arc_buf_type(hdr)]; - uint64_t *size = &state->arcs_lsize[arc_buf_type(hdr)]; + multilist_t *list = &state->arcs_list[type]; + uint64_t *size = &state->arcs_lsize[type]; + + multilist_remove(list, hdr); - ASSERT(!MUTEX_HELD(&state->arcs_mtx)); - mutex_enter(&state->arcs_mtx); - ASSERT(list_link_active(&hdr->b_l1hdr.b_arc_node)); - list_remove(list, hdr); if (GHOST_STATE(state)) { ASSERT0(hdr->b_l1hdr.b_datacnt); ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); @@ -1690,7 +1736,6 @@ add_reference(arc_buf_hdr_t *hdr, kmutex ASSERT(delta > 0); ASSERT3U(*size, >=, delta); atomic_add_64(size, -delta); - mutex_exit(&state->arcs_mtx); } /* remove the prefetch flag if we get a reference */ hdr->b_flags &= ~ARC_FLAG_PREFETCH; @@ -1713,22 +1758,21 @@ remove_reference(arc_buf_hdr_t *hdr, kmu */ if (((cnt = refcount_remove(&hdr->b_l1hdr.b_refcnt, tag)) == 0) && (state != arc_anon)) { - uint64_t *size = &state->arcs_lsize[arc_buf_type(hdr)]; + arc_buf_contents_t type = arc_buf_type(hdr); + multilist_t *list = &state->arcs_list[type]; + uint64_t *size = &state->arcs_lsize[type]; + + multilist_insert(list, hdr); - ASSERT(!MUTEX_HELD(&state->arcs_mtx)); - mutex_enter(&state->arcs_mtx); - ASSERT(!list_link_active(&hdr->b_l1hdr.b_arc_node)); - list_insert_head(&state->arcs_list[arc_buf_type(hdr)], hdr); ASSERT(hdr->b_l1hdr.b_datacnt > 0); atomic_add_64(size, hdr->b_size * hdr->b_l1hdr.b_datacnt); - mutex_exit(&state->arcs_mtx); } return (cnt); } /* - * Move the supplied buffer to the indicated state. The mutex + * Move the supplied buffer to the indicated state. The hash lock * for the buffer must be held by the caller. */ static void @@ -1772,15 +1816,10 @@ arc_change_state(arc_state_t *new_state, */ if (refcnt == 0) { if (old_state != arc_anon && old_state != arc_l2c_only) { - int use_mutex = !MUTEX_HELD(&old_state->arcs_mtx); uint64_t *size = &old_state->arcs_lsize[buftype]; - if (use_mutex) - mutex_enter(&old_state->arcs_mtx); - ASSERT(HDR_HAS_L1HDR(hdr)); - ASSERT(list_link_active(&hdr->b_l1hdr.b_arc_node)); - list_remove(&old_state->arcs_list[buftype], hdr); + multilist_remove(&old_state->arcs_list[buftype], hdr); /* * If prefetching out of the ghost cache, @@ -1793,12 +1832,8 @@ arc_change_state(arc_state_t *new_state, } ASSERT3U(*size, >=, from_delta); atomic_add_64(size, -from_delta); - - if (use_mutex) - mutex_exit(&old_state->arcs_mtx); } if (new_state != arc_anon && new_state != arc_l2c_only) { - int use_mutex = !MUTEX_HELD(&new_state->arcs_mtx); uint64_t *size = &new_state->arcs_lsize[buftype]; /* @@ -1808,10 +1843,7 @@ arc_change_state(arc_state_t *new_state, * beforehand. */ ASSERT(HDR_HAS_L1HDR(hdr)); - if (use_mutex) - mutex_enter(&new_state->arcs_mtx); - - list_insert_head(&new_state->arcs_list[buftype], hdr); + multilist_insert(&new_state->arcs_list[buftype], hdr); /* ghost elements have a ghost size */ if (GHOST_STATE(new_state)) { @@ -1820,9 +1852,6 @@ arc_change_state(arc_state_t *new_state, to_delta = hdr->b_size; } atomic_add_64(size, to_delta); - - if (use_mutex) - mutex_exit(&new_state->arcs_mtx); } } @@ -1844,8 +1873,8 @@ arc_change_state(arc_state_t *new_state, * L2 headers should never be on the L2 state list since they don't * have L1 headers allocated. */ - ASSERT(list_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_DATA]) && - list_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA])); + ASSERT(multilist_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_DATA]) && + multilist_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA])); } void @@ -1938,6 +1967,7 @@ arc_buf_alloc(spa_t *spa, int32_t size, hdr->b_l1hdr.b_state = arc_anon; hdr->b_l1hdr.b_arc_access = 0; hdr->b_l1hdr.b_datacnt = 1; + hdr->b_l1hdr.b_tmp_cdata = NULL; arc_get_data_buf(buf); ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); @@ -2073,7 +2103,7 @@ arc_buf_free_on_write(void *data, size_t { l2arc_data_free_t *df; - df = kmem_alloc(sizeof (l2arc_data_free_t), KM_SLEEP); + df = kmem_alloc(sizeof (*df), KM_SLEEP); df->l2df_data = data; df->l2df_size = size; df->l2df_func = free_func; @@ -2117,19 +2147,49 @@ arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr if (!HDR_HAS_L1HDR(hdr)) return; - if (hdr->b_l1hdr.b_tmp_cdata == NULL) + /* + * The header isn't being written to the l2arc device, thus it + * shouldn't have a b_tmp_cdata to free. + */ + if (!HDR_L2_WRITING(hdr)) { + ASSERT3P(hdr->b_l1hdr.b_tmp_cdata, ==, NULL); + return; + } + + /* + * The header does not have compression enabled. This can be due + * to the buffer not being compressible, or because we're + * freeing the buffer before the second phase of + * l2arc_write_buffer() has started (which does the compression + * step). In either case, b_tmp_cdata does not point to a + * separately compressed buffer, so there's nothing to free (it + * points to the same buffer as the arc_buf_t's b_data field). + */ + if (HDR_GET_COMPRESS(hdr) == ZIO_COMPRESS_OFF) { + hdr->b_l1hdr.b_tmp_cdata = NULL; + return; + } + + /* + * There's nothing to free since the buffer was all zero's and + * compressed to a zero length buffer. + */ + if (HDR_GET_COMPRESS(hdr) == ZIO_COMPRESS_EMPTY) { + ASSERT3P(hdr->b_l1hdr.b_tmp_cdata, ==, NULL); return; + } + + ASSERT(L2ARC_IS_VALID_COMPRESS(HDR_GET_COMPRESS(hdr))); - ASSERT(HDR_L2_WRITING(hdr)); - arc_buf_free_on_write(hdr->b_l1hdr.b_tmp_cdata, hdr->b_size, - zio_data_buf_free); + arc_buf_free_on_write(hdr->b_l1hdr.b_tmp_cdata, + hdr->b_size, zio_data_buf_free); ARCSTAT_BUMP(arcstat_l2_cdata_free_on_write); hdr->b_l1hdr.b_tmp_cdata = NULL; } static void -arc_buf_destroy(arc_buf_t *buf, boolean_t recycle, boolean_t remove) +arc_buf_destroy(arc_buf_t *buf, boolean_t remove) { arc_buf_t **bufp; @@ -2144,17 +2204,17 @@ arc_buf_destroy(arc_buf_t *buf, boolean_ arc_buf_unwatch(buf); #endif - if (!recycle) { - if (type == ARC_BUFC_METADATA) { - arc_buf_data_free(buf, zio_buf_free); - arc_space_return(size, ARC_SPACE_META); - } else { - ASSERT(type == ARC_BUFC_DATA); - arc_buf_data_free(buf, zio_data_buf_free); - arc_space_return(size, ARC_SPACE_DATA); - } + if (type == ARC_BUFC_METADATA) { + arc_buf_data_free(buf, zio_buf_free); + arc_space_return(size, ARC_SPACE_META); + } else { + ASSERT(type == ARC_BUFC_DATA); + arc_buf_data_free(buf, zio_data_buf_free); + arc_space_return(size, ARC_SPACE_DATA); } - if (list_link_active(&buf->b_hdr->b_l1hdr.b_arc_node)) { + + /* protected by hash lock, if in the hash table */ + if (multilist_link_active(&buf->b_hdr->b_l1hdr.b_arc_node)) { uint64_t *cnt = &state->arcs_lsize[type]; ASSERT(refcount_is_zero( @@ -2302,20 +2362,19 @@ arc_hdr_destroy(arc_buf_hdr_t *hdr) arc_buf_t *buf = hdr->b_l1hdr.b_buf; if (buf->b_efunc != NULL) { - mutex_enter(&arc_eviction_mtx); + mutex_enter(&arc_user_evicts_lock); mutex_enter(&buf->b_evict_lock); ASSERT(buf->b_hdr != NULL); - arc_buf_destroy(hdr->b_l1hdr.b_buf, FALSE, - FALSE); + arc_buf_destroy(hdr->b_l1hdr.b_buf, FALSE); hdr->b_l1hdr.b_buf = buf->b_next; buf->b_hdr = &arc_eviction_hdr; buf->b_next = arc_eviction_list; arc_eviction_list = buf; mutex_exit(&buf->b_evict_lock); - mutex_exit(&arc_eviction_mtx); + cv_signal(&arc_user_evicts_cv); + mutex_exit(&arc_user_evicts_lock); } else { - arc_buf_destroy(hdr->b_l1hdr.b_buf, FALSE, - TRUE); + arc_buf_destroy(hdr->b_l1hdr.b_buf, TRUE); } } #ifdef ZFS_DEBUG @@ -2328,7 +2387,7 @@ arc_hdr_destroy(arc_buf_hdr_t *hdr) ASSERT3P(hdr->b_hash_next, ==, NULL); if (HDR_HAS_L1HDR(hdr)) { - ASSERT(!list_link_active(&hdr->b_l1hdr.b_arc_node)); + ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node)); ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL); kmem_cache_free(hdr_full_cache, hdr); } else { @@ -2354,7 +2413,7 @@ arc_buf_free(arc_buf_t *buf, void *tag) (void) remove_reference(hdr, hash_lock, tag); if (hdr->b_l1hdr.b_datacnt > 1) { - arc_buf_destroy(buf, FALSE, TRUE); + arc_buf_destroy(buf, TRUE); } else { ASSERT(buf == hdr->b_l1hdr.b_buf); ASSERT(buf->b_efunc == NULL); @@ -2368,16 +2427,16 @@ arc_buf_free(arc_buf_t *buf, void *tag) * this buffer unless the write completes before we finish * decrementing the reference count. */ - mutex_enter(&arc_eviction_mtx); + mutex_enter(&arc_user_evicts_lock); (void) remove_reference(hdr, NULL, tag); ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); destroy_hdr = !HDR_IO_IN_PROGRESS(hdr); - mutex_exit(&arc_eviction_mtx); + mutex_exit(&arc_user_evicts_lock); if (destroy_hdr) arc_hdr_destroy(hdr); } else { if (remove_reference(hdr, NULL, tag) > 0) - arc_buf_destroy(buf, FALSE, TRUE); + arc_buf_destroy(buf, TRUE); else arc_hdr_destroy(hdr); } @@ -2406,7 +2465,7 @@ arc_buf_remove_ref(arc_buf_t *buf, void* (void) remove_reference(hdr, hash_lock, tag); if (hdr->b_l1hdr.b_datacnt > 1) { if (no_callback) - arc_buf_destroy(buf, FALSE, TRUE); + arc_buf_destroy(buf, TRUE); } else if (no_callback) { ASSERT(hdr->b_l1hdr.b_buf == buf && buf->b_next == NULL); ASSERT(buf->b_efunc == NULL); @@ -2467,418 +2526,675 @@ arc_buf_eviction_needed(arc_buf_t *buf) } /* - * Evict buffers from list until we've removed the specified number of - * bytes. Move the removed buffers to the appropriate evict state. - * If the recycle flag is set, then attempt to "recycle" a buffer: - * - look for a buffer to evict that is `bytes' long. - * - return the data block from this buffer rather than freeing it. - * This flag is used by callers that are trying to make space for a - * new buffer in a full arc cache. + * Evict the arc_buf_hdr that is provided as a parameter. The resultant + * state of the header is dependent on it's state prior to entering this + * function. The following transitions are possible: * - * This function makes a "best effort". It skips over any buffers - * it can't get a hash_lock on, and so may not catch all candidates. - * It may also return without evicting as much space as requested. + * - arc_mru -> arc_mru_ghost + * - arc_mfu -> arc_mfu_ghost + * - arc_mru_ghost -> arc_l2c_only + * - arc_mru_ghost -> deleted + * - arc_mfu_ghost -> arc_l2c_only + * - arc_mfu_ghost -> deleted */ -static void * -arc_evict(arc_state_t *state, uint64_t spa, int64_t bytes, boolean_t recycle, - arc_buf_contents_t type) +static int64_t +arc_evict_hdr(arc_buf_hdr_t *hdr, kmutex_t *hash_lock) { - arc_state_t *evicted_state; - uint64_t bytes_evicted = 0, skipped = 0, missed = 0; - arc_buf_hdr_t *hdr, *hdr_prev = NULL; - kmutex_t *hash_lock; - boolean_t have_lock; - void *stolen = NULL; - arc_buf_hdr_t marker = { 0 }; - int count = 0; + arc_state_t *evicted_state, *state; + int64_t bytes_evicted = 0; - ASSERT(state == arc_mru || state == arc_mfu); - - evicted_state = (state == arc_mru) ? arc_mru_ghost : arc_mfu_ghost; + ASSERT(MUTEX_HELD(hash_lock)); + ASSERT(HDR_HAS_L1HDR(hdr)); - /* - * The ghost list lock must be acquired first in order to prevent - * a 3 party deadlock: - * - * - arc_evict_ghost acquires arc_*_ghost->arcs_mtx, followed by - * l2ad_mtx in arc_hdr_realloc - * - l2arc_write_buffers acquires l2ad_mtx, followed by arc_*->arcs_mtx - * - arc_evict acquires arc_*_ghost->arcs_mtx, followed by - * arc_*_ghost->arcs_mtx and forms a deadlock cycle. - * - * This situation is avoided by acquiring the ghost list lock first. - */ - mutex_enter(&evicted_state->arcs_mtx); - mutex_enter(&state->arcs_mtx); + state = hdr->b_l1hdr.b_state; + if (GHOST_STATE(state)) { + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + ASSERT(hdr->b_l1hdr.b_buf == NULL); - /* - * Decide which "type" (data vs metadata) to recycle from. - * - * If we are over the metadata limit, recycle from metadata. - * If we are under the metadata minimum, recycle from data. - * Otherwise, recycle from whichever type has the oldest (least - * recently accessed) header. - */ - if (recycle) { - arc_buf_hdr_t *data_hdr = - list_tail(&state->arcs_list[ARC_BUFC_DATA]); - arc_buf_hdr_t *metadata_hdr = - list_tail(&state->arcs_list[ARC_BUFC_METADATA]); - arc_buf_contents_t realtype; - - if (data_hdr == NULL) { - realtype = ARC_BUFC_METADATA; - } else if (metadata_hdr == NULL) { - realtype = ARC_BUFC_DATA; - } else if (arc_meta_used >= arc_meta_limit) { - realtype = ARC_BUFC_METADATA; - } else if (arc_meta_used <= arc_meta_min) { - realtype = ARC_BUFC_DATA; - } else if (HDR_HAS_L1HDR(data_hdr) && - HDR_HAS_L1HDR(metadata_hdr) && - data_hdr->b_l1hdr.b_arc_access < - metadata_hdr->b_l1hdr.b_arc_access) { - realtype = ARC_BUFC_DATA; - } else { - realtype = ARC_BUFC_METADATA; + /* + * l2arc_write_buffers() relies on a header's L1 portion + * (i.e. it's b_tmp_cdata field) during it's write phase. + * Thus, we cannot push a header onto the arc_l2c_only + * state (removing it's L1 piece) until the header is + * done being written to the l2arc. + */ + if (HDR_HAS_L2HDR(hdr) && HDR_L2_WRITING(hdr)) { + ARCSTAT_BUMP(arcstat_evict_l2_skip); + return (bytes_evicted); } - if (realtype != type) { + + ARCSTAT_BUMP(arcstat_deleted); + bytes_evicted += hdr->b_size; + + DTRACE_PROBE1(arc__delete, arc_buf_hdr_t *, hdr); + + if (HDR_HAS_L2HDR(hdr)) { /* - * If we want to evict from a different list, - * we can not recycle, because DATA vs METADATA - * buffers are segregated into different kmem - * caches (and vmem arenas). + * This buffer is cached on the 2nd Level ARC; + * don't destroy the header. */ - type = realtype; - recycle = B_FALSE; + arc_change_state(arc_l2c_only, hdr, hash_lock); + /* + * dropping from L1+L2 cached to L2-only, + * realloc to remove the L1 header. + */ + hdr = arc_hdr_realloc(hdr, hdr_full_cache, + hdr_l2only_cache); + } else { + arc_change_state(arc_anon, hdr, hash_lock); + arc_hdr_destroy(hdr); } + return (bytes_evicted); } - list_t *list = &state->arcs_list[type]; + ASSERT(state == arc_mru || state == arc_mfu); + evicted_state = (state == arc_mru) ? arc_mru_ghost : arc_mfu_ghost; - for (hdr = list_tail(list); hdr; hdr = hdr_prev) { - hdr_prev = list_prev(list, hdr); - /* prefetch buffers have a minimum lifespan */ - if (HDR_IO_IN_PROGRESS(hdr) || - (spa && hdr->b_spa != spa) || - ((hdr->b_flags & (ARC_FLAG_PREFETCH | ARC_FLAG_INDIRECT)) && - ddi_get_lbolt() - hdr->b_l1hdr.b_arc_access < - arc_min_prefetch_lifespan)) { - skipped++; - continue; + /* prefetch buffers have a minimum lifespan */ + if (HDR_IO_IN_PROGRESS(hdr) || + ((hdr->b_flags & (ARC_FLAG_PREFETCH | ARC_FLAG_INDIRECT)) && + ddi_get_lbolt() - hdr->b_l1hdr.b_arc_access < + arc_min_prefetch_lifespan)) { + ARCSTAT_BUMP(arcstat_evict_skip); + return (bytes_evicted); + } + + ASSERT0(refcount_count(&hdr->b_l1hdr.b_refcnt)); + ASSERT3U(hdr->b_l1hdr.b_datacnt, >, 0); + while (hdr->b_l1hdr.b_buf) { + arc_buf_t *buf = hdr->b_l1hdr.b_buf; + if (!mutex_tryenter(&buf->b_evict_lock)) { + ARCSTAT_BUMP(arcstat_mutex_miss); + break; } - /* "lookahead" for better eviction candidate */ - if (recycle && hdr->b_size != bytes && - hdr_prev && hdr_prev->b_size == bytes) - continue; + if (buf->b_data != NULL) + bytes_evicted += hdr->b_size; + if (buf->b_efunc != NULL) { + mutex_enter(&arc_user_evicts_lock); + arc_buf_destroy(buf, FALSE); + hdr->b_l1hdr.b_buf = buf->b_next; + buf->b_hdr = &arc_eviction_hdr; + buf->b_next = arc_eviction_list; + arc_eviction_list = buf; + cv_signal(&arc_user_evicts_cv); + mutex_exit(&arc_user_evicts_lock); + mutex_exit(&buf->b_evict_lock); + } else { + mutex_exit(&buf->b_evict_lock); + arc_buf_destroy(buf, TRUE); + } + } - /* ignore markers */ - if (hdr->b_spa == 0) - continue; + if (HDR_HAS_L2HDR(hdr)) { + ARCSTAT_INCR(arcstat_evict_l2_cached, hdr->b_size); + } else { + if (l2arc_write_eligible(hdr->b_spa, hdr)) + ARCSTAT_INCR(arcstat_evict_l2_eligible, hdr->b_size); + else + ARCSTAT_INCR(arcstat_evict_l2_ineligible, hdr->b_size); + } + + if (hdr->b_l1hdr.b_datacnt == 0) { + arc_change_state(evicted_state, hdr, hash_lock); + ASSERT(HDR_IN_HASH_TABLE(hdr)); + hdr->b_flags |= ARC_FLAG_IN_HASH_TABLE; + hdr->b_flags &= ~ARC_FLAG_BUF_AVAILABLE; + DTRACE_PROBE1(arc__evict, arc_buf_hdr_t *, hdr); + } + + return (bytes_evicted); +} + +static uint64_t +arc_evict_state_impl(multilist_t *ml, int idx, arc_buf_hdr_t *marker, + uint64_t spa, int64_t bytes) +{ + multilist_sublist_t *mls; + uint64_t bytes_evicted = 0; + arc_buf_hdr_t *hdr; + kmutex_t *hash_lock; + int evict_count = 0; + + ASSERT3P(marker, !=, NULL); + IMPLY(bytes < 0, bytes == ARC_EVICT_ALL); + + mls = multilist_sublist_lock(ml, idx); + + for (hdr = multilist_sublist_prev(mls, marker); hdr != NULL; + hdr = multilist_sublist_prev(mls, marker)) { + if ((bytes != ARC_EVICT_ALL && bytes_evicted >= bytes) || + (evict_count >= zfs_arc_evict_batch_limit)) + break; /* - * It may take a long time to evict all the bufs requested. - * To avoid blocking all arc activity, periodically drop - * the arcs_mtx and give other threads a chance to run - * before reacquiring the lock. - * - * If we are looking for a buffer to recycle, we are in - * the hot code path, so don't sleep. + * To keep our iteration location, move the marker + * forward. Since we're not holding hdr's hash lock, we + * must be very careful and not remove 'hdr' from the + * sublist. Otherwise, other consumers might mistake the + * 'hdr' as not being on a sublist when they call the + * multilist_link_active() function (they all rely on + * the hash lock protecting concurrent insertions and + * removals). multilist_sublist_move_forward() was + * specifically implemented to ensure this is the case + * (only 'marker' will be removed and re-inserted). + */ + multilist_sublist_move_forward(mls, marker); + + /* + * The only case where the b_spa field should ever be + * zero, is the marker headers inserted by + * arc_evict_state(). It's possible for multiple threads + * to be calling arc_evict_state() concurrently (e.g. + * dsl_pool_close() and zio_inject_fault()), so we must + * skip any markers we see from these other threads. */ - if (!recycle && count++ > arc_evict_iterations) { - list_insert_after(list, hdr, &marker); - mutex_exit(&state->arcs_mtx); - mutex_exit(&evicted_state->arcs_mtx); - kpreempt(KPREEMPT_SYNC); - mutex_enter(&evicted_state->arcs_mtx); - mutex_enter(&state->arcs_mtx); - hdr_prev = list_prev(list, &marker); - list_remove(list, &marker); - count = 0; + if (hdr->b_spa == 0) + continue; + + /* we're only interested in evicting buffers of a certain spa */ + if (spa != 0 && hdr->b_spa != spa) { + ARCSTAT_BUMP(arcstat_evict_skip); continue; } hash_lock = HDR_LOCK(hdr); - have_lock = MUTEX_HELD(hash_lock); - if (have_lock || mutex_tryenter(hash_lock)) { - ASSERT0(refcount_count(&hdr->b_l1hdr.b_refcnt)); - ASSERT3U(hdr->b_l1hdr.b_datacnt, >, 0); - while (hdr->b_l1hdr.b_buf) { - arc_buf_t *buf = hdr->b_l1hdr.b_buf; - if (!mutex_tryenter(&buf->b_evict_lock)) { - missed += 1; - break; - } - if (buf->b_data != NULL) { - bytes_evicted += hdr->b_size; - if (recycle && - arc_buf_type(hdr) == type && - hdr->b_size == bytes && - !HDR_L2_WRITING(hdr)) { - stolen = buf->b_data; - recycle = FALSE; - } - } - if (buf->b_efunc != NULL) { - mutex_enter(&arc_eviction_mtx); - arc_buf_destroy(buf, - buf->b_data == stolen, FALSE); - hdr->b_l1hdr.b_buf = buf->b_next; - buf->b_hdr = &arc_eviction_hdr; - buf->b_next = arc_eviction_list; - arc_eviction_list = buf; - mutex_exit(&arc_eviction_mtx); - mutex_exit(&buf->b_evict_lock); - } else { - mutex_exit(&buf->b_evict_lock); - arc_buf_destroy(buf, - buf->b_data == stolen, TRUE); - } - } - if (HDR_HAS_L2HDR(hdr)) { - ARCSTAT_INCR(arcstat_evict_l2_cached, - hdr->b_size); - } else { - if (l2arc_write_eligible(hdr->b_spa, hdr)) { - ARCSTAT_INCR(arcstat_evict_l2_eligible, - hdr->b_size); - } else { - ARCSTAT_INCR( - arcstat_evict_l2_ineligible, - hdr->b_size); - } - } + /* + * We aren't calling this function from any code path + * that would already be holding a hash lock, so we're + * asserting on this assumption to be defensive in case + * this ever changes. Without this check, it would be + * possible to incorrectly increment arcstat_mutex_miss + * below (e.g. if the code changed such that we called + * this function with a hash lock held). + */ + ASSERT(!MUTEX_HELD(hash_lock)); - if (hdr->b_l1hdr.b_datacnt == 0) { - arc_change_state(evicted_state, hdr, hash_lock); - ASSERT(HDR_IN_HASH_TABLE(hdr)); - hdr->b_flags |= ARC_FLAG_IN_HASH_TABLE; - hdr->b_flags &= ~ARC_FLAG_BUF_AVAILABLE; - DTRACE_PROBE1(arc__evict, arc_buf_hdr_t *, hdr); - } - if (!have_lock) - mutex_exit(hash_lock); - if (bytes >= 0 && bytes_evicted >= bytes) - break; + if (mutex_tryenter(hash_lock)) { + uint64_t evicted = arc_evict_hdr(hdr, hash_lock); + mutex_exit(hash_lock); + + bytes_evicted += evicted; + + /* + * If evicted is zero, arc_evict_hdr() must have + * decided to skip this header, don't increment + * evict_count in this case. + */ + if (evicted != 0) + evict_count++; + + /* + * If arc_size isn't overflowing, signal any + * threads that might happen to be waiting. + * + * For each header evicted, we wake up a single + * thread. If we used cv_broadcast, we could + * wake up "too many" threads causing arc_size + * to significantly overflow arc_c; since + * arc_get_data_buf() doesn't check for overflow + * when it's woken up (it doesn't because it's + * possible for the ARC to be overflowing while + * full of un-evictable buffers, and the + * function should proceed in this case). + * + * If threads are left sleeping, due to not + * using cv_broadcast, they will be woken up + * just before arc_reclaim_thread() sleeps. + */ + mutex_enter(&arc_reclaim_lock); + if (!arc_is_overflowing()) + cv_signal(&arc_reclaim_waiters_cv); + mutex_exit(&arc_reclaim_lock); } else { - missed += 1; + ARCSTAT_BUMP(arcstat_mutex_miss); } } - mutex_exit(&state->arcs_mtx); - mutex_exit(&evicted_state->arcs_mtx); + multilist_sublist_unlock(mls); - if (bytes_evicted < bytes) - dprintf("only evicted %lld bytes from %x", - (longlong_t)bytes_evicted, state); + return (bytes_evicted); +} + +/* + * Evict buffers from the given arc state, until we've removed the + * specified number of bytes. Move the removed buffers to the + * appropriate evict state. + * + * This function makes a "best effort". It skips over any buffers + * it can't get a hash_lock on, and so, may not catch all candidates. + * It may also return without evicting as much space as requested. + * + * If bytes is specified using the special value ARC_EVICT_ALL, this + * will evict all available (i.e. unlocked and evictable) buffers from + * the given arc state; which is used by arc_flush(). + */ +static uint64_t +arc_evict_state(arc_state_t *state, uint64_t spa, int64_t bytes, + arc_buf_contents_t type) +{ + uint64_t total_evicted = 0; + multilist_t *ml = &state->arcs_list[type]; + int num_sublists; + arc_buf_hdr_t **markers; - if (skipped) - ARCSTAT_INCR(arcstat_evict_skip, skipped); + IMPLY(bytes < 0, bytes == ARC_EVICT_ALL); - if (missed) - ARCSTAT_INCR(arcstat_mutex_miss, missed); + num_sublists = multilist_get_num_sublists(ml); /* - * Note: we have just evicted some data into the ghost state, - * potentially putting the ghost size over the desired size. Rather - * that evicting from the ghost list in this hot code path, leave - * this chore to the arc_reclaim_thread(). + * If we've tried to evict from each sublist, made some + * progress, but still have not hit the target number of bytes + * to evict, we want to keep trying. The markers allow us to + * pick up where we left off for each individual sublist, rather + * than starting from the tail each time. */ + markers = kmem_zalloc(sizeof (*markers) * num_sublists, KM_SLEEP); + for (int i = 0; i < num_sublists; i++) { + markers[i] = kmem_cache_alloc(hdr_full_cache, KM_SLEEP); - return (stolen); -} + /* + * A b_spa of 0 is used to indicate that this header is + * a marker. This fact is used in arc_adjust_type() and + * arc_evict_state_impl(). + */ + markers[i]->b_spa = 0; -/* - * Remove buffers from list until we've removed the specified number of - * bytes. Destroy the buffers that are removed. - */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Fri Aug 14 09:33:47 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DA6939B82BF; Fri, 14 Aug 2015 09:33:47 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AC9841AC5; Fri, 14 Aug 2015 09:33:47 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7E9Xlbv055398; Fri, 14 Aug 2015 09:33:47 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7E9XlIh055397; Fri, 14 Aug 2015 09:33:47 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508140933.t7E9XlIh055397@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 14 Aug 2015 09:33:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286764 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:33:48 -0000 Author: mav Date: Fri Aug 14 09:33:46 2015 New Revision: 286764 URL: https://svnweb.freebsd.org/changeset/base/286764 Log: MFV r285025: 6033 arc_adjust() should search MFU lists for oldest buffer when adjusting MFU size. illumos/illumos-gate@31c46cf23cd1cf4d66390a983dc5072d7d299ba2 https://www.illumos.org/issues/6033 When we're looking for the list containing oldest buffer we never actually look at the MFU lists even when we try to evict from MFU. looks like a copy paste error, the fix is here: Reviewed by: Saso Kiselkov Reviewed by: Xin Li Reviewed by: Prakash Surya Approved by: Matthew Ahrens Author: Alek Pinchuk Obtained from: illumos Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:31:07 2015 (r286763) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:33:46 2015 (r286764) @@ -23,7 +23,7 @@ * Copyright (c) 2012, Joyent, Inc. All rights reserved. * Copyright (c) 2011, 2014 by Delphix. All rights reserved. * Copyright (c) 2014 by Saso Kiselkov. All rights reserved. - * Copyright 2014 Nexenta Systems, Inc. All rights reserved. + * Copyright 2015 Nexenta Systems, Inc. All rights reserved. */ /* @@ -3115,7 +3115,7 @@ arc_adjust(void) */ target = arc_size - arc_c; - if (arc_adjust_type(arc_mru) == ARC_BUFC_METADATA && + if (arc_adjust_type(arc_mfu) == ARC_BUFC_METADATA && arc_meta_used > arc_meta_min) { bytes = arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_METADATA); total_evicted += bytes; From owner-svn-src-head@freebsd.org Fri Aug 14 09:39:24 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6CDCE9B8432; Fri, 14 Aug 2015 09:39:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 516901DDB; Fri, 14 Aug 2015 09:39:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7E9dOZB055725; Fri, 14 Aug 2015 09:39:24 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7E9dOmN055724; Fri, 14 Aug 2015 09:39:24 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508140939.t7E9dOmN055724@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 14 Aug 2015 09:39:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286766 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:39:24 -0000 Author: mav Date: Fri Aug 14 09:39:23 2015 New Revision: 286766 URL: https://svnweb.freebsd.org/changeset/base/286766 Log: MFV r286765: 5817 change type of arcs_size from uint64_t to refcount_t Reviewed by: Matthew Ahrens Reviewed by: Paul Dagnelie Reviewed by: Adam Leventhal Reviewed by: Alex Reece Reviewed by: Richard Elling Approved by: Garrett D'Amore Author: Prakash Surya illumos/illumos-gate@2fd872a734cf486007a8dba532cec52bfb4d40e5 As a way to make it more difficult to introduce bugs into the ARC, and to make it easier to diagnose issues when bugs do creep in, it would be beneficial to change the type of the arc_state_t's arcs_size field to be a refcount_t instead of a uint64_t. This would allow us to make stricter checks when incrementing and decrementing the value with debugging enabled, but still fallback to simple, fast atomic operations when debugging is disabled. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Directory Properties: head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:37:54 2015 (r286765) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:39:23 2015 (r286766) @@ -21,7 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, Joyent, Inc. All rights reserved. - * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2014 by Saso Kiselkov. All rights reserved. * Copyright 2015 Nexenta Systems, Inc. All rights reserved. */ @@ -347,7 +347,7 @@ typedef struct arc_state { * total amount of data in this state; this includes: evictable, * non-evictable, ARC_BUFC_DATA, and ARC_BUFC_METADATA. */ - uint64_t arcs_size; + refcount_t arcs_size; } arc_state_t; /* The 6 states: */ @@ -1860,12 +1860,73 @@ arc_change_state(arc_state_t *new_state, buf_hash_remove(hdr); /* adjust state sizes (ignore arc_l2c_only) */ - if (to_delta && new_state != arc_l2c_only) - atomic_add_64(&new_state->arcs_size, to_delta); + + if (to_delta && new_state != arc_l2c_only) { + ASSERT(HDR_HAS_L1HDR(hdr)); + if (GHOST_STATE(new_state)) { + ASSERT0(datacnt); + + /* + * We moving a header to a ghost state, we first + * remove all arc buffers. Thus, we'll have a + * datacnt of zero, and no arc buffer to use for + * the reference. As a result, we use the arc + * header pointer for the reference. + */ + (void) refcount_add_many(&new_state->arcs_size, + hdr->b_size, hdr); + } else { + ASSERT3U(datacnt, !=, 0); + + /* + * Each individual buffer holds a unique reference, + * thus we must remove each of these references one + * at a time. + */ + for (arc_buf_t *buf = hdr->b_l1hdr.b_buf; buf != NULL; + buf = buf->b_next) { + (void) refcount_add_many(&new_state->arcs_size, + hdr->b_size, buf); + } + } + } + if (from_delta && old_state != arc_l2c_only) { - ASSERT3U(old_state->arcs_size, >=, from_delta); - atomic_add_64(&old_state->arcs_size, -from_delta); + ASSERT(HDR_HAS_L1HDR(hdr)); + if (GHOST_STATE(old_state)) { + /* + * When moving a header off of a ghost state, + * there's the possibility for datacnt to be + * non-zero. This is because we first add the + * arc buffer to the header prior to changing + * the header's state. Since we used the header + * for the reference when putting the header on + * the ghost state, we must balance that and use + * the header when removing off the ghost state + * (even though datacnt is non zero). + */ + + IMPLY(datacnt == 0, new_state == arc_anon || + new_state == arc_l2c_only); + + (void) refcount_remove_many(&old_state->arcs_size, + hdr->b_size, hdr); + } else { + ASSERT3P(datacnt, !=, 0); + + /* + * Each individual buffer holds a unique reference, + * thus we must remove each of these references one + * at a time. + */ + for (arc_buf_t *buf = hdr->b_l1hdr.b_buf; buf != NULL; + buf = buf->b_next) { + (void) refcount_remove_many( + &old_state->arcs_size, hdr->b_size, buf); + } + } } + if (HDR_HAS_L1HDR(hdr)) hdr->b_l1hdr.b_state = new_state; @@ -2224,8 +2285,8 @@ arc_buf_destroy(arc_buf_t *buf, boolean_ ASSERT3U(*cnt, >=, size); atomic_add_64(cnt, -size); } - ASSERT3U(state->arcs_size, >=, size); - atomic_add_64(&state->arcs_size, -size); + + (void) refcount_remove_many(&state->arcs_size, size, buf); buf->b_data = NULL; /* @@ -2949,7 +3010,8 @@ arc_adjust_meta(void) * evict some from the MRU here, and some from the MFU below. */ target = MIN((int64_t)(arc_meta_used - arc_meta_limit), - (int64_t)(arc_anon->arcs_size + arc_mru->arcs_size - arc_p)); + (int64_t)(refcount_count(&arc_anon->arcs_size) + + refcount_count(&arc_mru->arcs_size) - arc_p)); total_evicted += arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_METADATA); @@ -2959,7 +3021,7 @@ arc_adjust_meta(void) * space alloted to the MFU (which is defined as arc_c - arc_p). */ target = MIN((int64_t)(arc_meta_used - arc_meta_limit), - (int64_t)(arc_mfu->arcs_size - (arc_c - arc_p))); + (int64_t)(refcount_count(&arc_mfu->arcs_size) - (arc_c - arc_p))); total_evicted += arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_METADATA); @@ -3068,8 +3130,8 @@ arc_adjust(void) * arc_p here, and then evict more from the MFU below. */ target = MIN((int64_t)(arc_size - arc_c), - (int64_t)(arc_anon->arcs_size + arc_mru->arcs_size + arc_meta_used - - arc_p)); + (int64_t)(refcount_count(&arc_anon->arcs_size) + + refcount_count(&arc_mru->arcs_size) + arc_meta_used - arc_p)); /* * If we're below arc_meta_min, always prefer to evict data. @@ -3153,7 +3215,8 @@ arc_adjust(void) * cache. The following logic enforces these limits on the ghost * caches, and evicts from them as needed. */ - target = arc_mru->arcs_size + arc_mru_ghost->arcs_size - arc_c; + target = refcount_count(&arc_mru->arcs_size) + + refcount_count(&arc_mru_ghost->arcs_size) - arc_c; bytes = arc_adjust_impl(arc_mru_ghost, 0, target, ARC_BUFC_DATA); total_evicted += bytes; @@ -3171,7 +3234,8 @@ arc_adjust(void) * mru + mfu + mru ghost + mfu ghost <= 2 * arc_c * mru ghost + mfu ghost <= arc_c */ - target = arc_mru_ghost->arcs_size + arc_mfu_ghost->arcs_size - arc_c; + target = refcount_count(&arc_mru_ghost->arcs_size) + + refcount_count(&arc_mfu_ghost->arcs_size) - arc_c; bytes = arc_adjust_impl(arc_mfu_ghost, 0, target, ARC_BUFC_DATA); total_evicted += bytes; @@ -3665,6 +3729,8 @@ arc_adapt(int bytes, arc_state_t *state) { int mult; uint64_t arc_p_min = (arc_c >> arc_p_min_shift); + int64_t mrug_size = refcount_count(&arc_mru_ghost->arcs_size); + int64_t mfug_size = refcount_count(&arc_mfu_ghost->arcs_size); if (state == arc_l2c_only) return; @@ -3679,16 +3745,14 @@ arc_adapt(int bytes, arc_state_t *state) * target size of the MRU list. */ if (state == arc_mru_ghost) { - mult = ((arc_mru_ghost->arcs_size >= arc_mfu_ghost->arcs_size) ? - 1 : (arc_mfu_ghost->arcs_size/arc_mru_ghost->arcs_size)); + mult = (mrug_size >= mfug_size) ? 1 : (mfug_size / mrug_size); mult = MIN(mult, 10); /* avoid wild arc_p adjustment */ arc_p = MIN(arc_c - arc_p_min, arc_p + bytes * mult); } else if (state == arc_mfu_ghost) { uint64_t delta; - mult = ((arc_mfu_ghost->arcs_size >= arc_mru_ghost->arcs_size) ? - 1 : (arc_mru_ghost->arcs_size/arc_mfu_ghost->arcs_size)); + mult = (mfug_size >= mrug_size) ? 1 : (mrug_size / mfug_size); mult = MIN(mult, 10); delta = MIN(bytes * mult, arc_p); @@ -3805,8 +3869,9 @@ arc_get_data_buf(arc_buf_t *buf) */ if (!GHOST_STATE(buf->b_hdr->b_l1hdr.b_state)) { arc_buf_hdr_t *hdr = buf->b_hdr; + arc_state_t *state = hdr->b_l1hdr.b_state; - atomic_add_64(&hdr->b_l1hdr.b_state->arcs_size, size); + (void) refcount_add_many(&state->arcs_size, size, buf); /* * If this is reached via arc_read, the link is @@ -3827,7 +3892,8 @@ arc_get_data_buf(arc_buf_t *buf) * data, and we have outgrown arc_p, update arc_p */ if (arc_size < arc_c && hdr->b_l1hdr.b_state == arc_anon && - arc_anon->arcs_size + arc_mru->arcs_size > arc_p) + (refcount_count(&arc_anon->arcs_size) + + refcount_count(&arc_mru->arcs_size) > arc_p)) arc_p = MIN(arc_c, arc_p + size); } ARCSTAT_BUMP(arcstat_allocated); @@ -4683,8 +4749,10 @@ arc_release(arc_buf_t *buf, void *tag) buf->b_next = NULL; ASSERT3P(state, !=, arc_l2c_only); - ASSERT3U(state->arcs_size, >=, hdr->b_size); - atomic_add_64(&state->arcs_size, -hdr->b_size); + + (void) refcount_remove_many( + &state->arcs_size, hdr->b_size, buf); + if (refcount_is_zero(&hdr->b_l1hdr.b_refcnt)) { ASSERT3P(state, !=, arc_l2c_only); uint64_t *size = &state->arcs_lsize[type]; @@ -4727,7 +4795,7 @@ arc_release(arc_buf_t *buf, void *tag) (void) refcount_add(&nhdr->b_l1hdr.b_refcnt, tag); buf->b_hdr = nhdr; mutex_exit(&buf->b_evict_lock); - atomic_add_64(&arc_anon->arcs_size, blksz); + (void) refcount_add_many(&arc_anon->arcs_size, blksz, buf); } else { mutex_exit(&buf->b_evict_lock); ASSERT(refcount_count(&hdr->b_l1hdr.b_refcnt) == 1); @@ -4994,7 +5062,8 @@ arc_tempreserve_space(uint64_t reserve, * network delays from blocking transactions that are ready to be * assigned to a txg. */ - anon_size = MAX((int64_t)(arc_anon->arcs_size - arc_loaned_bytes), 0); + anon_size = MAX((int64_t)(refcount_count(&arc_anon->arcs_size) - + arc_loaned_bytes), 0); /* * Writes will, almost always, require additional memory allocations @@ -5031,7 +5100,7 @@ static void arc_kstat_update_state(arc_state_t *state, kstat_named_t *size, kstat_named_t *evict_data, kstat_named_t *evict_metadata) { - size->value.ui64 = state->arcs_size; + size->value.ui64 = refcount_count(&state->arcs_size); evict_data->value.ui64 = state->arcs_lsize[ARC_BUFC_DATA]; evict_metadata->value.ui64 = state->arcs_lsize[ARC_BUFC_METADATA]; } @@ -5271,6 +5340,13 @@ arc_init(void) offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), zfs_arc_num_sublists_per_state, arc_state_multilist_index_func); + refcount_create(&arc_anon->arcs_size); + refcount_create(&arc_mru->arcs_size); + refcount_create(&arc_mru_ghost->arcs_size); + refcount_create(&arc_mfu->arcs_size); + refcount_create(&arc_mfu_ghost->arcs_size); + refcount_create(&arc_l2c_only->arcs_size); + buf_init(); arc_reclaim_thread_exit = FALSE; @@ -5397,6 +5473,13 @@ arc_fini(void) mutex_destroy(&arc_user_evicts_lock); cv_destroy(&arc_user_evicts_cv); + refcount_destroy(&arc_anon->arcs_size); + refcount_destroy(&arc_mru->arcs_size); + refcount_destroy(&arc_mru_ghost->arcs_size); + refcount_destroy(&arc_mfu->arcs_size); + refcount_destroy(&arc_mfu_ghost->arcs_size); + refcount_destroy(&arc_l2c_only->arcs_size); + multilist_destroy(&arc_mru->arcs_list[ARC_BUFC_METADATA]); multilist_destroy(&arc_mru_ghost->arcs_list[ARC_BUFC_METADATA]); multilist_destroy(&arc_mfu->arcs_list[ARC_BUFC_METADATA]); From owner-svn-src-head@freebsd.org Fri Aug 14 09:40:26 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8FF0D9B8485; Fri, 14 Aug 2015 09:40:26 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id D01C91F91; Fri, 14 Aug 2015 09:40:24 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id MAA13084; Fri, 14 Aug 2015 12:40:22 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1ZQBTK-0002c0-F2; Fri, 14 Aug 2015 12:40:22 +0300 Subject: Re: svn commit: r286763 - in head/sys: cddl/contrib/opensolaris/uts/common cddl/contrib/opensolaris/uts/common/fs/zfs cddl/contrib/opensolaris/uts/common/fs/zfs/sys conf To: Alexander Motin , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org References: <201508140931.t7E9V8nF054188@repo.freebsd.org> From: Andriy Gapon Message-ID: <55CDB74F.6070708@FreeBSD.org> Date: Fri, 14 Aug 2015 12:39:27 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <201508140931.t7E9V8nF054188@repo.freebsd.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:40:26 -0000 On 14/08/2015 12:31, Alexander Motin wrote: > Author: mav > Date: Fri Aug 14 09:31:07 2015 > New Revision: 286763 > URL: https://svnweb.freebsd.org/changeset/base/286763 > > Log: > MFV r277431: 5497 lock contention on arcs_mtx > > Reviewed by: George Wilson > Reviewed by: Matthew Ahrens > Reviewed by: Richard Elling > Approved by: Dan McDonald > Author: Prakash Surya > > illumos/illumos-gate@244781f10dcd82684fd8163c016540667842f203 > > This patch attempts to reduce lock contention on the current arc_state_t > mutexes. These mutexes are used liberally to protect the number of LRU > lists within the ARC (e.g. ARC_mru, ARC_mfu, etc). The granularity at > which these locks are acquired has been shown to greatly affect the > performance of highly concurrent, cached workloads. > > Added: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/multilist.c (contents, props changed) > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/multilist.h (contents, props changed) > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c > head/sys/conf/files > Directory Properties: > head/sys/cddl/contrib/opensolaris/ (props changed) > > Modified: head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files > ============================================================================== > --- head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Fri Aug 14 09:25:54 2015 (r286762) > +++ head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Fri Aug 14 09:31:07 2015 (r286763) > @@ -68,6 +68,7 @@ ZFS_COMMON_OBJS += \ > lz4.o \ > lzjb.o \ > metaslab.o \ > + multilist.o \ > range_tree.o \ > refcount.o \ > rrwlock.o \ Thank you! The new file also has to be added to sys/conf/files for those who compile ZFS into a kernel. -- Andriy Gapon From owner-svn-src-head@freebsd.org Fri Aug 14 09:42:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5D2909B859D; Fri, 14 Aug 2015 09:42:31 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: from mail-lb0-x22b.google.com (mail-lb0-x22b.google.com [IPv6:2a00:1450:4010:c04::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id ED92A12B1; Fri, 14 Aug 2015 09:42:30 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: by lbbsx3 with SMTP id sx3so42198088lbb.0; Fri, 14 Aug 2015 02:42:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:user-agent:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=V4AR0R1qwaLhR2TBdF/abihoKMB6CDAqX5Z7qRk2/Cw=; b=WE/HyiJvtWdirbIIIEuvPmPA2CwNJtbWLit/JLswqhV14abFXMtGqpclvpF6ssELeB 2zwy05Npl8t4HSpo7cThebFdCImxHNqVHdyTNBOYxmnu79aNd8pemrz7SzurqvHYXvYL lC+HIiuX2yEfmzIlSt4qW6WPTRE+STiVDPCr3uS76Jd3rl8Cgiva/u17QRtIV1VEb/ga T2EMeZ7P4qeCPgxSuCLL1juWx32E9PY/JHxQOQGu8Y9wypRdzlQ0ERP0cfHaps9I54ue HL1Be72trP/oTtSBSx6yhPPnF7zkxM3YCAf8Z6De0bZewIVD+W7QvYo+pBJUunP/GXvJ W0nA== X-Received: by 10.112.54.132 with SMTP id j4mr29950974lbp.84.1439545348672; Fri, 14 Aug 2015 02:42:28 -0700 (PDT) Received: from mavbook.mavhome.dp.ua ([134.249.139.101]) by smtp.googlemail.com with ESMTPSA id uq1sm1307221lbb.18.2015.08.14.02.42.27 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 14 Aug 2015 02:42:27 -0700 (PDT) Sender: Alexander Motin Message-ID: <55CDB802.9040507@FreeBSD.org> Date: Fri, 14 Aug 2015 12:42:26 +0300 From: Alexander Motin User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Andriy Gapon , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org Subject: Re: svn commit: r286763 - in head/sys: cddl/contrib/opensolaris/uts/common cddl/contrib/opensolaris/uts/common/fs/zfs cddl/contrib/opensolaris/uts/common/fs/zfs/sys conf References: <201508140931.t7E9V8nF054188@repo.freebsd.org> <55CDB74F.6070708@FreeBSD.org> In-Reply-To: <55CDB74F.6070708@FreeBSD.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:42:31 -0000 On 14.08.2015 12:39, Andriy Gapon wrote: > On 14/08/2015 12:31, Alexander Motin wrote: >> Author: mav >> Date: Fri Aug 14 09:31:07 2015 >> New Revision: 286763 >> URL: https://svnweb.freebsd.org/changeset/base/286763 >> >> Log: >> MFV r277431: 5497 lock contention on arcs_mtx >> >> Reviewed by: George Wilson >> Reviewed by: Matthew Ahrens >> Reviewed by: Richard Elling >> Approved by: Dan McDonald >> Author: Prakash Surya >> >> illumos/illumos-gate@244781f10dcd82684fd8163c016540667842f203 >> >> This patch attempts to reduce lock contention on the current arc_state_t >> mutexes. These mutexes are used liberally to protect the number of LRU >> lists within the ARC (e.g. ARC_mru, ARC_mfu, etc). The granularity at >> which these locks are acquired has been shown to greatly affect the >> performance of highly concurrent, cached workloads. >> >> Added: >> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/multilist.c (contents, props changed) >> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/multilist.h (contents, props changed) >> Modified: >> head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files >> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c >> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c >> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h >> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c >> head/sys/conf/files >> Directory Properties: >> head/sys/cddl/contrib/opensolaris/ (props changed) >> >> Modified: head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files >> ============================================================================== >> --- head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Fri Aug 14 09:25:54 2015 (r286762) >> +++ head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Fri Aug 14 09:31:07 2015 (r286763) >> @@ -68,6 +68,7 @@ ZFS_COMMON_OBJS += \ >> lz4.o \ >> lzjb.o \ >> metaslab.o \ >> + multilist.o \ >> range_tree.o \ >> refcount.o \ >> rrwlock.o \ > > Thank you! > The new file also has to be added to sys/conf/files for those who > compile ZFS into a kernel. And it was added just below. Have I missed something? -- Alexander Motin From owner-svn-src-head@freebsd.org Fri Aug 14 09:45:06 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 405289B862B; Fri, 14 Aug 2015 09:45:06 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 465D71454; Fri, 14 Aug 2015 09:45:04 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id MAA13156; Fri, 14 Aug 2015 12:45:02 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1ZQBXn-0002cc-Fp; Fri, 14 Aug 2015 12:45:02 +0300 Subject: Re: svn commit: r286763 - in head/sys: cddl/contrib/opensolaris/uts/common cddl/contrib/opensolaris/uts/common/fs/zfs cddl/contrib/opensolaris/uts/common/fs/zfs/sys conf To: Alexander Motin , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org References: <201508140931.t7E9V8nF054188@repo.freebsd.org> <55CDB74F.6070708@FreeBSD.org> <55CDB802.9040507@FreeBSD.org> From: Andriy Gapon Message-ID: <55CDB864.7050100@FreeBSD.org> Date: Fri, 14 Aug 2015 12:44:04 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <55CDB802.9040507@FreeBSD.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:45:06 -0000 On 14/08/2015 12:42, Alexander Motin wrote: > On 14.08.2015 12:39, Andriy Gapon wrote: >> On 14/08/2015 12:31, Alexander Motin wrote: >>> Author: mav >>> Date: Fri Aug 14 09:31:07 2015 >>> New Revision: 286763 >>> URL: https://svnweb.freebsd.org/changeset/base/286763 >>> >>> Log: >>> MFV r277431: 5497 lock contention on arcs_mtx >>> >>> Reviewed by: George Wilson >>> Reviewed by: Matthew Ahrens >>> Reviewed by: Richard Elling >>> Approved by: Dan McDonald >>> Author: Prakash Surya >>> >>> illumos/illumos-gate@244781f10dcd82684fd8163c016540667842f203 >>> >>> This patch attempts to reduce lock contention on the current arc_state_t >>> mutexes. These mutexes are used liberally to protect the number of LRU >>> lists within the ARC (e.g. ARC_mru, ARC_mfu, etc). The granularity at >>> which these locks are acquired has been shown to greatly affect the >>> performance of highly concurrent, cached workloads. >>> >>> Added: >>> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/multilist.c (contents, props changed) >>> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/multilist.h (contents, props changed) >>> Modified: >>> head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files >>> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c >>> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c >>> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h >>> head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c >>> head/sys/conf/files >>> Directory Properties: >>> head/sys/cddl/contrib/opensolaris/ (props changed) >>> >>> Modified: head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files >>> ============================================================================== >>> --- head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Fri Aug 14 09:25:54 2015 (r286762) >>> +++ head/sys/cddl/contrib/opensolaris/uts/common/Makefile.files Fri Aug 14 09:31:07 2015 (r286763) >>> @@ -68,6 +68,7 @@ ZFS_COMMON_OBJS += \ >>> lz4.o \ >>> lzjb.o \ >>> metaslab.o \ >>> + multilist.o \ >>> range_tree.o \ >>> refcount.o \ >>> rrwlock.o \ >> >> Thank you! >> The new file also has to be added to sys/conf/files for those who >> compile ZFS into a kernel. > > And it was added just below. Have I missed something? > Oops, sorry for the noise. -- Andriy Gapon From owner-svn-src-head@freebsd.org Fri Aug 14 09:48:24 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 55E8D9B86DA; Fri, 14 Aug 2015 09:48:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 464BF1718; Fri, 14 Aug 2015 09:48:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7E9mOZi059751; Fri, 14 Aug 2015 09:48:24 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7E9mOGS059750; Fri, 14 Aug 2015 09:48:24 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508140948.t7E9mOGS059750@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 14 Aug 2015 09:48:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286767 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:48:24 -0000 Author: mav Date: Fri Aug 14 09:48:23 2015 New Revision: 286767 URL: https://svnweb.freebsd.org/changeset/base/286767 Log: Fix minor mismerge sometimes earlier. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:39:23 2015 (r286766) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 09:48:23 2015 (r286767) @@ -2190,10 +2190,6 @@ arc_buf_data_free(arc_buf_t *buf, void ( } } -/* - * Free up buf->b_data and if 'remove' is set, then pull the - * arc_buf_t off of the the arc_buf_hdr_t's list and free it. - */ static void arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr) { @@ -2249,6 +2245,10 @@ arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr hdr->b_l1hdr.b_tmp_cdata = NULL; } +/* + * Free up buf->b_data and if 'remove' is set, then pull the + * arc_buf_t off of the the arc_buf_hdr_t's list and free it. + */ static void arc_buf_destroy(arc_buf_t *buf, boolean_t remove) { From owner-svn-src-head@freebsd.org Fri Aug 14 09:55:26 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A59E59B8882; Fri, 14 Aug 2015 09:55:26 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8875E1B63; Fri, 14 Aug 2015 09:55:26 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7E9tQVB063795; Fri, 14 Aug 2015 09:55:26 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7E9tQ51063793; Fri, 14 Aug 2015 09:55:26 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201508140955.t7E9tQ51063793@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Fri, 14 Aug 2015 09:55:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286768 - head/sys/arm64/arm64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 09:55:26 -0000 Author: andrew Date: Fri Aug 14 09:55:25 2015 New Revision: 286768 URL: https://svnweb.freebsd.org/changeset/base/286768 Log: Add support for bus_space_read_region and bus_space_write_region. This is needed for the dwc USB controller driver. Sponsored by: ABT Systems Ltd Modified: head/sys/arm64/arm64/bus_machdep.c head/sys/arm64/arm64/bus_space_asm.S Modified: head/sys/arm64/arm64/bus_machdep.c ============================================================================== --- head/sys/arm64/arm64/bus_machdep.c Fri Aug 14 09:48:23 2015 (r286767) +++ head/sys/arm64/arm64/bus_machdep.c Fri Aug 14 09:55:25 2015 (r286768) @@ -49,6 +49,15 @@ void generic_bs_rm_4(void *, bus_space_h void generic_bs_rm_8(void *, bus_space_handle_t, bus_size_t, uint64_t *, bus_size_t); +void generic_bs_rr_1(void *, bus_space_handle_t, bus_size_t, uint8_t *, + bus_size_t); +void generic_bs_rr_2(void *, bus_space_handle_t, bus_size_t, uint16_t *, + bus_size_t); +void generic_bs_rr_4(void *, bus_space_handle_t, bus_size_t, uint32_t *, + bus_size_t); +void generic_bs_rr_8(void *, bus_space_handle_t, bus_size_t, uint64_t *, + bus_size_t); + void generic_bs_w_1(void *, bus_space_handle_t, bus_size_t, uint8_t); void generic_bs_w_2(void *, bus_space_handle_t, bus_size_t, uint16_t); void generic_bs_w_4(void *, bus_space_handle_t, bus_size_t, uint32_t); @@ -63,6 +72,15 @@ void generic_bs_wm_4(void *, bus_space_h void generic_bs_wm_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *, bus_size_t); +void generic_bs_wr_1(void *, bus_space_handle_t, bus_size_t, const uint8_t *, + bus_size_t); +void generic_bs_wr_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *, + bus_size_t); +void generic_bs_wr_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *, + bus_size_t); +void generic_bs_wr_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *, + bus_size_t); + static int generic_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags, bus_space_handle_t *bshp) @@ -126,6 +144,12 @@ struct bus_space memmap_bus = { .bs_rm_4 = generic_bs_rm_4, .bs_rm_8 = generic_bs_rm_8, + /* read region */ + .bs_rr_1 = generic_bs_rr_1, + .bs_rr_2 = generic_bs_rr_2, + .bs_rr_4 = generic_bs_rr_4, + .bs_rr_8 = generic_bs_rr_8, + /* write single */ .bs_w_1 = generic_bs_w_1, .bs_w_2 = generic_bs_w_2, @@ -139,10 +163,10 @@ struct bus_space memmap_bus = { .bs_wm_8 = generic_bs_wm_8, /* write region */ - .bs_wr_1 = NULL, - .bs_wr_2 = NULL, - .bs_wr_4 = NULL, - .bs_wr_8 = NULL, + .bs_wr_1 = generic_bs_wr_1, + .bs_wr_2 = generic_bs_wr_2, + .bs_wr_4 = generic_bs_wr_4, + .bs_wr_8 = generic_bs_wr_8, /* set multiple */ .bs_sm_1 = NULL, Modified: head/sys/arm64/arm64/bus_space_asm.S ============================================================================== --- head/sys/arm64/arm64/bus_space_asm.S Fri Aug 14 09:48:23 2015 (r286767) +++ head/sys/arm64/arm64/bus_space_asm.S Fri Aug 14 09:55:25 2015 (r286768) @@ -133,6 +133,90 @@ ENTRY(generic_bs_rm_8) 2: ret END(generic_bs_rm_8) +ENTRY(generic_bs_rr_1) + /* Is there is anything to read. */ + cbz x4, 2f + + /* Calculate the device address. */ + add x0, x1, x2 + /* + * x0 = The device address. + * x3 = The kernel address. + * x4 = Count + */ + + /* Read the data. */ +1: ldrb w1, [x0], #1 + strb w1, [x3], #1 + subs x4, x4, #1 + b.ne 1b + +2: ret +END(generic_bs_rr_1) + +ENTRY(generic_bs_rr_2) + /* Is there is anything to read. */ + cbz x4, 2f + + /* Calculate the device address. */ + add x0, x1, x2 + /* + * x0 = The device address. + * x3 = The kernel address. + * x4 = Count + */ + + /* Read the data. */ +1: ldrh w1, [x0], #2 + strh w1, [x3], #2 + subs x4, x4, #1 + b.ne 1b + +2: ret +END(generic_bs_rr_2) + +ENTRY(generic_bs_rr_4) + /* Is there is anything to read. */ + cbz x4, 2f + + /* Calculate the device address. */ + add x0, x1, x2 + /* + * x0 = The device address. + * x3 = The kernel address. + * x4 = Count + */ + + /* Read the data. */ +1: ldr w1, [x0], #4 + str w1, [x3], #4 + subs x4, x4, #1 + b.ne 1b + +2: ret +END(generic_bs_rr_4) + +ENTRY(generic_bs_rr_8) + /* Is there is anything to read. */ + cbz x4, 2f + + /* Calculate the device address. */ + add x0, x1, x2 + /* + * x0 = The device address. + * x3 = The kernel address. + * x4 = Count + */ + + /* Read the data. */ +1: ldr x1, [x0], #8 + str x1, [x3], #8 + subs x4, x4, #1 + b.ne 1b + +2: ret +END(generic_bs_rr_8) + ENTRY(generic_bs_w_1) strb w3, [x1, x2] @@ -233,3 +317,83 @@ ENTRY(generic_bs_wm_8) 2: ret END(generic_bs_wm_8) + +ENTRY(generic_bs_wr_1) + /* Is there is anything to write. */ + cbz x4, 2f + + add x0, x1, x2 + /* + * x0 = The device address. + * x3 = The kernel address. + * x4 = Count + */ + + /* Write the data */ +1: ldrb w1, [x3], #1 + strb w1, [x0], #1 + subs x4, x4, #1 + b.ne 1b + +2: ret +END(generic_bs_wr_1) + +ENTRY(generic_bs_wr_2) + /* Is there is anything to write. */ + cbz x4, 2f + + add x0, x1, x2 + /* + * x0 = The device address. + * x3 = The kernel address. + * x4 = Count + */ + + /* Write the data */ +1: ldrh w1, [x3], #2 + strh w1, [x0], #2 + subs x4, x4, #1 + b.ne 1b + +2: ret +END(generic_bs_wr_2) + +ENTRY(generic_bs_wr_4) + /* Is there is anything to write. */ + cbz x4, 2f + + add x0, x1, x2 + /* + * x0 = The device address. + * x3 = The kernel address. + * x4 = Count + */ + + /* Write the data */ +1: ldr w1, [x3], #4 + str w1, [x0], #4 + subs x4, x4, #1 + b.ne 1b + +2: ret +END(generic_bs_wr_4) + +ENTRY(generic_bs_wr_8) + /* Is there is anything to write. */ + cbz x4, 2f + + add x0, x1, x2 + /* + * x0 = The device address. + * x3 = The kernel address. + * x4 = Count + */ + + /* Write the data */ +1: ldr x1, [x3], #8 + str x1, [x0], #8 + subs x4, x4, #1 + b.ne 1b + +2: ret +END(generic_bs_wr_8) From owner-svn-src-head@freebsd.org Fri Aug 14 11:20:17 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 250DD9B8A97; Fri, 14 Aug 2015 11:20:17 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 369BC1D88; Fri, 14 Aug 2015 11:20:15 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id OAA14327; Fri, 14 Aug 2015 14:20:13 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1ZQD1x-0002jF-6B; Fri, 14 Aug 2015 14:20:13 +0300 Subject: Re: svn commit: r286570 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys To: Alexander Motin , svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org, "src-committers@freebsd.org" References: <201508101034.t7AAYOtk074606@repo.freebsd.org> From: Andriy Gapon X-Enigmail-Draft-Status: N1110 Message-ID: <55CDCECB.1020103@FreeBSD.org> Date: Fri, 14 Aug 2015 14:19:39 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <201508101034.t7AAYOtk074606@repo.freebsd.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 11:20:17 -0000 On 10/08/2015 13:34, Alexander Motin wrote: > Author: mav > Date: Mon Aug 10 10:34:23 2015 > New Revision: 286570 > URL: https://svnweb.freebsd.org/changeset/base/286570 > > Log: > MFV r277426: 5408 managing ZFS cache devices requires lots of RAM > Reviewed by: Christopher Siden > Reviewed by: George Wilson > Reviewed by: Matthew Ahrens > Reviewed by: Don Brady > Reviewed by: Josef 'Jeff' Sipek > Approved by: Garrett D'Amore > Author: Chris Williamson > > illumos/illumos-gate@89c86e32293a30cdd7af530c38b2073fee01411c > > Currently, every buffer cached in the L2ARC is accompanied by a 240-byte > header in memory, leading to very high memory consumption when using very > large cache devices. These changes significantly reduce this overhead. > > Currently: > > L1-only header = 176 bytes > L1 + L2 or L2-only header = 176 bytes + 32 byte checksum + 32 byte l2hdr > = 240 bytes > > Memory-optimized: > > L1-only header = 176 bytes > L1 + L2 header = 176 bytes + 32 byte checksum = 208 bytes > L2-only header = 96 bytes + 32 byte checksum = 128 bytes > > So overall: > > Trunk Optimized > +-----------------+ > L1-only | 176 B | 176 B | (same) > +-----------------+ > L1 & L2 | 240 B | 208 B | (saved 32 bytes) > +-----------------+ > L2-only | 240 B | 128 B | (saved 116 bytes) > +-----------------+ > > For an average blocksize of 8KB, this means that for the L2ARC, the ratio > of metadata to data has gone down from about 2.92% to 1.56%. For a > 'storage optimized' EC2 instance with 1600GB of SSD and 60GB of RAM, this > means that we expect a completely full L2ARC to use (1600 GB * 0.0156) / > 60GB = 41% of the available memory, down from 78%. > > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h > Looking at the code in arc_buf_l2_cdata_free() function it seems that this MFV contains element of both 5408 change and the later "5497 lock contention on arcs_mtx" change, because that's the change where arc_buf_l2_cdata_free() was actually added in illumos. It's hard to review such a composite change. I think that you used a better approach when you merged 5497 where you first reverted our local changes and then merged the upstream changes. I think that it would make sense to use the same approach with this change as well. For example, in ZoL they did just that and it was much easier to understand and review: https://github.com/zfsonlinux/zfs/pull/3481/commits Note the revert commits one of which is Revert "fix l2arc compression buffers leak". P.S. The original illumos commit also made small changes to ztest.c that do not seem to be merged. P.P.S. it sucks that svn is not git :-) -- Andriy Gapon From owner-svn-src-head@freebsd.org Fri Aug 14 11:24:49 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3DE829B8C6F; Fri, 14 Aug 2015 11:24:49 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C58AE110A; Fri, 14 Aug 2015 11:24:48 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id t7EBOhd8055008 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 14 Aug 2015 14:24:43 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua t7EBOhd8055008 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id t7EBOhuv055007; Fri, 14 Aug 2015 14:24:43 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 14 Aug 2015 14:24:43 +0300 From: Konstantin Belousov To: "Pedro F. Giffuni" Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286760 - in head/lib/libc: . secure sys Message-ID: <20150814112443.GL2072@kib.kiev.ua> References: <201508140303.t7E33EnN095618@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201508140303.t7E33EnN095618@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 11:24:49 -0000 On Fri, Aug 14, 2015 at 03:03:14AM +0000, Pedro F. Giffuni wrote: > +/* > + * It'd be nice to have this automatically generated, but we don't > + * know to what version they will eventually belong, so for now > + * it has to be manual. > + */ The comment does not make a bit of sense. It also raises the question whether the author(s) of the change ever understand what do they change. > +FBSD_1.0 { > + __chk_fail; > + __stack_chk_fail; > + __stack_chk_guard; > +}; From owner-svn-src-head@freebsd.org Fri Aug 14 11:32:58 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 56F199B8E2E; Fri, 14 Aug 2015 11:32:58 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 9894D1674; Fri, 14 Aug 2015 11:32:56 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id OAA14478; Fri, 14 Aug 2015 14:32:54 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1ZQDEE-0002kP-Gt; Fri, 14 Aug 2015 14:32:54 +0300 Subject: Re: svn commit: r286623 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs To: Alexander Motin , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org References: <201508110918.t7B9IpGA039354@repo.freebsd.org> From: Andriy Gapon X-Enigmail-Draft-Status: N1110 Message-ID: <55CDD1AA.40008@FreeBSD.org> Date: Fri, 14 Aug 2015 14:31:54 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <201508110918.t7B9IpGA039354@repo.freebsd.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 11:32:58 -0000 On 11/08/2015 12:18, Alexander Motin wrote: > Author: mav > Date: Tue Aug 11 09:18:51 2015 > New Revision: 286623 > URL: https://svnweb.freebsd.org/changeset/base/286623 > > Log: > Remove extra lock, that IMO only creates potential problems now. > > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c In my tree I dropped arc_reclaim_thr_lock from arc_lowmem(). Because of that I had to drop msleep() as well. I encountered the following deadlock. Thread X does I/O through ARC, it has got an ARC hash lock, it needs to allocate some memory, but the system has grown low on memory, so the thread has to wait on the page daemon to page some memory. The ARC eviction thread is already running, it holds arc_reclaim_thr_lock and it got blocked on the hash lock held by thread X. The page daemon thread invokes the low memory hook and enters arc_lowmem() where it gets blocked on arc_reclaim_thr_lock() and thus no pages can be paged out. I would prefer to have the pageout path free of indefinite waiting. > Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c > ============================================================================== > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 09:00:27 2015 (r286622) > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Aug 11 09:18:51 2015 (r286623) > @@ -4773,7 +4773,6 @@ arc_tempreserve_space(uint64_t reserve, > return (0); > } > > -static kmutex_t arc_lowmem_lock; > #ifdef _KERNEL > static eventhandler_tag arc_event_lowmem = NULL; > > @@ -4781,8 +4780,6 @@ static void > arc_lowmem(void *arg __unused, int howto __unused) > { > > - /* Serialize access via arc_lowmem_lock. */ > - mutex_enter(&arc_lowmem_lock); > mutex_enter(&arc_reclaim_thr_lock); > needfree = 1; > DTRACE_PROBE(arc__needfree); > @@ -4793,12 +4790,9 @@ arc_lowmem(void *arg __unused, int howto > * here from ARC itself and may hold ARC locks and thus risk a deadlock > * with ARC reclaim thread. > */ > - if (curproc == pageproc) { > - while (needfree) > - msleep(&needfree, &arc_reclaim_thr_lock, 0, "zfs:lowmem", 0); > - } > + if (curproc == pageproc) > + msleep(&needfree, &arc_reclaim_thr_lock, 0, "zfs:lowmem", 0); > mutex_exit(&arc_reclaim_thr_lock); > - mutex_exit(&arc_lowmem_lock); > } > #endif > > @@ -4809,7 +4803,6 @@ arc_init(void) > > mutex_init(&arc_reclaim_thr_lock, NULL, MUTEX_DEFAULT, NULL); > cv_init(&arc_reclaim_thr_cv, NULL, CV_DEFAULT, NULL); > - mutex_init(&arc_lowmem_lock, NULL, MUTEX_DEFAULT, NULL); > > /* Convert seconds to clock ticks */ > arc_min_prefetch_lifespan = 1 * hz; > @@ -5049,7 +5042,6 @@ arc_fini(void) > > ASSERT0(arc_loaned_bytes); > > - mutex_destroy(&arc_lowmem_lock); > #ifdef _KERNEL > if (arc_event_lowmem != NULL) > EVENTHANDLER_DEREGISTER(vm_lowmem, arc_event_lowmem); > -- Andriy Gapon From owner-svn-src-head@freebsd.org Fri Aug 14 11:47:54 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 59CEA99F163; Fri, 14 Aug 2015 11:47:54 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3DFC91D68; Fri, 14 Aug 2015 11:47:54 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EBlsWf008953; Fri, 14 Aug 2015 11:47:54 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EBlsW0008952; Fri, 14 Aug 2015 11:47:54 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508141147.t7EBlsW0008952@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 14 Aug 2015 11:47:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286770 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 11:47:54 -0000 Author: mav Date: Fri Aug 14 11:47:53 2015 New Revision: 286770 URL: https://svnweb.freebsd.org/changeset/base/286770 Log: Fix r286766 build with debug. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 10:17:52 2015 (r286769) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 11:47:53 2015 (r286770) @@ -1027,21 +1027,21 @@ SYSCTL_INT(_vfs_zfs, OID_AUTO, l2arc_nor &l2arc_norw, 0, "no reads during writes"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, anon_size, CTLFLAG_RD, - &ARC_anon.arcs_size, 0, "size of anonymous state"); + &ARC_anon.arcs_size.rc_count, 0, "size of anonymous state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, anon_metadata_lsize, CTLFLAG_RD, &ARC_anon.arcs_lsize[ARC_BUFC_METADATA], 0, "size of anonymous state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, anon_data_lsize, CTLFLAG_RD, &ARC_anon.arcs_lsize[ARC_BUFC_DATA], 0, "size of anonymous state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mru_size, CTLFLAG_RD, - &ARC_mru.arcs_size, 0, "size of mru state"); + &ARC_mru.arcs_size.rc_count, 0, "size of mru state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mru_metadata_lsize, CTLFLAG_RD, &ARC_mru.arcs_lsize[ARC_BUFC_METADATA], 0, "size of metadata in mru state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mru_data_lsize, CTLFLAG_RD, &ARC_mru.arcs_lsize[ARC_BUFC_DATA], 0, "size of data in mru state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mru_ghost_size, CTLFLAG_RD, - &ARC_mru_ghost.arcs_size, 0, "size of mru ghost state"); + &ARC_mru_ghost.arcs_size.rc_count, 0, "size of mru ghost state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mru_ghost_metadata_lsize, CTLFLAG_RD, &ARC_mru_ghost.arcs_lsize[ARC_BUFC_METADATA], 0, "size of metadata in mru ghost state"); @@ -1050,14 +1050,14 @@ SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mru_gho "size of data in mru ghost state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mfu_size, CTLFLAG_RD, - &ARC_mfu.arcs_size, 0, "size of mfu state"); + &ARC_mfu.arcs_size.rc_count, 0, "size of mfu state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mfu_metadata_lsize, CTLFLAG_RD, &ARC_mfu.arcs_lsize[ARC_BUFC_METADATA], 0, "size of metadata in mfu state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mfu_data_lsize, CTLFLAG_RD, &ARC_mfu.arcs_lsize[ARC_BUFC_DATA], 0, "size of data in mfu state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mfu_ghost_size, CTLFLAG_RD, - &ARC_mfu_ghost.arcs_size, 0, "size of mfu ghost state"); + &ARC_mfu_ghost.arcs_size.rc_count, 0, "size of mfu ghost state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mfu_ghost_metadata_lsize, CTLFLAG_RD, &ARC_mfu_ghost.arcs_lsize[ARC_BUFC_METADATA], 0, "size of metadata in mfu ghost state"); @@ -1066,7 +1066,7 @@ SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, mfu_gho "size of data in mfu ghost state"); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, l2c_only_size, CTLFLAG_RD, - &ARC_l2c_only.arcs_size, 0, "size of mru state"); + &ARC_l2c_only.arcs_size.rc_count, 0, "size of mru state"); /* * L2ARC Internals From owner-svn-src-head@freebsd.org Fri Aug 14 12:02:32 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6387C99FA48 for ; Fri, 14 Aug 2015 12:02:32 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from nm16.bullet.mail.bf1.yahoo.com (nm16.bullet.mail.bf1.yahoo.com [98.139.212.175]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0AAA81785 for ; Fri, 14 Aug 2015 12:02:31 +0000 (UTC) (envelope-from pfg@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1439553749; bh=WhCVwdEJuD0HG2bZzY3GsgLBH20gD7Hgg7SKZi+GL78=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From:Subject; b=FhEW8lcTS2pK2rF3maLofS2ZvLjZeIRvgRyMEWo/hsHQHuyfIXQRGIRfm2f4S74RtB+xcqqKYhbqeb19ALz9WtoYNbPH3EsMrjyePQiRzRQiJsGUnNJSwEzWD+qFNFbsHp8dV5RsCh8S0vfmdHdhvPepbapVdRsvyYQP62T6QXgoMS8jW4v8U3aNNJ2D1SD9l2LD90nvpyJvmvQHYaaelkhDuy2sgqqSTDJooGpz/gp47xp+8gb8A4mS0VAmLG+QQv4c4s5Ccl1ZX7r/kmJov8V0pVhg5t7hwXWFrpnhG8zu+7M08507PYziPXeS2IuILD2SUUuGEyHEZ9q8qWFdWw== Received: from [98.139.170.181] by nm16.bullet.mail.bf1.yahoo.com with NNFMP; 14 Aug 2015 12:02:29 -0000 Received: from [68.142.230.75] by tm24.bullet.mail.bf1.yahoo.com with NNFMP; 14 Aug 2015 12:02:29 -0000 Received: from [127.0.0.1] by smtp232.mail.bf1.yahoo.com with NNFMP; 14 Aug 2015 12:02:29 -0000 X-Yahoo-Newman-Id: 716522.93956.bm@smtp232.mail.bf1.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: YVlwOgEVM1nIbT7dSqXBX5JA2poZe8nwPXdTlwqCVdio7ia gYX58iLayNVaKfC5cpqYqZehcxMvXtC_InRj.3tO3HVdbNHt6fkrB59ABaWQ qoKPJ.rQld.klLztZ_zv07mmZA5E3Lt_jLWqod0QLpitgmRkbT.0c1QyBawB LH_slpuYRe9OKU_irYj366gJOXu.xwzdTX82CJ9gMaZhJztKqcuQfKXdI.1n dubZoc6N93MBnPP5DMgMOfpkx_UYj8tiBBpng5Iy1k8QVTTb.6fpZ31CgSsX 2ubv87egVFStbJbH_sO0ALUe.fFHoBhyAO1vycSOKa6TCClW4bOq3I_I5dMA bD2zVeHe.N7fQaCHWAMnPde3qt1iHlDTSiLB.dvzQ3bZ1ZaWx6V2GWVSFzl2 410xV2Xsm0j5RM5fovDhs4HHVCJwcN2zzb9RtVJ1Pu97qF8LkBq4pZGKOwxL r68zJezppYceWRxKEkAcPXZLBU_nSYQwQ5JIIt4OK3xGEJm4ESuuI7LvSQTG N3dZYCZcrl4JdEuA2uKJMjt00JgUTKczD X-Yahoo-SMTP: xcjD0guswBAZaPPIbxpWwLcp9Unf Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2098\)) Subject: Re: svn commit: r286760 - in head/lib/libc: . secure sys From: Pedro Giffuni In-Reply-To: <20150814112443.GL2072@kib.kiev.ua> Date: Fri, 14 Aug 2015 07:02:25 -0500 Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: quoted-printable Message-Id: <85D0049C-488D-45E3-8E60-8F9442CFC8B2@FreeBSD.org> References: <201508140303.t7E33EnN095618@repo.freebsd.org> <20150814112443.GL2072@kib.kiev.ua> To: Konstantin Belousov X-Mailer: Apple Mail (2.2098) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 12:02:32 -0000 Hello; > Il giorno 14/ago/2015, alle ore 06:24, Konstantin Belousov = ha scritto: >=20 > On Fri, Aug 14, 2015 at 03:03:14AM +0000, Pedro F. Giffuni wrote: >> +/* >> + * It'd be nice to have this automatically generated, but we don't >> + * know to what version they will eventually belong, so for now >> + * it has to be manual. >> + */ > The comment does not make a bit of sense. > It also raises the question whether the author(s) of the change > ever understand what do they change. >=20 It was blindly copy/pasted from the originating lib/libc/sys/Symbol.map. I will remove both stale comments. Thanks, Pedro. From owner-svn-src-head@freebsd.org Fri Aug 14 12:16:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1C1A199FD45; Fri, 14 Aug 2015 12:16:56 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8900D1DA0; Fri, 14 Aug 2015 12:16:55 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id t7ECGoCF067772 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 14 Aug 2015 15:16:50 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua t7ECGoCF067772 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id t7ECGotb067771; Fri, 14 Aug 2015 15:16:50 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 14 Aug 2015 15:16:50 +0300 From: Konstantin Belousov To: Pedro Giffuni Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286760 - in head/lib/libc: . secure sys Message-ID: <20150814121649.GN2072@kib.kiev.ua> References: <201508140303.t7E33EnN095618@repo.freebsd.org> <20150814112443.GL2072@kib.kiev.ua> <85D0049C-488D-45E3-8E60-8F9442CFC8B2@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <85D0049C-488D-45E3-8E60-8F9442CFC8B2@FreeBSD.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 12:16:56 -0000 On Fri, Aug 14, 2015 at 07:02:25AM -0500, Pedro Giffuni wrote: > Hello; > > > Il giorno 14/ago/2015, alle ore 06:24, Konstantin Belousov ha scritto: > > > > On Fri, Aug 14, 2015 at 03:03:14AM +0000, Pedro F. Giffuni wrote: > >> +/* > >> + * It'd be nice to have this automatically generated, but we don't > >> + * know to what version they will eventually belong, so for now > >> + * it has to be manual. > >> + */ > > The comment does not make a bit of sense. > > It also raises the question whether the author(s) of the change > > ever understand what do they change. > > > > It was blindly copy/pasted from the originating lib/libc/sys/Symbol.map. In the sys/Symbol.map it referenced the generated symbols for the syscall trampolines. You could clarify this in the comment, by limiting its scope to the syscall symbols. But I do not object to removing it from sys/Symbol.map. > > I will remove both stale comments. Ok. From owner-svn-src-head@freebsd.org Fri Aug 14 12:46:35 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F100F9B8363; Fri, 14 Aug 2015 12:46:35 +0000 (UTC) (envelope-from hps@selasky.org) Received: from mail.turbocat.net (mail.turbocat.net [IPv6:2a01:4f8:d16:4514::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B53BF1D84; Fri, 14 Aug 2015 12:46:35 +0000 (UTC) (envelope-from hps@selasky.org) Received: from laptop015.home.selasky.org (cm-176.74.213.204.customer.telag.net [176.74.213.204]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.turbocat.net (Postfix) with ESMTPSA id 8E0A31FE023; Fri, 14 Aug 2015 14:46:33 +0200 (CEST) Subject: Re: svn commit: r286768 - head/sys/arm64/arm64 To: Andrew Turner , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <201508140955.t7E9tQ51063793@repo.freebsd.org> From: Hans Petter Selasky Message-ID: <55CDE380.3060900@selasky.org> Date: Fri, 14 Aug 2015 14:48:00 +0200 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <201508140955.t7E9tQ51063793@repo.freebsd.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 12:46:36 -0000 On 08/14/15 11:55, Andrew Turner wrote: > Author: andrew > Date: Fri Aug 14 09:55:25 2015 > New Revision: 286768 > URL: https://svnweb.freebsd.org/changeset/base/286768 > > Log: > Add support for bus_space_read_region and bus_space_write_region. This is > needed for the dwc USB controller driver. > > Sponsored by: ABT Systems Ltd > > Modified: > head/sys/arm64/arm64/bus_machdep.c > head/sys/arm64/arm64/bus_space_asm.S > NOTE: Use of load/store multiple can give a significant performance boost for the DWC OTG. --HPS From owner-svn-src-head@freebsd.org Fri Aug 14 12:57:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 294B89B8514; Fri, 14 Aug 2015 12:57:56 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 14DD711F2; Fri, 14 Aug 2015 12:57:56 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ECvtLC037667; Fri, 14 Aug 2015 12:57:55 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ECvrc5037656; Fri, 14 Aug 2015 12:57:53 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201508141257.t7ECvrc5037656@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Fri, 14 Aug 2015 12:57:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286773 - in head/sys: boot/kshim dev/usb dev/usb/controller X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 12:57:56 -0000 Author: hselasky Date: Fri Aug 14 12:57:53 2015 New Revision: 286773 URL: https://svnweb.freebsd.org/changeset/base/286773 Log: Improve the realtime properties of USB transfers for embedded systems like RPI-B and RPI-2. Description of problem: USB transfers can process data in their callbacks sometimes causing unacceptable latency for other USB transfers. Separate BULK completion callbacks from CONTROL, INTERRUPT and ISOCHRONOUS callbacks, and give BULK completion callbacks lesser execution priority than the others. This way USB audio won't be interfered by heavy USB ethernet usage for example. Further serve USB transfer completion in a round robin fashion, instead of only serving the most CPU hungry. This has been done by adding a third flag to USB transfer queue structure which keeps track of looping callbacks. The "command" callback function then decides what to do when looping. MFC after: 2 weeks Modified: head/sys/boot/kshim/bsd_kernel.h head/sys/dev/usb/controller/usb_controller.c head/sys/dev/usb/usb_bus.h head/sys/dev/usb/usb_device.c head/sys/dev/usb/usb_hub.c head/sys/dev/usb/usb_process.h head/sys/dev/usb/usb_transfer.c head/sys/dev/usb/usbdi.h Modified: head/sys/boot/kshim/bsd_kernel.h ============================================================================== --- head/sys/boot/kshim/bsd_kernel.h Fri Aug 14 12:23:20 2015 (r286772) +++ head/sys/boot/kshim/bsd_kernel.h Fri Aug 14 12:57:53 2015 (r286773) @@ -43,7 +43,8 @@ #define M_USBDEV 0 #define USB_PROC_MAX 3 #define USB_BUS_GIANT_PROC(bus) (usb_process + 2) -#define USB_BUS_NON_GIANT_PROC(bus) (usb_process + 2) +#define USB_BUS_NON_GIANT_BULK_PROC(bus) (usb_process + 2) +#define USB_BUS_NON_GIANT_ISOC_PROC(bus) (usb_process + 2) #define USB_BUS_EXPLORE_PROC(bus) (usb_process + 0) #define USB_BUS_CONTROL_XFER_PROC(bus) (usb_process + 1) #define SYSCTL_DECL(...) Modified: head/sys/dev/usb/controller/usb_controller.c ============================================================================== --- head/sys/dev/usb/controller/usb_controller.c Fri Aug 14 12:23:20 2015 (r286772) +++ head/sys/dev/usb/controller/usb_controller.c Fri Aug 14 12:57:53 2015 (r286773) @@ -231,7 +231,8 @@ usb_detach(device_t dev) /* Get rid of USB callback processes */ usb_proc_free(USB_BUS_GIANT_PROC(bus)); - usb_proc_free(USB_BUS_NON_GIANT_PROC(bus)); + usb_proc_free(USB_BUS_NON_GIANT_ISOC_PROC(bus)); + usb_proc_free(USB_BUS_NON_GIANT_BULK_PROC(bus)); /* Get rid of USB explore process */ @@ -395,7 +396,8 @@ usb_bus_explore(struct usb_proc_msg *pm) */ usb_proc_rewakeup(USB_BUS_CONTROL_XFER_PROC(bus)); usb_proc_rewakeup(USB_BUS_GIANT_PROC(bus)); - usb_proc_rewakeup(USB_BUS_NON_GIANT_PROC(bus)); + usb_proc_rewakeup(USB_BUS_NON_GIANT_ISOC_PROC(bus)); + usb_proc_rewakeup(USB_BUS_NON_GIANT_BULK_PROC(bus)); #endif USB_BUS_UNLOCK(bus); @@ -860,9 +862,13 @@ usb_attach_sub(device_t dev, struct usb_ &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_MED)) { device_printf(dev, "WARNING: Creation of USB Giant " "callback process failed.\n"); - } else if (usb_proc_create(USB_BUS_NON_GIANT_PROC(bus), + } else if (usb_proc_create(USB_BUS_NON_GIANT_ISOC_PROC(bus), + &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_HIGHEST)) { + device_printf(dev, "WARNING: Creation of USB non-Giant ISOC " + "callback process failed.\n"); + } else if (usb_proc_create(USB_BUS_NON_GIANT_BULK_PROC(bus), &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_HIGH)) { - device_printf(dev, "WARNING: Creation of USB non-Giant " + device_printf(dev, "WARNING: Creation of USB non-Giant BULK " "callback process failed.\n"); } else if (usb_proc_create(USB_BUS_EXPLORE_PROC(bus), &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_MED)) { Modified: head/sys/dev/usb/usb_bus.h ============================================================================== --- head/sys/dev/usb/usb_bus.h Fri Aug 14 12:23:20 2015 (r286772) +++ head/sys/dev/usb/usb_bus.h Fri Aug 14 12:57:53 2015 (r286773) @@ -57,19 +57,26 @@ struct usb_bus { struct root_hold_token *bus_roothold; #endif +/* convenience macros */ +#define USB_BUS_TT_PROC(bus) USB_BUS_NON_GIANT_ISOC_PROC(bus) +#define USB_BUS_CS_PROC(bus) USB_BUS_NON_GIANT_ISOC_PROC(bus) + #if USB_HAVE_PER_BUS_PROCESS #define USB_BUS_GIANT_PROC(bus) (&(bus)->giant_callback_proc) -#define USB_BUS_NON_GIANT_PROC(bus) (&(bus)->non_giant_callback_proc) +#define USB_BUS_NON_GIANT_ISOC_PROC(bus) (&(bus)->non_giant_isoc_callback_proc) +#define USB_BUS_NON_GIANT_BULK_PROC(bus) (&(bus)->non_giant_bulk_callback_proc) #define USB_BUS_EXPLORE_PROC(bus) (&(bus)->explore_proc) #define USB_BUS_CONTROL_XFER_PROC(bus) (&(bus)->control_xfer_proc) - /* - * There are two callback processes. One for Giant locked - * callbacks. One for non-Giant locked callbacks. This should - * avoid congestion and reduce response time in most cases. + * There are three callback processes. One for Giant locked + * callbacks. One for non-Giant locked non-periodic callbacks + * and one for non-Giant locked periodic callbacks. This + * should avoid congestion and reduce response time in most + * cases. */ struct usb_process giant_callback_proc; - struct usb_process non_giant_callback_proc; + struct usb_process non_giant_isoc_callback_proc; + struct usb_process non_giant_bulk_callback_proc; /* Explore process */ struct usb_process explore_proc; Modified: head/sys/dev/usb/usb_device.c ============================================================================== --- head/sys/dev/usb/usb_device.c Fri Aug 14 12:23:20 2015 (r286772) +++ head/sys/dev/usb/usb_device.c Fri Aug 14 12:57:53 2015 (r286773) @@ -2181,7 +2181,7 @@ usb_free_device(struct usb_device *udev, * anywhere: */ USB_BUS_LOCK(udev->bus); - usb_proc_mwait(USB_BUS_NON_GIANT_PROC(udev->bus), + usb_proc_mwait(USB_BUS_CS_PROC(udev->bus), &udev->cs_msg[0], &udev->cs_msg[1]); USB_BUS_UNLOCK(udev->bus); Modified: head/sys/dev/usb/usb_hub.c ============================================================================== --- head/sys/dev/usb/usb_hub.c Fri Aug 14 12:23:20 2015 (r286772) +++ head/sys/dev/usb/usb_hub.c Fri Aug 14 12:57:53 2015 (r286773) @@ -346,7 +346,7 @@ uhub_tt_buffer_reset_async_locked(struct } up->req_reset_tt = req; /* get reset transfer started */ - usb_proc_msignal(USB_BUS_NON_GIANT_PROC(udev->bus), + usb_proc_msignal(USB_BUS_TT_PROC(udev->bus), &hub->tt_msg[0], &hub->tt_msg[1]); } #endif @@ -1579,7 +1579,7 @@ uhub_detach(device_t dev) #if USB_HAVE_TT_SUPPORT /* Make sure our TT messages are not queued anywhere */ USB_BUS_LOCK(bus); - usb_proc_mwait(USB_BUS_NON_GIANT_PROC(bus), + usb_proc_mwait(USB_BUS_TT_PROC(bus), &hub->tt_msg[0], &hub->tt_msg[1]); USB_BUS_UNLOCK(bus); #endif Modified: head/sys/dev/usb/usb_process.h ============================================================================== --- head/sys/dev/usb/usb_process.h Fri Aug 14 12:23:20 2015 (r286772) +++ head/sys/dev/usb/usb_process.h Fri Aug 14 12:57:53 2015 (r286773) @@ -34,6 +34,7 @@ #endif /* defines */ +#define USB_PRI_HIGHEST PI_SWI(SWI_TTY) #define USB_PRI_HIGH PI_SWI(SWI_NET) #define USB_PRI_MED PI_SWI(SWI_CAMBIO) Modified: head/sys/dev/usb/usb_transfer.c ============================================================================== --- head/sys/dev/usb/usb_transfer.c Fri Aug 14 12:23:20 2015 (r286772) +++ head/sys/dev/usb/usb_transfer.c Fri Aug 14 12:57:53 2015 (r286773) @@ -872,6 +872,19 @@ done: } } +static uint8_t +usbd_transfer_setup_has_bulk(const struct usb_config *setup_start, + uint16_t n_setup) +{ + while (n_setup--) { + uint8_t type = setup_start[n_setup].type; + if (type == UE_BULK || type == UE_BULK_INTR || + type == UE_TYPE_ANY) + return (1); + } + return (0); +} + /*------------------------------------------------------------------------* * usbd_transfer_setup - setup an array of USB transfers * @@ -1013,9 +1026,12 @@ usbd_transfer_setup(struct usb_device *u else if (xfer_mtx == &Giant) info->done_p = USB_BUS_GIANT_PROC(udev->bus); + else if (usbd_transfer_setup_has_bulk(setup_start, n_setup)) + info->done_p = + USB_BUS_NON_GIANT_BULK_PROC(udev->bus); else info->done_p = - USB_BUS_NON_GIANT_PROC(udev->bus); + USB_BUS_NON_GIANT_ISOC_PROC(udev->bus); } /* reset sizes */ @@ -2280,10 +2296,8 @@ usbd_callback_ss_done_defer(struct usb_x * will have a Lock Order Reversal, LOR, if we try to * proceed ! */ - if (usb_proc_msignal(info->done_p, - &info->done_m[0], &info->done_m[1])) { - /* ignore */ - } + (void) usb_proc_msignal(info->done_p, + &info->done_m[0], &info->done_m[1]); } else { /* clear second recurse flag */ pq->recurse_2 = 0; @@ -2307,23 +2321,26 @@ usbd_callback_wrapper(struct usb_xfer_qu struct usb_xfer_root *info = xfer->xroot; USB_BUS_LOCK_ASSERT(info->bus, MA_OWNED); - if (!mtx_owned(info->xfer_mtx) && !SCHEDULER_STOPPED()) { + if ((pq->recurse_3 != 0 || mtx_owned(info->xfer_mtx) == 0) && + SCHEDULER_STOPPED() == 0) { /* * Cases that end up here: * * 5) HW interrupt done callback or other source. + * 6) HW completed transfer during callback */ - DPRINTFN(3, "case 5\n"); + DPRINTFN(3, "case 5 and 6\n"); /* * We have to postpone the callback due to the fact we * will have a Lock Order Reversal, LOR, if we try to - * proceed ! + * proceed! + * + * Postponing the callback also ensures that other USB + * transfer queues get a chance. */ - if (usb_proc_msignal(info->done_p, - &info->done_m[0], &info->done_m[1])) { - /* ignore */ - } + (void) usb_proc_msignal(info->done_p, + &info->done_m[0], &info->done_m[1]); return; } /* @@ -2694,7 +2711,7 @@ usbd_pipe_start(struct usb_xfer_queue *p } else if (udev->ctrl_xfer[1]) { info = udev->ctrl_xfer[1]->xroot; usb_proc_msignal( - USB_BUS_NON_GIANT_PROC(info->bus), + USB_BUS_CS_PROC(info->bus), &udev->cs_msg[0], &udev->cs_msg[1]); } else { /* should not happen */ @@ -3019,9 +3036,11 @@ usb_command_wrapper(struct usb_xfer_queu if (!pq->recurse_1) { - do { + /* clear third recurse flag */ + pq->recurse_3 = 0; - /* set both recurse flags */ + do { + /* set two first recurse flags */ pq->recurse_1 = 1; pq->recurse_2 = 1; @@ -3040,6 +3059,12 @@ usb_command_wrapper(struct usb_xfer_queu (pq->command) (pq); DPRINTFN(6, "cb %p (leave)\n", pq->curr); + /* + * Set third recurse flag to indicate + * recursion happened: + */ + pq->recurse_3 = 1; + } while (!pq->recurse_2); /* clear first recurse flag */ @@ -3315,7 +3340,8 @@ usbd_transfer_poll(struct usb_xfer **ppx USB_BUS_CONTROL_XFER_PROC(udev->bus)->up_msleep = 0; USB_BUS_EXPLORE_PROC(udev->bus)->up_msleep = 0; USB_BUS_GIANT_PROC(udev->bus)->up_msleep = 0; - USB_BUS_NON_GIANT_PROC(udev->bus)->up_msleep = 0; + USB_BUS_NON_GIANT_ISOC_PROC(udev->bus)->up_msleep = 0; + USB_BUS_NON_GIANT_BULK_PROC(udev->bus)->up_msleep = 0; /* poll USB hardware */ (udev->bus->methods->xfer_poll) (udev->bus); Modified: head/sys/dev/usb/usbdi.h ============================================================================== --- head/sys/dev/usb/usbdi.h Fri Aug 14 12:23:20 2015 (r286772) +++ head/sys/dev/usb/usbdi.h Fri Aug 14 12:57:53 2015 (r286773) @@ -128,6 +128,8 @@ struct usb_xfer_queue { void (*command) (struct usb_xfer_queue *pq); uint8_t recurse_1:1; uint8_t recurse_2:1; + uint8_t recurse_3:1; + uint8_t reserved:5; }; /* From owner-svn-src-head@freebsd.org Fri Aug 14 13:10:31 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7C4BD9B87E2; Fri, 14 Aug 2015 13:10:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6D3E21A4A; Fri, 14 Aug 2015 13:10:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EDAV1E041906; Fri, 14 Aug 2015 13:10:31 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EDAVIl041905; Fri, 14 Aug 2015 13:10:31 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508141310.t7EDAVIl041905@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 14 Aug 2015 13:10:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286774 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 13:10:31 -0000 Author: mav Date: Fri Aug 14 13:10:30 2015 New Revision: 286774 URL: https://svnweb.freebsd.org/changeset/base/286774 Log: 2618 arc.c mistypes in the comments Reviewed by: Jason King Reviewed by: Josef Sipek Approved by: Richard Lowe Author: Bart Coddens illumos/illumos-gate@fc98fea58e89224f6f13d7fae246d6cb5dfa35ea Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 12:57:53 2015 (r286773) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 13:10:30 2015 (r286774) @@ -82,9 +82,9 @@ * types of locks: 1) the hash table lock array, and 2) the * arc list locks. * - * Buffers do not have their own mutexs, rather they rely on the - * hash table mutexs for the bulk of their protection (i.e. most - * fields in the arc_buf_hdr_t are protected by these mutexs). + * Buffers do not have their own mutexes, rather they rely on the + * hash table mutexes for the bulk of their protection (i.e. most + * fields in the arc_buf_hdr_t are protected by these mutexes). * * buf_hash_find() returns the appropriate mutex (held) when it * locates the requested buffer in the hash table. It returns From owner-svn-src-head@freebsd.org Fri Aug 14 13:39:56 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7B3759B8FE9; Fri, 14 Aug 2015 13:39:56 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6C3E51036; Fri, 14 Aug 2015 13:39:56 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EDducs054889; Fri, 14 Aug 2015 13:39:56 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EDdtZu054886; Fri, 14 Aug 2015 13:39:55 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508141339.t7EDdtZu054886@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Fri, 14 Aug 2015 13:39:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286775 - in head/usr.sbin/pw: . tests X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 13:39:56 -0000 Author: bapt Date: Fri Aug 14 13:39:55 2015 New Revision: 286775 URL: https://svnweb.freebsd.org/changeset/base/286775 Log: Regression: fix pw usermod -w xxx Reported by: gjb Modified: head/usr.sbin/pw/pw_user.c head/usr.sbin/pw/tests/pw_useradd.sh Modified: head/usr.sbin/pw/pw_user.c ============================================================================== --- head/usr.sbin/pw/pw_user.c Fri Aug 14 13:10:30 2015 (r286774) +++ head/usr.sbin/pw/pw_user.c Fri Aug 14 13:39:55 2015 (r286775) @@ -1645,6 +1645,8 @@ pw_user_mod(int argc, char **argv, char if (lc == NULL || login_setcryptfmt(lc, "sha512", NULL) == NULL) warn("setting crypt(3) format"); login_close(lc); + cnf->default_password = boolean_val(passwd, + cnf->default_password); pwd->pw_passwd = pw_password(cnf, pwd->pw_name, dryrun); edited = true; } Modified: head/usr.sbin/pw/tests/pw_useradd.sh ============================================================================== --- head/usr.sbin/pw/tests/pw_useradd.sh Fri Aug 14 13:10:30 2015 (r286774) +++ head/usr.sbin/pw/tests/pw_useradd.sh Fri Aug 14 13:39:55 2015 (r286775) @@ -314,6 +314,19 @@ user_add_already_exists_body() { ${PW} useradd foo } +atf_test_case user_add_w_yes +user_add_w_yes_body() { + populate_etc_skel + atf_check -s exit:0 ${PW} useradd foo -w yes + atf_check -s exit:0 \ + -o match:'^foo:\$.*' \ + grep "^foo" ${HOME}/master.passwd + atf_check -s exit:0 ${PW} usermod foo -w yes + atf_check -s exit:0 \ + -o match:'^foo:\$.*' \ + grep "^foo" ${HOME}/master.passwd +} + atf_init_test_cases() { atf_add_test_case user_add atf_add_test_case user_add_noupdate @@ -341,4 +354,5 @@ atf_init_test_cases() { atf_add_test_case user_add_uid_too_large atf_add_test_case user_add_bad_shell atf_add_test_case user_add_already_exists + atf_add_test_case user_add_w_yes } From owner-svn-src-head@freebsd.org Fri Aug 14 13:43:13 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 180309B819B; Fri, 14 Aug 2015 13:43:13 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 08F3D1634; Fri, 14 Aug 2015 13:43:13 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EDhClL058697; Fri, 14 Aug 2015 13:43:12 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EDhCJ5058696; Fri, 14 Aug 2015 13:43:12 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508141343.t7EDhCJ5058696@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 14 Aug 2015 13:43:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286776 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 13:43:13 -0000 Author: mav Date: Fri Aug 14 13:43:12 2015 New Revision: 286776 URL: https://svnweb.freebsd.org/changeset/base/286776 Log: Remove some random accumulated diff from Illumos. Submitted by: avg (partially) Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 13:39:55 2015 (r286775) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Fri Aug 14 13:43:12 2015 (r286776) @@ -2413,6 +2413,7 @@ arc_hdr_destroy(arc_buf_hdr_t *hdr) if (!BUF_EMPTY(hdr)) buf_discard_identity(hdr); + if (hdr->b_freeze_cksum != NULL) { kmem_free(hdr->b_freeze_cksum, sizeof (zio_cksum_t)); hdr->b_freeze_cksum = NULL; @@ -4655,8 +4656,6 @@ arc_release(arc_buf_t *buf, void *tag) { arc_buf_hdr_t *hdr = buf->b_hdr; - ASSERT(HDR_HAS_L1HDR(hdr)); - /* * It would be nice to assert that if it's DMU metadata (level > * 0 || it's the dnode file), then it must be syncing context. @@ -4664,6 +4663,9 @@ arc_release(arc_buf_t *buf, void *tag) */ mutex_enter(&buf->b_evict_lock); + + ASSERT(HDR_HAS_L1HDR(hdr)); + /* * We don't grab the hash lock prior to this check, because if * the buffer's header is in the arc_anon state, it won't be @@ -5894,6 +5896,7 @@ top: /* * Error - drop L2ARC entry. */ + list_remove(buflist, hdr); trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev, hdr->b_l2hdr.b_daddr, hdr->b_l2hdr.b_asize, 0); hdr->b_flags &= ~ARC_FLAG_HAS_L2HDR; @@ -6414,14 +6417,6 @@ l2arc_write_buffers(spa_t *spa, l2arc_de buf_sz = hdr->b_l2hdr.b_asize; /* - * If the data has not been compressed, then clear b_tmp_cdata - * to make sure that it points only to a temporary compression - * buffer. - */ - if (!L2ARC_IS_VALID_COMPRESS(HDR_GET_COMPRESS(hdr))) - hdr->b_l1hdr.b_tmp_cdata = NULL; - - /* * We need to do this regardless if buf_sz is zero or * not, otherwise, when this l2hdr is evicted we'll * remove a reference that was never added. @@ -6514,6 +6509,12 @@ l2arc_compress_buf(arc_buf_hdr_t *hdr) csize = zio_compress_data(ZIO_COMPRESS_LZ4, hdr->b_l1hdr.b_tmp_cdata, cdata, l2hdr->b_asize); + rounded = P2ROUNDUP(csize, (size_t)SPA_MINBLOCKSIZE); + if (rounded > csize) { + bzero((char *)cdata + csize, rounded - csize); + csize = rounded; + } + if (csize == 0) { /* zero block, indicate that there's nothing to write */ zio_data_buf_free(cdata, len); @@ -6522,19 +6523,11 @@ l2arc_compress_buf(arc_buf_hdr_t *hdr) hdr->b_l1hdr.b_tmp_cdata = NULL; ARCSTAT_BUMP(arcstat_l2_compress_zeros); return (B_TRUE); - } - - rounded = P2ROUNDUP(csize, - (size_t)1 << l2hdr->b_dev->l2ad_vdev->vdev_ashift); - if (rounded < len) { + } else if (csize > 0 && csize < len) { /* * Compression succeeded, we'll keep the cdata around for * writing and release it afterwards. */ - if (rounded > csize) { - bzero((char *)cdata + csize, rounded - csize); - csize = rounded; - } HDR_SET_COMPRESS(hdr, ZIO_COMPRESS_LZ4); l2hdr->b_asize = csize; hdr->b_l1hdr.b_tmp_cdata = cdata; @@ -6651,6 +6644,7 @@ l2arc_release_cdata_buf(arc_buf_hdr_t *h hdr->b_size); hdr->b_l1hdr.b_tmp_cdata = NULL; } + } /* From owner-svn-src-head@freebsd.org Fri Aug 14 13:52:00 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 66B769B8491; Fri, 14 Aug 2015 13:52:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 57FCE1E09; Fri, 14 Aug 2015 13:52:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EDq09c063039; Fri, 14 Aug 2015 13:52:00 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EDq0La063038; Fri, 14 Aug 2015 13:52:00 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201508141352.t7EDq0La063038@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Fri, 14 Aug 2015 13:52:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286777 - head/sys/x86/iommu X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 13:52:00 -0000 Author: kib Date: Fri Aug 14 13:51:59 2015 New Revision: 286777 URL: https://svnweb.freebsd.org/changeset/base/286777 Log: Comment only change, fix grammar and somewhat clarify the action. Sponsored by: The FreeBSD Foundation MFC after: 3 days Modified: head/sys/x86/iommu/intel_idpgtbl.c Modified: head/sys/x86/iommu/intel_idpgtbl.c ============================================================================== --- head/sys/x86/iommu/intel_idpgtbl.c Fri Aug 14 13:43:12 2015 (r286776) +++ head/sys/x86/iommu/intel_idpgtbl.c Fri Aug 14 13:51:59 2015 (r286777) @@ -374,8 +374,9 @@ retry: KASSERT(lvl > 0, ("lost root page table page %p", domain)); /* - * Page table page does not exists, allocate - * it and create pte in the up level. + * Page table page does not exist, allocate + * it and create a pte in the preceeding page level + * to reference the allocated page table page. */ m = dmar_pgalloc(domain->pgtbl_obj, idx, flags | DMAR_PGF_ZERO); From owner-svn-src-head@freebsd.org Fri Aug 14 13:58:19 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1B5349B85ED; Fri, 14 Aug 2015 13:58:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E675112BE; Fri, 14 Aug 2015 13:58:18 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EDwIMX063576; Fri, 14 Aug 2015 13:58:18 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EDwIea063575; Fri, 14 Aug 2015 13:58:18 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201508141358.t7EDwIea063575@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Fri, 14 Aug 2015 13:58:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286778 - head/sys/dev/usb/controller X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 13:58:19 -0000 Author: hselasky Date: Fri Aug 14 13:58:18 2015 New Revision: 286778 URL: https://svnweb.freebsd.org/changeset/base/286778 Log: Minor code refactor to avoid duplicating code. MFC after: 2 weeks Modified: head/sys/dev/usb/controller/dwc_otg.c Modified: head/sys/dev/usb/controller/dwc_otg.c ============================================================================== --- head/sys/dev/usb/controller/dwc_otg.c Fri Aug 14 13:51:59 2015 (r286777) +++ head/sys/dev/usb/controller/dwc_otg.c Fri Aug 14 13:58:18 2015 (r286778) @@ -2551,11 +2551,19 @@ static void dwc_otg_interrupt_poll_locked(struct dwc_otg_softc *sc) { struct usb_xfer *xfer; - uint32_t count = 0; + uint32_t count; uint32_t temp; uint8_t got_rx_status; uint8_t x; + if (sc->sc_flags.status_device_mode == 0) { + /* + * Update host transfer schedule, so that new + * transfers can be issued: + */ + dwc_otg_update_host_transfer_schedule_locked(sc); + } + count = 0; repeat: if (++count == 16) { /* give other interrupts a chance */ @@ -2659,12 +2667,6 @@ repeat: sc->sc_irq_mask &= ~GINTMSK_RXFLVLMSK; DWC_OTG_WRITE_4(sc, DOTG_GINTMSK, sc->sc_irq_mask); } - - if (sc->sc_flags.status_device_mode == 0 && sc->sc_xfer_complete == 0) { - /* update host transfer schedule, so that new transfers can be issued */ - if (dwc_otg_update_host_transfer_schedule_locked(sc)) - goto repeat; - } } static void @@ -2944,12 +2946,6 @@ dwc_otg_interrupt(void *arg) /* complete FIFOs, if any */ dwc_otg_interrupt_complete_locked(sc); - - if (sc->sc_flags.status_device_mode == 0) { - /* update host transfer schedule, so that new transfers can be issued */ - if (dwc_otg_update_host_transfer_schedule_locked(sc)) - dwc_otg_interrupt_poll_locked(sc); - } } USB_BUS_SPIN_UNLOCK(&sc->sc_bus); USB_BUS_UNLOCK(&sc->sc_bus); @@ -3950,11 +3946,6 @@ dwc_otg_do_poll(struct usb_bus *bus) USB_BUS_SPIN_LOCK(&sc->sc_bus); dwc_otg_interrupt_poll_locked(sc); dwc_otg_interrupt_complete_locked(sc); - if (sc->sc_flags.status_device_mode == 0) { - /* update host transfer schedule, so that new transfers can be issued */ - if (dwc_otg_update_host_transfer_schedule_locked(sc)) - dwc_otg_interrupt_poll_locked(sc); - } USB_BUS_SPIN_UNLOCK(&sc->sc_bus); USB_BUS_UNLOCK(&sc->sc_bus); } From owner-svn-src-head@freebsd.org Fri Aug 14 14:17:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 69B0A9B8B9C; Fri, 14 Aug 2015 14:17:05 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5873F10F2; Fri, 14 Aug 2015 14:17:05 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EEH5Il072041; Fri, 14 Aug 2015 14:17:05 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EEH47J072039; Fri, 14 Aug 2015 14:17:04 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201508141417.t7EEH47J072039@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Fri, 14 Aug 2015 14:17:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286779 - head/contrib/compiler-rt/lib/builtins X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 14:17:05 -0000 Author: andrew Date: Fri Aug 14 14:17:04 2015 New Revision: 286779 URL: https://svnweb.freebsd.org/changeset/base/286779 Log: Use __builtin_clzll to count the leading zero bits, the data is based on long long so __builtin_clz will return an incorrect value. Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D3375 Modified: head/contrib/compiler-rt/lib/builtins/floatditf.c head/contrib/compiler-rt/lib/builtins/floatunditf.c Modified: head/contrib/compiler-rt/lib/builtins/floatditf.c ============================================================================== --- head/contrib/compiler-rt/lib/builtins/floatditf.c Fri Aug 14 13:58:18 2015 (r286778) +++ head/contrib/compiler-rt/lib/builtins/floatditf.c Fri Aug 14 14:17:04 2015 (r286779) @@ -34,7 +34,7 @@ COMPILER_RT_ABI fp_t __floatditf(di_int } // Exponent of (fp_t)a is the width of abs(a). - const int exponent = (aWidth - 1) - __builtin_clz(a); + const int exponent = (aWidth - 1) - __builtin_clzll(a); rep_t result; // Shift a into the significand field and clear the implicit bit. Extra Modified: head/contrib/compiler-rt/lib/builtins/floatunditf.c ============================================================================== --- head/contrib/compiler-rt/lib/builtins/floatunditf.c Fri Aug 14 13:58:18 2015 (r286778) +++ head/contrib/compiler-rt/lib/builtins/floatunditf.c Fri Aug 14 14:17:04 2015 (r286779) @@ -25,7 +25,7 @@ COMPILER_RT_ABI fp_t __floatunditf(du_in if (a == 0) return fromRep(0); // Exponent of (fp_t)a is the width of abs(a). - const int exponent = (aWidth - 1) - __builtin_clz(a); + const int exponent = (aWidth - 1) - __builtin_clzll(a); rep_t result; // Shift a into the significand field and clear the implicit bit. From owner-svn-src-head@freebsd.org Fri Aug 14 14:20:11 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DF5BD9B8C0E; Fri, 14 Aug 2015 14:20:11 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B3A59128E; Fri, 14 Aug 2015 14:20:11 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EEKB8j072239; Fri, 14 Aug 2015 14:20:11 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EEKBvQ072238; Fri, 14 Aug 2015 14:20:11 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201508141420.t7EEKBvQ072238@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Fri, 14 Aug 2015 14:20:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286780 - head/sys/dev/usb/controller X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 14:20:12 -0000 Author: hselasky Date: Fri Aug 14 14:20:10 2015 New Revision: 286780 URL: https://svnweb.freebsd.org/changeset/base/286780 Log: Handle NYET high speed tokens and predict NAK'ing is up next. MFC after: 2 weeks Modified: head/sys/dev/usb/controller/dwc_otg.c Modified: head/sys/dev/usb/controller/dwc_otg.c ============================================================================== --- head/sys/dev/usb/controller/dwc_otg.c Fri Aug 14 14:17:04 2015 (r286779) +++ head/sys/dev/usb/controller/dwc_otg.c Fri Aug 14 14:20:10 2015 (r286780) @@ -1060,34 +1060,36 @@ dwc_otg_host_rate_check_interrupt(struct static uint8_t dwc_otg_host_rate_check(struct dwc_otg_softc *sc, struct dwc_otg_td *td) { + uint8_t frame_num = (uint8_t)sc->sc_last_frame_num; + if (td->ep_type == UE_ISOCHRONOUS) { /* non TT isochronous traffic */ if ((td->tmr_val != 0) || - (sc->sc_last_frame_num & (td->tmr_res - 1))) { + (frame_num & (td->tmr_res - 1))) { goto busy; } td->tmr_val = 1; /* executed */ td->toggle = 0; - + return (0); } else if (td->ep_type == UE_INTERRUPT) { if (!td->tt_scheduled) goto busy; td->tt_scheduled = 0; + return (0); } else if (td->did_nak != 0) { - uint8_t frame_num = (uint8_t)sc->sc_last_frame_num; /* check if we should pause sending queries for 125us */ if (td->tmr_res == frame_num) { /* wait a bit */ dwc_otg_enable_sof_irq(sc); goto busy; } - /* query for data one more time */ - td->tmr_res = frame_num; - td->did_nak = 0; } else if (td->set_toggle) { td->set_toggle = 0; td->toggle = 1; } + /* query for data one more time */ + td->tmr_res = frame_num; + td->did_nak = 0; return (0); busy: return (1); @@ -1658,7 +1660,11 @@ dwc_otg_host_data_tx(struct dwc_otg_soft td->offset += td->tx_bytes; td->remainder -= td->tx_bytes; td->toggle ^= 1; - td->did_nak = 0; + /* check if next response will be a NAK */ + if (hcint & HCINT_NYET) + td->did_nak = 1; + else + td->did_nak = 0; td->tt_scheduled = 0; /* check remainder */ From owner-svn-src-head@freebsd.org Fri Aug 14 14:24:42 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 284BC9B8DFD; Fri, 14 Aug 2015 14:24:42 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 69C3018DF; Fri, 14 Aug 2015 14:24:40 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id RAA16833; Fri, 14 Aug 2015 17:24:38 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1ZQFuQ-0002wC-1K; Fri, 14 Aug 2015 17:24:38 +0300 Subject: Re: svn commit: r277419 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs To: Alexander Motin , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org References: <201501201309.t0KD9Cid002762@svn.freebsd.org> From: Andriy Gapon Message-ID: <55CDF9ED.4090908@FreeBSD.org> Date: Fri, 14 Aug 2015 17:23:41 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <201501201309.t0KD9Cid002762@svn.freebsd.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 14:24:42 -0000 On 20/01/2015 15:09, Alexander Motin wrote: > Author: mav > Date: Tue Jan 20 13:09:12 2015 > New Revision: 277419 > URL: https://svnweb.freebsd.org/changeset/base/277419 > > Log: > Allow skipping dmu_buf_will_dirty() call in dsl_dir_transfer_space(). > > dsl_dir_transfer_space() is mostly called after dsl_dir_diduse_space(), > which already calls dmu_buf_will_dirty() for the same dbuf and tx, so > its duplicate call in those cases will change nothing, only spend time. > > Skipping this call by four times reduces time spent in dbuf_write_done() > and descendants, updating dataset statistics with several congested lock > acquisitions. When rewriting 8K zvol blocks at 1GB/s rate, this reduces > CPU time spent inside dbuf_write_done(), according to profiling, from 45% > of 683K samples to 18% of 422K. It probably would make sense to discuss such a change with the upstream folks. Or, at the very least, let them know about it. > MFC after: 2 weeks > > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c > > Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c > ============================================================================== > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Jan 20 12:28:24 2015 (r277418) > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Jan 20 13:09:12 2015 (r277419) > @@ -136,7 +136,7 @@ dsl_dataset_block_born(dsl_dataset_t *ds > dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, delta, > compressed, uncompressed, tx); > dsl_dir_transfer_space(ds->ds_dir, used - delta, > - DD_USED_REFRSRV, DD_USED_HEAD, tx); > + DD_USED_REFRSRV, DD_USED_HEAD, NULL); > } > > int > @@ -179,7 +179,7 @@ dsl_dataset_block_kill(dsl_dataset_t *ds > dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, > delta, -compressed, -uncompressed, tx); > dsl_dir_transfer_space(ds->ds_dir, -used - delta, > - DD_USED_REFRSRV, DD_USED_HEAD, tx); > + DD_USED_REFRSRV, DD_USED_HEAD, NULL); > } else { > dprintf_bp(bp, "putting on dead list: %s", ""); > if (async) { > @@ -2837,7 +2837,7 @@ dsl_dataset_clone_swap_sync_impl(dsl_dat > origin_head->ds_dir->dd_origin_txg, UINT64_MAX, > &odl_used, &odl_comp, &odl_uncomp); > dsl_dir_transfer_space(origin_head->ds_dir, cdl_used - odl_used, > - DD_USED_HEAD, DD_USED_SNAP, tx); > + DD_USED_HEAD, DD_USED_SNAP, NULL); > } > > /* swap ds_*_bytes */ > > Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c > ============================================================================== > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c Tue Jan 20 12:28:24 2015 (r277418) > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c Tue Jan 20 13:09:12 2015 (r277419) > @@ -1389,7 +1389,7 @@ dsl_dir_diduse_space(dsl_dir_t *dd, dd_u > accounted_delta, compressed, uncompressed, tx); > dsl_dir_transfer_space(dd->dd_parent, > used - accounted_delta, > - DD_USED_CHILD_RSRV, DD_USED_CHILD, tx); > + DD_USED_CHILD_RSRV, DD_USED_CHILD, NULL); > } > } > > @@ -1397,7 +1397,7 @@ void > dsl_dir_transfer_space(dsl_dir_t *dd, int64_t delta, > dd_used_t oldtype, dd_used_t newtype, dmu_tx_t *tx) > { > - ASSERT(dmu_tx_is_syncing(tx)); > + ASSERT(tx == NULL || dmu_tx_is_syncing(tx)); > ASSERT(oldtype < DD_USED_NUM); > ASSERT(newtype < DD_USED_NUM); > > @@ -1405,7 +1405,8 @@ dsl_dir_transfer_space(dsl_dir_t *dd, in > !(dsl_dir_phys(dd)->dd_flags & DD_FLAG_USED_BREAKDOWN)) > return; > > - dmu_buf_will_dirty(dd->dd_dbuf, tx); > + if (tx != NULL) > + dmu_buf_will_dirty(dd->dd_dbuf, tx); > mutex_enter(&dd->dd_lock); > ASSERT(delta > 0 ? > dsl_dir_phys(dd)->dd_used_breakdown[oldtype] >= delta : > -- Andriy Gapon From owner-svn-src-head@freebsd.org Fri Aug 14 14:26:13 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E5EEE9B8E46; Fri, 14 Aug 2015 14:26:13 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D68521A87; Fri, 14 Aug 2015 14:26:13 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EEQDFl076108; Fri, 14 Aug 2015 14:26:13 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EEQDHN076107; Fri, 14 Aug 2015 14:26:13 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <201508141426.t7EEQDHN076107@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Fri, 14 Aug 2015 14:26:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286781 - head/sys/netinet X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 14:26:14 -0000 Author: tuexen Date: Fri Aug 14 14:26:13 2015 New Revision: 286781 URL: https://svnweb.freebsd.org/changeset/base/286781 Log: Allow the path MTU to grow up to the outgoing interface MTU. MFC after: 3 days Modified: head/sys/netinet/sctp_timer.c Modified: head/sys/netinet/sctp_timer.c ============================================================================== --- head/sys/netinet/sctp_timer.c Fri Aug 14 14:20:10 2015 (r286780) +++ head/sys/netinet/sctp_timer.c Fri Aug 14 14:26:13 2015 (r286781) @@ -1492,6 +1492,8 @@ sctp_pathmtu_timer(struct sctp_inpcb *in #endif if (mtu > next_mtu) { net->mtu = next_mtu; + } else { + net->mtu = mtu; } } } From owner-svn-src-head@freebsd.org Fri Aug 14 14:58:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 641399B957B; Fri, 14 Aug 2015 14:58:05 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 550841132; Fri, 14 Aug 2015 14:58:05 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EEw5Uj088625; Fri, 14 Aug 2015 14:58:05 GMT (envelope-from pfg@FreeBSD.org) Received: (from pfg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EEw40H088623; Fri, 14 Aug 2015 14:58:04 GMT (envelope-from pfg@FreeBSD.org) Message-Id: <201508141458.t7EEw40H088623@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: pfg set sender to pfg@FreeBSD.org using -f From: "Pedro F. Giffuni" Date: Fri, 14 Aug 2015 14:58:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286782 - in head/lib/libc: secure sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 14:58:05 -0000 Author: pfg Date: Fri Aug 14 14:58:04 2015 New Revision: 286782 URL: https://svnweb.freebsd.org/changeset/base/286782 Log: Remove a stale comment and clarify the original where it was taken from The comment in the libc/sys symbol map referenced the generated symbols for the syscall trampolines. Such comment was out of place in the secure symbol map so remove the stale comment and attempt to clarify the old one to avoid risks of confusion. Pointed out by: kib Modified: head/lib/libc/secure/Symbol.map head/lib/libc/sys/Symbol.map Modified: head/lib/libc/secure/Symbol.map ============================================================================== --- head/lib/libc/secure/Symbol.map Fri Aug 14 14:26:13 2015 (r286781) +++ head/lib/libc/secure/Symbol.map Fri Aug 14 14:58:04 2015 (r286782) @@ -2,11 +2,6 @@ * $FreeBSD$ */ -/* - * It'd be nice to have this automatically generated, but we don't - * know to what version they will eventually belong, so for now - * it has to be manual. - */ FBSD_1.0 { __chk_fail; __stack_chk_fail; Modified: head/lib/libc/sys/Symbol.map ============================================================================== --- head/lib/libc/sys/Symbol.map Fri Aug 14 14:26:13 2015 (r286781) +++ head/lib/libc/sys/Symbol.map Fri Aug 14 14:58:04 2015 (r286782) @@ -3,8 +3,8 @@ */ /* - * It'd be nice to have this automatically generated, but we don't - * know to what version they will eventually belong, so for now + * It'd be nice to automatically generate the syscall symbols, but we + * don't know to what version they will eventually belong to, so for now * it has to be manual. */ FBSD_1.0 { From owner-svn-src-head@freebsd.org Fri Aug 14 16:48:08 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6B4099BAD65; Fri, 14 Aug 2015 16:48:08 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4303D161F; Fri, 14 Aug 2015 16:48:08 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EGm8Kh040130; Fri, 14 Aug 2015 16:48:08 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EGm73r040128; Fri, 14 Aug 2015 16:48:07 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201508141648.t7EGm73r040128@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Fri, 14 Aug 2015 16:48:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286783 - in head/sys/arm: broadcom/bcm2835 versatile X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 16:48:08 -0000 Author: ian Date: Fri Aug 14 16:48:07 2015 New Revision: 286783 URL: https://svnweb.freebsd.org/changeset/base/286783 Log: Use simple fixed name strings for these timecounters and eventimers which are tied to fixed pieces of hardware; dynamic string formatting isn't needed. Modified: head/sys/arm/broadcom/bcm2835/bcm2835_systimer.c head/sys/arm/versatile/sp804.c Modified: head/sys/arm/broadcom/bcm2835/bcm2835_systimer.c ============================================================================== --- head/sys/arm/broadcom/bcm2835/bcm2835_systimer.c Fri Aug 14 14:58:04 2015 (r286782) +++ head/sys/arm/broadcom/bcm2835/bcm2835_systimer.c Fri Aug 14 16:48:07 2015 (r286783) @@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$"); #define BCM2835_NUM_TIMERS 4 #define DEFAULT_TIMER 3 +#define DEFAULT_TIMER_NAME "BCM2835-3" #define DEFAULT_FREQUENCY 1000000 #define MIN_PERIOD 5LLU @@ -101,7 +102,7 @@ static struct bcm_systimer_softc *bcm_sy static unsigned bcm_systimer_tc_get_timecount(struct timecounter *); static struct timecounter bcm_systimer_tc = { - .tc_name = "BCM2835 Timecounter", + .tc_name = DEFAULT_TIMER_NAME, .tc_get_timecount = bcm_systimer_tc_get_timecount, .tc_poll_pps = NULL, .tc_counter_mask = ~0u, @@ -238,8 +239,7 @@ bcm_systimer_attach(device_t dev) sc->st[DEFAULT_TIMER].index = DEFAULT_TIMER; sc->st[DEFAULT_TIMER].enabled = 0; - sc->st[DEFAULT_TIMER].et.et_name = malloc(64, M_DEVBUF, M_NOWAIT | M_ZERO); - sprintf(sc->st[DEFAULT_TIMER].et.et_name, "BCM2835 Event Timer %d", DEFAULT_TIMER); + sc->st[DEFAULT_TIMER].et.et_name = DEFAULT_TIMER_NAME; sc->st[DEFAULT_TIMER].et.et_flags = ET_FLAGS_ONESHOT; sc->st[DEFAULT_TIMER].et.et_quality = 1000; sc->st[DEFAULT_TIMER].et.et_frequency = sc->sysclk_freq; Modified: head/sys/arm/versatile/sp804.c ============================================================================== --- head/sys/arm/versatile/sp804.c Fri Aug 14 14:58:04 2015 (r286782) +++ head/sys/arm/versatile/sp804.c Fri Aug 14 16:48:07 2015 (r286783) @@ -244,7 +244,7 @@ sp804_timer_attach(device_t dev) * Timer 1, timecounter */ sc->tc.tc_frequency = sc->sysclk_freq; - sc->tc.tc_name = "SP804 Time Counter"; + sc->tc.tc_name = "SP804-1"; sc->tc.tc_get_timecount = sp804_timer_tc_get_timecount; sc->tc.tc_poll_pps = NULL; sc->tc.tc_counter_mask = ~0u; @@ -263,9 +263,7 @@ sp804_timer_attach(device_t dev) * Timer 2, event timer */ sc->et_enabled = 0; - sc->et.et_name = malloc(64, M_DEVBUF, M_NOWAIT | M_ZERO); - sprintf(sc->et.et_name, "SP804 Event Timer %d", - device_get_unit(dev)); + sc->et.et_name = "SP804-2"; sc->et.et_flags = ET_FLAGS_PERIODIC | ET_FLAGS_ONESHOT; sc->et.et_quality = 1000; sc->et.et_frequency = sc->sysclk_freq / DEFAULT_DIVISOR; From owner-svn-src-head@freebsd.org Fri Aug 14 17:09:02 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ABB629B80ED; Fri, 14 Aug 2015 17:09:02 +0000 (UTC) (envelope-from mahrens@gmail.com) Received: from mail-la0-x22c.google.com (mail-la0-x22c.google.com [IPv6:2a00:1450:4010:c03::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3147813B6; Fri, 14 Aug 2015 17:09:02 +0000 (UTC) (envelope-from mahrens@gmail.com) Received: by lahi9 with SMTP id i9so47233804lah.2; Fri, 14 Aug 2015 10:09:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=YFyueoqwq024V+DrgvZwdml6l3Rx4iZX4kUR3LNwcPo=; b=mL7DFzX4gMjJFSRatQB6Dyx2xELSJoRHIZNZRDEfOhouUPyWSNSguADGdgOzEE13y5 kHF5mS+r8uVE/0PsiXUiI64kay2vPdkjsArSGgJU7ToEPjJhChyD7RVqaxWF6mXYCoGf SEvKS+HpVcFRYxCl399V+877ZiY+eLdryNAWdezcDhTKsY/8CtGAYvMmAv7BwdTllPSJ AVc5hrjyJLVRO6g/ci0z7UNV7bOzDjFpHAe50GA2kIe6wFz3JJosjX5QOSAPTAEOcNCT bKS6kDUwSZG0hzDyg7W7orEWJdYuagXkU8CV6BV5kA1S93awPQ/mZcb7jEF+Fic/aqIR 1sgQ== MIME-Version: 1.0 X-Received: by 10.112.63.169 with SMTP id h9mr44985538lbs.104.1439572140013; Fri, 14 Aug 2015 10:09:00 -0700 (PDT) Sender: mahrens@gmail.com Received: by 10.112.163.65 with HTTP; Fri, 14 Aug 2015 10:08:59 -0700 (PDT) In-Reply-To: <55CDF9ED.4090908@FreeBSD.org> References: <201501201309.t0KD9Cid002762@svn.freebsd.org> <55CDF9ED.4090908@FreeBSD.org> Date: Fri, 14 Aug 2015 10:08:59 -0700 X-Google-Sender-Auth: SmqqvaNeLPzlmgE4yZVKhfG01tk Message-ID: Subject: Re: svn commit: r277419 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs From: Matthew Ahrens To: Andriy Gapon Cc: Alexander Motin , "src-committers@freebsd.org" , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 17:09:02 -0000 On Fri, Aug 14, 2015 at 7:23 AM, Andriy Gapon wrote: > On 20/01/2015 15:09, Alexander Motin wrote: > > Author: mav > > Date: Tue Jan 20 13:09:12 2015 > > New Revision: 277419 > > URL: https://svnweb.freebsd.org/changeset/base/277419 > > > > Log: > > Allow skipping dmu_buf_will_dirty() call in dsl_dir_transfer_space(). > > > > dsl_dir_transfer_space() is mostly called after dsl_dir_diduse_space(), > > which already calls dmu_buf_will_dirty() for the same dbuf and tx, so > > its duplicate call in those cases will change nothing, only spend time. > > > > Skipping this call by four times reduces time spent in > dbuf_write_done() > > and descendants, updating dataset statistics with several congested > lock > > acquisitions. When rewriting 8K zvol blocks at 1GB/s rate, this > reduces > > CPU time spent inside dbuf_write_done(), according to profiling, from > 45% > > of 683K samples to 18% of 422K. > > It probably would make sense to discuss such a change with the upstream > folks. Or, at the very least, let them know about it. > I have observed similar perf issues and have fixed (in a private, not-fully-tested branch) in a similar way. These changes depend on the fact that the dbuf is already dirty. To ensure that this remains true in the future, we should add assertions (which run on debug bits only) that it is already dirty, and add comments explaining where it was dirtied, and add a comment where it is dirtied explaining the other places that depend on the dirtying. --matt > > > > MFC after: 2 weeks > > > > Modified: > > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c > > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c > > > > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c > > > ============================================================================== > > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c > Tue Jan 20 12:28:24 2015 (r277418) > > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c > Tue Jan 20 13:09:12 2015 (r277419) > > @@ -136,7 +136,7 @@ dsl_dataset_block_born(dsl_dataset_t *ds > > dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, delta, > > compressed, uncompressed, tx); > > dsl_dir_transfer_space(ds->ds_dir, used - delta, > > - DD_USED_REFRSRV, DD_USED_HEAD, tx); > > + DD_USED_REFRSRV, DD_USED_HEAD, NULL); > > } > > > > int > > @@ -179,7 +179,7 @@ dsl_dataset_block_kill(dsl_dataset_t *ds > > dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, > > delta, -compressed, -uncompressed, tx); > > dsl_dir_transfer_space(ds->ds_dir, -used - delta, > > - DD_USED_REFRSRV, DD_USED_HEAD, tx); > > + DD_USED_REFRSRV, DD_USED_HEAD, NULL); > > } else { > > dprintf_bp(bp, "putting on dead list: %s", ""); > > if (async) { > > @@ -2837,7 +2837,7 @@ dsl_dataset_clone_swap_sync_impl(dsl_dat > > origin_head->ds_dir->dd_origin_txg, UINT64_MAX, > > &odl_used, &odl_comp, &odl_uncomp); > > dsl_dir_transfer_space(origin_head->ds_dir, cdl_used - > odl_used, > > - DD_USED_HEAD, DD_USED_SNAP, tx); > > + DD_USED_HEAD, DD_USED_SNAP, NULL); > > } > > > > /* swap ds_*_bytes */ > > > > Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c > > > ============================================================================== > > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c > Tue Jan 20 12:28:24 2015 (r277418) > > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c > Tue Jan 20 13:09:12 2015 (r277419) > > @@ -1389,7 +1389,7 @@ dsl_dir_diduse_space(dsl_dir_t *dd, dd_u > > accounted_delta, compressed, uncompressed, tx); > > dsl_dir_transfer_space(dd->dd_parent, > > used - accounted_delta, > > - DD_USED_CHILD_RSRV, DD_USED_CHILD, tx); > > + DD_USED_CHILD_RSRV, DD_USED_CHILD, NULL); > > } > > } > > > > @@ -1397,7 +1397,7 @@ void > > dsl_dir_transfer_space(dsl_dir_t *dd, int64_t delta, > > dd_used_t oldtype, dd_used_t newtype, dmu_tx_t *tx) > > { > > - ASSERT(dmu_tx_is_syncing(tx)); > > + ASSERT(tx == NULL || dmu_tx_is_syncing(tx)); > > ASSERT(oldtype < DD_USED_NUM); > > ASSERT(newtype < DD_USED_NUM); > > > > @@ -1405,7 +1405,8 @@ dsl_dir_transfer_space(dsl_dir_t *dd, in > > !(dsl_dir_phys(dd)->dd_flags & DD_FLAG_USED_BREAKDOWN)) > > return; > > > > - dmu_buf_will_dirty(dd->dd_dbuf, tx); > > + if (tx != NULL) > > + dmu_buf_will_dirty(dd->dd_dbuf, tx); > > mutex_enter(&dd->dd_lock); > > ASSERT(delta > 0 ? > > dsl_dir_phys(dd)->dd_used_breakdown[oldtype] >= delta : > > > > > -- > Andriy Gapon > > From owner-svn-src-head@freebsd.org Fri Aug 14 17:49:04 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6CDDA9B8B3E; Fri, 14 Aug 2015 17:49:04 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5245010F2; Fri, 14 Aug 2015 17:49:04 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EHn4JB070229; Fri, 14 Aug 2015 17:49:04 GMT (envelope-from alc@FreeBSD.org) Received: (from alc@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EHn4tr070228; Fri, 14 Aug 2015 17:49:04 GMT (envelope-from alc@FreeBSD.org) Message-Id: <201508141749.t7EHn4tr070228@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: alc set sender to alc@FreeBSD.org using -f From: Alan Cox Date: Fri, 14 Aug 2015 17:49:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286784 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 17:49:04 -0000 Author: alc Date: Fri Aug 14 17:49:03 2015 New Revision: 286784 URL: https://svnweb.freebsd.org/changeset/base/286784 Log: Stop describing an acquire operation as a read barrier and a release operation as a write barrier. That description has never been correct, and it has caused confusion. An acquire operation orders writes as well as reads, and a release operation orders reads as well as writes. Also, explicitly say that a thread doesn't see its own accesses being reordered. The reordering of a thread's accesses is only (potentially) visible to another thread. Thus, memory barriers need only be used to control the ordering of accesses between threads, not within a thread. Reviewed by: bde, kib Discussed with: jhb MFC after: 1 week Modified: head/share/man/man9/atomic.9 Modified: head/share/man/man9/atomic.9 ============================================================================== --- head/share/man/man9/atomic.9 Fri Aug 14 16:48:07 2015 (r286783) +++ head/share/man/man9/atomic.9 Fri Aug 14 17:49:03 2015 (r286784) @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 9, 2015 +.Dd August 14, 2015 .Dt ATOMIC 9 .Os .Sh NAME @@ -68,7 +68,7 @@ .Fn atomic_testandset_ "volatile *p" "u_int v" .Sh DESCRIPTION Each of the atomic operations is guaranteed to be atomic across multiple -processors and in the presence of interrupts. +threads and in the presence of interrupts. They can be used to implement reference counts or as building blocks for more advanced synchronization primitives such as mutexes. .Ss Types @@ -108,59 +108,78 @@ unsigned 16-bit integer .El .Pp These must not be used in MI code because the instructions to implement them -efficiently may not be available. -.Ss Memory Barriers -Memory barriers are used to guarantee the order of data accesses in -two ways. -First, they specify hints to the compiler to not re-order or optimize the -operations. -Second, on architectures that do not guarantee ordered data accesses, -special instructions or special variants of instructions are used to indicate -to the processor that data accesses need to occur in a certain order. -As a result, most of the atomic operations have three variants in order to -include optional memory barriers. -The first form just performs the operation without any explicit barriers. -The second form uses a read memory barrier, and the third variant uses a write -memory barrier. -.Pp -The second variant of each operation includes an +efficiently might not be available. +.Ss Acquire and Release Operations +By default, a thread's accesses to different memory locations might not be +performed in +.Em program order , +that is, the order in which the accesses appear in the source code. +To optimize the program's execution, both the compiler and processor might +reorder the thread's accesses. +However, both ensure that their reordering of the accesses is not visible to +the thread. +Otherwise, the traditional memory model that is expected by single-threaded +programs would be violated. +Nonetheless, other threads in a multithreaded program, such as the +.Fx +kernel, might observe the reordering. +Moreover, in some cases, such as the implementation of synchronization between +threads, arbitrary reordering might result in the incorrect execution of the +program. +To constrain the reordering that both the compiler and processor might perform +on a thread's accesses, the thread should use atomic operations with .Em acquire -memory barrier. -This barrier ensures that the effects of this operation are completed before the -effects of any later data accesses. -As a result, the operation is said to have acquire semantics as it acquires a -pseudo-lock requiring further operations to wait until it has completed. -To denote this, the suffix +and +.Em release +semantics. +.Pp +Most of the atomic operations on memory have three variants. +The first variant performs the operation without imposing any ordering +constraints on memory accesses to other locations. +The second variant has acquire semantics, and the third variant has release +semantics. +In effect, operations with acquire and release semantics establish one-way +barriers to reordering. +.Pp +When an atomic operation has acquire semantics, the effects of the operation +must have completed before any subsequent load or store (by program order) is +performed. +Conversely, acquire semantics do not require that prior loads or stores have +completed before the atomic operation is performed. +To denote acquire semantics, the suffix .Dq Li _acq is inserted into the function name immediately prior to the .Dq Li _ Ns Aq Fa type suffix. -For example, to subtract two integers ensuring that any later writes will -happen after the subtraction is performed, use +For example, to subtract two integers ensuring that subsequent loads and +stores happen after the subtraction is performed, use .Fn atomic_subtract_acq_int . .Pp -The third variant of each operation includes a -.Em release -memory barrier. -This ensures that all effects of all previous data accesses are completed -before this operation takes place. -As a result, the operation is said to have release semantics as it releases -any pending data accesses to be completed before its operation is performed. -To denote this, the suffix +When an atomic operation has release semantics, the effects of all prior +loads or stores (by program order) must have completed before the operation +is performed. +Conversely, release semantics do not require that the effects of the +atomic operation must have completed before any subsequent load or store is +performed. +To denote release semantics, the suffix .Dq Li _rel is inserted into the function name immediately prior to the .Dq Li _ Ns Aq Fa type suffix. -For example, to add two long integers ensuring that all previous -writes will happen first, use +For example, to add two long integers ensuring that all prior loads and +stores happen before the addition, use .Fn atomic_add_rel_long . .Pp -A practical example of using memory barriers is to ensure that data accesses -that are protected by a lock are all performed while the lock is held. -To achieve this, one would use a read barrier when acquiring the lock to -guarantee that the lock is held before any protected operations are performed. -Finally, one would use a write barrier when releasing the lock to ensure that -all of the protected operations are completed before the lock is released. +The one-way barriers provided by acquire and release operations allow the +implementations of common synchronization primitives to express their +ordering requirements without also imposing unnecessary ordering. +For example, for a critical section guarded by a mutex, an acquire operation +when the mutex is locked and a release operation when the mutex is unlocked +will prevent any loads or stores from moving outside of the critical +section. +However, they will not prevent the compiler or processor from moving loads +or stores into the critical section, which does not violate the semantics of +a mutex. .Ss Multiple Processors In multiprocessor systems, the atomicity of the atomic operations on memory depends on support for cache coherence in the underlying architecture. @@ -173,7 +192,7 @@ For example, cache coherence is guarante and .Tn i386 architectures. -However, on some architectures, cache coherence may not be enabled on all +However, on some architectures, cache coherence might not be enabled on all memory types. To determine if cache coherence is enabled for a non-default memory type, consult the architecture's documentation. From owner-svn-src-head@freebsd.org Fri Aug 14 18:01:41 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 31C139B8E19; Fri, 14 Aug 2015 18:01:41 +0000 (UTC) (envelope-from jah@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 15FED1A28; Fri, 14 Aug 2015 18:01:41 +0000 (UTC) (envelope-from jah@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EI1eCj078841; Fri, 14 Aug 2015 18:01:40 GMT (envelope-from jah@FreeBSD.org) Received: (from jah@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EI1evv078840; Fri, 14 Aug 2015 18:01:40 GMT (envelope-from jah@FreeBSD.org) Message-Id: <201508141801.t7EI1evv078840@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jah set sender to jah@FreeBSD.org using -f From: "Jason A. Harmening" Date: Fri, 14 Aug 2015 18:01:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286785 - head/sys/x86/x86 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 18:01:41 -0000 Author: jah Date: Fri Aug 14 18:01:40 2015 New Revision: 286785 URL: https://svnweb.freebsd.org/changeset/base/286785 Log: Reformat x86 bounce buffer synchronization code to reduce indentation. No functional change. Approved by: kib (mentor) Modified: head/sys/x86/x86/busdma_bounce.c Modified: head/sys/x86/x86/busdma_bounce.c ============================================================================== --- head/sys/x86/x86/busdma_bounce.c Fri Aug 14 17:49:03 2015 (r286784) +++ head/sys/x86/x86/busdma_bounce.c Fri Aug 14 18:01:40 2015 (r286785) @@ -758,47 +758,43 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dma { struct bounce_page *bpage; - if ((bpage = STAILQ_FIRST(&map->bpages)) != NULL) { - /* - * Handle data bouncing. We might also - * want to add support for invalidating - * the caches on broken hardware - */ - CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x op 0x%x " - "performing bounce", __func__, dmat, - dmat->common.flags, op); - - if ((op & BUS_DMASYNC_PREWRITE) != 0) { - while (bpage != NULL) { - if (bpage->datavaddr != 0) { - bcopy((void *)bpage->datavaddr, - (void *)bpage->vaddr, - bpage->datacount); - } else { - physcopyout(bpage->dataaddr, - (void *)bpage->vaddr, - bpage->datacount); - } - bpage = STAILQ_NEXT(bpage, links); + if ((bpage = STAILQ_FIRST(&map->bpages)) == NULL) + return; + + /* + * Handle data bouncing. We might also want to add support for + * invalidating the caches on broken hardware. + */ + CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x op 0x%x " + "performing bounce", __func__, dmat, dmat->common.flags, op); + + if ((op & BUS_DMASYNC_PREWRITE) != 0) { + while (bpage != NULL) { + if (bpage->datavaddr != 0) { + bcopy((void *)bpage->datavaddr, + (void *)bpage->vaddr, bpage->datacount); + } else { + physcopyout(bpage->dataaddr, + (void *)bpage->vaddr, bpage->datacount); } - dmat->bounce_zone->total_bounced++; + bpage = STAILQ_NEXT(bpage, links); } + dmat->bounce_zone->total_bounced++; + } - if ((op & BUS_DMASYNC_POSTREAD) != 0) { - while (bpage != NULL) { - if (bpage->datavaddr != 0) { - bcopy((void *)bpage->vaddr, - (void *)bpage->datavaddr, - bpage->datacount); - } else { - physcopyin((void *)bpage->vaddr, - bpage->dataaddr, - bpage->datacount); - } - bpage = STAILQ_NEXT(bpage, links); + if ((op & BUS_DMASYNC_POSTREAD) != 0) { + while (bpage != NULL) { + if (bpage->datavaddr != 0) { + bcopy((void *)bpage->vaddr, + (void *)bpage->datavaddr, + bpage->datacount); + } else { + physcopyin((void *)bpage->vaddr, + bpage->dataaddr, bpage->datacount); } - dmat->bounce_zone->total_bounced++; + bpage = STAILQ_NEXT(bpage, links); } + dmat->bounce_zone->total_bounced++; } } From owner-svn-src-head@freebsd.org Fri Aug 14 18:38:40 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DD9169B95A8; Fri, 14 Aug 2015 18:38:40 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C320512A0; Fri, 14 Aug 2015 18:38:40 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EIceH8094105; Fri, 14 Aug 2015 18:38:40 GMT (envelope-from jhb@FreeBSD.org) Received: (from jhb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EIceUl094102; Fri, 14 Aug 2015 18:38:40 GMT (envelope-from jhb@FreeBSD.org) Message-Id: <201508141838.t7EIceUl094102@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhb set sender to jhb@FreeBSD.org using -f From: John Baldwin Date: Fri, 14 Aug 2015 18:38:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286786 - in head/sys: dev/xen/netfront xen X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 18:38:41 -0000 Author: jhb Date: Fri Aug 14 18:38:39 2015 New Revision: 286786 URL: https://svnweb.freebsd.org/changeset/base/286786 Log: Remove another remnant of PV domU support and assume that we always run with an automatically translated physmap under XEN. Reviewed by: royger (earlier version) Differential Revision: https://reviews.freebsd.org/D3325 Modified: head/sys/dev/xen/netfront/netfront.c head/sys/xen/gnttab.h Modified: head/sys/dev/xen/netfront/netfront.c ============================================================================== --- head/sys/dev/xen/netfront/netfront.c Fri Aug 14 18:01:40 2015 (r286785) +++ head/sys/dev/xen/netfront/netfront.c Fri Aug 14 18:38:39 2015 (r286786) @@ -280,8 +280,6 @@ struct netfront_info { struct callout xn_stat_ch; u_long rx_pfn_array[NET_RX_RING_SIZE]; - multicall_entry_t rx_mcl[NET_RX_RING_SIZE+1]; - mmu_update_t rx_mmu[NET_RX_RING_SIZE]; struct ifmedia sc_media; bool xn_resume; @@ -882,13 +880,6 @@ refill: gnttab_grant_foreign_transfer_ref(ref, otherend_id, pfn); sc->rx_pfn_array[nr_flips] = pfn; - if (!xen_feature(XENFEAT_auto_translated_physmap)) { - /* Remove this page before passing - * back to Xen. - */ - MULTI_update_va_mapping(&sc->rx_mcl[i], - vaddr, 0, 0); - } nr_flips++; } else { gnttab_grant_foreign_access_ref(ref, @@ -918,25 +909,6 @@ refill: reservation.extent_order = 0; reservation.address_bits = 0; reservation.domid = DOMID_SELF; - - if (!xen_feature(XENFEAT_auto_translated_physmap)) { - /* After all PTEs have been zapped, flush the TLB. */ - sc->rx_mcl[i-1].args[MULTI_UVMFLAGS_INDEX] = - UVMF_TLB_FLUSH|UVMF_ALL; - - /* Give away a batch of pages. */ - sc->rx_mcl[i].op = __HYPERVISOR_memory_op; - sc->rx_mcl[i].args[0] = XENMEM_decrease_reservation; - sc->rx_mcl[i].args[1] = (u_long)&reservation; - /* Zap PTEs and give away pages in one big multicall. */ - (void)HYPERVISOR_multicall(sc->rx_mcl, i+1); - - if (__predict_false(sc->rx_mcl[i].result != i || - HYPERVISOR_memory_op(XENMEM_decrease_reservation, - &reservation) != i)) - panic("%s: unable to reduce memory " - "reservation\n", __func__); - } } else { wmb(); } @@ -961,7 +933,6 @@ xn_rxeof(struct netfront_info *np) struct netif_rx_response *rx = &rinfo.rx; struct netif_extra_info *extras = rinfo.extras; RING_IDX i, rp; - multicall_entry_t *mcl; struct mbuf *m; struct mbufq rxq, errq; int err, pages_flipped = 0, work_to_do; @@ -1022,19 +993,6 @@ xn_rxeof(struct netfront_info *np) #ifdef notyet balloon_update_driver_allowance(-pages_flipped); #endif - /* Do all the remapping work, and M->P updates, in one big - * hypercall. - */ - if (!!xen_feature(XENFEAT_auto_translated_physmap)) { - mcl = np->rx_mcl + pages_flipped; - mcl->op = __HYPERVISOR_mmu_update; - mcl->args[0] = (u_long)np->rx_mmu; - mcl->args[1] = pages_flipped; - mcl->args[2] = 0; - mcl->args[3] = DOMID_SELF; - (void)HYPERVISOR_multicall(np->rx_mcl, - pages_flipped + 1); - } } mbufq_drain(&errq); @@ -1273,8 +1231,6 @@ xennet_get_responses(struct netfront_inf int *pages_flipped_p) { int pages_flipped = *pages_flipped_p; - struct mmu_update *mmu; - struct multicall_entry *mcl; struct netif_rx_response *rx = &rinfo->rx; struct netif_extra_info *extras = rinfo->extras; struct mbuf *m, *m0, *m_prev; @@ -1346,22 +1302,6 @@ xennet_get_responses(struct netfront_inf goto next; } - if (!xen_feature( XENFEAT_auto_translated_physmap)) { - /* Remap the page. */ - void *vaddr = mtod(m, void *); - uint32_t pfn; - - mcl = np->rx_mcl + pages_flipped; - mmu = np->rx_mmu + pages_flipped; - - MULTI_update_va_mapping(mcl, (u_long)vaddr, - (((vm_paddr_t)mfn) << PAGE_SHIFT) | PG_RW | - PG_V | PG_M | PG_A, 0); - pfn = (uintptr_t)m->m_ext.ext_arg1; - mmu->ptr = ((vm_paddr_t)mfn << PAGE_SHIFT) | - MMU_MACHPHYS_UPDATE; - mmu->val = pfn; - } pages_flipped++; } else { ret = gnttab_end_foreign_access_ref(ref); Modified: head/sys/xen/gnttab.h ============================================================================== --- head/sys/xen/gnttab.h Fri Aug 14 18:01:40 2015 (r286785) +++ head/sys/xen/gnttab.h Fri Aug 14 18:38:39 2015 (r286786) @@ -126,10 +126,8 @@ gnttab_set_map_op(struct gnttab_map_gran { if (flags & GNTMAP_contains_pte) map->host_addr = addr; - else if (xen_feature(XENFEAT_auto_translated_physmap)) - map->host_addr = vtophys(addr); else - map->host_addr = addr; + map->host_addr = vtophys(addr); map->flags = flags; map->ref = ref; @@ -142,10 +140,8 @@ gnttab_set_unmap_op(struct gnttab_unmap_ { if (flags & GNTMAP_contains_pte) unmap->host_addr = addr; - else if (xen_feature(XENFEAT_auto_translated_physmap)) - unmap->host_addr = vtophys(addr); else - unmap->host_addr = addr; + unmap->host_addr = vtophys(addr); unmap->handle = handle; unmap->dev_bus_addr = 0; @@ -155,13 +151,8 @@ static inline void gnttab_set_replace_op(struct gnttab_unmap_and_replace *unmap, vm_paddr_t addr, vm_paddr_t new_addr, grant_handle_t handle) { - if (xen_feature(XENFEAT_auto_translated_physmap)) { - unmap->host_addr = vtophys(addr); - unmap->new_addr = vtophys(new_addr); - } else { - unmap->host_addr = addr; - unmap->new_addr = new_addr; - } + unmap->host_addr = vtophys(addr); + unmap->new_addr = vtophys(new_addr); unmap->handle = handle; } From owner-svn-src-head@freebsd.org Fri Aug 14 20:08:17 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7333E9BA713; Fri, 14 Aug 2015 20:08:17 +0000 (UTC) (envelope-from jah@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 610D613C5; Fri, 14 Aug 2015 20:08:17 +0000 (UTC) (envelope-from jah@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EK8Hmj037330; Fri, 14 Aug 2015 20:08:17 GMT (envelope-from jah@FreeBSD.org) Received: (from jah@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EK8Hkt037329; Fri, 14 Aug 2015 20:08:17 GMT (envelope-from jah@FreeBSD.org) Message-Id: <201508142008.t7EK8Hkt037329@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jah set sender to jah@FreeBSD.org using -f From: "Jason A. Harmening" Date: Fri, 14 Aug 2015 20:08:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286787 - head/sys/x86/x86 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 20:08:17 -0000 Author: jah Date: Fri Aug 14 20:08:16 2015 New Revision: 286787 URL: https://svnweb.freebsd.org/changeset/base/286787 Log: Use pmap_quick_enter_page() to handle bouncing of unmapped buffers in the x86 busdma_bounce implementation. Also treat user buffers as unmapped. This allows two things: 1. Sync'ing bounced maps in non-sleepable contexts. The physcopy* calls previously used could sleep on sf_buf operations in some cases. 2. Sync'ing user buffers outside the context of the owning process Approved by: kib (mentor) Modified: head/sys/x86/x86/busdma_bounce.c Modified: head/sys/x86/x86/busdma_bounce.c ============================================================================== --- head/sys/x86/x86/busdma_bounce.c Fri Aug 14 18:38:39 2015 (r286786) +++ head/sys/x86/x86/busdma_bounce.c Fri Aug 14 20:08:16 2015 (r286787) @@ -79,7 +79,8 @@ struct bounce_page { vm_offset_t vaddr; /* kva of bounce buffer */ bus_addr_t busaddr; /* Physical address */ vm_offset_t datavaddr; /* kva of client data */ - bus_addr_t dataaddr; /* client physical address */ + vm_page_t datapage; /* physical page of client data */ + vm_offset_t dataoffs; /* page offset of client data */ bus_size_t datacount; /* client data count */ STAILQ_ENTRY(bounce_page) links; }; @@ -658,7 +659,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_ta { bus_size_t sgsize, max_sgsize; bus_addr_t curaddr; - vm_offset_t vaddr; + vm_offset_t kvaddr, vaddr; int error; if (map == NULL) @@ -681,10 +682,13 @@ bounce_bus_dmamap_load_buffer(bus_dma_ta /* * Get the physical address for this segment. */ - if (pmap == kernel_pmap) + if (pmap == kernel_pmap) { curaddr = pmap_kextract(vaddr); - else + kvaddr = vaddr; + } else { curaddr = pmap_extract(pmap, vaddr); + kvaddr = 0; + } /* * Compute the segment size, and adjust counts. @@ -696,7 +700,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_ta bus_dma_run_filter(&dmat->common, curaddr)) { sgsize = roundup2(sgsize, dmat->common.alignment); sgsize = MIN(sgsize, max_sgsize); - curaddr = add_bounce_page(dmat, map, vaddr, curaddr, + curaddr = add_bounce_page(dmat, map, kvaddr, curaddr, sgsize); } else { sgsize = MIN(sgsize, max_sgsize); @@ -757,6 +761,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dma bus_dmasync_op_t op) { struct bounce_page *bpage; + vm_offset_t datavaddr, tempvaddr; if ((bpage = STAILQ_FIRST(&map->bpages)) == NULL) return; @@ -770,13 +775,19 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dma if ((op & BUS_DMASYNC_PREWRITE) != 0) { while (bpage != NULL) { - if (bpage->datavaddr != 0) { - bcopy((void *)bpage->datavaddr, - (void *)bpage->vaddr, bpage->datacount); - } else { - physcopyout(bpage->dataaddr, - (void *)bpage->vaddr, bpage->datacount); + tempvaddr = 0; + datavaddr = bpage->datavaddr; + if (datavaddr == 0) { + tempvaddr = + pmap_quick_enter_page(bpage->datapage); + datavaddr = tempvaddr | bpage->dataoffs; } + + bcopy((void *)datavaddr, + (void *)bpage->vaddr, bpage->datacount); + + if (tempvaddr != 0) + pmap_quick_remove_page(tempvaddr); bpage = STAILQ_NEXT(bpage, links); } dmat->bounce_zone->total_bounced++; @@ -784,14 +795,19 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dma if ((op & BUS_DMASYNC_POSTREAD) != 0) { while (bpage != NULL) { - if (bpage->datavaddr != 0) { - bcopy((void *)bpage->vaddr, - (void *)bpage->datavaddr, - bpage->datacount); - } else { - physcopyin((void *)bpage->vaddr, - bpage->dataaddr, bpage->datacount); + tempvaddr = 0; + datavaddr = bpage->datavaddr; + if (datavaddr == 0) { + tempvaddr = + pmap_quick_enter_page(bpage->datapage); + datavaddr = tempvaddr | bpage->dataoffs; } + + bcopy((void *)bpage->vaddr, + (void *)datavaddr, bpage->datacount); + + if (tempvaddr != 0) + pmap_quick_remove_page(tempvaddr); bpage = STAILQ_NEXT(bpage, links); } dmat->bounce_zone->total_bounced++; @@ -989,7 +1005,8 @@ add_bounce_page(bus_dma_tag_t dmat, bus_ bpage->busaddr |= addr & PAGE_MASK; } bpage->datavaddr = vaddr; - bpage->dataaddr = addr; + bpage->datapage = PHYS_TO_VM_PAGE(addr & ~PAGE_MASK); + bpage->dataoffs = addr & PAGE_MASK; bpage->datacount = size; STAILQ_INSERT_TAIL(&(map->bpages), bpage, links); return (bpage->busaddr); From owner-svn-src-head@freebsd.org Fri Aug 14 21:44:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 653769B9801; Fri, 14 Aug 2015 21:44:16 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3E161130B; Fri, 14 Aug 2015 21:44:16 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7ELiGIE082168; Fri, 14 Aug 2015 21:44:16 GMT (envelope-from jilles@FreeBSD.org) Received: (from jilles@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7ELiGbq082167; Fri, 14 Aug 2015 21:44:16 GMT (envelope-from jilles@FreeBSD.org) Message-Id: <201508142144.t7ELiGbq082167@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jilles set sender to jilles@FreeBSD.org using -f From: Jilles Tjoelker Date: Fri, 14 Aug 2015 21:44:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286788 - head/bin/sh X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 21:44:16 -0000 Author: jilles Date: Fri Aug 14 21:44:15 2015 New Revision: 286788 URL: https://svnweb.freebsd.org/changeset/base/286788 Log: sh: When setting option via long name, don't go via letter. Looking up the letter makes no sense and prevents adding options that only have a long name, no letter. Modified: head/bin/sh/options.c Modified: head/bin/sh/options.c ============================================================================== --- head/bin/sh/options.c Fri Aug 14 20:08:16 2015 (r286787) +++ head/bin/sh/options.c Fri Aug 14 21:44:15 2015 (r286788) @@ -73,6 +73,7 @@ char *minusc; /* argument to -c option static void options(int); static void minus_o(char *, int); static void setoption(int, int); +static void setoptionbyindex(int, int); static int getopts(char *, char *, char **, char ***, char **); @@ -269,7 +270,7 @@ minus_o(char *name, int val) } else { for (i = 0; i < NOPTS; i++) if (equal(name, optlist[i].name)) { - setoption(optlist[i].letter, val); + setoptionbyindex(i, val); return; } error("Illegal option -o %s", name); @@ -278,26 +279,32 @@ minus_o(char *name, int val) static void -setoption(int flag, int val) +setoptionbyindex(int idx, int val) { - int i; - - if (flag == 'p' && !val && privileged) { + if (optlist[idx].letter == 'p' && !val && privileged) { if (setgid(getgid()) == -1) error("setgid"); if (setuid(getuid()) == -1) error("setuid"); } + optlist[idx].val = val; + if (val) { + /* #%$ hack for ksh semantics */ + if (optlist[idx].letter == 'V') + Eflag = 0; + else if (optlist[idx].letter == 'E') + Vflag = 0; + } +} + +static void +setoption(int flag, int val) +{ + int i; + for (i = 0; i < NOPTS; i++) if (optlist[i].letter == flag) { - optlist[i].val = val; - if (val) { - /* #%$ hack for ksh semantics */ - if (flag == 'V') - Eflag = 0; - else if (flag == 'E') - Vflag = 0; - } + setoptionbyindex(i, val); return; } error("Illegal option -%c", flag); From owner-svn-src-head@freebsd.org Fri Aug 14 22:02:15 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7B73D9B9B06; Fri, 14 Aug 2015 22:02:15 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6A32F1D86; Fri, 14 Aug 2015 22:02:15 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EM2Fj5090207; Fri, 14 Aug 2015 22:02:15 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EM2FZS090206; Fri, 14 Aug 2015 22:02:15 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201508142202.t7EM2FZS090206@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Fri, 14 Aug 2015 22:02:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286790 - head/sys/fs/nfsserver X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 22:02:15 -0000 Author: rmacklem Date: Fri Aug 14 22:02:14 2015 New Revision: 286790 URL: https://svnweb.freebsd.org/changeset/base/286790 Log: For the case where an NFSv4.1 ExchangeID operation has the client identifier that already has a confirmed ClientID, the nfsrv_setclient() function would not fill in the clientidp being returned. As such, the value of ClientID returned would be whatever garbage was on the stack. An NFSv4.1 client would not normally do this, but it appears that it can happen for certain Linux clients. When it happens, the client persistently retries the ExchangeID and Create_session after Create_session fails when it uses the bogus clientid. With this patch, the correct clientid is replied. This problem was identified in a packet trace supplied by Ahmed Kamal via email. Reported by: email.ahmedkamal@googlemail.com MFC after: 2 weeks Modified: head/sys/fs/nfsserver/nfs_nfsdstate.c Modified: head/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- head/sys/fs/nfsserver/nfs_nfsdstate.c Fri Aug 14 21:44:42 2015 (r286789) +++ head/sys/fs/nfsserver/nfs_nfsdstate.c Fri Aug 14 22:02:14 2015 (r286790) @@ -401,9 +401,12 @@ nfsrv_setclient(struct nfsrv_descript *n } /* For NFSv4.1, mark that we found a confirmed clientid. */ - if ((nd->nd_flag & ND_NFSV41) != 0) + if ((nd->nd_flag & ND_NFSV41) != 0) { + clientidp->lval[0] = clp->lc_clientid.lval[0]; + clientidp->lval[1] = clp->lc_clientid.lval[1]; + confirmp->lval[0] = 0; /* Ignored by client */ confirmp->lval[1] = 1; - else { + } else { /* * id and verifier match, so update the net address info * and get rid of any existing callback authentication From owner-svn-src-head@freebsd.org Fri Aug 14 22:54:54 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1489A9BA4B1; Fri, 14 Aug 2015 22:54:54 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DAEDF1465; Fri, 14 Aug 2015 22:54:53 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EMsrU9010855; Fri, 14 Aug 2015 22:54:53 GMT (envelope-from rpaulo@FreeBSD.org) Received: (from rpaulo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EMsrtk010852; Fri, 14 Aug 2015 22:54:53 GMT (envelope-from rpaulo@FreeBSD.org) Message-Id: <201508142254.t7EMsrtk010852@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rpaulo set sender to rpaulo@FreeBSD.org using -f From: Rui Paulo Date: Fri, 14 Aug 2015 22:54:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286791 - in head: share/mk usr.bin/lorder X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 22:54:54 -0000 Author: rpaulo Date: Fri Aug 14 22:54:52 2015 New Revision: 286791 URL: https://svnweb.freebsd.org/changeset/base/286791 Log: Introduce a new make variable: NMFLAGS. As the name indicates, these are flags to pass to nm(1). The newer binutils have a plugin mechanism so, to build something with LLVM's LTO, we need to pass flags to nm(1). This commit also extends lorder(1) to pass NMFLAGS to nm(1). Modified: head/share/mk/sys.mk head/usr.bin/lorder/lorder.1 head/usr.bin/lorder/lorder.sh Modified: head/share/mk/sys.mk ============================================================================== --- head/share/mk/sys.mk Fri Aug 14 22:02:14 2015 (r286790) +++ head/share/mk/sys.mk Fri Aug 14 22:54:52 2015 (r286791) @@ -167,6 +167,7 @@ MAKE ?= make .if !defined(%POSIX) NM ?= nm +NMFLAGS ?= OBJC ?= cc OBJCFLAGS ?= ${OBJCINCLUDES} ${CFLAGS} -Wno-import Modified: head/usr.bin/lorder/lorder.1 ============================================================================== --- head/usr.bin/lorder/lorder.1 Fri Aug 14 22:02:14 2015 (r286790) +++ head/usr.bin/lorder/lorder.1 Fri Aug 14 22:54:52 2015 (r286791) @@ -28,7 +28,7 @@ .\" @(#)lorder.1 8.2 (Berkeley) 4/28/95 .\" $FreeBSD$ .\" -.Dd October 25, 2006 +.Dd August 14, 2015 .Dt LORDER 1 .Os .Sh NAME @@ -68,6 +68,9 @@ Path to the .Xr nm 1 binary, defaults to .Dq Li nm . +.It Ev NMFLAGS +Flags to pass to +.Xr nm 1 . .El .Sh EXAMPLES .Bd -literal -offset indent Modified: head/usr.bin/lorder/lorder.sh ============================================================================== --- head/usr.bin/lorder/lorder.sh Fri Aug 14 22:02:14 2015 (r286790) +++ head/usr.bin/lorder/lorder.sh Fri Aug 14 22:54:52 2015 (r286791) @@ -60,7 +60,7 @@ done # # if the line has " U " it's a globally undefined symbol, put it into # the reference file. -${NM} -go $* | sed " +${NM} ${NMFLAGS} -go $* | sed " / [TDW] / { s/:.* [TDW] / / w $S From owner-svn-src-head@freebsd.org Fri Aug 14 22:55:24 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8E2569BA4DE; Fri, 14 Aug 2015 22:55:24 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7F49716EC; Fri, 14 Aug 2015 22:55:24 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EMtOIP010947; Fri, 14 Aug 2015 22:55:24 GMT (envelope-from rpaulo@FreeBSD.org) Received: (from rpaulo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EMtOtx010946; Fri, 14 Aug 2015 22:55:24 GMT (envelope-from rpaulo@FreeBSD.org) Message-Id: <201508142255.t7EMtOtx010946@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rpaulo set sender to rpaulo@FreeBSD.org using -f From: Rui Paulo Date: Fri, 14 Aug 2015 22:55:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286792 - head/share/mk X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 22:55:24 -0000 Author: rpaulo Date: Fri Aug 14 22:55:23 2015 New Revision: 286792 URL: https://svnweb.freebsd.org/changeset/base/286792 Log: bsd.lib.mk: pass NMFLAGS to the lorder script. Modified: head/share/mk/bsd.lib.mk Modified: head/share/mk/bsd.lib.mk ============================================================================== --- head/share/mk/bsd.lib.mk Fri Aug 14 22:54:52 2015 (r286791) +++ head/share/mk/bsd.lib.mk Fri Aug 14 22:55:23 2015 (r286792) @@ -171,7 +171,7 @@ _LIBS= lib${LIB_PRIVATE}${LIB}.a lib${LIB_PRIVATE}${LIB}.a: ${OBJS} ${STATICOBJS} @${ECHO} building static ${LIB} library @rm -f ${.TARGET} - ${AR} ${ARFLAGS} ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} + ${AR} ${ARFLAGS} ${.TARGET} `NM='${NM}' NMFLAGS='${NMFLAGS}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} ${RANLIB} ${RANLIBFLAGS} ${.TARGET} .endif @@ -185,7 +185,7 @@ NOPATH_FILES+= ${POBJS} lib${LIB_PRIVATE}${LIB}_p.a: ${POBJS} @${ECHO} building profiled ${LIB} library @rm -f ${.TARGET} - ${AR} ${ARFLAGS} ${.TARGET} `NM='${NM}' lorder ${POBJS} | tsort -q` ${ARADD} + ${AR} ${ARFLAGS} ${.TARGET} `NM='${NM}' NMFLAGS='${NMFLAGS}' lorder ${POBJS} | tsort -q` ${ARADD} ${RANLIB} ${RANLIBFLAGS} ${.TARGET} .endif @@ -250,7 +250,7 @@ ${SHLIB_NAME_FULL}: ${SOBJS} .endif ${_LD} ${LDFLAGS} ${SSP_CFLAGS} ${SOLINKOPTS} \ -o ${.TARGET} -Wl,-soname,${SONAME} \ - `NM='${NM}' lorder ${SOBJS} | tsort -q` ${LDADD} + `NM='${NM}' NMFLAGS='${NMFLAGS}' lorder ${SOBJS} | tsort -q` ${LDADD} .if ${MK_CTF} != "no" ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS} .endif From owner-svn-src-head@freebsd.org Fri Aug 14 22:57:14 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 82F2C9BA513; Fri, 14 Aug 2015 22:57:14 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 73510187B; Fri, 14 Aug 2015 22:57:14 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EMvEY1011059; Fri, 14 Aug 2015 22:57:14 GMT (envelope-from rpaulo@FreeBSD.org) Received: (from rpaulo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EMvEw8011058; Fri, 14 Aug 2015 22:57:14 GMT (envelope-from rpaulo@FreeBSD.org) Message-Id: <201508142257.t7EMvEw8011058@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rpaulo set sender to rpaulo@FreeBSD.org using -f From: Rui Paulo Date: Fri, 14 Aug 2015 22:57:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286793 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 22:57:14 -0000 Author: rpaulo Date: Fri Aug 14 22:57:13 2015 New Revision: 286793 URL: https://svnweb.freebsd.org/changeset/base/286793 Log: genassym.sh: call nm(1) with NMFLAGS. Modified: head/sys/kern/genassym.sh Modified: head/sys/kern/genassym.sh ============================================================================== --- head/sys/kern/genassym.sh Fri Aug 14 22:55:23 2015 (r286792) +++ head/sys/kern/genassym.sh Fri Aug 14 22:57:13 2015 (r286793) @@ -10,7 +10,7 @@ usage() work() { - ${NM:='nm'} "$1" | ${AWK:='awk'} ' + ${NM:='nm'} ${NMFLAGS} "$1" | ${AWK:='awk'} ' / C .*sign$/ { sign = substr($1, length($1) - 3, 4) sub("^0*", "", sign) From owner-svn-src-head@freebsd.org Fri Aug 14 22:58:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 074439BA56E; Fri, 14 Aug 2015 22:58:34 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EC85C1AA7; Fri, 14 Aug 2015 22:58:33 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7EMwXVg011265; Fri, 14 Aug 2015 22:58:33 GMT (envelope-from rpaulo@FreeBSD.org) Received: (from rpaulo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7EMwXEY011263; Fri, 14 Aug 2015 22:58:33 GMT (envelope-from rpaulo@FreeBSD.org) Message-Id: <201508142258.t7EMwXEY011263@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rpaulo set sender to rpaulo@FreeBSD.org using -f From: Rui Paulo Date: Fri, 14 Aug 2015 22:58:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286794 - head/sys/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 22:58:34 -0000 Author: rpaulo Date: Fri Aug 14 22:58:32 2015 New Revision: 286794 URL: https://svnweb.freebsd.org/changeset/base/286794 Log: sys/conf: pass NMFLAGS to nm(1) via genassym.sh. Modified: head/sys/conf/files.amd64 head/sys/conf/kern.post.mk Modified: head/sys/conf/files.amd64 ============================================================================== --- head/sys/conf/files.amd64 Fri Aug 14 22:57:13 2015 (r286793) +++ head/sys/conf/files.amd64 Fri Aug 14 22:58:32 2015 (r286794) @@ -40,7 +40,7 @@ ia32_genassym.o standard \ # ia32_assym.h standard \ dependency "$S/kern/genassym.sh ia32_genassym.o" \ - compile-with "env NM='${NM}' sh $S/kern/genassym.sh ia32_genassym.o > ${.TARGET}" \ + compile-with "env NM='${NM}' NMFLAGS='${NMFLAGS}' sh $S/kern/genassym.sh ia32_genassym.o > ${.TARGET}" \ no-obj no-implicit-rule before-depend \ clean "ia32_assym.h" # Modified: head/sys/conf/kern.post.mk ============================================================================== --- head/sys/conf/kern.post.mk Fri Aug 14 22:57:13 2015 (r286793) +++ head/sys/conf/kern.post.mk Fri Aug 14 22:58:32 2015 (r286794) @@ -174,7 +174,7 @@ hack.So: Makefile ./assym.s: assym.s assym.s: $S/kern/genassym.sh genassym.o - NM='${NM}' sh $S/kern/genassym.sh genassym.o > ${.TARGET} + NM='${NM}' NMFLAGS='${NMFLAGS}' sh $S/kern/genassym.sh genassym.o > ${.TARGET} genassym.o: $S/$M/$M/genassym.c ${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c From owner-svn-src-head@freebsd.org Sat Aug 15 00:42:35 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9D1769B72E1; Sat, 15 Aug 2015 00:42:35 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7A75F1D6D; Sat, 15 Aug 2015 00:42:35 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7F0gZvO055834; Sat, 15 Aug 2015 00:42:35 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7F0gXbY055825; Sat, 15 Aug 2015 00:42:33 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201508150042.t7F0gXbY055825@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Sat, 15 Aug 2015 00:42:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286795 - head/usr.bin/patch X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 00:42:35 -0000 Author: delphij Date: Sat Aug 15 00:42:33 2015 New Revision: 286795 URL: https://svnweb.freebsd.org/changeset/base/286795 Log: Remove automatic checkout feature. Obtained from: DragonFly via OpenBSD Relnotes: yes MFC: never Modified: head/usr.bin/patch/common.h head/usr.bin/patch/inp.c head/usr.bin/patch/patch.1 head/usr.bin/patch/pch.c head/usr.bin/patch/util.c head/usr.bin/patch/util.h Modified: head/usr.bin/patch/common.h ============================================================================== --- head/usr.bin/patch/common.h Fri Aug 14 22:58:32 2015 (r286794) +++ head/usr.bin/patch/common.h Sat Aug 15 00:42:33 2015 (r286795) @@ -42,12 +42,6 @@ #define BUFFERSIZE 4096 #define LINENUM_MAX LONG_MAX -#define SCCSPREFIX "s." - -#define RCSSUFFIX ",v" -#define CHECKOUT "/usr/bin/co" -#define RCSDIFF "/usr/bin/rcsdiff" - #define ORIGEXT ".orig" #define REJEXT ".rej" Modified: head/usr.bin/patch/inp.c ============================================================================== --- head/usr.bin/patch/inp.c Fri Aug 14 22:58:32 2015 (r286794) +++ head/usr.bin/patch/inp.c Sat Aug 15 00:42:33 2015 (r286795) @@ -137,13 +137,12 @@ reallocate_lines(size_t *lines_allocated static bool plan_a(const char *filename) { - int ifd, statfailed, pstat; - char *p, *s, lbuf[INITLINELEN]; + int ifd, statfailed; + char *p, *s; struct stat filestat; ptrdiff_t sz; size_t i; size_t iline, lines_allocated; - pid_t pid; #ifdef DEBUGGING if (debug & 8) @@ -169,96 +168,8 @@ plan_a(const char *filename) close(creat(filename, 0666)); statfailed = stat(filename, &filestat); } - if (statfailed && check_only) - fatal("%s not found, -C mode, can't probe further\n", filename); - /* For nonexistent or read-only files, look for RCS versions. */ - - if (statfailed || - /* No one can write to it. */ - (filestat.st_mode & 0222) == 0 || - /* I can't write to it. */ - ((filestat.st_mode & 0022) == 0 && filestat.st_uid != getuid())) { - char *filebase, *filedir; - struct stat cstat; - char *tmp_filename1, *tmp_filename2; - char *argp[4] = { NULL }; - posix_spawn_file_actions_t file_actions; - - tmp_filename1 = strdup(filename); - tmp_filename2 = strdup(filename); - if (tmp_filename1 == NULL || tmp_filename2 == NULL) - fatal("strdupping filename"); - - filebase = basename(tmp_filename1); - filedir = dirname(tmp_filename2); - - memset(argp, 0, sizeof(argp)); - -#define try(f, a1, a2, a3) \ - (snprintf(lbuf, sizeof(lbuf), f, a1, a2, a3), stat(lbuf, &cstat) == 0) - - /* - * else we can't write to it but it's not under a version - * control system, so just proceed. - */ - if (try("%s/RCS/%s%s", filedir, filebase, RCSSUFFIX) || - try("%s/RCS/%s%s", filedir, filebase, "") || - try("%s/%s%s", filedir, filebase, RCSSUFFIX)) { - if (!statfailed) { - if ((filestat.st_mode & 0222) != 0) - /* The owner can write to it. */ - fatal("file %s seems to be locked " - "by somebody else under RCS\n", - filename); - /* - * It might be checked out unlocked. See if - * it's safe to check out the default version - * locked. - */ - if (verbose) - say("Comparing file %s to default " - "RCS version...\n", filename); - - argp[0] = __DECONST(char *, RCSDIFF); - argp[1] = __DECONST(char *, filename); - posix_spawn_file_actions_init(&file_actions); - posix_spawn_file_actions_addopen(&file_actions, - STDOUT_FILENO, _PATH_DEVNULL, O_WRONLY, 0); - if (posix_spawn(&pid, RCSDIFF, &file_actions, - NULL, argp, NULL) == 0) { - pid = waitpid(pid, &pstat, 0); - if (pid == -1 || WEXITSTATUS(pstat) != 0) - fatal("can't check out file %s: " - "differs from default RCS version\n", - filename); - } else - fatal("posix_spawn: %s\n", strerror(errno)); - posix_spawn_file_actions_destroy(&file_actions); - } - - if (verbose) - say("Checking out file %s from RCS...\n", - filename); - - argp[0] = __DECONST(char *, CHECKOUT); - argp[1] = __DECONST(char *, "-l"); - argp[2] = __DECONST(char *, filename); - if (posix_spawn(&pid, CHECKOUT, NULL, NULL, argp, - NULL) == 0) { - pid = waitpid(pid, &pstat, 0); - if (pid == -1 || WEXITSTATUS(pstat) != 0 || - stat(filename, &filestat)) - fatal("can't check out file %s from RCS\n", - filename); - } else - fatal("posix_spawn: %s\n", strerror(errno)); - } else if (statfailed) { - fatal("can't find %s\n", filename); - } - free(tmp_filename1); - free(tmp_filename2); - } - + if (statfailed) + fatal("can't find %s\n", filename); filemode = filestat.st_mode; if (!S_ISREG(filemode)) fatal("%s is not a normal file--can't patch\n", filename); Modified: head/usr.bin/patch/patch.1 ============================================================================== --- head/usr.bin/patch/patch.1 Fri Aug 14 22:58:32 2015 (r286794) +++ head/usr.bin/patch/patch.1 Sat Aug 15 00:42:33 2015 (r286795) @@ -21,7 +21,7 @@ .\" .\" $OpenBSD: patch.1,v 1.27 2014/04/15 06:26:54 jmc Exp $ .\" $FreeBSD$ -.Dd July 21, 2015 +.Dd August 15, 2015 .Dt PATCH 1 .Os .Sh NAME @@ -175,7 +175,7 @@ for that. .Fl Fl input Ar patchfile .Xc Causes the next argument to be interpreted as the input file name -(i.e. a patchfile). +(i.e., a patchfile). This option may be specified multiple times. .It Fl l , Fl Fl ignore-whitespace Causes the pattern matching to be done loosely, in case the tabs and @@ -245,7 +245,7 @@ option. Tells .Nm that this patch was created with the old and new files swapped. -(Yes, I'm afraid that does happen occasionally, human nature being what it +(Yes, I am afraid that does happen occasionally, human nature being what it is.) .Nm will attempt to swap each hunk around before applying it. @@ -263,7 +263,7 @@ If it can, you will be asked if you want option set. If it cannot, the patch will continue to be applied normally. (Note: this method cannot detect a reversed patch if it is a normal diff -and if the first command is an append (i.e. it should have been a delete) +and if the first command is an append (i.e., it should have been a delete) since appends always succeed, due to the fact that a null context will match anywhere. Luckily, most patches add or change lines rather than delete them, so most @@ -387,7 +387,7 @@ given in the hunk. First .Nm looks for a place where all lines of the context match. -If no such place is found, and it's a context diff, and the maximum fuzz factor +If no such place is found, and it is a context diff, and the maximum fuzz factor is set to 1 or more, then another scan takes place ignoring the first and last line of context. If that fails, and the maximum fuzz factor is set to 2 or more, @@ -483,15 +483,6 @@ file names or, for a non-context diff, t file name, and choose the file name with the fewest path components, the shortest basename, and the shortest total file name length (in that order). .It -If no file exists, -.Nm -checks for the existence of the files in an SCCS or RCS directory -(using the appropriate prefix or suffix) using the criteria specified -above. -If found, -.Nm -will attempt to get or check out the file. -.It If no suitable file was found to patch, the patch file is a context or unified diff, and the old file was zero length, the new file name is created and used. Modified: head/usr.bin/patch/pch.c ============================================================================== --- head/usr.bin/patch/pch.c Fri Aug 14 22:58:32 2015 (r286794) +++ head/usr.bin/patch/pch.c Sat Aug 15 00:42:33 2015 (r286795) @@ -1501,17 +1501,8 @@ posix_name(const struct file_name *names } if (path == NULL && !assume_exists) { /* - * No files found, look for something we can checkout from - * RCS/SCCS dirs. Same order as above. - */ - for (i = 0; i < MAX_FILE; i++) { - if (names[i].path != NULL && - (path = checked_in(names[i].path)) != NULL) - break; - } - /* - * Still no match? Check to see if the diff could be creating - * a new file. + * No files found, check to see if the diff could be + * creating a new file. */ if (path == NULL && ok_to_create_file && names[NEW_FILE].path != NULL) @@ -1522,7 +1513,7 @@ posix_name(const struct file_name *names } static char * -compare_names(const struct file_name *names, bool assume_exists, int phase) +compare_names(const struct file_name *names, bool assume_exists) { size_t min_components, min_baselen, min_len, tmp; char *best = NULL; @@ -1539,9 +1530,7 @@ compare_names(const struct file_name *na min_components = min_baselen = min_len = SIZE_MAX; for (i = INDEX_FILE; i >= OLD_FILE; i--) { path = names[i].path; - if (path == NULL || - (phase == 1 && !names[i].exists && !assume_exists) || - (phase == 2 && checked_in(path) == NULL)) + if (path == NULL || (!names[i].exists && !assume_exists)) continue; if ((tmp = num_components(path)) > min_components) continue; @@ -1572,17 +1561,11 @@ best_name(const struct file_name *names, { char *best; - best = compare_names(names, assume_exists, 1); - if (best == NULL) { - best = compare_names(names, assume_exists, 2); - /* - * Still no match? Check to see if the diff could be creating - * a new file. - */ - if (best == NULL && ok_to_create_file && - names[NEW_FILE].path != NULL) - best = names[NEW_FILE].path; - } + best = compare_names(names, assume_exists); + + /* No match? Check to see if the diff could be creating a new file. */ + if (best == NULL && ok_to_create_file) + best = names[NEW_FILE].path; return best ? xstrdup(best) : NULL; } Modified: head/usr.bin/patch/util.c ============================================================================== --- head/usr.bin/patch/util.c Fri Aug 14 22:58:32 2015 (r286794) +++ head/usr.bin/patch/util.c Sat Aug 15 00:42:33 2015 (r286795) @@ -399,36 +399,10 @@ fetchname(const char *at, bool *exists, return name; } -/* - * Takes the name returned by fetchname and looks in RCS/SCCS directories - * for a checked in version. - */ -char * -checked_in(char *file) -{ - char *filebase, *filedir, tmpbuf[PATH_MAX]; - struct stat filestat; - - filebase = basename(file); - filedir = dirname(file); - -#define try(f, a1, a2, a3) \ -(snprintf(tmpbuf, sizeof tmpbuf, f, a1, a2, a3), stat(tmpbuf, &filestat) == 0) - - if (try("%s/RCS/%s%s", filedir, filebase, RCSSUFFIX) || - try("%s/RCS/%s%s", filedir, filebase, "") || - try("%s/%s%s", filedir, filebase, RCSSUFFIX) || - try("%s/SCCS/%s%s", filedir, SCCSPREFIX, filebase) || - try("%s/%s%s", filedir, SCCSPREFIX, filebase)) - return file; - - return NULL; -} - void version(void) { - printf("patch 2.0-12u10 FreeBSD\n"); + printf("patch 2.0-12u11 FreeBSD\n"); my_exit(EXIT_SUCCESS); } Modified: head/usr.bin/patch/util.h ============================================================================== --- head/usr.bin/patch/util.h Fri Aug 14 22:58:32 2015 (r286794) +++ head/usr.bin/patch/util.h Sat Aug 15 00:42:33 2015 (r286795) @@ -28,7 +28,6 @@ */ char *fetchname(const char *, bool *, int); -char *checked_in(char *); int backup_file(const char *); int move_file(const char *, const char *); int copy_file(const char *, const char *); From owner-svn-src-head@freebsd.org Sat Aug 15 06:34:50 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E85399A0392; Sat, 15 Aug 2015 06:34:50 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D74761C10; Sat, 15 Aug 2015 06:34:50 +0000 (UTC) (envelope-from oshogbo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7F6YoCp003942; Sat, 15 Aug 2015 06:34:50 GMT (envelope-from oshogbo@FreeBSD.org) Received: (from oshogbo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7F6Yopc003939; Sat, 15 Aug 2015 06:34:50 GMT (envelope-from oshogbo@FreeBSD.org) Message-Id: <201508150634.t7F6Yopc003939@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: oshogbo set sender to oshogbo@FreeBSD.org using -f From: Mariusz Zaborski Date: Sat, 15 Aug 2015 06:34:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286796 - in head: lib/libnv/tests share/man/man9 sys/cddl/compat/opensolaris/sys sys/contrib/libnv sys/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 06:34:51 -0000 Author: oshogbo Date: Sat Aug 15 06:34:49 2015 New Revision: 286796 URL: https://svnweb.freebsd.org/changeset/base/286796 Log: Add support for the arrays in nvlist library. - Add nvlist_{add,get,take,move,exists,free}_{number,bool,string,nvlist, descriptor} functions. - Add support for (un)packing arrays. - Add the nvl_array_next field to the nvlist structure. If an array is added by the nvlist_{move,add}_nvlist_array function this field will contains next element in the array. - Add the nitems field to the nvpair and nvpair_header structure. This field contains number of elements in the array. - Add special flag (NV_FLAG_IN_ARRAY) which is set if nvlist is a part of an array. - Add special type (NV_TYPE_NVLIST_ARRAY_NEXT).This type is used only on packing/unpacking. - Add new API for traversing arrays (nvlist_get_array_next). - Add the nvlist_get_pararr function which combines the nvlist_get_array_next and nvlist_get_parent functions. If nvlist is in the array it will return next element from array. If nvlist is last element in array or it isn't in array it will return his container (parent). This function should simplify traveling over nvlist. - Add tests for new features. - Add documentation for new functions. - Add my copyright. - Regenerate the sys/cddl/compat/opensolaris/sys/nvpair.h file. PR: 191083 Reviewed by: allanjude (doc) Approved by: pjd (mentor) Added: head/lib/libnv/tests/nv_array_tests.cc (contents, props changed) Modified: head/lib/libnv/tests/Makefile head/share/man/man9/nv.9 head/sys/cddl/compat/opensolaris/sys/nvpair.h head/sys/contrib/libnv/nv_impl.h head/sys/contrib/libnv/nvlist.c head/sys/contrib/libnv/nvlist_impl.h head/sys/contrib/libnv/nvpair.c head/sys/contrib/libnv/nvpair_impl.h head/sys/sys/nv.h Modified: head/lib/libnv/tests/Makefile ============================================================================== --- head/lib/libnv/tests/Makefile Sat Aug 15 00:42:33 2015 (r286795) +++ head/lib/libnv/tests/Makefile Sat Aug 15 06:34:49 2015 (r286796) @@ -4,6 +4,7 @@ TESTSDIR= ${TESTSBASE}/lib/libnv ATF_TESTS_CXX= \ dnv_tests \ + nv_array_tests \ nv_tests \ TAP_TESTS_C+= nvlist_add_test Added: head/lib/libnv/tests/nv_array_tests.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libnv/tests/nv_array_tests.cc Sat Aug 15 06:34:49 2015 (r286796) @@ -0,0 +1,1191 @@ +/*- + * Copyright (c) 2015 Mariusz Zaborski + * 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. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#define fd_is_valid(fd) (fcntl((fd), F_GETFL) != -1 || errno != EBADF) + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_bool_array__basic); +ATF_TEST_CASE_BODY(nvlist_bool_array__basic) +{ + bool testbool[16]; + const bool *const_result; + bool *result; + nvlist_t *nvl; + size_t nitems; + unsigned int i; + const char *key; + + key = "nvl/bool"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + for (i = 0; i < 16; i++) + testbool[i] = (i % 2 == 0); + + nvlist_add_bool_array(nvl, key, testbool, 16); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_bool_array(nvl, key)); + ATF_REQUIRE(nvlist_exists_bool_array(nvl, "nvl/bool")); + + const_result = nvlist_get_bool_array(nvl, key, &nitems); + ATF_REQUIRE_EQ(nitems, 16); + ATF_REQUIRE(const_result != NULL); + for (i = 0; i < nitems; i++) + ATF_REQUIRE_EQ(const_result[i], testbool[i]); + + result = nvlist_take_bool_array(nvl, key, &nitems); + ATF_REQUIRE_EQ(nitems, 16); + ATF_REQUIRE(const_result != NULL); + for (i = 0; i < nitems; i++) + ATF_REQUIRE_EQ(result[i], testbool[i]); + + ATF_REQUIRE(!nvlist_exists_bool_array(nvl, key)); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + + free(result); + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_string_array__basic); +ATF_TEST_CASE_BODY(nvlist_string_array__basic) +{ + const char * const *const_result; + char **result; + nvlist_t *nvl; + size_t nitems; + unsigned int i; + const char *key; + const char *string[8] = { "a", "b", "kot", "foo", + "tests", "nice test", "", "abcdef" }; + + key = "nvl/string"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + nvlist_add_string_array(nvl, key, string, 8); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_string_array(nvl, key)); + ATF_REQUIRE(nvlist_exists_string_array(nvl, "nvl/string")); + + const_result = nvlist_get_string_array(nvl, key, &nitems); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE(nitems == 8); + for (i = 0; i < nitems; i++) { + if (string[i] != NULL) { + ATF_REQUIRE(strcmp(const_result[i], string[i]) == 0); + } else { + ATF_REQUIRE(const_result[i] == string[i]); + } + } + + result = nvlist_take_string_array(nvl, key, &nitems); + ATF_REQUIRE(result != NULL); + ATF_REQUIRE_EQ(nitems, 8); + for (i = 0; i < nitems; i++) { + if (string[i] != NULL) { + ATF_REQUIRE_EQ(strcmp(result[i], string[i]), 0); + } else { + ATF_REQUIRE_EQ(result[i], string[i]); + } + } + + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + + for (i = 0; i < 8; i++) + free(result[i]); + free(result); + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_descriptor_array__basic); +ATF_TEST_CASE_BODY(nvlist_descriptor_array__basic) +{ + int fd[32], *result; + const int *const_result; + nvlist_t *nvl; + size_t nitems; + unsigned int i; + const char *key; + + for (i = 0; i < 32; i++) { + fd[i] = dup(STDERR_FILENO); + ATF_REQUIRE(fd_is_valid(fd[i])); + } + + key = "nvl/descriptor"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_descriptor_array(nvl, key)); + + nvlist_add_descriptor_array(nvl, key, fd, 32); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_descriptor_array(nvl, key)); + ATF_REQUIRE(nvlist_exists_descriptor_array(nvl, "nvl/descriptor")); + + const_result = nvlist_get_descriptor_array(nvl, key, &nitems); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE(nitems == 32); + for (i = 0; i < nitems; i++) { + ATF_REQUIRE(fd_is_valid(const_result[i])); + if (i > 0) + ATF_REQUIRE(const_result[i] != const_result[i - 1]); + } + + result = nvlist_take_descriptor_array(nvl, key, &nitems); + ATF_REQUIRE(result != NULL); + ATF_REQUIRE_EQ(nitems, 32); + for (i = 0; i < nitems; i++) { + ATF_REQUIRE(fd_is_valid(result[i])); + if (i > 0) + ATF_REQUIRE(const_result[i] != const_result[i - 1]); + } + + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + + for (i = 0; i < nitems; i++) { + close(result[i]); + close(fd[i]); + } + free(result); + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_number_array__basic); +ATF_TEST_CASE_BODY(nvlist_number_array__basic) +{ + const uint64_t *const_result; + uint64_t *result; + nvlist_t *nvl; + size_t nitems; + unsigned int i; + const char *key; + const uint64_t number[8] = { 0, UINT_MAX, 7, 123, 90, + 100000, 8, 1 }; + + key = "nvl/number"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + nvlist_add_number_array(nvl, key, number, 8); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_number_array(nvl, key)); + ATF_REQUIRE(nvlist_exists_number_array(nvl, "nvl/number")); + + const_result = nvlist_get_number_array(nvl, key, &nitems); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE(nitems == 8); + for (i = 0; i < nitems; i++) + ATF_REQUIRE_EQ(const_result[i], number[i]); + + result = nvlist_take_number_array(nvl, key, &nitems); + ATF_REQUIRE(result != NULL); + ATF_REQUIRE_EQ(nitems, 8); + for (i = 0; i < nitems; i++) + ATF_REQUIRE_EQ(result[i], number[i]); + + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + + free(result); + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__basic); +ATF_TEST_CASE_BODY(nvlist_nvlist_array__basic) +{ + nvlist_t *testnvl[8]; + const nvlist_t * const *const_result; + nvlist_t **result; + nvlist_t *nvl; + size_t nitems; + unsigned int i; + const char *somestr[8] = { "a", "b", "c", "d", "e", "f", "g", "h" }; + const char *key; + + for (i = 0; i < 8; i++) { + testnvl[i] = nvlist_create(0); + ATF_REQUIRE(testnvl[i] != NULL); + ATF_REQUIRE_EQ(nvlist_error(testnvl[i]), 0); + nvlist_add_string(testnvl[i], "nvl/string", somestr[i]); + ATF_REQUIRE_EQ(nvlist_error(testnvl[i]), 0); + ATF_REQUIRE(nvlist_exists_string(testnvl[i], "nvl/string")); + } + + key = "nvl/nvlist"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + nvlist_add_nvlist_array(nvl, key, (const nvlist_t * const *)testnvl, 8); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_nvlist_array(nvl, key)); + ATF_REQUIRE(nvlist_exists_nvlist_array(nvl, "nvl/nvlist")); + + const_result = nvlist_get_nvlist_array(nvl, key, &nitems); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE(nitems == 8); + + for (i = 0; i < nitems; i++) { + ATF_REQUIRE_EQ(nvlist_error(const_result[i]), 0); + if (i < nitems - 1) { + ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == + const_result[i + 1]); + } else { + ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == + NULL); + } + ATF_REQUIRE(nvlist_get_parent(const_result[i], NULL) == nvl); + ATF_REQUIRE(nvlist_in_array(const_result[i])); + ATF_REQUIRE(nvlist_exists_string(const_result[i], + "nvl/string")); + ATF_REQUIRE(strcmp(nvlist_get_string(const_result[i], + "nvl/string"), somestr[i]) == 0); + } + + result = nvlist_take_nvlist_array(nvl, key, &nitems); + ATF_REQUIRE(result != NULL); + ATF_REQUIRE_EQ(nitems, 8); + for (i = 0; i < nitems; i++) { + ATF_REQUIRE_EQ(nvlist_error(result[i]), 0); + ATF_REQUIRE(nvlist_get_array_next(result[i]) == NULL); + ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == NULL); + ATF_REQUIRE(!nvlist_in_array(const_result[i])); + } + + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + + for (i = 0; i < 8; i++) { + nvlist_destroy(result[i]); + nvlist_destroy(testnvl[i]); + } + + free(result); + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_clone_array); +ATF_TEST_CASE_BODY(nvlist_clone_array) +{ + nvlist_t *testnvl[8]; + nvlist_t *src, *dst; + const nvlist_t *nvl; + bool testbool[16]; + int testfd[16]; + size_t i, nitems; + const char *string[8] = { "a", "b", "kot", "foo", + "tests", "nice test", "", "abcdef" }; + const char *somestr[8] = { "a", "b", "c", "d", "e", "f", "g", "h" }; + const uint64_t number[8] = { 0, UINT_MAX, 7, 123, 90, + 100000, 8, 1 }; + + for (i = 0; i < 16; i++) { + testbool[i] = (i % 2 == 0); + testfd[i] = dup(STDERR_FILENO); + ATF_REQUIRE(fd_is_valid(testfd[i])); + } + for (i = 0; i < 8; i++) { + testnvl[i] = nvlist_create(0); + ATF_REQUIRE(nvlist_error(testnvl[i]) == 0); + nvlist_add_string(testnvl[i], "nvl/nvl/teststr", somestr[i]); + ATF_REQUIRE(nvlist_error(testnvl[i]) == 0); + } + + src = nvlist_create(0); + ATF_REQUIRE(nvlist_error(src) == 0); + + ATF_REQUIRE(!nvlist_exists_bool_array(src, "nvl/bool")); + nvlist_add_bool_array(src, "nvl/bool", testbool, 16); + ATF_REQUIRE_EQ(nvlist_error(src), 0); + ATF_REQUIRE(nvlist_exists_bool_array(src, "nvl/bool")); + + ATF_REQUIRE(!nvlist_exists_string_array(src, "nvl/string")); + nvlist_add_string_array(src, "nvl/string", string, 8); + ATF_REQUIRE_EQ(nvlist_error(src), 0); + ATF_REQUIRE(nvlist_exists_string_array(src, "nvl/string")); + + ATF_REQUIRE(!nvlist_exists_descriptor_array(src, "nvl/fd")); + nvlist_add_descriptor_array(src, "nvl/fd", testfd, 16); + ATF_REQUIRE_EQ(nvlist_error(src), 0); + ATF_REQUIRE(nvlist_exists_descriptor_array(src, "nvl/fd")); + + ATF_REQUIRE(!nvlist_exists_number_array(src, "nvl/number")); + nvlist_add_number_array(src, "nvl/number", number, 8); + ATF_REQUIRE_EQ(nvlist_error(src), 0); + ATF_REQUIRE(nvlist_exists_number_array(src, "nvl/number")); + + ATF_REQUIRE(!nvlist_exists_nvlist_array(src, "nvl/array")); + nvlist_add_nvlist_array(src, "nvl/array", + (const nvlist_t * const *)testnvl, 8); + ATF_REQUIRE_EQ(nvlist_error(src), 0); + ATF_REQUIRE(nvlist_exists_nvlist_array(src, "nvl/array")); + + dst = nvlist_clone(src); + ATF_REQUIRE(dst != NULL); + + ATF_REQUIRE(nvlist_exists_bool_array(dst, "nvl/bool")); + (void) nvlist_get_bool_array(dst, "nvl/bool", &nitems); + ATF_REQUIRE_EQ(nitems, 16); + for (i = 0; i < nitems; i++) { + ATF_REQUIRE( + nvlist_get_bool_array(dst, "nvl/bool", &nitems)[i] == + nvlist_get_bool_array(src, "nvl/bool", &nitems)[i]); + } + + ATF_REQUIRE(nvlist_exists_string_array(dst, "nvl/string")); + (void) nvlist_get_string_array(dst, "nvl/string", &nitems); + ATF_REQUIRE_EQ(nitems, 8); + for (i = 0; i < nitems; i++) { + if (nvlist_get_string_array(dst, "nvl/string", + &nitems)[i] == NULL) { + ATF_REQUIRE(nvlist_get_string_array(dst, "nvl/string", + &nitems)[i] == nvlist_get_string_array(src, + "nvl/string", &nitems)[i]); + } else { + ATF_REQUIRE(strcmp(nvlist_get_string_array(dst, + "nvl/string", &nitems)[i], nvlist_get_string_array( + src, "nvl/string", &nitems)[i]) == 0); + } + } + + ATF_REQUIRE(nvlist_exists_descriptor_array(dst, "nvl/fd")); + (void) nvlist_get_descriptor_array(dst, "nvl/fd", &nitems); + ATF_REQUIRE_EQ(nitems, 16); + for (i = 0; i < nitems; i++) { + ATF_REQUIRE(fd_is_valid( + nvlist_get_descriptor_array(dst, "nvl/fd", &nitems)[i])); + } + ATF_REQUIRE(nvlist_exists_number_array(dst, "nvl/number")); + (void) nvlist_get_number_array(dst, "nvl/number", &nitems); + ATF_REQUIRE_EQ(nitems, 8); + + for (i = 0; i < nitems; i++) { + ATF_REQUIRE( + nvlist_get_number_array(dst, "nvl/number", &nitems)[i] == + nvlist_get_number_array(src, "nvl/number", &nitems)[i]); + } + + ATF_REQUIRE(nvlist_exists_nvlist_array(dst, "nvl/array")); + (void) nvlist_get_nvlist_array(dst, "nvl/array", &nitems); + ATF_REQUIRE_EQ(nitems, 8); + for (i = 0; i < nitems; i++) { + nvl = nvlist_get_nvlist_array(dst, "nvl/array", &nitems)[i]; + ATF_REQUIRE(nvlist_exists_string(nvl, "nvl/nvl/teststr")); + ATF_REQUIRE(strcmp(nvlist_get_string(nvl, "nvl/nvl/teststr"), + somestr[i]) == 0); + } + + for (i = 0; i < 16; i++) { + close(testfd[i]); + if (i < 8) { + nvlist_destroy(testnvl[i]); + } + } + nvlist_destroy(src); + nvlist_destroy(dst); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_bool_array__move); +ATF_TEST_CASE_BODY(nvlist_bool_array__move) +{ + bool *testbool; + const bool *const_result; + nvlist_t *nvl; + size_t nitems, count; + unsigned int i; + const char *key; + + key = "nvl/bool"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + count = 16; + testbool = (bool*)malloc(sizeof(*testbool) * count); + ATF_REQUIRE(testbool != NULL); + for (i = 0; i < count; i++) + testbool[i] = (i % 2 == 0); + + nvlist_move_bool_array(nvl, key, testbool, count); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_bool_array(nvl, key)); + + const_result = nvlist_get_bool_array(nvl, key, &nitems); + ATF_REQUIRE_EQ(nitems, count); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE(const_result == testbool); + for (i = 0; i < nitems; i++) + ATF_REQUIRE_EQ(const_result[i], (i % 2 == 0)); + + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_string_array__move); +ATF_TEST_CASE_BODY(nvlist_string_array__move) +{ + char **teststr; + const char * const *const_result; + nvlist_t *nvl; + size_t nitems, count; + unsigned int i; + const char *key; + + key = "nvl/string"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + count = 26; + teststr = (char**)malloc(sizeof(*teststr) * count); + ATF_REQUIRE(teststr != NULL); + for (i = 0; i < count; i++) { + teststr[i] = (char*)malloc(sizeof(**teststr) * 2); + ATF_REQUIRE(teststr[i] != NULL); + teststr[i][0] = 'a' + i; + teststr[i][1] = '\0'; + } + + nvlist_move_string_array(nvl, key, teststr, count); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_string_array(nvl, key)); + + const_result = nvlist_get_string_array(nvl, key, &nitems); + ATF_REQUIRE_EQ(nitems, count); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE((intptr_t)const_result == (intptr_t)teststr); + for (i = 0; i < nitems; i++) { + ATF_REQUIRE_EQ(const_result[i][0], (char)('a' + i)); + ATF_REQUIRE_EQ(const_result[i][1], '\0'); + } + + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__move); +ATF_TEST_CASE_BODY(nvlist_nvlist_array__move) +{ + nvlist **testnv; + const nvlist * const *const_result; + nvlist_t *nvl; + size_t nitems, count; + unsigned int i; + const char *key; + + key = "nvl/nvlist"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_nvlist_array(nvl, key)); + + count = 26; + testnv = (nvlist**)malloc(sizeof(*testnv) * count); + ATF_REQUIRE(testnv != NULL); + for (i = 0; i < count; i++) { + testnv[i] = nvlist_create(0); + ATF_REQUIRE(testnv[i] != NULL); + } + + nvlist_move_nvlist_array(nvl, key, testnv, count); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_nvlist_array(nvl, key)); + + const_result = nvlist_get_nvlist_array(nvl, key, &nitems); + ATF_REQUIRE_EQ(nitems, count); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE((intptr_t)const_result == (intptr_t)testnv); + for (i = 0; i < nitems; i++) { + ATF_REQUIRE_EQ(nvlist_error(const_result[i]), 0); + ATF_REQUIRE(nvlist_empty(const_result[i])); + if (i < nitems - 1) { + ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == + const_result[i + 1]); + } else { + ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == + NULL); + } + ATF_REQUIRE(nvlist_get_parent(const_result[i], NULL) == nvl); + ATF_REQUIRE(nvlist_in_array(const_result[i])); + } + + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_number_array__move); +ATF_TEST_CASE_BODY(nvlist_number_array__move) +{ + uint64_t *testnumber; + const uint64_t *const_result; + nvlist_t *nvl; + size_t nitems, count; + unsigned int i; + const char *key; + + key = "nvl/number"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + count = 1000; + testnumber = (uint64_t*)malloc(sizeof(*testnumber) * count); + ATF_REQUIRE(testnumber != NULL); + for (i = 0; i < count; i++) + testnumber[i] = i; + + nvlist_move_number_array(nvl, key, testnumber, count); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_number_array(nvl, key)); + + const_result = nvlist_get_number_array(nvl, key, &nitems); + ATF_REQUIRE_EQ(nitems, count); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE(const_result == testnumber); + for (i = 0; i < nitems; i++) + ATF_REQUIRE_EQ(const_result[i], i); + + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_descriptor_array__move); +ATF_TEST_CASE_BODY(nvlist_descriptor_array__move) +{ + int *testfd; + const int *const_result; + nvlist_t *nvl; + size_t nitems, count; + unsigned int i; + const char *key; + + key = "nvl/fd"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + count = 50; + testfd = (int*)malloc(sizeof(*testfd) * count); + ATF_REQUIRE(testfd != NULL); + for (i = 0; i < count; i++) { + testfd[i] = dup(STDERR_FILENO); + ATF_REQUIRE(fd_is_valid(testfd[i])); + } + + nvlist_move_descriptor_array(nvl, key, testfd, count); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_descriptor_array(nvl, key)); + + const_result = nvlist_get_descriptor_array(nvl, key, &nitems); + ATF_REQUIRE_EQ(nitems, count); + ATF_REQUIRE(const_result != NULL); + ATF_REQUIRE(const_result == testfd); + for (i = 0; i < nitems; i++) + ATF_REQUIRE(fd_is_valid(const_result[i])); + + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_arrays__error_null); +ATF_TEST_CASE_BODY(nvlist_arrays__error_null) +{ + nvlist_t *nvl; + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_number_array(nvl, "nvl/number", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_move_number_array(nvl, "nvl/number", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_descriptor_array(nvl, "nvl/fd", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_move_descriptor_array(nvl, "nvl/fd", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_string_array(nvl, "nvl/string", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_move_string_array(nvl, "nvl/string", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_nvlist_array(nvl, "nvl/nvlist", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_move_nvlist_array(nvl, "nvl/nvlist", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_bool_array(nvl, "nvl/bool", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_move_bool_array(nvl, "nvl/bool", NULL, 0); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_arrays__bad_value); +ATF_TEST_CASE_BODY(nvlist_arrays__bad_value) +{ + nvlist_t *nvl, *nvladd[1], **nvlmove; + int fdadd[1], *fdmove; + + nvladd[0] = NULL; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_nvlist_array(nvl, "nvl/nvlist", nvladd, 1); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + nvlmove = (nvlist_t**)malloc(sizeof(*nvlmove)); + ATF_REQUIRE(nvlmove != NULL); + nvlmove[0] = NULL; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_move_nvlist_array(nvl, "nvl/nvlist", nvlmove, 1); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + fdadd[0] = -2; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_descriptor_array(nvl, "nvl/fd", fdadd, 1); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); + + fdmove = (int*)malloc(sizeof(*fdmove)); + ATF_REQUIRE(fdmove != NULL); + fdmove[0] = -2; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_move_descriptor_array(nvl, "nvl/fd", fdmove, 1); + ATF_REQUIRE(nvlist_error(nvl) != 0); + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__travel); +ATF_TEST_CASE_BODY(nvlist_nvlist_array__travel) +{ + nvlist_t *nvl, *test[5], *nasted; + const nvlist_t *travel; + void *cookie; + int index, i, type; + const char *name; + + for (i = 0; i < 5; i++) { + test[i] = nvlist_create(0); + ATF_REQUIRE(test[i] != NULL); + nvlist_add_number(test[i], "nvl/number", i); + ATF_REQUIRE(nvlist_error(test[i]) == 0); + } + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_nvlist_array(nvl, "nvl/nvlist_array", test, 5); + ATF_REQUIRE(nvlist_error(nvl) == 0); + nasted = nvlist_create(0); + ATF_REQUIRE(nasted != NULL); + nvlist_add_nvlist_array(nasted, "nvl/nvl/nvlist_array", test, 5); + ATF_REQUIRE(nvlist_error(nasted) == 0); + nvlist_move_nvlist(nvl, "nvl/nvl", nasted); + ATF_REQUIRE(nvlist_error(nvl) == 0); + nvlist_add_string(nvl, "nvl/string", "END"); + ATF_REQUIRE(nvlist_error(nvl) == 0); + + cookie = NULL; + index = 0; + travel = nvl; + do { + while ((name = nvlist_next(travel, &type, &cookie)) != NULL) { + if (index == 0) { + ATF_REQUIRE(type == NV_TYPE_NVLIST_ARRAY); + } else if (index >= 1 && index <= 5) { + ATF_REQUIRE(type == NV_TYPE_NUMBER); + } else if (index == 6) { + ATF_REQUIRE(type == NV_TYPE_NVLIST); + } else if (index == 7) { + ATF_REQUIRE(type == NV_TYPE_NVLIST_ARRAY); + } else if (index >= 8 && index <= 12) { + ATF_REQUIRE(type == NV_TYPE_NUMBER); + } else if (index == 13) { + ATF_REQUIRE(type == NV_TYPE_STRING); + } + + if (type == NV_TYPE_NVLIST) { + travel = nvlist_get_nvlist(travel, name); + cookie = NULL; + } else if (type == NV_TYPE_NVLIST_ARRAY) { + travel = nvlist_get_nvlist_array(travel, name, + NULL)[0]; + cookie = NULL; + } + index ++; + } + } while ((travel = nvlist_get_pararr(travel, &cookie)) != NULL); + + for (i = 0; i < 5; i++) + nvlist_destroy(test[i]); + + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__travel_alternative); +ATF_TEST_CASE_BODY(nvlist_nvlist_array__travel_alternative) +{ + nvlist_t *nvl, *test[5], *nasted; + const nvlist_t *travel, *tmp; + void *cookie; + int index, i, type; + const char *name; + + for (i = 0; i < 5; i++) { + test[i] = nvlist_create(0); + ATF_REQUIRE(test[i] != NULL); + nvlist_add_number(test[i], "nvl/number", i); + ATF_REQUIRE(nvlist_error(test[i]) == 0); + } + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + nvlist_add_nvlist_array(nvl, "nvl/nvlist_array", test, 5); + ATF_REQUIRE(nvlist_error(nvl) == 0); + nasted = nvlist_create(0); + ATF_REQUIRE(nasted != NULL); + nvlist_add_nvlist_array(nasted, "nvl/nvl/nvlist_array", test, 5); + ATF_REQUIRE(nvlist_error(nasted) == 0); + nvlist_move_nvlist(nvl, "nvl/nvl", nasted); + ATF_REQUIRE(nvlist_error(nvl) == 0); + nvlist_add_string(nvl, "nvl/string", "END"); + ATF_REQUIRE(nvlist_error(nvl) == 0); + + cookie = NULL; + index = 0; + tmp = travel = nvl; + do { + do { + travel = tmp; + while ((name = nvlist_next(travel, &type, &cookie)) != + NULL) { + if (index == 0) { + ATF_REQUIRE(type == + NV_TYPE_NVLIST_ARRAY); + } else if (index >= 1 && index <= 5) { + ATF_REQUIRE(type == NV_TYPE_NUMBER); + } else if (index == 6) { + ATF_REQUIRE(type == NV_TYPE_NVLIST); + } else if (index == 7) { + ATF_REQUIRE(type == + NV_TYPE_NVLIST_ARRAY); + } else if (index >= 8 && index <= 12) { + ATF_REQUIRE(type == NV_TYPE_NUMBER); + } else if (index == 13) { + ATF_REQUIRE(type == NV_TYPE_STRING); + } + + if (type == NV_TYPE_NVLIST) { + travel = nvlist_get_nvlist(travel, + name); + cookie = NULL; + } else if (type == NV_TYPE_NVLIST_ARRAY) { + travel = nvlist_get_nvlist_array(travel, + name, NULL)[0]; + cookie = NULL; + } + index ++; + } + cookie = NULL; + } while ((tmp = nvlist_get_array_next(travel)) != NULL); + } while ((tmp = nvlist_get_parent(travel, &cookie)) != NULL); + + for (i = 0; i < 5; i++) + nvlist_destroy(test[i]); + + nvlist_destroy(nvl); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_bool_array__pack); +ATF_TEST_CASE_BODY(nvlist_bool_array__pack) +{ + nvlist_t *nvl, *unpacked; + const char *key; + size_t packed_size, count; + void *packed; + unsigned int i; + const bool *const_result; + bool testbool[16]; + + for (i = 0; i < 16; i++) + testbool[i] = (i % 2 == 0); + + key = "nvl/bool"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + nvlist_add_bool_array(nvl, key, testbool, 16); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_bool_array(nvl, key)); + + packed = nvlist_pack(nvl, &packed_size); + ATF_REQUIRE(packed != NULL); + + unpacked = nvlist_unpack(packed, packed_size, 0); + ATF_REQUIRE(unpacked != NULL); + ATF_REQUIRE_EQ(nvlist_error(unpacked), 0); + ATF_REQUIRE(nvlist_exists_bool_array(unpacked, key)); + + const_result = nvlist_get_bool_array(unpacked, key, &count); + ATF_REQUIRE_EQ(count, 16); + for (i = 0; i < count; i++) { + ATF_REQUIRE_EQ(testbool[i], const_result[i]); + } + + nvlist_destroy(nvl); + nvlist_destroy(unpacked); + free(packed); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_number_array__pack); +ATF_TEST_CASE_BODY(nvlist_number_array__pack) +{ + nvlist_t *nvl, *unpacked; + const char *key; + size_t packed_size, count; + void *packed; + unsigned int i; + const uint64_t *const_result; + const uint64_t number[8] = { 0, UINT_MAX, 7, 123, 90, + 100000, 8, 1 }; + + key = "nvl/number"; + nvl = nvlist_create(0); + ATF_REQUIRE(nvl != NULL); + ATF_REQUIRE(nvlist_empty(nvl)); + ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); + + nvlist_add_number_array(nvl, key, number, 8); + ATF_REQUIRE_EQ(nvlist_error(nvl), 0); + ATF_REQUIRE(!nvlist_empty(nvl)); + ATF_REQUIRE(nvlist_exists_number_array(nvl, key)); + + packed = nvlist_pack(nvl, &packed_size); + ATF_REQUIRE(packed != NULL); + + unpacked = nvlist_unpack(packed, packed_size, 0); + ATF_REQUIRE(unpacked != NULL); + ATF_REQUIRE_EQ(nvlist_error(unpacked), 0); + ATF_REQUIRE(nvlist_exists_number_array(unpacked, key)); + + const_result = nvlist_get_number_array(unpacked, key, &count); + ATF_REQUIRE_EQ(count, 8); + for (i = 0; i < count; i++) { + ATF_REQUIRE_EQ(number[i], const_result[i]); + } + + nvlist_destroy(nvl); + nvlist_destroy(unpacked); + free(packed); +} + +ATF_TEST_CASE_WITHOUT_HEAD(nvlist_descriptor_array__pack); +ATF_TEST_CASE_BODY(nvlist_descriptor_array__pack) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Sat Aug 15 08:29:14 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3B7E59B8948; Sat, 15 Aug 2015 08:29:14 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2CB6B1C91; Sat, 15 Aug 2015 08:29:14 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7F8TEMh050611; Sat, 15 Aug 2015 08:29:14 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7F8TE43050610; Sat, 15 Aug 2015 08:29:14 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508150829.t7F8TE43050610@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Sat, 15 Aug 2015 08:29:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286797 - head/sys/teken/demo X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 08:29:14 -0000 Author: ed Date: Sat Aug 15 08:29:13 2015 New Revision: 286797 URL: https://svnweb.freebsd.org/changeset/base/286797 Log: Add missing 'static' keyword to keep build at WARNS=6 happy. MFC after: 1 month Modified: head/sys/teken/demo/teken_demo.c Modified: head/sys/teken/demo/teken_demo.c ============================================================================== --- head/sys/teken/demo/teken_demo.c Sat Aug 15 06:34:49 2015 (r286796) +++ head/sys/teken/demo/teken_demo.c Sat Aug 15 08:29:13 2015 (r286797) @@ -72,7 +72,7 @@ struct pixel { #define NCOLS 80 #define NROWS 24 -struct pixel buffer[NCOLS][NROWS]; +static struct pixel buffer[NCOLS][NROWS]; static int ptfd; From owner-svn-src-head@freebsd.org Sat Aug 15 08:42:34 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2496E9B8C72; Sat, 15 Aug 2015 08:42:34 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F019F1486; Sat, 15 Aug 2015 08:42:33 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7F8gX0w058557; Sat, 15 Aug 2015 08:42:33 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7F8gXKf058556; Sat, 15 Aug 2015 08:42:33 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201508150842.t7F8gXKf058556@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Sat, 15 Aug 2015 08:42:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286798 - head/sys/teken X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 08:42:34 -0000 Author: ed Date: Sat Aug 15 08:42:33 2015 New Revision: 286798 URL: https://svnweb.freebsd.org/changeset/base/286798 Log: Stop parsing digits if the value already exceeds USHRT_MAX. There is no need for us to support parsing values that are larger than the maximum terminal window size. In this case that would be the maximum of unsigned short. The problem with parsing larger values is that they can cause integer overflows when adjusting the cursor position, leading to all sorts of failing assertions. PR: 202326 Reported by: kcwu csie org MFC after: 1 month Modified: head/sys/teken/teken.c Modified: head/sys/teken/teken.c ============================================================================== --- head/sys/teken/teken.c Sat Aug 15 08:29:13 2015 (r286797) +++ head/sys/teken/teken.c Sat Aug 15 08:42:33 2015 (r286798) @@ -29,12 +29,14 @@ #include #if defined(__FreeBSD__) && defined(_KERNEL) #include +#include #include #include #define teken_assert(x) MPASS(x) #else /* !(__FreeBSD__ && _KERNEL) */ #include #include +#include #include #include #include @@ -405,18 +407,21 @@ teken_state_numbers(teken_t *t, teken_ch teken_assert(t->t_curnum < T_NUMSIZE); if (c >= '0' && c <= '9') { - /* - * Don't do math with the default value of 1 when a - * custom number is inserted. - */ if (t->t_stateflags & TS_FIRSTDIGIT) { + /* First digit. */ t->t_stateflags &= ~TS_FIRSTDIGIT; - t->t_nums[t->t_curnum] = 0; - } else { - t->t_nums[t->t_curnum] *= 10; + t->t_nums[t->t_curnum] = c - '0'; + } else if (t->t_nums[t->t_curnum] < USHRT_MAX) { + /* + * Screen positions are stored as unsigned + * shorts. There is no need to continue parsing + * input once the value exceeds USHRT_MAX. It + * would only allow for integer overflows when + * performing arithmetic on the cursor position. + */ + t->t_nums[t->t_curnum] = + t->t_nums[t->t_curnum] * 10 + c - '0'; } - - t->t_nums[t->t_curnum] += c - '0'; return (1); } else if (c == ';') { if (t->t_stateflags & TS_FIRSTDIGIT) From owner-svn-src-head@freebsd.org Sat Aug 15 09:00:37 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 97BAE9B9094; Sat, 15 Aug 2015 09:00:37 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7BB451BF8; Sat, 15 Aug 2015 09:00:37 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7F90bHv063806; Sat, 15 Aug 2015 09:00:37 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7F90bm4063804; Sat, 15 Aug 2015 09:00:37 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201508150900.t7F90bm4063804@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Sat, 15 Aug 2015 09:00:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286799 - head/sys/dev/usb X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 09:00:37 -0000 Author: hselasky Date: Sat Aug 15 09:00:36 2015 New Revision: 286799 URL: https://svnweb.freebsd.org/changeset/base/286799 Log: Fix race in USB PF which can happen if we stop tracing exactly when the kernel is tapping an USB transfer. This leads to a NULL pointer access. The solution is to only trace while the USB bus lock is locked. MFC after: 2 weeks Modified: head/sys/dev/usb/usb_pf.c head/sys/dev/usb/usb_transfer.c Modified: head/sys/dev/usb/usb_pf.c ============================================================================== --- head/sys/dev/usb/usb_pf.c Sat Aug 15 08:42:33 2015 (r286798) +++ head/sys/dev/usb/usb_pf.c Sat Aug 15 09:00:36 2015 (r286799) @@ -221,7 +221,13 @@ usbpf_clone_destroy(struct if_clone *ifc ubus = ifp->if_softc; unit = ifp->if_dunit; + /* + * Lock USB before clearing the "ifp" pointer, to avoid + * clearing the pointer in the middle of a TAP operation: + */ + USB_BUS_LOCK(ubus); ubus->ifp = NULL; + USB_BUS_UNLOCK(ubus); bpfdetach(ifp); if_detach(ifp); if_free(ifp); Modified: head/sys/dev/usb/usb_transfer.c ============================================================================== --- head/sys/dev/usb/usb_transfer.c Sat Aug 15 08:42:33 2015 (r286798) +++ head/sys/dev/usb/usb_transfer.c Sat Aug 15 09:00:36 2015 (r286799) @@ -2398,8 +2398,11 @@ usbd_callback_wrapper(struct usb_xfer_qu } #if USB_HAVE_PF - if (xfer->usb_state != USB_ST_SETUP) + if (xfer->usb_state != USB_ST_SETUP) { + USB_BUS_LOCK(info->bus); usbpf_xfertap(xfer, USBPF_XFERTAP_DONE); + USB_BUS_UNLOCK(info->bus); + } #endif /* call processing routine */ (xfer->callback) (xfer, xfer->error); From owner-svn-src-head@freebsd.org Sat Aug 15 12:06:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5E2B09B9A69; Sat, 15 Aug 2015 12:06:16 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4DDBD125A; Sat, 15 Aug 2015 12:06:16 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FC6Gxa041263; Sat, 15 Aug 2015 12:06:16 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FC6FS4041261; Sat, 15 Aug 2015 12:06:15 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201508151206.t7FC6FS4041261@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Sat, 15 Aug 2015 12:06:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286802 - head/sys/dev/usb/controller X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 12:06:16 -0000 Author: hselasky Date: Sat Aug 15 12:06:15 2015 New Revision: 286802 URL: https://svnweb.freebsd.org/changeset/base/286802 Log: Fixes for HIGH speed ISOCHRONOUS traffic. HS ISOCHRONOUS traffic at intervals less than 250us was not handled properly. Add support for high-bandwidth ISOCHRONOUS packets. USB webcams, USB audio and USB DVB devices are expected to work better. High-bandwidth INTERRUPT endpoints is not yet supported. MFC after: 2 weeks Modified: head/sys/dev/usb/controller/dwc_otg.c head/sys/dev/usb/controller/dwc_otg.h Modified: head/sys/dev/usb/controller/dwc_otg.c ============================================================================== --- head/sys/dev/usb/controller/dwc_otg.c Sat Aug 15 11:08:30 2015 (r286801) +++ head/sys/dev/usb/controller/dwc_otg.c Sat Aug 15 12:06:15 2015 (r286802) @@ -1,7 +1,7 @@ /* $FreeBSD$ */ /*- * Copyright (c) 2015 Daisuke Aoyama. All rights reserved. - * Copyright (c) 2012 Hans Petter Selasky. All rights reserved. + * Copyright (c) 2012-2015 Hans Petter Selasky. All rights reserved. * Copyright (c) 2010-2011 Aleksandr Rybalko. All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -597,14 +597,18 @@ dwc_otg_clear_hcint(struct dwc_otg_softc } static uint8_t -dwc_otg_host_check_fifo_empty(struct dwc_otg_softc *sc, struct dwc_otg_td *td) +dwc_otg_host_check_tx_fifo_empty(struct dwc_otg_softc *sc, struct dwc_otg_td *td) { uint32_t temp; temp = DWC_OTG_READ_4(sc, DOTG_GINTSTS); - if (td->ep_type == UE_INTERRUPT || - td->ep_type == UE_ISOCHRONOUS) { + if (td->ep_type == UE_ISOCHRONOUS) { + /* + * NOTE: USB INTERRUPT transactions are executed like + * USB CONTROL transactions! See the setup standard + * chain function for more information. + */ if (!(temp & GINTSTS_PTXFEMP)) { DPRINTF("Periodic TX FIFO is not empty\n"); if (!(sc->sc_irq_mask & GINTMSK_PTXFEMPMSK)) { @@ -631,8 +635,10 @@ dwc_otg_host_channel_alloc(struct dwc_ot struct dwc_otg_td *td, uint8_t is_out) { uint8_t x; + uint8_t y; + uint8_t z; - if (td->channel < DWC_OTG_MAX_CHANNELS) + if (td->channel[0] < DWC_OTG_MAX_CHANNELS) return (0); /* already allocated */ /* check if device is suspended */ @@ -641,20 +647,42 @@ dwc_otg_host_channel_alloc(struct dwc_ot /* compute needed TX FIFO size */ if (is_out != 0) { - if (dwc_otg_host_check_fifo_empty(sc, td) != 0) + if (dwc_otg_host_check_tx_fifo_empty(sc, td) != 0) return (1); /* busy - cannot transfer data */ } - - for (x = 0; x != sc->sc_host_ch_max; x++) { + z = td->max_packet_count; + for (x = y = 0; x != sc->sc_host_ch_max; x++) { /* check if channel is allocated */ if (sc->sc_chan_state[x].allocated != 0) continue; /* check if channel is still enabled */ if (sc->sc_chan_state[x].wait_halted != 0) continue; + /* store channel number */ + td->channel[y++] = x; + /* check if we got all channels */ + if (y == z) + break; + } + if (y != z) { + /* reset channel variable */ + td->channel[0] = DWC_OTG_MAX_CHANNELS; + td->channel[1] = DWC_OTG_MAX_CHANNELS; + td->channel[2] = DWC_OTG_MAX_CHANNELS; + /* wait a bit */ + dwc_otg_enable_sof_irq(sc); + return (1); /* busy - not enough channels */ + } + + for (y = 0; y != z; y++) { + x = td->channel[y]; + /* set allocated */ sc->sc_chan_state[x].allocated = 1; + /* set wait halted */ + sc->sc_chan_state[x].wait_halted = 1; + /* clear interrupts */ dwc_otg_clear_hcint(sc, x); @@ -663,29 +691,22 @@ dwc_otg_host_channel_alloc(struct dwc_ot /* set active channel */ sc->sc_active_rx_ep |= (1 << x); - - /* set channel */ - td->channel = x; - - return (0); /* allocated */ } - /* wait a bit */ - dwc_otg_enable_sof_irq(sc); - return (1); /* busy */ + return (0); /* allocated */ } static void -dwc_otg_host_channel_free(struct dwc_otg_softc *sc, struct dwc_otg_td *td) +dwc_otg_host_channel_free_sub(struct dwc_otg_softc *sc, struct dwc_otg_td *td, uint8_t index) { uint32_t hcchar; uint8_t x; - if (td->channel >= DWC_OTG_MAX_CHANNELS) + if (td->channel[index] >= DWC_OTG_MAX_CHANNELS) return; /* already freed */ /* free channel */ - x = td->channel; - td->channel = DWC_OTG_MAX_CHANNELS; + x = td->channel[index]; + td->channel[index] = DWC_OTG_MAX_CHANNELS; DPRINTF("CH=%d\n", x); @@ -704,26 +725,42 @@ dwc_otg_host_channel_free(struct dwc_otg /* clear active channel */ sc->sc_active_rx_ep &= ~(1 << x); + /* check if already halted */ + if (sc->sc_chan_state[x].wait_halted == 0) + return; + /* disable host channel */ hcchar = DWC_OTG_READ_4(sc, DOTG_HCCHAR(x)); if (hcchar & HCCHAR_CHENA) { DPRINTF("Halting channel %d\n", x); DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(x), hcchar | HCCHAR_CHDIS); - sc->sc_chan_state[x].wait_halted = 1; /* don't write HCCHAR until the channel is halted */ + } else { + sc->sc_chan_state[x].wait_halted = 0; } } static void +dwc_otg_host_channel_free(struct dwc_otg_softc *sc, struct dwc_otg_td *td) +{ + uint8_t x; + for (x = 0; x != td->max_packet_count; x++) + dwc_otg_host_channel_free_sub(sc, td, x); +} + +static void dwc_otg_host_dump_rx(struct dwc_otg_softc *sc, struct dwc_otg_td *td) { + uint8_t x; /* dump any pending messages */ - if (sc->sc_last_rx_status != 0) { - if (td->channel < DWC_OTG_MAX_CHANNELS && - td->channel == GRXSTSRD_CHNUM_GET(sc->sc_last_rx_status)) { - dwc_otg_common_rx_ack(sc); - } + if (sc->sc_last_rx_status == 0) + return; + for (x = 0; x != td->max_packet_count; x++) { + if (td->channel[x] >= DWC_OTG_MAX_CHANNELS || + td->channel[x] != GRXSTSRD_CHNUM_GET(sc->sc_last_rx_status)) + continue; + dwc_otg_common_rx_ack(sc); } } @@ -737,13 +774,13 @@ dwc_otg_host_setup_tx(struct dwc_otg_sof dwc_otg_host_dump_rx(sc, td); - if (td->channel < DWC_OTG_MAX_CHANNELS) { - hcint = sc->sc_chan_state[td->channel].hcint; + if (td->channel[0] < DWC_OTG_MAX_CHANNELS) { + hcint = sc->sc_chan_state[td->channel[0]].hcint; DPRINTF("CH=%d ST=%d HCINT=0x%08x HCCHAR=0x%08x HCTSIZ=0x%08x\n", - td->channel, td->state, hcint, - DWC_OTG_READ_4(sc, DOTG_HCCHAR(td->channel)), - DWC_OTG_READ_4(sc, DOTG_HCTSIZ(td->channel))); + td->channel[0], td->state, hcint, + DWC_OTG_READ_4(sc, DOTG_HCCHAR(td->channel[0])), + DWC_OTG_READ_4(sc, DOTG_HCTSIZ(td->channel[0]))); } else { hcint = 0; goto check_state; @@ -753,12 +790,12 @@ dwc_otg_host_setup_tx(struct dwc_otg_sof HCINT_ACK | HCINT_NYET)) { /* give success bits priority over failure bits */ } else if (hcint & HCINT_STALL) { - DPRINTF("CH=%d STALL\n", td->channel); + DPRINTF("CH=%d STALL\n", td->channel[0]); td->error_stall = 1; td->error_any = 1; goto complete; } else if (hcint & HCINT_ERRORS) { - DPRINTF("CH=%d ERROR\n", td->channel); + DPRINTF("CH=%d ERROR\n", td->channel[0]); td->errcnt++; if (td->hcsplt != 0 || td->errcnt >= 3) { td->error_any = 1; @@ -863,23 +900,23 @@ send_pkt: usbd_copy_out(td->pc, 0, &req, sizeof(req)); - DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(td->channel), + DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(td->channel[0]), (sizeof(req) << HCTSIZ_XFERSIZE_SHIFT) | (1 << HCTSIZ_PKTCNT_SHIFT) | (HCTSIZ_PID_SETUP << HCTSIZ_PID_SHIFT)); - DWC_OTG_WRITE_4(sc, DOTG_HCSPLT(td->channel), td->hcsplt); + DWC_OTG_WRITE_4(sc, DOTG_HCSPLT(td->channel[0]), td->hcsplt); hcchar = td->hcchar; hcchar &= ~(HCCHAR_EPDIR_IN | HCCHAR_EPTYPE_MASK); hcchar |= UE_CONTROL << HCCHAR_EPTYPE_SHIFT; /* must enable channel before writing data to FIFO */ - DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(td->channel), hcchar); + DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(td->channel[0]), hcchar); /* transfer data into FIFO */ bus_space_write_region_4(sc->sc_io_tag, sc->sc_io_hdl, - DOTG_DFIFO(td->channel), (uint32_t *)&req, sizeof(req) / 4); + DOTG_DFIFO(td->channel[0]), (uint32_t *)&req, sizeof(req) / 4); /* wait until next slot before trying complete split */ td->tt_complete_slot = sc->sc_last_frame_num + 1; @@ -916,17 +953,17 @@ send_cpkt: td->hcsplt |= HCSPLT_COMPSPLT; td->state = DWC_CHAN_ST_WAIT_C_ANE; - DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(td->channel), + DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(td->channel[0]), (HCTSIZ_PID_SETUP << HCTSIZ_PID_SHIFT)); - DWC_OTG_WRITE_4(sc, DOTG_HCSPLT(td->channel), td->hcsplt); + DWC_OTG_WRITE_4(sc, DOTG_HCSPLT(td->channel[0]), td->hcsplt); hcchar = td->hcchar; hcchar &= ~(HCCHAR_EPDIR_IN | HCCHAR_EPTYPE_MASK); hcchar |= UE_CONTROL << HCCHAR_EPTYPE_SHIFT; /* must enable channel before writing data to FIFO */ - DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(td->channel), hcchar); + DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(td->channel[0]), hcchar); busy: return (1); /* busy */ @@ -1064,11 +1101,11 @@ dwc_otg_host_rate_check(struct dwc_otg_s if (td->ep_type == UE_ISOCHRONOUS) { /* non TT isochronous traffic */ - if ((td->tmr_val != 0) || - (frame_num & (td->tmr_res - 1))) { + if (frame_num & (td->tmr_res - 1)) goto busy; - } - td->tmr_val = 1; /* executed */ + if ((frame_num ^ td->tmr_val) & td->tmr_res) + goto busy; + td->tmr_val = td->tmr_res + sc->sc_last_frame_num; td->toggle = 0; return (0); } else if (td->ep_type == UE_INTERRUPT) { @@ -1096,16 +1133,15 @@ busy: } static uint8_t -dwc_otg_host_data_rx_sub(struct dwc_otg_softc *sc, struct dwc_otg_td *td) +dwc_otg_host_data_rx_sub(struct dwc_otg_softc *sc, struct dwc_otg_td *td, + uint8_t channel) { uint32_t count; - uint8_t channel; /* check endpoint status */ if (sc->sc_last_rx_status == 0) goto busy; - channel = td->channel; if (channel >= DWC_OTG_MAX_CHANNELS) goto busy; @@ -1130,21 +1166,22 @@ dwc_otg_host_data_rx_sub(struct dwc_otg_ /* get the packet byte count */ count = GRXSTSRD_BCNT_GET(sc->sc_last_rx_status); - /* check for isochronous transfer or high-speed bandwidth endpoint */ - if (td->ep_type == UE_ISOCHRONOUS || td->max_packet_count > 1) { - if ((sc->sc_last_rx_status & GRXSTSRD_DPID_MASK) != GRXSTSRD_DPID_DATA0) { + /* check for ISOCHRONOUS endpoint */ + if (td->ep_type == UE_ISOCHRONOUS) { + if ((sc->sc_last_rx_status & GRXSTSRD_DPID_MASK) != + GRXSTSRD_DPID_DATA0) { + /* more data to be received */ td->tt_xactpos = HCSPLT_XACTPOS_MIDDLE; } else { + /* all data received */ td->tt_xactpos = HCSPLT_XACTPOS_BEGIN; - /* verify the packet byte count */ - if (count < td->max_packet_size) { + if (count != td->remainder) { /* we have a short packet */ td->short_pkt = 1; td->got_short = 1; } } - td->toggle = 0; } else { /* verify the packet byte count */ if (count != td->max_packet_size) { @@ -1196,15 +1233,17 @@ complete: static uint8_t dwc_otg_host_data_rx(struct dwc_otg_softc *sc, struct dwc_otg_td *td) { - uint32_t hcint; + uint32_t hcint = 0; uint32_t hcchar; uint8_t delta; uint8_t channel; + uint8_t x; - channel = td->channel; - - if (channel < DWC_OTG_MAX_CHANNELS) { - hcint = sc->sc_chan_state[channel].hcint; + for (x = 0; x != td->max_packet_count; x++) { + channel = td->channel[x]; + if (channel >= DWC_OTG_MAX_CHANNELS) + continue; + hcint |= sc->sc_chan_state[channel].hcint; DPRINTF("CH=%d ST=%d HCINT=0x%08x HCCHAR=0x%08x HCTSIZ=0x%08x\n", channel, td->state, hcint, @@ -1232,19 +1271,17 @@ dwc_otg_host_data_rx(struct dwc_otg_soft } /* check channels for data, if any */ - if (dwc_otg_host_data_rx_sub(sc, td)) + if (dwc_otg_host_data_rx_sub(sc, td, channel)) goto complete; /* refresh interrupt status */ - hcint = sc->sc_chan_state[channel].hcint; + hcint |= sc->sc_chan_state[channel].hcint; if (hcint & (HCINT_ERRORS | HCINT_RETRY | HCINT_ACK | HCINT_NYET)) { if (!(hcint & HCINT_ERRORS)) td->errcnt = 0; } - } else { - hcint = 0; } switch (td->state) { @@ -1271,6 +1308,8 @@ dwc_otg_host_data_rx(struct dwc_otg_soft td->toggle ^= 1; goto receive_pkt; } + } else if (td->ep_type == UE_ISOCHRONOUS) { + goto complete; } td->did_nak = 1; td->tt_scheduled = 0; @@ -1294,12 +1333,12 @@ dwc_otg_host_data_rx(struct dwc_otg_soft if (td->ep_type == UE_ISOCHRONOUS) { /* check if we are complete */ - if ((td->remainder == 0) || - (td->tt_xactpos == HCSPLT_XACTPOS_BEGIN)) { + if (td->tt_xactpos == HCSPLT_XACTPOS_BEGIN) { goto complete; + } else { + /* get more packets */ + goto busy; } - /* get another packet */ - goto receive_pkt; } else { /* check if we are complete */ if ((td->remainder == 0) || (td->got_short != 0)) { @@ -1367,8 +1406,7 @@ receive_pkt: } /* complete split */ td->hcsplt |= HCSPLT_COMPSPLT; - } else if (td->tt_xactpos == HCSPLT_XACTPOS_BEGIN && - dwc_otg_host_rate_check(sc, td)) { + } else if (dwc_otg_host_rate_check(sc, td)) { td->state = DWC_CHAN_ST_WAIT_C_PKT; goto busy; } @@ -1379,8 +1417,6 @@ receive_pkt: goto busy; } - channel = td->channel; - /* set toggle, if any */ if (td->set_toggle) { td->set_toggle = 0; @@ -1389,28 +1425,31 @@ receive_pkt: td->state = DWC_CHAN_ST_WAIT_ANE; - /* receive one packet */ - DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(channel), - (td->max_packet_size << HCTSIZ_XFERSIZE_SHIFT) | - (1 << HCTSIZ_PKTCNT_SHIFT) | - (td->toggle ? (HCTSIZ_PID_DATA1 << HCTSIZ_PID_SHIFT) : - (HCTSIZ_PID_DATA0 << HCTSIZ_PID_SHIFT))); + for (x = 0; x != td->max_packet_count; x++) { + channel = td->channel[x]; - DWC_OTG_WRITE_4(sc, DOTG_HCSPLT(channel), td->hcsplt); + /* receive one packet */ + DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(channel), + (td->max_packet_size << HCTSIZ_XFERSIZE_SHIFT) | + (1 << HCTSIZ_PKTCNT_SHIFT) | + (td->toggle ? (HCTSIZ_PID_DATA1 << HCTSIZ_PID_SHIFT) : + (HCTSIZ_PID_DATA0 << HCTSIZ_PID_SHIFT))); - hcchar = td->hcchar; - hcchar |= HCCHAR_EPDIR_IN; + DWC_OTG_WRITE_4(sc, DOTG_HCSPLT(channel), td->hcsplt); - /* receive complete split ASAP */ - if ((sc->sc_last_frame_num & 1) != 0 && - (td->ep_type == UE_INTERRUPT || td->ep_type == UE_ISOCHRONOUS)) - hcchar |= HCCHAR_ODDFRM; - else - hcchar &= ~HCCHAR_ODDFRM; + hcchar = td->hcchar; + hcchar |= HCCHAR_EPDIR_IN; - /* must enable channel before data can be received */ - DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(channel), hcchar); + /* receive complete split ASAP */ + if ((sc->sc_last_frame_num & 1) != 0 && + td->ep_type == UE_ISOCHRONOUS) + hcchar |= HCCHAR_ODDFRM; + else + hcchar &= ~HCCHAR_ODDFRM; + /* must enable channel before data can be received */ + DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(channel), hcchar); + } /* wait until next slot before trying complete split */ td->tt_complete_slot = sc->sc_last_frame_num + 1; @@ -1439,7 +1478,7 @@ receive_spkt: goto busy; } - channel = td->channel; + channel = td->channel[0]; td->hcsplt &= ~HCSPLT_COMPSPLT; td->state = DWC_CHAN_ST_WAIT_S_ANE; @@ -1452,7 +1491,7 @@ receive_spkt: /* send after next SOF event */ if ((sc->sc_last_frame_num & 1) == 0 && - (td->ep_type == UE_INTERRUPT || td->ep_type == UE_ISOCHRONOUS)) + td->ep_type == UE_ISOCHRONOUS) td->hcchar |= HCCHAR_ODDFRM; else td->hcchar &= ~HCCHAR_ODDFRM; @@ -1607,10 +1646,12 @@ dwc_otg_host_data_tx(struct dwc_otg_soft uint32_t hcchar; uint8_t delta; uint8_t channel; + uint8_t x; dwc_otg_host_dump_rx(sc, td); - channel = td->channel; + /* check that last channel is complete */ + channel = td->channel[td->npkt]; if (channel < DWC_OTG_MAX_CHANNELS) { hcint = sc->sc_chan_state[channel].hcint; @@ -1721,33 +1762,13 @@ dwc_otg_host_data_tx(struct dwc_otg_soft goto send_cpkt; case DWC_CHAN_ST_TX_WAIT_ISOC: - - /* Check if isochronous OUT traffic is complete */ + /* Check if ISOCHRONOUS OUT traffic is complete */ if ((hcint & HCINT_HCH_DONE_MASK) == 0) break; td->offset += td->tx_bytes; td->remainder -= td->tx_bytes; - - if (td->hcsplt != 0 || td->remainder == 0) - goto complete; - - /* check for next packet */ - if (td->max_packet_count > 1) - td->tt_xactpos++; - - /* free existing channel, if any */ - dwc_otg_host_channel_free(sc, td); - - td->state = DWC_CHAN_ST_TX_PKT_ISOC; - - /* FALLTHROUGH */ - - case DWC_CHAN_ST_TX_PKT_ISOC: - if (dwc_otg_host_channel_alloc(sc, td, 1)) - break; - channel = td->channel; - goto send_isoc_pkt; + goto complete; default: break; } @@ -1781,8 +1802,6 @@ send_pkt: goto busy; } - channel = td->channel; - /* set toggle, if any */ if (td->set_toggle) { td->set_toggle = 0; @@ -1790,8 +1809,7 @@ send_pkt: } if (td->ep_type == UE_ISOCHRONOUS) { -send_isoc_pkt: - /* Isochronous OUT transfers don't have any ACKs */ + /* ISOCHRONOUS OUT transfers don't have any ACKs */ td->state = DWC_CHAN_ST_TX_WAIT_ISOC; td->hcsplt &= ~HCSPLT_COMPSPLT; if (td->hcsplt != 0) { @@ -1805,123 +1823,110 @@ send_isoc_pkt: /* Update transaction position */ td->hcsplt &= ~HCSPLT_XACTPOS_MASK; td->hcsplt |= (HCSPLT_XACTPOS_ALL << HCSPLT_XACTPOS_SHIFT); - } else { - /* send one packet at a time */ - count = td->max_packet_size; - if (td->remainder < count) { - /* we have a short packet */ - td->short_pkt = 1; - count = td->remainder; - } } } else if (td->hcsplt != 0) { - td->hcsplt &= ~HCSPLT_COMPSPLT; - /* Wait for ACK/NAK/ERR from TT */ td->state = DWC_CHAN_ST_WAIT_S_ANE; - - /* send one packet at a time */ - count = td->max_packet_size; - if (td->remainder < count) { - /* we have a short packet */ - td->short_pkt = 1; - count = td->remainder; - } } else { /* Wait for ACK/NAK/STALL from device */ td->state = DWC_CHAN_ST_WAIT_ANE; + } + + td->tx_bytes = 0; + + for (x = 0; x != td->max_packet_count; x++) { + uint32_t rem_bytes; + + channel = td->channel[x]; /* send one packet at a time */ count = td->max_packet_size; - if (td->remainder < count) { + rem_bytes = td->remainder - td->tx_bytes; + if (rem_bytes < count) { /* we have a short packet */ td->short_pkt = 1; - count = td->remainder; - } - } - - /* check for High-Speed multi-packets */ - if ((td->hcsplt == 0) && (td->max_packet_count > 1)) { - if (td->npkt == 0) { - if (td->remainder >= (3 * td->max_packet_size)) - td->npkt = 3; - else if (td->remainder >= (2 * td->max_packet_size)) - td->npkt = 2; - else - td->npkt = 1; - - if (td->npkt > td->max_packet_count) - td->npkt = td->max_packet_count; - - td->tt_xactpos = 1; /* overload */ + count = rem_bytes; } - if (td->tt_xactpos == td->npkt) { - if (td->npkt == 1) { + if (count == rem_bytes) { + /* last packet */ + switch (x) { + case 0: DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(channel), (count << HCTSIZ_XFERSIZE_SHIFT) | (1 << HCTSIZ_PKTCNT_SHIFT) | - (HCTSIZ_PID_DATA0 << HCTSIZ_PID_SHIFT)); - } else if (td->npkt == 2) { + (td->toggle ? (HCTSIZ_PID_DATA1 << HCTSIZ_PID_SHIFT) : + (HCTSIZ_PID_DATA0 << HCTSIZ_PID_SHIFT))); + break; + case 1: DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(channel), (count << HCTSIZ_XFERSIZE_SHIFT) | (1 << HCTSIZ_PKTCNT_SHIFT) | (HCTSIZ_PID_DATA1 << HCTSIZ_PID_SHIFT)); - } else { + break; + default: DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(channel), (count << HCTSIZ_XFERSIZE_SHIFT) | (1 << HCTSIZ_PKTCNT_SHIFT) | (HCTSIZ_PID_DATA2 << HCTSIZ_PID_SHIFT)); + break; } - td->npkt = 0; - } else { + } else if (td->ep_type == UE_ISOCHRONOUS && + td->max_packet_count > 1) { + /* ISOCHRONOUS multi packet */ DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(channel), (count << HCTSIZ_XFERSIZE_SHIFT) | (1 << HCTSIZ_PKTCNT_SHIFT) | (HCTSIZ_PID_MDATA << HCTSIZ_PID_SHIFT)); + } else { + /* TODO: HCTSIZ_DOPNG */ + /* standard BULK/INTERRUPT/CONTROL packet */ + DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(channel), + (count << HCTSIZ_XFERSIZE_SHIFT) | + (1 << HCTSIZ_PKTCNT_SHIFT) | + (td->toggle ? (HCTSIZ_PID_DATA1 << HCTSIZ_PID_SHIFT) : + (HCTSIZ_PID_DATA0 << HCTSIZ_PID_SHIFT))); } - } else { - /* TODO: HCTSIZ_DOPNG */ - DWC_OTG_WRITE_4(sc, DOTG_HCTSIZ(channel), - (count << HCTSIZ_XFERSIZE_SHIFT) | - (1 << HCTSIZ_PKTCNT_SHIFT) | - (td->toggle ? (HCTSIZ_PID_DATA1 << HCTSIZ_PID_SHIFT) : - (HCTSIZ_PID_DATA0 << HCTSIZ_PID_SHIFT))); - } + DWC_OTG_WRITE_4(sc, DOTG_HCSPLT(channel), td->hcsplt); - DWC_OTG_WRITE_4(sc, DOTG_HCSPLT(channel), td->hcsplt); + hcchar = td->hcchar; + hcchar &= ~HCCHAR_EPDIR_IN; - hcchar = td->hcchar; - hcchar &= ~HCCHAR_EPDIR_IN; + /* send after next SOF event */ + if ((sc->sc_last_frame_num & 1) == 0 && + td->ep_type == UE_ISOCHRONOUS) + hcchar |= HCCHAR_ODDFRM; + else + hcchar &= ~HCCHAR_ODDFRM; - /* send after next SOF event */ - if ((sc->sc_last_frame_num & 1) == 0 && - (td->ep_type == UE_INTERRUPT || td->ep_type == UE_ISOCHRONOUS)) - hcchar |= HCCHAR_ODDFRM; - else - hcchar &= ~HCCHAR_ODDFRM; + /* must enable before writing data to FIFO */ + DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(channel), hcchar); - /* must enable before writing data to FIFO */ - DWC_OTG_WRITE_4(sc, DOTG_HCCHAR(channel), hcchar); + if (count != 0) { + /* clear topmost word before copy */ + sc->sc_tx_bounce_buffer[(count - 1) / 4] = 0; - if (count != 0) { + /* copy out data */ + usbd_copy_out(td->pc, td->offset + td->tx_bytes, + sc->sc_tx_bounce_buffer, count); - /* clear topmost word before copy */ - sc->sc_tx_bounce_buffer[(count - 1) / 4] = 0; + /* transfer data into FIFO */ + bus_space_write_region_4(sc->sc_io_tag, sc->sc_io_hdl, + DOTG_DFIFO(channel), + sc->sc_tx_bounce_buffer, (count + 3) / 4); + } - /* copy out data */ - usbd_copy_out(td->pc, td->offset, - sc->sc_tx_bounce_buffer, count); - - /* transfer data into FIFO */ - bus_space_write_region_4(sc->sc_io_tag, sc->sc_io_hdl, - DOTG_DFIFO(channel), - sc->sc_tx_bounce_buffer, (count + 3) / 4); - } + /* store number of bytes transmitted */ + td->tx_bytes += count; - /* store number of bytes transmitted */ - td->tx_bytes = count; + /* store last packet index */ + td->npkt = x; + + /* check for last packet */ + if (count == rem_bytes) + break; + } goto busy; send_cpkt: @@ -1947,7 +1952,7 @@ send_cpkt: goto busy; } - channel = td->channel; + channel = td->channel[0]; td->hcsplt |= HCSPLT_COMPSPLT; td->state = DWC_CHAN_ST_WAIT_C_ANE; @@ -1962,7 +1967,7 @@ send_cpkt: /* receive complete split ASAP */ if ((sc->sc_last_frame_num & 1) != 0 && - (td->ep_type == UE_INTERRUPT || td->ep_type == UE_ISOCHRONOUS)) + td->ep_type == UE_ISOCHRONOUS) hcchar |= HCCHAR_ODDFRM; else hcchar &= ~HCCHAR_ODDFRM; @@ -2389,9 +2394,6 @@ dwc_otg_update_host_transfer_schedule_lo if ((td->hcchar & HCCHAR_EPDIR_IN) != 0) continue; - /* execute more frames */ - td->tmr_val = 0; - sc->sc_needsof = 1; if (td->hcsplt == 0 || td->tt_scheduled != 0) @@ -2423,9 +2425,6 @@ dwc_otg_update_host_transfer_schedule_lo if ((td->hcchar & HCCHAR_EPDIR_IN) == 0) continue; - /* execute more frames */ - td->tmr_val = 0; - sc->sc_needsof = 1; if (td->hcsplt == 0 || td->tt_scheduled != 0) @@ -2519,10 +2518,10 @@ dwc_otg_update_host_transfer_schedule_lo TAILQ_CONCAT(&head, &sc->sc_bus.intr_q.head, wait_entry); TAILQ_CONCAT(&sc->sc_bus.intr_q.head, &head, wait_entry); - /* put non-TT BULK transfers last */ + /* put non-TT non-ISOCHRONOUS transfers last */ TAILQ_FOREACH_SAFE(xfer, &sc->sc_bus.intr_q.head, wait_entry, xfer_next) { td = xfer->td_transfer_cache; - if (td == NULL || td->hcsplt != 0 || td->ep_type != UE_BULK) + if (td == NULL || td->hcsplt != 0 || td->ep_type == UE_ISOCHRONOUS) continue; TAILQ_REMOVE(&sc->sc_bus.intr_q.head, xfer, wait_entry); TAILQ_INSERT_TAIL(&head, xfer, wait_entry); @@ -2984,7 +2983,9 @@ dwc_otg_setup_standard_chain_sub(struct td->set_toggle = 0; td->got_short = 0; td->did_nak = 0; - td->channel = DWC_OTG_MAX_CHANNELS; + td->channel[0] = DWC_OTG_MAX_CHANNELS; + td->channel[1] = DWC_OTG_MAX_CHANNELS; + td->channel[2] = DWC_OTG_MAX_CHANNELS; td->state = 0; td->errcnt = 0; td->tt_scheduled = 0; @@ -3249,8 +3250,10 @@ dwc_otg_setup_standard_chain(struct usb_ td->tmr_val = sc->sc_tmr_val + ival; td->tmr_res = ival; } else if (td->ep_type == UE_ISOCHRONOUS) { - td->tmr_val = 0; td->tmr_res = 1; + td->tmr_val = sc->sc_last_frame_num; + if (td->hcchar & HCCHAR_EPDIR_IN) + td->tmr_val++; } else { td->tmr_val = 0; td->tmr_res = (uint8_t)sc->sc_last_frame_num; @@ -3260,10 +3263,8 @@ dwc_otg_setup_standard_chain(struct usb_ hcsplt = 0; if (td->ep_type == UE_INTERRUPT) { uint32_t ival; -#if 0 hcchar |= ((xfer->max_packet_count & 3) << HCCHAR_MC_SHIFT); -#endif ival = xfer->interval / DWC_OTG_HOST_TIMER_RATE; if (ival == 0) ival = 1; @@ -3274,8 +3275,11 @@ dwc_otg_setup_standard_chain(struct usb_ } else if (td->ep_type == UE_ISOCHRONOUS) { hcchar |= ((xfer->max_packet_count & 3) << HCCHAR_MC_SHIFT); - td->tmr_val = 0; td->tmr_res = 1 << usbd_xfer_get_fps_shift(xfer); + td->tmr_val = sc->sc_last_frame_num; + if (td->hcchar & HCCHAR_EPDIR_IN) + td->tmr_val += td->tmr_res; + } else { td->tmr_val = 0; td->tmr_res = (uint8_t)sc->sc_last_frame_num; @@ -3332,6 +3336,19 @@ dwc_otg_start_standard_chain(struct usb_ dwc_otg_xfer_do_fifo(sc, xfer); if (dwc_otg_xfer_do_complete_locked(sc, xfer)) goto done; + } else { + struct dwc_otg_td *td = xfer->td_transfer_cache; + if (td->ep_type == UE_ISOCHRONOUS && + (td->hcchar & HCCHAR_EPDIR_IN) == 0) { + /* + * Need to start ISOCHRONOUS OUT transfer ASAP + * because execution is delayed by one 125us + * microframe: + */ + dwc_otg_xfer_do_fifo(sc, xfer); + if (dwc_otg_xfer_do_complete_locked(sc, xfer)) + goto done; + } } /* put transfer on interrupt queue */ @@ -4725,6 +4742,9 @@ dwc_otg_xfer_setup(struct usb_setup_para /* init TD */ td->max_packet_size = xfer->max_packet_size; td->max_packet_count = xfer->max_packet_count; + /* range check */ + if (td->max_packet_count == 0 || td->max_packet_count > 3) + td->max_packet_count = 1; td->ep_no = ep_no; td->ep_type = ep_type; td->obj_next = last_obj; @@ -4763,12 +4783,13 @@ dwc_otg_ep_init(struct usb_device *udev, return; } } else { - if (udev->speed == USB_SPEED_HIGH) { - if ((UGETW(edesc->wMaxPacketSize) >> 11) & 3) { - /* high bandwidth endpoint - not tested */ - DPRINTF("High Bandwidth Endpoint - not tested\n"); - return; - } + if (udev->speed == USB_SPEED_HIGH && + (edesc->wMaxPacketSize[1] & 0x18) != 0 && + (edesc->bmAttributes & UE_XFERTYPE) != UE_ISOCHRONOUS) { + /* not supported */ + DPRINTFN(-1, "Non-isochronous high bandwidth " + "endpoint not supported\n"); + return; } } if ((edesc->bmAttributes & UE_XFERTYPE) == UE_ISOCHRONOUS) Modified: head/sys/dev/usb/controller/dwc_otg.h ============================================================================== --- head/sys/dev/usb/controller/dwc_otg.h Sat Aug 15 11:08:30 2015 (r286801) +++ head/sys/dev/usb/controller/dwc_otg.h Sat Aug 15 12:06:15 2015 (r286802) @@ -69,7 +69,7 @@ struct dwc_otg_td { uint8_t tmr_val; uint8_t ep_no; uint8_t ep_type; - uint8_t channel; + uint8_t channel[3]; uint8_t tt_index; /* TT data */ uint8_t tt_start_slot; /* TT data */ uint8_t tt_complete_slot; /* TT data */ @@ -80,8 +80,7 @@ struct dwc_otg_td { #define DWC_CHAN_ST_WAIT_S_ANE 2 #define DWC_CHAN_ST_WAIT_C_ANE 3 #define DWC_CHAN_ST_WAIT_C_PKT 4 -#define DWC_CHAN_ST_TX_PKT_ISOC 5 -#define DWC_CHAN_ST_TX_WAIT_ISOC 6 +#define DWC_CHAN_ST_TX_WAIT_ISOC 5 uint8_t error_any:1; uint8_t error_stall:1; uint8_t alt_next:1; From owner-svn-src-head@freebsd.org Sat Aug 15 12:55:06 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ED1529BA6B6; Sat, 15 Aug 2015 12:55:06 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DD40F1A22; Sat, 15 Aug 2015 12:55:06 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FCt6aP064025; Sat, 15 Aug 2015 12:55:06 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FCt6wg064023; Sat, 15 Aug 2015 12:55:06 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201508151255.t7FCt6wg064023@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sat, 15 Aug 2015 12:55:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286805 - head/share/misc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 12:55:07 -0000 Author: bapt Date: Sat Aug 15 12:55:06 2015 New Revision: 286805 URL: https://svnweb.freebsd.org/changeset/base/286805 Log: Update to use the latest version of the PCI IDs Repository. MFC after: 1 week Modified: head/share/misc/pci_vendors Modified: head/share/misc/pci_vendors ============================================================================== --- head/share/misc/pci_vendors Sat Aug 15 12:44:34 2015 (r286804) +++ head/share/misc/pci_vendors Sat Aug 15 12:55:06 2015 (r286805) @@ -3,8 +3,8 @@ # # List of PCI ID's # -# Version: 2012.10.24 -# Date: 2012-10-24 03:15:01 +# Version: 2015.07.31 +# Date: 2015-07-31 03:15:02 # # Maintained by Martin Mares and other volunteers from the # PCI ID Project at http://pci-ids.ucw.cz/. @@ -23,44 +23,23 @@ # device device_name <-- single tab # subvendor subdevice subsystem_name <-- two tabs -0000 Gammagraphx, Inc. (or missing ID) -0010 Allied Telesis, Inc +0010 Allied Telesis, Inc (Wrong ID) # This is a relabelled RTL-8139 8139 AT-2500TX V3 Ethernet -001a Ascend Communications, Inc. 001c PEAK-System Technik GmbH 0001 PCAN-PCI CAN-Bus controller 001c 0004 2 Channel CAN Bus SJC1000 001c 0005 2 Channel CAN Bus SJC1000 (Optically Isolated) -0033 Paradyne corp. 003d Lockheed Martin-Marietta Corp # Real TJN ID is e159, but they got it wrong several times --mj 0059 Tiger Jet Network Inc. (Wrong ID) 0070 Hauppauge computer works Inc. - 0003 WinTV PVR-250 - 0009 WinTV PVR-150 - 0801 WinTV PVR-150 - 0807 WinTV PVR-150 - 4000 WinTV PVR-350 - 4001 WinTV PVR-250 (v1) - 4009 WinTV PVR-250 - 4800 WinTV PVR-350 - 4801 WinTV PVR-250 MCE - 4803 WinTV PVR-250 - 7444 WinTV HVR-1600 7801 WinTV HVR-1800 MCE - 8003 WinTV PVR-150 - 8801 WinTV PVR-150 - c108 WinTV-HVR-4400-HD model 1278 - c801 WinTV PVR-150 - e807 WinTV PVR-500 MCE (1st tuner) - e817 WinTV PVR-500 MCE (2nd tuner) 0071 Nebula Electronics Ltd. 0095 Silicon Image, Inc. (Wrong ID) 0680 Ultra ATA/133 IDE RAID CONTROLLER CARD # Wrong ID used in subsystem ID of the TELES.S0/PCI 2.x ISDN adapter 00a7 Teles AG (Wrong ID) -00f5 BFG Technologies, Inc. 0100 Ncipher Corp Ltd 0123 General Dynamics # 018a is not LevelOne but there is a board misprogrammed @@ -70,72 +49,28 @@ 021b Compaq Computer Corporation 8139 HNE-300 (RealTek RTL8139c) [iPaq Networking] 0270 Hauppauge computer works Inc. (Wrong ID) -0291 Davicom Semiconductor, Inc. - 8212 DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40) # SpeedStream is Efficient Networks, Inc, a Siemens Company 02ac SpeedStream 1012 1012 PCMCIA 10/100 Ethernet Card [RTL81xx] -02e0 XFX Pine Group Inc 0303 Hewlett-Packard Company (Wrong ID) -0308 ZyXEL Communications Corporation +0308 ZyXEL Communications Corporation (Wrong ID) 0315 SK-Electronics Co., Ltd. -0357 TTTech AG +0357 TTTech Computertechnik AG (Wrong ID) 000a TTP-Monitoring Card V2.0 -036f Trigem Computer Inc. -0403 Future Technology Devices International Ltd 0432 SCM Microsystems, Inc. 0001 Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet] -0482 Kyocera -# vendor code used for (at a minimum) RSA cards -04b3 IBM Corp. - 4001 Remote System Administration device [RSA2] -050d Belkin -05a9 OmniVision - 8519 OV519 series -05e3 CyberDoor - 0701 CBD516 -066f SigmaTel - 3410 SMTP3410 - 3500 SMTP3500 0675 Dynalink 1700 IS64PH ISDN Adapter 1702 IS64PH ISDN Adapter 1703 ISDN Adapter (PCI Bus, DV, W) 1704 ISDN Adapter (PCI Bus, D, C) -069d Hughes Network Systems (HNS) 0721 Sapphire, Inc. 0777 Ubiquiti Networks, Inc. -# Atheros, 6th Generation, AR5414, 802.11a, 5GHz - 3005 XtremeRange5 0795 Wired Inc. 6663 Butane II (MPEG2 encoder board) 6666 MediaPress (MPEG2 encoder board) -07ca AVerMedia Technologies Inc. -# Expresscard DVB-T tuner sold by Fujitsu for notebooks - 534a Slim mobile Express DVB-T (Fujitsu) - a301 AVerTV 301 - b808 AVerTV DVB-T Volar (USB 2.0) -07d0 ITT Geospatial Systems 07d1 D-Link System Inc -07e2 ELMEG Communication Systems GmbH -0842 NPG, Personal Grand Technology -# Nee Gemplus International, SA -08e6 Gemalto NV -08ff AuthenTec - afe4 [Anchor] AF-S2 FingerLoc Sensor Module 0925 VIA Technologies, Inc. (Wrong ID) - 1234 VT82C686/A/B USB Controller -093a PixArt Imaging Inc. - 010e Innovage Mini Digital Camera - 010f SDC-300 Webcam - 020f Digital Photo Viewer - 2468 CIF Single Chip - 2600 PAC7311 - 2603 Philips Webcam SPC500NC - 2608 Maxell MaxCam RotaWeb - 2620 C3 Tech Mod. 153 -09c1 Arris - 0704 CM 200E Cable Modem 0a89 BREA Technologies Inc 0b0b Rhino Equipment Corp. 0105 Rhino R1T1 @@ -152,9 +87,6 @@ 0905 R1T3 Single T3 Digital Telephony Card 0906 RCB24FXX 24-channel modular analog telphony card 0a06 RCB672FXX 672-channel modular analog telphony card -0b3d Brontes Technologies -0ccd TerraTec Electronic GmbH - 0038 Cinergy T^2 DVB-T Receiver 0e11 Compaq Computer Corporation 0001 PCI to EISA Bridge 0002 PCI to ISA Bridge @@ -262,7 +194,6 @@ c000 Remote Insight Lights-Out Edition f130 NetFlex-3/P ThunderLAN 1.0 f150 NetFlex-3/P ThunderLAN 2.3 -0e21 Cowon Systems, Inc. 0e55 HaSoTec GmbH 0eac SHF Communication Technologies AG 0008 Ethernet Powerlink Managing Node 01 @@ -328,6 +259,7 @@ 4c53 1300 P017 mezzanine (32-bit PMC) 4c53 1310 P017 mezzanine (64-bit PMC) 002f MegaRAID SAS 2208 IOV [Thunderbolt] + 1028 1f39 SPERC8-e 1028 1f3e SPERC 8 0030 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI 0e11 00da ProLiant ML 350 @@ -381,8 +313,23 @@ 005b MegaRAID SAS 2208 [Thunderbolt] 1000 9265 MegaRAID SAS 9265-8i 1000 9266 MegaRAID SAS 9266-8i + 1000 9267 MegaRAID SAS 9267-8i 1000 9268 MegaRAID SAS 9265CV-8i / 9270CV-8i + 1000 9269 MegaRAID SAS 9266-4i + 1000 9270 MegaRAID SAS 9270-8i + 1000 9271 MegaRAID SAS 9271-8i + 1000 9272 MegaRAID SAS 9272-8i + 1000 9273 MegaRAID SAS 9270CV-8i + 1000 9274 MegaRAID SAS 9270-4i + 1000 9275 MegaRAID SAS 9271-8iCC + 1000 9276 MegaRAID SAS 9271-4i + 1000 9285 MegaRAID SAS 9285-8e + 1000 9288 MegaRAID SAS 9285CV-8e + 1000 9290 MegaRAID SAS 9286-8e + 1000 9291 MegaRAID SAS 9286CV-8e + 1000 9295 MegaRAID SAS 9286CV-8eCC 1014 040b ServeRAID M5110 SAS/SATA Controller + 1014 040c ServeRAID M5120 SAS/SATA Controller 1014 0412 ServeRAID M5110e SAS/SATA Controller 1028 1f2d PERC H810 Adapter 1028 1f30 PERC H710 Embedded @@ -392,11 +339,31 @@ 1028 1f35 PERC H710 Adapter 1028 1f37 PERC H710 Mini (for blades) 1028 1f38 PERC H710 Mini (for monolithics) + 15d9 0690 LSI MegaRAID ROMB + 8086 3510 RMS25PB080 RAID Controller 8086 3513 RMS25CB080 RAID Controller 005c SAS1064A PCI-X Fusion-MPT SAS 005d MegaRAID SAS-3 3108 [Invader] + 1000 9361 MegaRAID SAS 9361-8i + 1028 1f41 PERC H830 Adapter + 1028 1f42 PERC H730P Adapter + 1028 1f43 PERC H730 Adapter + 1028 1f47 PERC H730P Mini + 1028 1f48 PERC H730P Mini (for blades) + 1028 1f49 PERC H730 Mini + 1028 1f4a PERC H730 Mini (for blades) + 1028 1f4d PERC FD33xS + 1028 1f4f PERC H730P Slim + 1028 1f54 PERC FD33xD + 17aa 1052 ThinkServer RAID 720i + 17aa 1053 ThinkServer RAID 720ix 005e SAS1066 PCI-X Fusion-MPT SAS 005f MegaRAID SAS-3 3008 [Fury] + 1028 1f44 PERC H330 Adapter + 1028 1f4b PERC H330 Mini + 1028 1f4c PERC H330 Mini (for blades) + 1028 1f4d PERC H330 Embedded (for monolithic) + 1054 306a SAS 3004 iMR ROMB 0060 MegaRAID SAS 1078 1000 1006 MegaRAID SAS 8888ELP 1000 100a MegaRAID SAS 8708ELP @@ -460,8 +427,11 @@ 1137 0073 2008 ROMB 1137 00b0 UCSC RAID SAS 2008M-8i 1137 00b1 UCSC RAID SAS 2008M-8i + 1137 00c2 UCS E-Series Double Wide + 1137 00c3 UCS E-Series Single Wide 15d9 0400 Supermicro SMC2008-iMR 1734 1177 RAID Ctrl SAS 6G 0/1 (D2607) + 17aa 1051 ThinkServer RAID 510i 8086 350d RMS2AF040 RAID Controller 8086 9240 RAID Controller RS2WC080 8086 9241 RAID Controller RS2WC040 @@ -522,6 +492,8 @@ 0095 SAS3108 PCI-Express Fusion-MPT SAS-3 0096 SAS3004 PCI-Express Fusion-MPT SAS-3 0097 SAS3008 PCI-Express Fusion-MPT SAS-3 + 1028 1f45 12GB/s HBA internal + 1028 1f46 12Gbps HBA 0407 MegaRAID 1000 0530 MegaRAID 530 SCSI 320-0X RAID Controller 1000 0531 MegaRAID 531 SCSI 320-4X RAID Controller @@ -605,6 +577,7 @@ 1028 0533 PowerEdge Expandable RAID Controller 4/QC 8086 0520 MegaRAID RAID Controller SRCU41L 8086 0523 MegaRAID RAID Controller SRCS16 + 3050 SAS2008 PCI-Express Fusion-MPT SAS-2 6001 DX1 Multiformat Broadcast HD/SD Encoder/Decoder 1001 Kolter Electronic 0010 PCI 1616 Measurement card with 32 digital I/O lines @@ -616,91 +589,112 @@ 0016 PCI-MFB Analogue I/O board 0017 PROTO-3 PCI Prototyping board 9100 INI-9100/9100W SCSI Host -# nee ATI Technologies Inc. -1002 Advanced Micro Devices [AMD] nee ATI - 1314 Wrestler HDMI Audio [Radeon HD 6250/6310] - 174b 1001 Sapphire PURE Fusion Mini +# nee ATI Technologies, Inc. +1002 Advanced Micro Devices, Inc. [AMD/ATI] + 1304 Kaveri + 1305 Kaveri + 1306 Kaveri + 1307 Kaveri + 1308 Kaveri HDMI/DP Audio Controller + 1309 Kaveri [Radeon R6/R7 Graphics] + 130a Kaveri [Radeon R6 Graphics] + 130b Kaveri [Radeon R4 Graphics] + 130c Kaveri [Radeon R7 Graphics] + 130d Kaveri [Radeon R6 Graphics] + 130e Kaveri [Radeon R5 Graphics] + 130f Kaveri [Radeon R7 Graphics] + 1310 Kaveri + 1311 Kaveri + 1312 Kaveri + 1313 Kaveri [Radeon R7 Graphics] + 1314 Wrestler HDMI Audio + 174b 1001 PURE Fusion Mini + 1315 Kaveri [Radeon R5 Graphics] + 1316 Kaveri [Radeon R5 Graphics] + 1317 Kaveri + 1318 Kaveri [Radeon R5 Graphics] + 131b Kaveri [Radeon R4 Graphics] + 131c Kaveri [Radeon R7 Graphics] + 131d Kaveri [Radeon R6 Graphics] 1714 BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series] 103c 168b ProBook 4535s - 3150 M24 1P [Radeon Mobility X600] + 3150 RV380/M24 [Mobility Radeon X600] 103c 0934 nx8220 - 3151 M24 [FireMV 2400] - 3152 RV370 [Mobility Radeon X300] - 3154 M24GL [Mobility FireGL V3200] - 3171 M24 [FireMV 2400] (Secondary) - 3e50 RV380 0x3e50 [Radeon X600] - 3e54 RV380 0x3e54 [FireGL V3200] + 3151 RV380 GL [FireMV 2400] + 3152 RV370/M22 [Mobility Radeon X300] + 3154 RV380/M24 GL [Mobility FireGL V3200] + 3155 RV380 GL [FireMV 2400] + 3171 RV380 GL [FireMV 2400] (Secondary) + 3e50 RV380 [Radeon X600] + 3e54 RV380 GL [FireGL V3200] 3e70 RV380 [Radeon X600] (Secondary) - 4136 RS100 [Radeon IGP320(M)] - 4137 RS200 [Radeon IGP330/340/350] - 4144 R300 AD [Radeon 9500 Pro] - 4145 R300 AE [Radeon 9700 Pro] - 4146 R300 AF [Radeon 9700 Pro] - 4147 R300 AG [FireGL Z1/X1] - 4148 R350 AH [Radeon 9800] - 4149 R350 AI [Radeon 9800] - 414a R350 AJ [Radeon 9800] - 414b R350 AK [FireGL X2] - 4150 RV350 AP [Radeon 9600] + 4136 RS100 [Mobility IGP 320M] + 4137 RS200 [Radeon IGP 340] + 4144 R300 [Radeon 9500] + 4146 R300 [Radeon 9700 PRO] + 4147 R300 GL [FireGL Z1] + 4148 R350 [Radeon 9800/9800 SE] + 4150 RV350 [Radeon 9550/9600/X1050 Series] 1002 0002 R9600 Pro primary (Asus OEM for HP) 1002 0003 R9600 Pro secondary (Asus OEM for HP) 1002 4722 All-in-Wonder 2006 AGP Edition - 1458 4024 Giga-Byte GV-R96128D (Primary) - 148c 2064 PowerColor R96A-C3N - 148c 2066 PowerColor R96A-C3N - 174b 7c19 Sapphire Atlantis Radeon 9600 Pro - 174b 7c29 GC-R9600PRO [Sapphire] (Primary) + 1458 4024 GV-R96128D + 148c 2064 R96A-C3N + 148c 2066 R96A-C3N + 174b 7c19 Atlantis Radeon 9600 Pro + 174b 7c29 GC-R9600PRO 17ee 2002 Radeon 9600 256Mb Primary 18bc 0101 GC-R9600PRO (Primary) - 4151 RV350 AQ [Radeon 9600] + 4151 RV350 [Radeon 9600 Series] 1043 c004 A9600SE - 4152 RV350 AR [Radeon 9600] + 174b 7c37 Radeon 9600 SE + 4152 RV360 [Radeon 9600/X1050 Series] 1002 0002 Radeon 9600XT 1002 4772 All-in-Wonder 9600 XT 1043 c002 Radeon 9600 XT TVD 1043 c01a A9600XT/TD - 174b 7c29 Sapphire Radeon 9600XT + 1462 9510 RX9600XT (MS-8951) + 174b 7c29 Radeon 9600XT 1787 4002 Radeon 9600 XT - 4153 RV350 AS [Radeon 9550] + 4153 RV350 [Radeon 9550] 1043 010c A9550GE/TD 1462 932c RX9550SE-TD128 (MS-8932) - 4154 RV350 AT [FireGL T2] - 4155 RV350 AU [FireGL T2] - 4156 RV350 AV [FireGL T2] - 4157 RV350 AW [FireGL T2] - 4158 68800AX [Mach32] - 4164 R300 AD [Radeon 9500 Pro] (Secondary) - 4165 R300 AE [Radeon 9700 Pro] (Secondary) - 4166 R300 AF [Radeon 9700 Pro] (Secondary) - 4168 R350 [Radeon 9800] (Secondary) - 4170 RV350 AP [Radeon 9600] (Secondary) + 4154 RV350 GL [FireGL T2] + 4155 RV350 [Radeon 9600] + 4157 RV350 GL [FireGL T2] + 4158 68800AX [Graphics Ultra Pro PCI] + 4164 R300 [Radeon 9500 PRO] (Secondary) + 4165 R300 [Radeon 9700 PRO] (Secondary) + 4166 R300 [Radeon 9700 PRO] (Secondary) + 4168 RV350 [Radeon 9800 SE] (Secondary) + 4170 RV350 [Radeon 9550/9600/X1050 Series] (Secondary) 1002 0003 R9600 Pro secondary (Asus OEM for HP) 1002 4723 All-in-Wonder 2006 AGP Edition (Secondary) - 1458 4025 Giga-Byte GV-R96128D (Secondary) - 148c 2067 PowerColor R96A-C3N (Secondary) - 174b 7c28 GC-R9600PRO [Sapphire] (Secondary) + 1458 4025 GV-R96128D (Secondary) + 148c 2067 R96A-C3N (Secondary) + 174b 7c28 GC-R9600PRO (Secondary) 17ee 2003 Radeon 9600 256Mb (Secondary) 18bc 0100 GC-R9600PRO (Secondary) - 4171 RV350 AQ [Radeon 9600] (Secondary) + 4171 RV350 [Radeon 9600] (Secondary) 1043 c005 A9600SE (Secondary) - 4172 RV350 AR [Radeon 9600] (Secondary) + 174b 7c36 Radeon 9600 SE (secondary) + 4172 RV350 [Radeon 9600/X1050 Series] (Secondary) 1002 0003 Radeon 9600XT (Secondary) 1002 4773 All-in-Wonder 9600 XT (Secondary) 1043 c003 A9600XT (Secondary) 1043 c01b A9600XT/TD (Secondary) - 174b 7c28 Sapphire Radeon 9600XT (Secondary) + 174b 7c28 Radeon 9600XT (Secondary) 1787 4003 Radeon 9600 XT (Secondary) - 4173 RV350 AS [Radeon 9550] (Secondary) + 4173 RV350 [Radeon 9550] (Secondary) 1043 010d A9550GE/TD (Secondary) - 4237 RS250 [Radeon Mobility 7000 IGP] - 4242 R200 BB [Radeon All in Wonder 8500DV] + 4242 R200 [All-In-Wonder Radeon 8500 DV] 1002 02aa Radeon 8500 AIW DV Edition - 4243 R200 BC [Radeon All in Wonder 8500] - 4336 RS100 [Radeon IGP320M] + 4243 R200 PCI Bridge [All-in-Wonder Radeon 8500DV] + 4336 RS100 [Radeon IGP 320M] 1002 4336 Pavilion ze4300 ATI Radeon Mobility U1 (IGP 320 M) 103c 0024 Pavilion ze4400 builtin Video 161f 2029 eMachines M5312 builtin Video - 4337 RS200 [Radeon IGP330M/340M/350M] + 4337 RS200M [Radeon IGP 330M/340M/345M/350M] 1014 053a ThinkPad R40e 103c 0850 Radeon IGP 345M 4341 IXP150 AC'97 Audio Controller @@ -711,7 +705,7 @@ 4349 Dual Channel Bus Master PCI IDE Controller 434d IXP AC'97 Modem 4353 SMBus - 4354 215CT [Mach64 CT] + 4354 215CT [Mach64 CT PCI] 4358 210888CX [Mach64 CX] 4361 IXP SB300 AC'97 Audio Controller 4363 SMBus @@ -724,36 +718,36 @@ 105b 0c81 Realtek ALC 653 107b 0300 MX6421 1462 0131 MS-1013 Notebook - 4371 IXP SB400 PCI-PCI Bridge + 4371 IXP SB4x0 PCI-PCI Bridge 103c 308b MX6125 1462 7217 Aspire L250 - 4372 IXP SB400 SMBus Controller + 4372 IXP SB4x0 SMBus Controller 1025 0080 Aspire 5024WLMMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 0131 MS-1013 Notebook 1462 7217 Aspire L250 - 4373 IXP SB400 USB2 Host Controller + 4373 IXP SB4x0 USB2 Host Controller 1025 0080 Aspire 5024WLMMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 7217 Aspire L250 - 4374 IXP SB400 USB Host Controller + 4374 IXP SB4x0 USB Host Controller 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 7217 Aspire L250 - 4375 IXP SB400 USB Host Controller + 4375 IXP SB4x0 USB Host Controller 1025 0080 Aspire 5024WLMMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 7217 Aspire L250 - 4376 IXP SB400 IDE Controller + 4376 IXP SB4x0 IDE Controller 1025 0080 Aspire 5024WLMMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 0131 MS-1013 Notebook 1462 7217 Aspire L250 - 4377 IXP SB400 PCI-ISA Bridge + 4377 IXP SB4x0 PCI-ISA Bridge 1025 0080 Aspire 5024WLMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 @@ -762,7 +756,7 @@ 1025 0080 Aspire 5024WLMMi 103c 308b MX6125 1462 0131 MS-1013 Notebook - 4379 IXP SB400 Serial ATA Controller + 4379 IXP SB4x0 Serial ATA Controller 1462 7141 Aspire L250 437a IXP SB400 Serial ATA Controller 1002 4379 4379 Serial ATA Controller @@ -780,9 +774,10 @@ 1458 b005 Gigabyte GA-MA69G-S3H Motherboard 1462 7327 K9AG Neo2 17f2 5999 KI690-AM2 Motherboard - 4381 SB400 SATA Controller (RAID 5 mode) + 4381 SB600 SATA Controller (RAID 5 mode) 4382 SB600 AC97 Audio 4383 SBx00 Azalia (Intel HDA) + 1019 2120 A785GM-M 103c 1611 Pavilion DM1Z-3000 103c 280a DC5750 Microtower 1043 8230 M3A78-EH Motherboard @@ -794,6 +789,7 @@ 17f2 5000 KI690-AM2 Motherboard 4384 SBx00 PCI to PCI Bridge 4385 SBx00 SMBus Controller + 1019 2120 A785GM-M 103c 1611 Pavilion DM1Z-3000 103c 280a DC5750 Microtower 1043 82ef M3A78-EH Motherboard @@ -802,7 +798,7 @@ 1458 4385 GA-MA770-DS3rev2.0 Motherboard 1462 7368 K9AG Neo2 15d9 a811 H8DGU - 174b 1001 Sapphire PURE Fusion Mini + 174b 1001 PURE Fusion Mini 17f2 5000 KI690-AM2 Motherboard 4386 SB600 USB Controller (EHCI) 103c 280a DC5750 Microtower @@ -855,45 +851,51 @@ 103c 1611 Pavilion DM1Z-3000 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO - 174b 1001 Sapphire PURE Fusion Mini + 174b 1001 PURE Fusion Mini 4392 SB7x0/SB8x0/SB9x0 SATA Controller [Non-RAID5 mode] 4393 SB7x0/SB8x0/SB9x0 SATA Controller [RAID5 mode] 4394 SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] 4395 SB8x0/SB9x0 SATA Controller [Storage mode] 4396 SB7x0/SB8x0/SB9x0 USB EHCI Controller + 1019 2120 A785GM-M 103c 1611 Pavilion DM1Z-3000 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO 15d9 a811 H8DGU - 174b 1001 Sapphire PURE Fusion Mini + 174b 1001 PURE Fusion Mini 4397 SB7x0/SB8x0/SB9x0 USB OHCI0 Controller + 1019 2120 A785GM-M 103c 1611 Pavilion DM1Z-3000 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO 15d9 a811 H8DGU - 174b 1001 Sapphire PURE Fusion Mini + 174b 1001 PURE Fusion Mini 4398 SB7x0 USB OHCI1 Controller + 1019 2120 A785GM-M 1043 82ef M3A78-EH Motherboard 15d9 a811 H8DGU 4399 SB7x0/SB8x0/SB9x0 USB OHCI2 Controller + 1019 2120 A785GM-M 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO - 174b 1001 Sapphire PURE Fusion Mini + 174b 1001 PURE Fusion Mini 439c SB7x0/SB8x0/SB9x0 IDE Controller + 1019 2120 A785GM-M 1043 82ef M3A78-EH Motherboard 439d SB7x0/SB8x0/SB9x0 LPC host controller + 1019 2120 A785GM-M 103c 1611 Pavilion DM1Z-3000 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO - 174b 1001 Sapphire PURE Fusion Mini + 174b 1001 PURE Fusion Mini 43a0 SB700/SB800/SB900 PCI to PCI bridge (PCIE port 0) 43a1 SB700/SB800/SB900 PCI to PCI bridge (PCIE port 1) 43a2 SB900 PCI to PCI bridge (PCIE port 2) 43a3 SB900 PCI to PCI bridge (PCIE port 3) - 4437 RS250 [Radeon Mobility 7000 IGP] + 4437 RS250 [Mobility Radeon 7000 IGP] 4554 210888ET [Mach64 ET] 4654 Mach64 VT - 4742 3D Rage Pro AGP 1X/2X + 4742 3D Rage PRO AGP 2X 1002 0040 Rage Pro Turbo AGP 2X 1002 0044 Rage Pro Turbo AGP 2X 1002 0061 Rage Pro AIW AGP 2X @@ -909,14 +911,12 @@ 1028 c082 Rage Pro Turbo AGP 2X 8086 4152 Xpert 98D AGP 2X 8086 464a Rage Pro Turbo AGP 2X - 4744 3D Rage Pro AGP 1X + 4744 3D Rage PRO AGP 1X 1002 4744 Rage Pro Turbo AGP 8086 4d55 Rage 3D Pro AGP 1X [Intel MU440EX] - 4747 3D Rage Pro - 4749 3D Rage Pro + 4749 3D Rage PRO PCI 1002 0061 Rage Pro AIW 1002 0062 Rage Pro AIW - 474c Rage XC 474d Rage XL AGP 2X 1002 0004 Xpert 98 RXL AGP 2X 1002 0008 Xpert 98 RXL AGP 2X @@ -929,14 +929,13 @@ 474f Rage XL 1002 0008 Rage XL 1002 474f Rage XL - 4750 3D Rage Pro 215GP + 4750 3D Rage Pro PCI 1002 0040 Rage Pro Turbo 1002 0044 Rage Pro Turbo 1002 0080 Rage Pro Turbo 1002 0084 Rage Pro Turbo 1002 4750 Rage Pro Turbo - 4751 3D Rage Pro 215GQ - 4752 Rage XL + 4752 Rage XL PCI 0e11 001e Proliant Rage XL 1002 0008 Rage XL 1002 4752 Proliant Rage XL @@ -949,16 +948,18 @@ 1028 014a PowerEdge 1750 1028 0165 PowerEdge 750 103c 10e1 NetServer Rage XL + 103c 3208 ProLiant DL140 G2 107b 6400 6400 Server 1734 007a PRIMERGY RX/TX series onboard VGA + 1734 1073 Primergy Econel 200 D2020 mainboard 8086 3411 SDS2 Mainboard 8086 3427 S875WP1-E mainboard 8086 5744 S845WD1-E mainboard 4753 Rage XC 1002 4753 Rage XC - 4754 3D Rage I/II 215GT [Mach64 GT] - 4755 3D Rage II+ 215GTB [Mach64 GTB] - 4756 3D Rage IIC 215IIC [Mach64 GT IIC] + 4754 3D Rage II/II+ PCI [Mach64 GT] + 4755 Mach64 GTB [3D Rage II+ DVD] + 4756 3D Rage IIC PCI [Mach64 GT IIC] 1002 4756 Rage IIC 4757 3D Rage IIC AGP 1002 4757 Rage IIC AGP @@ -967,49 +968,44 @@ 1028 4082 Rage 3D IIC 1028 8082 Rage 3D IIC 1028 c082 Rage 3D IIC - 4758 210888GX [Mach64 GX] - 4759 3D Rage IIC + 4758 210888GX [Mach64 GX PCI] + 4759 3D Rage IIC PCI 475a 3D Rage IIC AGP 1002 0084 Rage 3D Pro AGP 2x XPERT 98 1002 0087 Rage 3D IIC 1002 475a Rage IIC AGP - 4964 RV250 Id [Radeon 9000] - 4965 RV250 Ie [Radeon 9000] - 4966 R250 If [Radeon 9000] + 4966 RV250 [Radeon 9000 Series] 10f1 0002 RV250 If [Tachyon G9000 PRO] 148c 2039 RV250 If [Radeon 9000 Pro "Evil Commando"] 1509 9a00 RV250 If [Radeon 9000 "AT009"] 1681 0040 RV250 If [3D prophet 9000] - 174b 7176 RV250 If [Sapphire Radeon 9000 Pro] + 174b 7176 Radeon 9000 Pro 174b 7192 RV250 If [Radeon 9000 "Atlantis"] 17af 2005 RV250 If [Excalibur Radeon 9000 Pro] 17af 2006 RV250 If [Excalibur Radeon 9000] - 4967 RV250 Ig [Radeon 9000] 496e RV250 [Radeon 9000] (Secondary) - 4a48 R420 JH [Radeon X800] - 4a49 R420 JI [Radeon X800PRO] - 4a4a R420 JJ [Radeon X800SE] - 4a4b R420 JK [Radeon X800] - 4a4c R420 JL [Radeon X800] - 4a4d R420 JM [FireGL X3] - 4a4e R420 JN [Mobility Radeon 9800] - 4a4f R420 [Radeon X800 AGP] - 4a50 R420 JP [Radeon X800XT] - 4a54 R420 [Radeon X800 VE] + 4a49 R420 [Radeon X800 PRO/GTO AGP] + 174b 2620 R420 [Radeon X800 GTO AGP] + 4a4a R420 [Radeon X800 GT AGP] + 4a4b R420 [Radeon X800 AGP Series] + 4a4d R420 GL [FireGL X3-256] + 4a4e RV420/M18 [Mobility Radeon 9800] + 4a4f R420 [Radeon X850 AGP] + 4a50 R420 [Radeon X800 XT Platinum Edition AGP] + 4a54 R420 [Radeon X800 VE AGP] + 1002 4422 All-In-Wonder X800 VE AGP 4a69 R420 [Radeon X800 PRO/GTO] (Secondary) 4a6a R420 [Radeon X800] (Secondary) - 4a6b R420 [Radeon X800] (Secondary) - 4a70 R420 [X800XT-PE] (Secondary) + 4a6b R420 [Radeon X800 XT AGP] (Secondary) + 4a70 R420 [Radeon X800 XT Platinum Edition AGP] (Secondary) 4a74 R420 [Radeon X800 VE] (Secondary) - 4b48 R481 [Radeon X850 PCIe] - 4b49 R480 [Radeon X850XT] - 4b4a R480 [Radeon X850SE AGP] - 4b4b R480 [Radeon X850Pro] - 4b4c R481 [Radeon X850XT-PE] - 4b69 R480 [Radeon X850XT] (Secondary) - 4b6b R480 [Radeon X850Pro] (Secondary) - 4b6c R481 [Radeon X850XT-PE] (Secondary) - 4c42 3D Rage LT Pro AGP-133 + 4b49 R481 [Radeon X850 XT AGP] + 4b4b R481 [Radeon X850 PRO AGP] + 4b4c R481 [Radeon X850 XT Platinum Edition AGP] + 4b69 R481 [Radeon X850 XT AGP] (Secondary) + 4b6b R481 [Radeon X850 PRO AGP] (Secondary) + 4b6c R481 [Radeon X850 XT Platinum Edition AGP] (Secondary) + 4c42 3D Rage LT PRO AGP 2X 0e11 b0e7 Rage LT Pro (Compaq Presario 5240) 0e11 b0e8 Rage 3D LT Pro 0e11 b10e 3D Rage LT Pro (Compaq Armada 1750) @@ -1018,19 +1014,17 @@ 1002 4c42 Rage LT Pro AGP 2X 1002 8001 Rage LT Pro AGP 2X 1028 0085 Rage 3D LT Pro - 4c44 3D Rage LT Pro AGP-66 - 4c45 Rage Mobility M3 AGP - 4c46 Rage Mobility M3 AGP 2x + 4c46 Rage Mobility 128 AGP 2X/Mobility M3 1002 0155 IBM Thinkpad A22p 1014 0155 IBM Thinkpad A22p 1028 00b1 Latitude C600 - 4c47 3D Rage LT-G 215LG - 4c49 3D Rage LT Pro + 4c47 3D Rage IIC PCI / Mobility Radeon 7500/7500C + 4c49 3D Rage LT PRO PCI 1002 0004 Rage LT Pro 1002 0040 Rage LT Pro 1002 0044 Rage LT Pro 1002 4c49 Rage LT Pro - 4c4d Rage Mobility P/M AGP 2x + 4c4d Rage Mobility AGP 2x Series 0e11 b111 Armada M700 0e11 b160 Armada E500 1002 0084 Xpert 98 AGP 2X (Mobility) @@ -1039,23 +1033,20 @@ 1028 00bb Latitude CPx 1179 ff00 Satellite 1715XCDS laptop 13bd 1019 PC-AR10 - 4c4e Rage Mobility L AGP 2x - 4c50 3D Rage LT Pro + 4c50 3D Rage LT PRO PCI 1002 4c50 Rage LT Pro - 4c51 3D Rage LT Pro - 4c52 Rage Mobility P/M + 4c52 Rage Mobility-M1 PCI 1033 8112 Versa Note VXi - 4c53 Rage Mobility L 4c54 264LT [Mach64 LT] - 4c57 RV200 [Mobility Radeon 7500] + 4c57 RV200/M7 [Mobility Radeon 7500] 1014 0517 ThinkPad T30 - 1014 0530 ThinkPad T42 2373-4WU + 1014 0530 ThinkPad T4x Series 1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100) 1028 012a Latitude C640 1043 1622 Mobility Radeon M7 (L3C/S) 144d c006 Radeon Mobility M7 LW in vpr Matrix 170B4 - 4c58 Radeon RV200 LX [Mobility FireGL 7800 M7] - 4c59 RV100 LY [Mobility Radeon 7000] + 4c58 RV200/M7 GL [Mobility FireGL 7800] + 4c59 RV100/M6 [Rage/Radeon Mobility Series] 0e11 b111 Evo N600c 1014 0235 ThinkPad A30/A30p (2652/2653) 1014 0239 ThinkPad X22/X23/X24 @@ -1063,66 +1054,56 @@ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 104d 8140 PCG-Z1SP laptop 1509 1930 Medion MD9703 - 4c5a RV100 LZ [Mobility Radeon 7000] - 4c64 Radeon RV250 Ld [Radeon Mobility 9000 M9] - 4c65 Radeon RV250 Le [Radeon Mobility 9000 M9] - 4c66 Radeon RV250 [Mobility FireGL 9000] + 4c66 RV250/M9 GL [Mobility FireGL 9000/Radeon 9000] 1014 054d ThinkPad T41 - 4c67 Radeon RV250 Lg [Radeon Mobility 9000 M9] -# Secondary chip to the Lf - 4c6e Radeon RV250 Ln [Radeon Mobility 9000 M9] (Secondary) - 4d46 Rage Mobility M4 AGP - 4d4c Rage Mobility M4 AGP + 4c6e RV250/M9 [Mobility Radeon 9000] (Secondary) + 4d46 Rage Mobility 128 AGP 4X/Mobility M4 4d52 Theater 550 PRO PCI [ATI TV Wonder 550] 4d53 Theater 550 PRO PCIe - 4e44 Radeon R300 ND [Radeon 9700 Pro] + 4e44 R300 [Radeon 9700/9700 PRO] 1002 515e Radeon ES1000 1002 5965 Radeon ES1000 - 4e45 Radeon R300 NE [Radeon 9500 Pro] + 4e45 R300 [Radeon 9500 PRO/9700] 1002 0002 Radeon R300 NE [Radeon 9500 Pro] 1681 0002 Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] - 4e46 R300 NF [Radeon 9600 TX] - 4e47 Radeon R300 NG [FireGL X1] - 4e48 Radeon R350 [Radeon 9800 Pro] - 4e49 Radeon R350 [Radeon 9800] - 4e4a R360 NJ [Radeon 9800 XT] + 4e46 R300 [Radeon 9600 TX] + 4e47 R300 GL [FireGL X1] + 4e48 R350 [Radeon 9800 Series] + 4e49 R350 [Radeon 9800] + 4e4a R360 [Radeon 9800 XXL/XT] 1002 4e4a R360 [Radeon 9800 XT] - 4e4b R350 NK [FireGL X2] - 4e50 RV350 [Mobility Radeon 9600 M10] + 4e4b R350 GL [FireGL X2 AGP Pro] + 4e50 RV350/M10 / RV360/M11 [Mobility Radeon 9600 (PRO) / 9700] 1025 005a TravelMate 290 + 1025 0064 Extensa 3000 series laptop: ATI RV360/M11 [Mobility Radeon 9700] 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 144d c00c P35 notebook 1462 0311 MSI M510A 1734 1055 Amilo M1420W - 4e51 RV350 NQ [Mobility Radeon 9600] - 4e52 RV350 [Mobility Radeon 9600 M10] + 4e51 RV350 [Radeon 9550/9600/X1050 Series] + 4e52 RV350/M10 [Mobility Radeon 9500/9700 SE] 144d c00c P35 notebook - 4e53 RV350 NS [Mobility Radeon 9600] - 4e54 M10 NT [FireGL Mobility T2] - 4e56 M11 NV [FireGL Mobility T2e] - 4e64 Radeon R300 [Radeon 9700 Pro] (Secondary) - 4e65 Radeon R300 [Radeon 9500 Pro] (Secondary) + 4e54 RV350/M10 GL [Mobility FireGL T2] + 4e56 RV360/M12 [Mobility Radeon 9550] + 4e64 R300 [Radeon 9700 PRO] (Secondary) + 4e65 R300 [Radeon 9500 PRO] (Secondary) 1002 0003 Radeon R300 NE [Radeon 9500 Pro] 1681 0003 Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] (Secondary) - 4e66 RV350 NF [Radeon 9600] (Secondary) - 4e67 Radeon R300 [FireGL X1] (Secondary) - 4e68 Radeon R350 [Radeon 9800 Pro] (Secondary) - 4e69 Radeon R350 [Radeon 9800] (Secondary) - 4e6a RV350 NJ [Radeon 9800 XT] (Secondary) + 4e66 RV350 [Radeon 9600] (Secondary) + 4e67 R300 GL [FireGL X1] (Secondary) + 4e68 R350 [Radeon 9800 PRO] (Secondary) + 4e69 R350 [Radeon 9800] (Secondary) + 4e6a RV350 [Radeon 9800 XT] (Secondary) 1002 4e6a R360 [Radeon 9800 XT] (Secondary) 1002 4e71 M10 NQ [Radeon Mobility 9600] - 4e71 M10 NQ [Radeon Mobility 9600] (Secondary) + 4e71 RV350/M10 [Mobility Radeon 9600] (Secondary) 4f72 RV250 [Radeon 9000 Series] - 4f73 Radeon RV250 [Radeon 9000 Series] (Secondary) - 5041 Rage 128 PA/PRO - 5042 Rage 128 PB/PRO AGP 2x - 5043 Rage 128 PC/PRO AGP 4x - 5044 Rage 128 PD/PRO TMDS + 4f73 RV250 [Radeon 9000 Series] (Secondary) + 5044 All-In-Wonder 128 PCI 1002 0028 Rage 128 AIW 1002 0029 Rage 128 AIW - 5045 Rage 128 PE/PRO AGP 2x TMDS - 5046 Rage 128 PF/PRO AGP 4x TMDS + 5046 Rage 128 PRO AGP 4x TMDS 1002 0004 Rage Fury Pro 1002 0008 Rage Fury Pro/Xpert 2000 Pro 1002 0014 Rage Fury Pro @@ -1132,26 +1113,10 @@ 1002 0048 Rage Fury Pro 1002 2000 Rage Fury MAXX AGP 4x (TMDS) (VGA device) 1002 2001 Rage Fury MAXX AGP 4x (TMDS) (Extra device?!) - 5047 Rage 128 PG/PRO - 5048 Rage 128 PH/PRO AGP 2x - 5049 Rage 128 PI/PRO AGP 4x - 504a Rage 128 PJ/PRO TMDS - 504b Rage 128 PK/PRO AGP 2x TMDS - 504c Rage 128 PL/PRO AGP 4x TMDS - 504d Rage 128 PM/PRO - 504e Rage 128 PN/PRO AGP 2x - 504f Rage 128 PO/PRO AGP 4x - 5050 Rage 128 PP/PRO TMDS [Xpert 128] + 5050 Rage128 [Xpert 128 PCI] 1002 0008 Xpert 128 - 5051 Rage 128 PQ/PRO AGP 2x TMDS - 5052 Rage 128 PR/PRO AGP 4x TMDS - 5053 Rage 128 PS/PRO - 5054 Rage 128 PT/PRO AGP 2x - 5055 Rage 128 PU/PRO AGP 4x - 5056 Rage 128 PV/PRO TMDS - 5057 Rage 128 PW/PRO AGP 2x TMDS - 5058 Rage 128 PX/PRO AGP 4x TMDS - 5144 Radeon R100 QD [Radeon 7200] + 5052 Rage 128 PRO AGP 4X TMDS + 5144 R100 [Radeon 7200 / All-In-Wonder Radeon] 1002 0008 Radeon 7000/Radeon VE 1002 0009 Radeon 7000/Radeon 1002 000a Radeon 7000/Radeon @@ -1165,30 +1130,20 @@ 1002 028a Radeon 7000/Radeon 1002 02aa Radeon AIW 1002 053a Radeon 7000/Radeon - 5145 Radeon R100 QE - 5146 Radeon R100 QF - 5147 Radeon R100 QG - 5148 Radeon R200 QH [Radeon 8500] + 5148 R200 GL [FireGL 8800] 1002 010a FireGL 8800 64Mb 1002 0152 FireGL 8800 128Mb 1002 0162 FireGL 8700 32Mb 1002 0172 FireGL 8700 64Mb - 5149 Radeon R200 QI - 514a Radeon R200 QJ - 514b Radeon R200 QK - 514c Radeon R200 QL [Radeon 8500 LE] + 514c R200 [Radeon 8500/8500 LE] 1002 003a Radeon R200 QL [Radeon 8500 LE] 1002 013a Radeon 8500 148c 2026 R200 QL [Radeon 8500 Evil Master II Multi Display Edition] 1681 0010 Radeon 8500 [3D Prophet 8500 128Mb] - 174b 7149 Radeon R200 QL [Sapphire Radeon 8500 LE] + 174b 7149 Radeon 8500 LE 1787 0f08 Radeon R200 QL [PowerMagic Radeon 8500] - 514d Radeon R200 QM [Radeon 9100] - 514e Radeon R200 QN [Radeon 8500LE] - 514f Radeon R200 QO [Radeon 8500LE] - 5154 R200 QT [Radeon 8500] - 5155 R200 QU [Radeon 9100] - 5157 RV200 QW [Radeon 7500] + 514d R200 [Radeon 9100] + 5157 RV200 [Radeon 7500/7500 LE] 1002 013a Radeon 7500 1002 0f2b ALL-IN-WONDER VE PCI 1002 103a Dell Optiplex GX260 @@ -1197,11 +1152,10 @@ 148c 2025 RV200 QW [Radeon 7500 Evil Master Multi Display Edition] 148c 2036 RV200 QW [Radeon 7500 PCI Dual Display] 174b 7146 RV200 QW [Radeon 7500 LE] - 174b 7147 RV200 QW [Sapphire Radeon 7500LE] + 174b 7147 Radeon 7500 LE 174b 7161 Radeon RV200 QW [Radeon 7500 LE] 17af 0202 RV200 QW [Excalibur Radeon 7500LE] - 5158 RV200 QX [Radeon 7500] - 5159 RV100 QY [Radeon 7000/VE] + 5159 RV100 [Radeon 7000 / Radeon VE] 1002 000a Radeon 7000/Radeon VE 1002 000b Radeon 7000 1002 0038 Radeon 7000/Radeon VE @@ -1221,12 +1175,12 @@ 1458 4002 RV100 QY [RADEON 7000 PRO MAYA AV Series] 148c 2003 RV100 QY [Radeon 7000 Multi-Display Edition] 148c 2023 RV100 QY [Radeon 7000 Evil Master Multi-Display] + 148c 2081 RV6DE 174b 0280 Radeon RV100 QY [Radeon 7000/VE] - 174b 7112 RV100 QY [Sapphire Radeon VE 7000] - 174b 7c28 Sapphire Radeon VE 7000 DDR + 174b 7112 Radeon VE 7000 + 174b 7c28 Radeon VE 7000 DDR 1787 0202 RV100 QY [Excalibur Radeon 7000] 17ee 1001 Radeon 7000 64MB DDR + DVI - 515a RV100 QZ [Radeon 7000/VE] 515e ES1000 1028 01bb PowerEdge 1955 Embedded ATI ES1000 1028 01df PowerEdge SC440 @@ -1242,45 +1196,32 @@ 1028 023c PowerEdge R200 Embedded ATI ES1000 103c 1304 Integrity iLO2 Advanced KVM VGA [AD307A] 15d9 8680 X7DVL-E-O motherboard + 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board - 515f ES1000 - 5168 Radeon R200 Qh - 5169 Radeon R200 Qi - 516a Radeon R200 Qj - 516b Radeon R200 Qk -# This one is not in ATI documentation, but is in XFree86 source code - 516c Radeon R200 Ql - 5245 Rage 128 RE/SG + 5245 Rage 128 GL PCI 1002 0008 Xpert 128 1002 0028 Rage 128 AIW 1002 0029 Rage 128 AIW 1002 0068 Rage 128 AIW - 5246 Rage 128 RF/SG AGP + 5246 Rage Fury/Xpert 128/Xpert 2000 AGP 2x 1002 0004 Magnum/Xpert 128/Xpert 99 1002 0008 Magnum/Xpert128/X99/Xpert2000 1002 0028 Rage 128 AIW AGP 1002 0044 Rage Fury/Xpert 128/Xpert 2000 1002 0068 Rage 128 AIW AGP 1002 0448 Rage Fury - 5247 Rage 128 RG - 524b Rage 128 RK/VR - 524c Rage 128 RL/VR AGP + 524b Rage 128 VR PCI + 524c Rage 128 VR AGP 1002 0008 Xpert 99/Xpert 2000 1002 0088 Xpert 99 - 5345 Rage 128 SE/4x 5346 Rage 128 SF/4x AGP 2x 1002 0048 RAGE 128 16MB VGA TVOUT AMC PAL - 5347 Rage 128 SG/4x AGP 4x - 5348 Rage 128 SH - 534b Rage 128 SK/4x - 534c Rage 128 SL/4x AGP 2x - 534d Rage 128 SM/4x AGP 4x + 534d Rage 128 4X AGP 4x 1002 0008 Xpert 99/Xpert 2000 1002 0018 Xpert 2000 - 534e Rage 128 4x 5354 Mach 64 VT 1002 5654 Mach 64 reference - 5446 Rage 128 Pro Ultra TF + 5446 Rage 128 PRO Ultra AGP 4x 1002 0004 Rage Fury Pro 1002 0008 Rage Fury Pro/Xpert 2000 Pro 1002 0018 Rage Fury Pro/Xpert 2000 Pro @@ -1289,124 +1230,115 @@ 1002 002a Rage 128 AIW Pro AGP 1002 002b Rage 128 AIW 1002 0048 Xpert 2000 Pro - 544c Rage 128 Pro Ultra TL - 5452 Rage 128 Pro Ultra TR + 5452 Rage 128 PRO Ultra4XL VR-R AGP 1002 001c Rage 128 Pro 4XL 103c 1279 Rage 128 Pro 4XL - 5453 Rage 128 Pro Ultra TS - 5454 Rage 128 Pro Ultra TT - 5455 Rage 128 Pro Ultra TU *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Sat Aug 15 13:05:28 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A9D289BA856; Sat, 15 Aug 2015 13:05:28 +0000 (UTC) (envelope-from royger@gmail.com) Received: from mail-wi0-x229.google.com (mail-wi0-x229.google.com [IPv6:2a00:1450:400c:c05::229]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 422FA1EFA; Sat, 15 Aug 2015 13:05:28 +0000 (UTC) (envelope-from royger@gmail.com) Received: by wicne3 with SMTP id ne3so40798388wic.1; Sat, 15 Aug 2015 06:05:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:user-agent:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=WPt9vFhcDDOb9UmWzvaShgL022o4C3KSgH/TxofrxXM=; b=y5FaQSRNjWYrOK6+B/7vWlHintqx9AW5sd3OhpGxS/KTpdWnbKb9CF6C7J1dplKh8E IyOShbDDFWBdgZjLi3GHv6z5zfXqpBYqA0HFbD37AN9IekOWIBdX6rmrvs5ZXVfoTzR8 apJ0SHiwGlQiVHlEueFf/LNAwhjTWvbIUEbzEqHPhUFxmAUzq65Rlhl+cR0nbtOyMsBh AMV01NSzwNCN/ZGkamu3fyAQALVHvCxFMhg8q+KtUSmURUCLqRPGoxrIYHSSw4zzoh1f 7zfYxh1IF3rKUkY4cy2SzbxFVacq29crZIkOqeKmUtZy/Sca/njpDTfxw84v4AK2gvLv lk2g== X-Received: by 10.194.112.3 with SMTP id im3mr3256300wjb.54.1439643926708; Sat, 15 Aug 2015 06:05:26 -0700 (PDT) Received: from [172.16.1.30] (5.Red-79-156-191.staticIP.rima-tde.net. [79.156.191.5]) by smtp.gmail.com with ESMTPSA id bq7sm12813591wjc.31.2015.08.15.06.05.25 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 15 Aug 2015 06:05:26 -0700 (PDT) Sender: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Message-ID: <55CF390F.5010407@FreeBSD.org> Date: Sat, 15 Aug 2015 15:05:19 +0200 From: =?UTF-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: "Jason A. Harmening" , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r286787 - head/sys/x86/x86 References: <201508142008.t7EK8Hkt037329@repo.freebsd.org> In-Reply-To: <201508142008.t7EK8Hkt037329@repo.freebsd.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 13:05:28 -0000 El 14/08/15 a les 22.08, Jason A. Harmening ha escrit: > Author: jah > Date: Fri Aug 14 20:08:16 2015 > New Revision: 286787 > URL: https://svnweb.freebsd.org/changeset/base/286787 > > Log: > Use pmap_quick_enter_page() to handle bouncing of unmapped buffers in the x86 busdma_bounce implementation. Also treat user buffers as unmapped. > This allows two things: > 1. Sync'ing bounced maps in non-sleepable contexts. The physcopy* calls previously used could sleep on sf_buf operations in some cases. > 2. Sync'ing user buffers outside the context of the owning process AFAICT this will break the Xen port. physcopy* uses uiomove_fromphys that on the amd64 port is able to deal with pages outside of the DMAP. OTOH pmap_quick_enter_page is not able to deal with pages outside of the DMAP, and will simply panic. Roger. From owner-svn-src-head@freebsd.org Sat Aug 15 13:34:45 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 48D769BAC91; Sat, 15 Aug 2015 13:34:45 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3758D1B7D; Sat, 15 Aug 2015 13:34:45 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FDYjSI080126; Sat, 15 Aug 2015 13:34:45 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FDYd8I080104; Sat, 15 Aug 2015 13:34:39 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508151334.t7FDYd8I080104@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sat, 15 Aug 2015 13:34:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286806 - in head: sys/cam/ctl sys/conf sys/modules/ctl usr.bin/ctlstat usr.sbin/ctladm usr.sbin/ctld X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 13:34:45 -0000 Author: mav Date: Sat Aug 15 13:34:38 2015 New Revision: 286806 URL: https://svnweb.freebsd.org/changeset/base/286806 Log: Drop "internal" CTL frontend. Its idea was to be a simple initiator and execute several commands from kernel level, but FreeBSD never had consumer for that functionality, while its implementation polluted many unrelated places.. Deleted: head/sys/cam/ctl/ctl_frontend_internal.c head/sys/cam/ctl/ctl_frontend_internal.h Modified: head/sys/cam/ctl/README.ctl.txt head/sys/cam/ctl/ctl.c head/sys/cam/ctl/ctl_backend.c head/sys/cam/ctl/ctl_backend_block.c head/sys/cam/ctl/ctl_backend_ramdisk.c head/sys/cam/ctl/ctl_cmd_table.c head/sys/cam/ctl/ctl_error.c head/sys/cam/ctl/ctl_frontend.c head/sys/cam/ctl/ctl_frontend_cam_sim.c head/sys/cam/ctl/ctl_frontend_iscsi.c head/sys/cam/ctl/ctl_ioctl.h head/sys/cam/ctl/ctl_private.h head/sys/cam/ctl/ctl_tpc.c head/sys/cam/ctl/ctl_tpc_local.c head/sys/conf/files head/sys/modules/ctl/Makefile head/usr.bin/ctlstat/ctlstat.c head/usr.sbin/ctladm/ctladm.8 head/usr.sbin/ctladm/ctladm.c head/usr.sbin/ctld/kernel.c Modified: head/sys/cam/ctl/README.ctl.txt ============================================================================== --- head/sys/cam/ctl/README.ctl.txt Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/README.ctl.txt Sat Aug 15 13:34:38 2015 (r286806) @@ -366,16 +366,6 @@ This is a CTL frontend port that is also frontend allows for using CTL without any target-capable hardware. So any LUNs you create in CTL are visible via this port. - -ctl_frontend_internal.c -ctl_frontend_internal.h: ------------------------ - -This is a frontend port written for Copan to do some system-specific tasks -that required sending commands into CTL from inside the kernel. This isn't -entirely relevant to FreeBSD in general, but can perhaps be repurposed or -removed later. - ctl_ha.h: -------- Modified: head/sys/cam/ctl/ctl.c ============================================================================== --- head/sys/cam/ctl/ctl.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl.c Sat Aug 15 13:34:38 2015 (r286806) @@ -72,7 +72,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -392,9 +391,6 @@ static int ctl_serialize_other_sc_cmd(st static int ctl_ioctl_submit_wait(union ctl_io *io); static void ctl_ioctl_datamove(union ctl_io *io); static void ctl_ioctl_done(union ctl_io *io); -static void ctl_ioctl_hard_startstop_callback(void *arg, - struct cfi_metatask *metatask); -static void ctl_ioctl_bbrread_callback(void *arg,struct cfi_metatask *metatask); static int ctl_ioctl_fill_ooa(struct ctl_lun *lun, uint32_t *cur_fill_num, struct ctl_ooa *ooa_hdr, struct ctl_ooa_entry *kern_entries); @@ -2093,38 +2089,6 @@ ctl_ioctl_done(union ctl_io *io) mtx_unlock(¶ms->ioctl_mtx); } -static void -ctl_ioctl_hard_startstop_callback(void *arg, struct cfi_metatask *metatask) -{ - struct ctl_fe_ioctl_startstop_info *sd_info; - - sd_info = (struct ctl_fe_ioctl_startstop_info *)arg; - - sd_info->hs_info.status = metatask->status; - sd_info->hs_info.total_luns = metatask->taskinfo.startstop.total_luns; - sd_info->hs_info.luns_complete = - metatask->taskinfo.startstop.luns_complete; - sd_info->hs_info.luns_failed = metatask->taskinfo.startstop.luns_failed; - - cv_broadcast(&sd_info->sem); -} - -static void -ctl_ioctl_bbrread_callback(void *arg, struct cfi_metatask *metatask) -{ - struct ctl_fe_ioctl_bbrread_info *fe_bbr_info; - - fe_bbr_info = (struct ctl_fe_ioctl_bbrread_info *)arg; - - mtx_lock(fe_bbr_info->lock); - fe_bbr_info->bbr_info->status = metatask->status; - fe_bbr_info->bbr_info->bbr_status = metatask->taskinfo.bbrread.status; - fe_bbr_info->wakeup_done = 1; - mtx_unlock(fe_bbr_info->lock); - - cv_broadcast(&fe_bbr_info->sem); -} - /* * Returns 0 for success, errno for failure. */ @@ -2724,103 +2688,6 @@ ctl_ioctl(struct cdev *dev, u_long cmd, break; } - case CTL_HARD_START: - case CTL_HARD_STOP: { - struct ctl_fe_ioctl_startstop_info ss_info; - struct cfi_metatask *metatask; - struct mtx hs_mtx; - - mtx_init(&hs_mtx, "HS Mutex", NULL, MTX_DEF); - - cv_init(&ss_info.sem, "hard start/stop cv" ); - - metatask = cfi_alloc_metatask(/*can_wait*/ 1); - if (metatask == NULL) { - retval = ENOMEM; - mtx_destroy(&hs_mtx); - break; - } - - if (cmd == CTL_HARD_START) - metatask->tasktype = CFI_TASK_STARTUP; - else - metatask->tasktype = CFI_TASK_SHUTDOWN; - - metatask->callback = ctl_ioctl_hard_startstop_callback; - metatask->callback_arg = &ss_info; - - cfi_action(metatask); - - /* Wait for the callback */ - mtx_lock(&hs_mtx); - cv_wait_sig(&ss_info.sem, &hs_mtx); - mtx_unlock(&hs_mtx); - - /* - * All information has been copied from the metatask by the - * time cv_broadcast() is called, so we free the metatask here. - */ - cfi_free_metatask(metatask); - - memcpy((void *)addr, &ss_info.hs_info, sizeof(ss_info.hs_info)); - - mtx_destroy(&hs_mtx); - break; - } - case CTL_BBRREAD: { - struct ctl_bbrread_info *bbr_info; - struct ctl_fe_ioctl_bbrread_info fe_bbr_info; - struct mtx bbr_mtx; - struct cfi_metatask *metatask; - - bbr_info = (struct ctl_bbrread_info *)addr; - - bzero(&fe_bbr_info, sizeof(fe_bbr_info)); - - bzero(&bbr_mtx, sizeof(bbr_mtx)); - mtx_init(&bbr_mtx, "BBR Mutex", NULL, MTX_DEF); - - fe_bbr_info.bbr_info = bbr_info; - fe_bbr_info.lock = &bbr_mtx; - - cv_init(&fe_bbr_info.sem, "BBR read cv"); - metatask = cfi_alloc_metatask(/*can_wait*/ 1); - - if (metatask == NULL) { - mtx_destroy(&bbr_mtx); - cv_destroy(&fe_bbr_info.sem); - retval = ENOMEM; - break; - } - metatask->tasktype = CFI_TASK_BBRREAD; - metatask->callback = ctl_ioctl_bbrread_callback; - metatask->callback_arg = &fe_bbr_info; - metatask->taskinfo.bbrread.lun_num = bbr_info->lun_num; - metatask->taskinfo.bbrread.lba = bbr_info->lba; - metatask->taskinfo.bbrread.len = bbr_info->len; - - cfi_action(metatask); - - mtx_lock(&bbr_mtx); - while (fe_bbr_info.wakeup_done == 0) - cv_wait_sig(&fe_bbr_info.sem, &bbr_mtx); - mtx_unlock(&bbr_mtx); - - bbr_info->status = metatask->status; - bbr_info->bbr_status = metatask->taskinfo.bbrread.status; - bbr_info->scsi_status = metatask->taskinfo.bbrread.scsi_status; - memcpy(&bbr_info->sense_data, - &metatask->taskinfo.bbrread.sense_data, - MIN(sizeof(bbr_info->sense_data), - sizeof(metatask->taskinfo.bbrread.sense_data))); - - cfi_free_metatask(metatask); - - mtx_destroy(&bbr_mtx); - cv_destroy(&fe_bbr_info.sem); - - break; - } case CTL_DELAY_IO: { struct ctl_io_delay_info *delay_info; #ifdef CTL_IO_DELAY Modified: head/sys/cam/ctl/ctl_backend.c ============================================================================== --- head/sys/cam/ctl/ctl_backend.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_backend.c Sat Aug 15 13:34:38 2015 (r286806) @@ -55,7 +55,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include Modified: head/sys/cam/ctl/ctl_backend_block.c ============================================================================== --- head/sys/cam/ctl/ctl_backend_block.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_backend_block.c Sat Aug 15 13:34:38 2015 (r286806) @@ -84,7 +84,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include Modified: head/sys/cam/ctl/ctl_backend_ramdisk.c ============================================================================== --- head/sys/cam/ctl/ctl_backend_ramdisk.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_backend_ramdisk.c Sat Aug 15 13:34:38 2015 (r286806) @@ -62,7 +62,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include Modified: head/sys/cam/ctl/ctl_cmd_table.c ============================================================================== --- head/sys/cam/ctl/ctl_cmd_table.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_cmd_table.c Sat Aug 15 13:34:38 2015 (r286806) @@ -52,7 +52,6 @@ #include #include #include -#include #include #include #include Modified: head/sys/cam/ctl/ctl_error.c ============================================================================== --- head/sys/cam/ctl/ctl_error.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_error.c Sat Aug 15 13:34:38 2015 (r286806) @@ -57,7 +57,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include Modified: head/sys/cam/ctl/ctl_frontend.c ============================================================================== --- head/sys/cam/ctl/ctl_frontend.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_frontend.c Sat Aug 15 13:34:38 2015 (r286806) @@ -55,7 +55,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include /* XXX KDM move defines from ctl_ioctl.h to somewhere else */ #include Modified: head/sys/cam/ctl/ctl_frontend_cam_sim.c ============================================================================== --- head/sys/cam/ctl/ctl_frontend_cam_sim.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_frontend_cam_sim.c Sat Aug 15 13:34:38 2015 (r286806) @@ -64,7 +64,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #define io_ptr spriv_ptr1 Modified: head/sys/cam/ctl/ctl_frontend_iscsi.c ============================================================================== --- head/sys/cam/ctl/ctl_frontend_iscsi.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_frontend_iscsi.c Sat Aug 15 13:34:38 2015 (r286806) @@ -61,7 +61,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include Modified: head/sys/cam/ctl/ctl_ioctl.h ============================================================================== --- head/sys/cam/ctl/ctl_ioctl.h Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_ioctl.h Sat Aug 15 13:34:38 2015 (r286806) @@ -92,23 +92,6 @@ struct ctl_ooa_info { ctl_ooa_status status; /* Returned from CTL */ }; -struct ctl_hard_startstop_info { - cfi_mt_status status; - int total_luns; - int luns_complete; - int luns_failed; -}; - -struct ctl_bbrread_info { - int lun_num; /* Passed in to CTL */ - uint64_t lba; /* Passed in to CTL */ - int len; /* Passed in to CTL */ - cfi_mt_status status; /* Returned from CTL */ - cfi_bbrread_status bbr_status; /* Returned from CTL */ - uint8_t scsi_status; /* Returned from CTL */ - struct scsi_sense_data sense_data; /* Returned from CTL */ -}; - typedef enum { CTL_DELAY_TYPE_NONE, CTL_DELAY_TYPE_CONT, @@ -828,10 +811,6 @@ struct ctl_lun_map { #define CTL_DISABLE_PORT _IOW(CTL_MINOR, 0x05, struct ctl_port_entry) #define CTL_DUMP_OOA _IO(CTL_MINOR, 0x06) #define CTL_CHECK_OOA _IOWR(CTL_MINOR, 0x07, struct ctl_ooa_info) -#define CTL_HARD_STOP _IOR(CTL_MINOR, 0x08, \ - struct ctl_hard_startstop_info) -#define CTL_HARD_START _IOR(CTL_MINOR, 0x09, \ - struct ctl_hard_startstop_info) #define CTL_DELAY_IO _IOWR(CTL_MINOR, 0x10, struct ctl_io_delay_info) #define CTL_REALSYNC_GET _IOR(CTL_MINOR, 0x11, int) #define CTL_REALSYNC_SET _IOW(CTL_MINOR, 0x12, int) @@ -839,7 +818,6 @@ struct ctl_lun_map { #define CTL_GETSYNC _IOWR(CTL_MINOR, 0x14, struct ctl_sync_info) #define CTL_GETSTATS _IOWR(CTL_MINOR, 0x15, struct ctl_stats) #define CTL_ERROR_INJECT _IOWR(CTL_MINOR, 0x16, struct ctl_error_desc) -#define CTL_BBRREAD _IOWR(CTL_MINOR, 0x17, struct ctl_bbrread_info) #define CTL_GET_OOA _IOWR(CTL_MINOR, 0x18, struct ctl_ooa) #define CTL_DUMP_STRUCTS _IO(CTL_MINOR, 0x19) #define CTL_GET_PORT_LIST _IOWR(CTL_MINOR, 0x20, struct ctl_port_list) Modified: head/sys/cam/ctl/ctl_private.h ============================================================================== --- head/sys/cam/ctl/ctl_private.h Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_private.h Sat Aug 15 13:34:38 2015 (r286806) @@ -47,18 +47,6 @@ #define CTL_PROCESSOR_PRODUCT "CTLPROCESSOR " #define CTL_UNKNOWN_PRODUCT "CTLDEVICE " -struct ctl_fe_ioctl_startstop_info { - struct cv sem; - struct ctl_hard_startstop_info hs_info; -}; - -struct ctl_fe_ioctl_bbrread_info { - struct cv sem; - struct ctl_bbrread_info *bbr_info; - int wakeup_done; - struct mtx *lock; -}; - typedef enum { CTL_IOCTL_INPROG, CTL_IOCTL_DATAMOVE, Modified: head/sys/cam/ctl/ctl_tpc.c ============================================================================== --- head/sys/cam/ctl/ctl_tpc.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_tpc.c Sat Aug 15 13:34:38 2015 (r286806) @@ -47,7 +47,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include Modified: head/sys/cam/ctl/ctl_tpc_local.c ============================================================================== --- head/sys/cam/ctl/ctl_tpc_local.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/cam/ctl/ctl_tpc_local.c Sat Aug 15 13:34:38 2015 (r286806) @@ -47,7 +47,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/conf/files Sat Aug 15 13:34:38 2015 (r286806) @@ -83,7 +83,6 @@ cam/ctl/ctl_backend_ramdisk.c optional c cam/ctl/ctl_cmd_table.c optional ctl cam/ctl/ctl_frontend.c optional ctl cam/ctl/ctl_frontend_cam_sim.c optional ctl -cam/ctl/ctl_frontend_internal.c optional ctl cam/ctl/ctl_frontend_iscsi.c optional ctl cam/ctl/ctl_scsi_all.c optional ctl cam/ctl/ctl_tpc.c optional ctl Modified: head/sys/modules/ctl/Makefile ============================================================================== --- head/sys/modules/ctl/Makefile Sat Aug 15 12:55:06 2015 (r286805) +++ head/sys/modules/ctl/Makefile Sat Aug 15 13:34:38 2015 (r286806) @@ -11,7 +11,6 @@ SRCS+= ctl_backend_ramdisk.c SRCS+= ctl_cmd_table.c SRCS+= ctl_frontend.c SRCS+= ctl_frontend_cam_sim.c -SRCS+= ctl_frontend_internal.c SRCS+= ctl_frontend_iscsi.c SRCS+= ctl_scsi_all.c SRCS+= ctl_tpc.c Modified: head/usr.bin/ctlstat/ctlstat.c ============================================================================== --- head/usr.bin/ctlstat/ctlstat.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/usr.bin/ctlstat/ctlstat.c Sat Aug 15 13:34:38 2015 (r286806) @@ -62,7 +62,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include Modified: head/usr.sbin/ctladm/ctladm.8 ============================================================================== --- head/usr.sbin/ctladm/ctladm.8 Sat Aug 15 12:55:06 2015 (r286805) +++ head/usr.sbin/ctladm/ctladm.8 Sat Aug 15 13:34:38 2015 (r286806) @@ -83,12 +83,6 @@ .Op Fl c Ar cdbsize .Op Fl N .Nm -.Ic bbrread -.Aq target:lun -.Op general options -.Aq Fl -l Ar lba -.Aq Fl -d Ar datalen -.Nm .Ic readcap .Aq target:lun .Op general options @@ -129,10 +123,6 @@ .Ic startup .Op general options .Nm -.Ic hardstop -.Nm -.Ic hardstart -.Nm .Ic lunlist .Nm .Ic delay @@ -364,34 +354,6 @@ to the kernel when doing a write, just e data. This is to be used for performance testing. .El -.It Ic bbrread -Issue a SCSI READ command to the logical device to potentially force a bad -block on a disk in the RAID set to be reconstructed from the other disks in -the array. This command should only be used on an array that is in the -normal state. If used on a critical array, it could cause the array to go -offline if the bad block to be remapped is on one of the disks that is -still active in the array. -.Pp -The data for this particular command will be discarded, and not returned to -the user. -.Pp -In order to determine which LUN to read from, the user should first -determine which LUN the disk with a bad block belongs to. Then he should -map the bad disk block back to the logical block address for the array in -order to determine which LBA to pass in to the -.Ic bbrread -command. -.Pp -This command is primarily intended for testing. In practice, bad block -remapping will generally be triggered by the in-kernel Disk Aerobics and -Disk Scrubbing code. -.Bl -tag -width 10n -.It Fl l Ar lba -Specify the starting Logical Block Address. -.It Fl d Ar datalen -Specify the amount of data in bytes to read from the LUN. This must be a -multiple of the LUN blocksize. -.El .It Ic readcap Send the .Tn SCSI @@ -545,22 +507,6 @@ START STOP UNIT command with the start b to all direct access LUNs. This will mark all direct access LUNs "online" again. It will not cause any LUNs to start up. A separate start command without the on/offline bit set is necessary for that. -.It Ic hardstop -Use the kernel facility for stopping all direct access LUNs and setting the -offline bit. Unlike the -.Ic shutdown -command above, this command allows shutting down LUNs with I/O active. It -will also issue a LUN reset to any reserved LUNs to break the reservation -so that the LUN can be stopped. -.Ic shutdown -command instead. -.It Ic hardstart -This command is functionally identical to the -.Ic startup -command described above. The primary difference is that the LUNs are -enumerated and commands sent by the in-kernel Front End Target Driver -instead of by -.Nm . .It Ic lunlist List all LUNs registered with CTL. Because this command uses the ioctl port, it will only work when the FETDs Modified: head/usr.sbin/ctladm/ctladm.c ============================================================================== --- head/usr.sbin/ctladm/ctladm.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/usr.sbin/ctladm/ctladm.c Sat Aug 15 13:34:38 2015 (r286806) @@ -66,7 +66,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -106,14 +105,11 @@ typedef enum { CTLADM_CMD_SHUTDOWN, CTLADM_CMD_STARTUP, CTLADM_CMD_LUNLIST, - CTLADM_CMD_HARDSTOP, - CTLADM_CMD_HARDSTART, CTLADM_CMD_DELAY, CTLADM_CMD_REALSYNC, CTLADM_CMD_SETSYNC, CTLADM_CMD_GETSYNC, CTLADM_CMD_ERR_INJECT, - CTLADM_CMD_BBRREAD, CTLADM_CMD_PRES_IN, CTLADM_CMD_PRES_OUT, CTLADM_CMD_INQ_VPD_DEVID, @@ -172,7 +168,6 @@ static const char startstop_opts[] = "io static struct ctladm_opts option_table[] = { {"adddev", CTLADM_CMD_ADDDEV, CTLADM_ARG_NONE, NULL}, - {"bbrread", CTLADM_CMD_BBRREAD, CTLADM_ARG_NEED_TL, "d:l:"}, {"create", CTLADM_CMD_CREATE, CTLADM_ARG_NONE, "b:B:d:l:o:s:S:t:"}, {"delay", CTLADM_CMD_DELAY, CTLADM_ARG_NEED_TL, "T:l:t:"}, {"devid", CTLADM_CMD_INQ_VPD_DEVID, CTLADM_ARG_NEED_TL, NULL}, @@ -180,8 +175,6 @@ static struct ctladm_opts option_table[] {"dumpooa", CTLADM_CMD_DUMPOOA, CTLADM_ARG_NONE, NULL}, {"dumpstructs", CTLADM_CMD_DUMPSTRUCTS, CTLADM_ARG_NONE, NULL}, {"getsync", CTLADM_CMD_GETSYNC, CTLADM_ARG_NEED_TL, NULL}, - {"hardstart", CTLADM_CMD_HARDSTART, CTLADM_ARG_NONE, NULL}, - {"hardstop", CTLADM_CMD_HARDSTOP, CTLADM_ARG_NONE, NULL}, {"help", CTLADM_CMD_HELP, CTLADM_ARG_NONE, NULL}, {"inject", CTLADM_CMD_ERR_INJECT, CTLADM_ARG_NEED_TL, "cd:i:p:r:s:"}, {"inquiry", CTLADM_CMD_INQUIRY, CTLADM_ARG_NEED_TL, NULL}, @@ -228,11 +221,6 @@ static int cctl_do_io(int fd, int retrie static int cctl_delay(int fd, int target, int lun, int argc, char **argv, char *combinedopt); static int cctl_lunlist(int fd); -static void cctl_cfi_mt_statusstr(cfi_mt_status status, char *str, int str_len); -static void cctl_cfi_bbr_statusstr(cfi_bbrread_status, char *str, int str_len); -static int cctl_hardstopstart(int fd, ctladm_cmdfunction command); -static int cctl_bbrread(int fd, int target, int lun, int iid, int argc, - char **argv, char *combinedopt); static int cctl_startup_shutdown(int fd, int target, int lun, int iid, ctladm_cmdfunction command); static int cctl_sync_cache(int fd, int target, int lun, int iid, int retries, @@ -1341,180 +1329,6 @@ bailout: return (retval); } -static void -cctl_cfi_mt_statusstr(cfi_mt_status status, char *str, int str_len) -{ - switch (status) { - case CFI_MT_PORT_OFFLINE: - snprintf(str, str_len, "Port Offline"); - break; - case CFI_MT_ERROR: - snprintf(str, str_len, "Error"); - break; - case CFI_MT_SUCCESS: - snprintf(str, str_len, "Success"); - break; - case CFI_MT_NONE: - snprintf(str, str_len, "None??"); - break; - default: - snprintf(str, str_len, "Unknown status: %d", status); - break; - } -} - -static void -cctl_cfi_bbr_statusstr(cfi_bbrread_status status, char *str, int str_len) -{ - switch (status) { - case CFI_BBR_SUCCESS: - snprintf(str, str_len, "Success"); - break; - case CFI_BBR_LUN_UNCONFIG: - snprintf(str, str_len, "LUN not configured"); - break; - case CFI_BBR_NO_LUN: - snprintf(str, str_len, "LUN does not exist"); - break; - case CFI_BBR_NO_MEM: - snprintf(str, str_len, "Memory allocation error"); - break; - case CFI_BBR_BAD_LEN: - snprintf(str, str_len, "Length is not a multiple of blocksize"); - break; - case CFI_BBR_RESERV_CONFLICT: - snprintf(str, str_len, "Reservation conflict"); - break; - case CFI_BBR_LUN_STOPPED: - snprintf(str, str_len, "LUN is powered off"); - break; - case CFI_BBR_LUN_OFFLINE_CTL: - snprintf(str, str_len, "LUN is offline"); - break; - case CFI_BBR_LUN_OFFLINE_RC: - snprintf(str, str_len, "RAIDCore array is offline (double " - "failure?)"); - break; - case CFI_BBR_SCSI_ERROR: - snprintf(str, str_len, "SCSI Error"); - break; - case CFI_BBR_ERROR: - snprintf(str, str_len, "Error"); - break; - default: - snprintf(str, str_len, "Unknown status: %d", status); - break; - } -} - -static int -cctl_hardstopstart(int fd, ctladm_cmdfunction command) -{ - struct ctl_hard_startstop_info hs_info; - char error_str[256]; - int do_start; - int retval; - - retval = 0; - - if (command == CTLADM_CMD_HARDSTART) - do_start = 1; - else - do_start = 0; - - if (ioctl(fd, (do_start == 1) ? CTL_HARD_START : CTL_HARD_STOP, - &hs_info) == -1) { - warn("%s: CTL_HARD_%s ioctl failed", __func__, - (do_start == 1) ? "START" : "STOP"); - retval = 1; - goto bailout; - } - - fprintf(stdout, "Hard %s Status: ", (command == CTLADM_CMD_HARDSTOP) ? - "Stop" : "Start"); - cctl_cfi_mt_statusstr(hs_info.status, error_str, sizeof(error_str)); - fprintf(stdout, "%s\n", error_str); - fprintf(stdout, "Total LUNs: %d\n", hs_info.total_luns); - fprintf(stdout, "LUNs complete: %d\n", hs_info.luns_complete); - fprintf(stdout, "LUNs failed: %d\n", hs_info.luns_failed); - -bailout: - return (retval); -} - -static int -cctl_bbrread(int fd, int target __unused, int lun, int iid __unused, - int argc, char **argv, char *combinedopt) -{ - struct ctl_bbrread_info bbr_info; - char error_str[256]; - int datalen = -1; - uint64_t lba = 0; - int lba_set = 0; - int retval; - int c; - - retval = 0; - - while ((c = getopt(argc, argv, combinedopt)) != -1) { - switch (c) { - case 'd': - datalen = strtoul(optarg, NULL, 0); - break; - case 'l': - lba = strtoull(optarg, NULL, 0); - lba_set = 1; - break; - default: - break; - } - } - - if (lba_set == 0) { - warnx("%s: you must specify an LBA with -l", __func__); - retval = 1; - goto bailout; - } - - if (datalen == -1) { - warnx("%s: you must specify a length with -d", __func__); - retval = 1; - goto bailout; - } - - bbr_info.lun_num = lun; - bbr_info.lba = lba; - /* - * XXX KDM get the blocksize first?? - */ - if ((datalen % 512) != 0) { - warnx("%s: data length %d is not a multiple of 512 bytes", - __func__, datalen); - retval = 1; - goto bailout; - } - bbr_info.len = datalen; - - if (ioctl(fd, CTL_BBRREAD, &bbr_info) == -1) { - warn("%s: CTL_BBRREAD ioctl failed", __func__); - retval = 1; - goto bailout; - } - cctl_cfi_mt_statusstr(bbr_info.status, error_str, sizeof(error_str)); - fprintf(stdout, "BBR Read Overall Status: %s\n", error_str); - cctl_cfi_bbr_statusstr(bbr_info.bbr_status, error_str, - sizeof(error_str)); - fprintf(stdout, "BBR Read Status: %s\n", error_str); - /* - * XXX KDM should we bother printing out SCSI status if we get - * CFI_BBR_SCSI_ERROR back? - * - * Return non-zero if this fails? - */ -bailout: - return (retval); -} - static int cctl_startup_shutdown(int fd, int target, int lun, int iid, ctladm_cmdfunction command) @@ -4499,11 +4313,8 @@ usage(int error) " ctladm devlist [-b backend] [-v] [-x]\n" " ctladm shutdown\n" " ctladm startup\n" -" ctladm hardstop\n" -" ctladm hardstart\n" " ctladm lunlist\n" " ctladm lunmap -p targ_port [-l pLUN] [-L cLUN]\n" -" ctladm bbrread [dev_id] <-l lba> <-d datalen>\n" " ctladm delay [dev_id] <-l datamove|done> [-T oneshot|cont]\n" " [-t secs]\n" " ctladm realsync \n" @@ -4610,10 +4421,7 @@ usage(int error) "lunmap options:\n" "-p targ_port : specify target port number\n" "-L pLUN : specify port-visible LUN\n" -"-L cLUN : specify CTL LUN\n" -"bbrread options:\n" -"-l lba : starting LBA\n" -"-d datalen : length, in bytes, to read\n", +"-L cLUN : specify CTL LUN\n", CTL_DEFAULT_DEV); } @@ -4864,14 +4672,6 @@ main(int argc, char **argv) retval = cctl_startup_shutdown(fd, target, lun, initid, command); break; - case CTLADM_CMD_HARDSTOP: - case CTLADM_CMD_HARDSTART: - retval = cctl_hardstopstart(fd, command); - break; - case CTLADM_CMD_BBRREAD: - retval = cctl_bbrread(fd, target, lun, initid, argc, argv, - combinedopt); - break; case CTLADM_CMD_LUNLIST: retval = cctl_lunlist(fd); break; Modified: head/usr.sbin/ctld/kernel.c ============================================================================== --- head/usr.sbin/ctld/kernel.c Sat Aug 15 12:55:06 2015 (r286805) +++ head/usr.sbin/ctld/kernel.c Sat Aug 15 13:34:38 2015 (r286806) @@ -60,7 +60,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include From owner-svn-src-head@freebsd.org Sat Aug 15 15:26:40 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7382E9BABA4; Sat, 15 Aug 2015 15:26:40 +0000 (UTC) (envelope-from jason.harmening@gmail.com) Received: from mail-ob0-x22b.google.com (mail-ob0-x22b.google.com [IPv6:2607:f8b0:4003:c01::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2CF1F1C99; Sat, 15 Aug 2015 15:26:40 +0000 (UTC) (envelope-from jason.harmening@gmail.com) Received: by obbop1 with SMTP id op1so82580036obb.2; Sat, 15 Aug 2015 08:26:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-type:content-transfer-encoding; bh=lG8lymsLK07EkuqIX04M+btnD0WCXX7h0/sHYMISkbY=; b=elv8MEgk1Ug4VOhSlp5hBXXymSRH2v1TvewpXhE7eydvHaQgg2GvZrUurUMoAO3fZf iphNJ8zls0QHYJGhhI8qoel6qVTOCMAUynAXyQUyDNRMFluflNcHwXdaGx2jSbW54Pn1 7Nnh41DKR7jFNRpoiwLwjQgdhnPa1RLKS011vROtMCFX6CI964IFukNlr9ptncD8jhcN yZ0dl0hGQjKXO1Y3AfzzxpmOlyMvc5mZ7ZQFJArWmdNfehFiOl7RI7H1ywlIr0sKIAto vACYOQ3LaXeaW2NP4F8oY1SW5loxWnA0ABbOr7uf0jOKK190t6Re3wNCDAe0GXul4aO+ xHDg== X-Received: by 10.182.43.228 with SMTP id z4mr23964207obl.48.1439652399450; Sat, 15 Aug 2015 08:26:39 -0700 (PDT) Received: from corona.austin.rr.com (cpe-72-177-6-10.austin.res.rr.com. [72.177.6.10]) by smtp.googlemail.com with ESMTPSA id ix8sm4753061obc.7.2015.08.15.08.26.38 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 15 Aug 2015 08:26:38 -0700 (PDT) Subject: Re: svn commit: r286787 - head/sys/x86/x86 To: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , "Jason A. Harmening" , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <201508142008.t7EK8Hkt037329@repo.freebsd.org> <55CF390F.5010407@FreeBSD.org> From: Jason Harmening X-Enigmail-Draft-Status: N1110 Message-ID: <55CF5B13.1040501@gmail.com> Date: Sat, 15 Aug 2015 10:30:27 -0500 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <55CF390F.5010407@FreeBSD.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 15:26:40 -0000 On 08/15/15 08:05, Roger Pau Monné wrote: > El 14/08/15 a les 22.08, Jason A. Harmening ha escrit: >> Author: jah >> Date: Fri Aug 14 20:08:16 2015 >> New Revision: 286787 >> URL: https://svnweb.freebsd.org/changeset/base/286787 >> >> Log: >> Use pmap_quick_enter_page() to handle bouncing of unmapped buffers in the x86 busdma_bounce implementation. Also treat user buffers as unmapped. >> This allows two things: >> 1. Sync'ing bounced maps in non-sleepable contexts. The physcopy* calls previously used could sleep on sf_buf operations in some cases. >> 2. Sync'ing user buffers outside the context of the owning process > > AFAICT this will break the Xen port. physcopy* uses uiomove_fromphys > that on the amd64 port is able to deal with pages outside of the DMAP. > OTOH pmap_quick_enter_page is not able to deal with pages outside of the > DMAP, and will simply panic. > > Roger. > Is it actually possible for those non-dom0 pages to be used for I/O that passes through busdma? If it is, then it would be easy to make pmap_quick_enter_page() handle them by adding a pcpu pageframe similar to what we do for i386. From owner-svn-src-head@freebsd.org Sat Aug 15 15:42:23 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 39B449BAE6F; Sat, 15 Aug 2015 15:42:23 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 258E71645; Sat, 15 Aug 2015 15:42:23 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FFgNZK033394; Sat, 15 Aug 2015 15:42:23 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FFgLX0033385; Sat, 15 Aug 2015 15:42:21 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508151542.t7FFgLX0033385@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sat, 15 Aug 2015 15:42:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286807 - in head/sys: cam/ctl conf modules/ctl X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 15:42:23 -0000 Author: mav Date: Sat Aug 15 15:42:21 2015 New Revision: 286807 URL: https://svnweb.freebsd.org/changeset/base/286807 Log: Move "ioctl" CAM frontend into separate file. It has nothing to share with too huge ctl.c other then device descriptor, but even that may be counted as design error that may be fixed later. At some point we may even want to have several ioctl ports. Added: head/sys/cam/ctl/ctl_frontend_ioctl.c (contents, props changed) Modified: head/sys/cam/ctl/ctl.c head/sys/cam/ctl/ctl.h head/sys/cam/ctl/ctl_private.h head/sys/conf/files head/sys/modules/ctl/Makefile Modified: head/sys/cam/ctl/ctl.c ============================================================================== --- head/sys/cam/ctl/ctl.c Sat Aug 15 13:34:38 2015 (r286806) +++ head/sys/cam/ctl/ctl.c Sat Aug 15 15:42:21 2015 (r286807) @@ -382,15 +382,7 @@ static int ctl_init(void); void ctl_shutdown(void); static int ctl_open(struct cdev *dev, int flags, int fmt, struct thread *td); static int ctl_close(struct cdev *dev, int flags, int fmt, struct thread *td); -static void ctl_ioctl_online(void *arg); -static void ctl_ioctl_offline(void *arg); -static int ctl_ioctl_lun_enable(void *arg, int lun_id); -static int ctl_ioctl_lun_disable(void *arg, int lun_id); -static int ctl_ioctl_do_datamove(struct ctl_scsiio *ctsio); static int ctl_serialize_other_sc_cmd(struct ctl_scsiio *ctsio); -static int ctl_ioctl_submit_wait(union ctl_io *io); -static void ctl_ioctl_datamove(union ctl_io *io); -static void ctl_ioctl_done(union ctl_io *io); static int ctl_ioctl_fill_ooa(struct ctl_lun *lun, uint32_t *cur_fill_num, struct ctl_ooa *ooa_hdr, struct ctl_ooa_entry *kern_entries); @@ -525,11 +517,6 @@ static moduledata_t ctl_moduledata = { DECLARE_MODULE(ctl, ctl_moduledata, SI_SUB_CONFIGURE, SI_ORDER_THIRD); MODULE_VERSION(ctl, 1); -static struct ctl_frontend ioctl_frontend = -{ - .name = "ioctl", -}; - #ifdef notyet static void ctl_isc_handler_finish_xfer(struct ctl_softc *ctl_softc, @@ -1060,7 +1047,6 @@ ctl_init(void) { struct ctl_softc *softc; void *other_pool; - struct ctl_port *port; int i, error, retval; //int isc_retval; @@ -1185,32 +1171,6 @@ ctl_init(void) return (error); } - /* - * Initialize the ioctl front end. - */ - ctl_frontend_register(&ioctl_frontend); - port = &softc->ioctl_info.port; - port->frontend = &ioctl_frontend; - sprintf(softc->ioctl_info.port_name, "ioctl"); - port->port_type = CTL_PORT_IOCTL; - port->num_requested_ctl_io = 100; - port->port_name = softc->ioctl_info.port_name; - port->port_online = ctl_ioctl_online; - port->port_offline = ctl_ioctl_offline; - port->onoff_arg = &softc->ioctl_info; - port->lun_enable = ctl_ioctl_lun_enable; - port->lun_disable = ctl_ioctl_lun_disable; - port->targ_lun_arg = &softc->ioctl_info; - port->fe_datamove = ctl_ioctl_datamove; - port->fe_done = ctl_ioctl_done; - port->max_targets = 15; - port->max_target_id = 15; - - if (ctl_port_register(&softc->ioctl_info.port) != 0) { - printf("ctl: ioctl front end registration failed, will " - "continue anyway\n"); - } - SYSCTL_ADD_PROC(&softc->sysctl_ctx,SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "ha_state", CTLTYPE_INT | CTLFLAG_RWTUN, softc, 0, ctl_ha_state_sysctl, "I", "HA state for this head"); @@ -1234,9 +1194,6 @@ ctl_shutdown(void) softc = (struct ctl_softc *)control_softc; - if (ctl_port_deregister(&softc->ioctl_info.port) != 0) - printf("ctl: ioctl front end deregistration failed\n"); - mtx_lock(&softc->ctl_lock); /* @@ -1249,8 +1206,6 @@ ctl_shutdown(void) mtx_unlock(&softc->ctl_lock); - ctl_frontend_deregister(&ioctl_frontend); - #if 0 ctl_shutdown_thread(softc->work_thread); mtx_destroy(&softc->queue_lock); @@ -1422,26 +1377,6 @@ ctl_port_list(struct ctl_port_entry *ent return (retval); } -static void -ctl_ioctl_online(void *arg) -{ - struct ctl_ioctl_info *ioctl_info; - - ioctl_info = (struct ctl_ioctl_info *)arg; - - ioctl_info->flags |= CTL_IOCTL_FLAG_ENABLED; -} - -static void -ctl_ioctl_offline(void *arg) -{ - struct ctl_ioctl_info *ioctl_info; - - ioctl_info = (struct ctl_ioctl_info *)arg; - - ioctl_info->flags &= ~CTL_IOCTL_FLAG_ENABLED; -} - /* * Remove an initiator by port number and initiator ID. * Returns 0 for success, -1 for failure. @@ -1637,181 +1572,6 @@ ctl_create_iid(struct ctl_port *port, in } } -static int -ctl_ioctl_lun_enable(void *arg, int lun_id) -{ - return (0); -} - -static int -ctl_ioctl_lun_disable(void *arg, int lun_id) -{ - return (0); -} - -/* - * Data movement routine for the CTL ioctl frontend port. - */ -static int -ctl_ioctl_do_datamove(struct ctl_scsiio *ctsio) -{ - struct ctl_sg_entry *ext_sglist, *kern_sglist; - struct ctl_sg_entry ext_entry, kern_entry; - int ext_sglen, ext_sg_entries, kern_sg_entries; - int ext_sg_start, ext_offset; - int len_to_copy, len_copied; - int kern_watermark, ext_watermark; - int ext_sglist_malloced; - int i, j; - - ext_sglist_malloced = 0; - ext_sg_start = 0; - ext_offset = 0; - - CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove\n")); - - /* - * If this flag is set, fake the data transfer. - */ - if (ctsio->io_hdr.flags & CTL_FLAG_NO_DATAMOVE) { - ctsio->ext_data_filled = ctsio->ext_data_len; - goto bailout; - } - - /* - * To simplify things here, if we have a single buffer, stick it in - * a S/G entry and just make it a single entry S/G list. - */ - if (ctsio->io_hdr.flags & CTL_FLAG_EDPTR_SGLIST) { - int len_seen; - - ext_sglen = ctsio->ext_sg_entries * sizeof(*ext_sglist); - - ext_sglist = (struct ctl_sg_entry *)malloc(ext_sglen, M_CTL, - M_WAITOK); - ext_sglist_malloced = 1; - if (copyin(ctsio->ext_data_ptr, ext_sglist, - ext_sglen) != 0) { - ctl_set_internal_failure(ctsio, - /*sks_valid*/ 0, - /*retry_count*/ 0); - goto bailout; - } - ext_sg_entries = ctsio->ext_sg_entries; - len_seen = 0; - for (i = 0; i < ext_sg_entries; i++) { - if ((len_seen + ext_sglist[i].len) >= - ctsio->ext_data_filled) { - ext_sg_start = i; - ext_offset = ctsio->ext_data_filled - len_seen; - break; - } - len_seen += ext_sglist[i].len; - } - } else { - ext_sglist = &ext_entry; - ext_sglist->addr = ctsio->ext_data_ptr; - ext_sglist->len = ctsio->ext_data_len; - ext_sg_entries = 1; - ext_sg_start = 0; - ext_offset = ctsio->ext_data_filled; - } - - if (ctsio->kern_sg_entries > 0) { - kern_sglist = (struct ctl_sg_entry *)ctsio->kern_data_ptr; - kern_sg_entries = ctsio->kern_sg_entries; - } else { - kern_sglist = &kern_entry; - kern_sglist->addr = ctsio->kern_data_ptr; - kern_sglist->len = ctsio->kern_data_len; - kern_sg_entries = 1; - } - - - kern_watermark = 0; - ext_watermark = ext_offset; - len_copied = 0; - for (i = ext_sg_start, j = 0; - i < ext_sg_entries && j < kern_sg_entries;) { - uint8_t *ext_ptr, *kern_ptr; - - len_to_copy = MIN(ext_sglist[i].len - ext_watermark, - kern_sglist[j].len - kern_watermark); - - ext_ptr = (uint8_t *)ext_sglist[i].addr; - ext_ptr = ext_ptr + ext_watermark; - if (ctsio->io_hdr.flags & CTL_FLAG_BUS_ADDR) { - /* - * XXX KDM fix this! - */ - panic("need to implement bus address support"); -#if 0 - kern_ptr = bus_to_virt(kern_sglist[j].addr); -#endif - } else - kern_ptr = (uint8_t *)kern_sglist[j].addr; - kern_ptr = kern_ptr + kern_watermark; - - kern_watermark += len_to_copy; - ext_watermark += len_to_copy; - - if ((ctsio->io_hdr.flags & CTL_FLAG_DATA_MASK) == - CTL_FLAG_DATA_IN) { - CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: copying %d " - "bytes to user\n", len_to_copy)); - CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: from %p " - "to %p\n", kern_ptr, ext_ptr)); - if (copyout(kern_ptr, ext_ptr, len_to_copy) != 0) { - ctl_set_internal_failure(ctsio, - /*sks_valid*/ 0, - /*retry_count*/ 0); - goto bailout; - } - } else { - CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: copying %d " - "bytes from user\n", len_to_copy)); - CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: from %p " - "to %p\n", ext_ptr, kern_ptr)); - if (copyin(ext_ptr, kern_ptr, len_to_copy)!= 0){ - ctl_set_internal_failure(ctsio, - /*sks_valid*/ 0, - /*retry_count*/0); - goto bailout; - } - } - - len_copied += len_to_copy; - - if (ext_sglist[i].len == ext_watermark) { - i++; - ext_watermark = 0; - } - - if (kern_sglist[j].len == kern_watermark) { - j++; - kern_watermark = 0; - } - } - - ctsio->ext_data_filled += len_copied; - - CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: ext_sg_entries: %d, " - "kern_sg_entries: %d\n", ext_sg_entries, - kern_sg_entries)); - CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: ext_data_len = %d, " - "kern_data_len = %d\n", ctsio->ext_data_len, - ctsio->kern_data_len)); - - - /* XXX KDM set residual?? */ -bailout: - - if (ext_sglist_malloced != 0) - free(ext_sglist, M_CTL); - - return (CTL_RETVAL_COMPLETE); -} - /* * Serialize a command that went down the "wrong" side, and so was sent to * this controller for execution. The logic is a little different than the @@ -1978,117 +1738,6 @@ ctl_serialize_other_sc_cmd(struct ctl_sc return (retval); } -static int -ctl_ioctl_submit_wait(union ctl_io *io) -{ - struct ctl_fe_ioctl_params params; - ctl_fe_ioctl_state last_state; - int done, retval; - - retval = 0; - - bzero(¶ms, sizeof(params)); - - mtx_init(¶ms.ioctl_mtx, "ctliocmtx", NULL, MTX_DEF); - cv_init(¶ms.sem, "ctlioccv"); - params.state = CTL_IOCTL_INPROG; - last_state = params.state; - - io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = ¶ms; - - CTL_DEBUG_PRINT(("ctl_ioctl_submit_wait\n")); - - /* This shouldn't happen */ - if ((retval = ctl_queue(io)) != CTL_RETVAL_COMPLETE) - return (retval); - - done = 0; - - do { - mtx_lock(¶ms.ioctl_mtx); - /* - * Check the state here, and don't sleep if the state has - * already changed (i.e. wakeup has already occured, but we - * weren't waiting yet). - */ - if (params.state == last_state) { - /* XXX KDM cv_wait_sig instead? */ - cv_wait(¶ms.sem, ¶ms.ioctl_mtx); - } - last_state = params.state; - - switch (params.state) { - case CTL_IOCTL_INPROG: - /* Why did we wake up? */ - /* XXX KDM error here? */ - mtx_unlock(¶ms.ioctl_mtx); - break; - case CTL_IOCTL_DATAMOVE: - CTL_DEBUG_PRINT(("got CTL_IOCTL_DATAMOVE\n")); - - /* - * change last_state back to INPROG to avoid - * deadlock on subsequent data moves. - */ - params.state = last_state = CTL_IOCTL_INPROG; - - mtx_unlock(¶ms.ioctl_mtx); - ctl_ioctl_do_datamove(&io->scsiio); - /* - * Note that in some cases, most notably writes, - * this will queue the I/O and call us back later. - * In other cases, generally reads, this routine - * will immediately call back and wake us up, - * probably using our own context. - */ - io->scsiio.be_move_done(io); - break; - case CTL_IOCTL_DONE: - mtx_unlock(¶ms.ioctl_mtx); - CTL_DEBUG_PRINT(("got CTL_IOCTL_DONE\n")); - done = 1; - break; - default: - mtx_unlock(¶ms.ioctl_mtx); - /* XXX KDM error here? */ - break; - } - } while (done == 0); - - mtx_destroy(¶ms.ioctl_mtx); - cv_destroy(¶ms.sem); - - return (CTL_RETVAL_COMPLETE); -} - -static void -ctl_ioctl_datamove(union ctl_io *io) -{ - struct ctl_fe_ioctl_params *params; - - params = (struct ctl_fe_ioctl_params *) - io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; - - mtx_lock(¶ms->ioctl_mtx); - params->state = CTL_IOCTL_DATAMOVE; - cv_broadcast(¶ms->sem); - mtx_unlock(¶ms->ioctl_mtx); -} - -static void -ctl_ioctl_done(union ctl_io *io) -{ - struct ctl_fe_ioctl_params *params; - - params = (struct ctl_fe_ioctl_params *) - io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; - - mtx_lock(¶ms->ioctl_mtx); - params->state = CTL_IOCTL_DONE; - cv_broadcast(¶ms->sem); - mtx_unlock(¶ms->ioctl_mtx); -} - /* * Returns 0 for success, errno for failure. */ @@ -2331,57 +1980,9 @@ ctl_ioctl(struct cdev *dev, u_long cmd, retval = 0; switch (cmd) { - case CTL_IO: { - union ctl_io *io; - void *pool_tmp; - - /* - * If we haven't been "enabled", don't allow any SCSI I/O - * to this FETD. - */ - if ((softc->ioctl_info.flags & CTL_IOCTL_FLAG_ENABLED) == 0) { - retval = EPERM; - break; - } - - io = ctl_alloc_io(softc->ioctl_info.port.ctl_pool_ref); - - /* - * Need to save the pool reference so it doesn't get - * spammed by the user's ctl_io. - */ - pool_tmp = io->io_hdr.pool; - memcpy(io, (void *)addr, sizeof(*io)); - io->io_hdr.pool = pool_tmp; - - /* - * No status yet, so make sure the status is set properly. - */ - io->io_hdr.status = CTL_STATUS_NONE; - - /* - * The user sets the initiator ID, target and LUN IDs. - */ - io->io_hdr.nexus.targ_port = softc->ioctl_info.port.targ_port; - io->io_hdr.flags |= CTL_FLAG_USER_REQ; - if ((io->io_hdr.io_type == CTL_IO_SCSI) - && (io->scsiio.tag_type != CTL_TAG_UNTAGGED)) - io->scsiio.tag_num = softc->ioctl_info.cur_tag_num++; - - retval = ctl_ioctl_submit_wait(io); - - if (retval != 0) { - ctl_free_io(io); - break; - } - - memcpy((void *)addr, io, sizeof(*io)); - - /* return this to our pool */ - ctl_free_io(io); - + case CTL_IO: + retval = ctl_ioctl_io(dev, cmd, addr, flag, td); break; - } case CTL_ENABLE_PORT: case CTL_DISABLE_PORT: case CTL_SET_PORT_WWNS: { Modified: head/sys/cam/ctl/ctl.h ============================================================================== --- head/sys/cam/ctl/ctl.h Sat Aug 15 13:34:38 2015 (r286806) +++ head/sys/cam/ctl/ctl.h Sat Aug 15 15:42:21 2015 (r286807) @@ -194,6 +194,8 @@ void ctl_portDB_changed(int portnum); #ifdef notyet void ctl_init_isc_msg(void); #endif +int ctl_ioctl_io(struct cdev *dev, u_long cmd, caddr_t addr, int flag, + struct thread *td); /* * KPI to manipulate LUN/port options Added: head/sys/cam/ctl/ctl_frontend_ioctl.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/cam/ctl/ctl_frontend_ioctl.c Sat Aug 15 15:42:21 2015 (r286807) @@ -0,0 +1,470 @@ +/*- + * Copyright (c) 2003-2009 Silicon Graphics International Corp. + * Copyright (c) 2012 The FreeBSD Foundation + * Copyright (c) 2015 Alexander Motin + * 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, + * without modification, immediately at the beginning of the file. + * 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 ``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 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct cfi_softc { + uint32_t cur_tag_num; + struct ctl_port port; +}; + +static struct cfi_softc cfi_softc; + +static int cfi_init(void); +static void cfi_shutdown(void); +static void cfi_online(void *arg); +static void cfi_offline(void *arg); +static int cfi_lun_enable(void *arg, int lun_id); +static int cfi_lun_disable(void *arg, int lun_id); +static void cfi_datamove(union ctl_io *io); +static void cfi_done(union ctl_io *io); + +static struct ctl_frontend cfi_frontend = +{ + .name = "ioctl", + .init = cfi_init, + .shutdown = cfi_shutdown, +}; +CTL_FRONTEND_DECLARE(ctlioctl, cfi_frontend); + +static int +cfi_init(void) +{ + struct cfi_softc *isoftc = &cfi_softc; + struct ctl_port *port; + + memset(isoftc, 0, sizeof(*isoftc)); + + port = &isoftc->port; + port->frontend = &cfi_frontend; + port->port_type = CTL_PORT_IOCTL; + port->num_requested_ctl_io = 100; + port->port_name = "ioctl"; + port->port_online = cfi_online; + port->port_offline = cfi_offline; + port->onoff_arg = &isoftc; + port->lun_enable = cfi_lun_enable; + port->lun_disable = cfi_lun_disable; + port->targ_lun_arg = &isoftc; + port->fe_datamove = cfi_datamove; + port->fe_done = cfi_done; + port->max_targets = 1; + port->max_target_id = 0; + port->max_initiators = 1; + + if (ctl_port_register(port) != 0) { + printf("%s: ioctl port registration failed\n", __func__); + return (0); + } + ctl_port_online(port); + return (0); +} + +void +cfi_shutdown(void) +{ + struct cfi_softc *isoftc = &cfi_softc; + struct ctl_port *port; + + port = &isoftc->port; + ctl_port_offline(port); + if (ctl_port_deregister(&isoftc->port) != 0) + printf("%s: ctl_frontend_deregister() failed\n", __func__); +} + +static void +cfi_online(void *arg) +{ +} + +static void +cfi_offline(void *arg) +{ +} + +static int +cfi_lun_enable(void *arg, int lun_id) +{ + + return (0); +} + +static int +cfi_lun_disable(void *arg, int lun_id) +{ + + return (0); +} + +/* + * Data movement routine for the CTL ioctl frontend port. + */ +static int +ctl_ioctl_do_datamove(struct ctl_scsiio *ctsio) +{ + struct ctl_sg_entry *ext_sglist, *kern_sglist; + struct ctl_sg_entry ext_entry, kern_entry; + int ext_sglen, ext_sg_entries, kern_sg_entries; + int ext_sg_start, ext_offset; + int len_to_copy, len_copied; + int kern_watermark, ext_watermark; + int ext_sglist_malloced; + int i, j; + + ext_sglist_malloced = 0; + ext_sg_start = 0; + ext_offset = 0; + + CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove\n")); + + /* + * If this flag is set, fake the data transfer. + */ + if (ctsio->io_hdr.flags & CTL_FLAG_NO_DATAMOVE) { + ctsio->ext_data_filled = ctsio->ext_data_len; + goto bailout; + } + + /* + * To simplify things here, if we have a single buffer, stick it in + * a S/G entry and just make it a single entry S/G list. + */ + if (ctsio->io_hdr.flags & CTL_FLAG_EDPTR_SGLIST) { + int len_seen; + + ext_sglen = ctsio->ext_sg_entries * sizeof(*ext_sglist); + + ext_sglist = (struct ctl_sg_entry *)malloc(ext_sglen, M_CTL, + M_WAITOK); + ext_sglist_malloced = 1; + if (copyin(ctsio->ext_data_ptr, ext_sglist, + ext_sglen) != 0) { + ctl_set_internal_failure(ctsio, + /*sks_valid*/ 0, + /*retry_count*/ 0); + goto bailout; + } + ext_sg_entries = ctsio->ext_sg_entries; + len_seen = 0; + for (i = 0; i < ext_sg_entries; i++) { + if ((len_seen + ext_sglist[i].len) >= + ctsio->ext_data_filled) { + ext_sg_start = i; + ext_offset = ctsio->ext_data_filled - len_seen; + break; + } + len_seen += ext_sglist[i].len; + } + } else { + ext_sglist = &ext_entry; + ext_sglist->addr = ctsio->ext_data_ptr; + ext_sglist->len = ctsio->ext_data_len; + ext_sg_entries = 1; + ext_sg_start = 0; + ext_offset = ctsio->ext_data_filled; + } + + if (ctsio->kern_sg_entries > 0) { + kern_sglist = (struct ctl_sg_entry *)ctsio->kern_data_ptr; + kern_sg_entries = ctsio->kern_sg_entries; + } else { + kern_sglist = &kern_entry; + kern_sglist->addr = ctsio->kern_data_ptr; + kern_sglist->len = ctsio->kern_data_len; + kern_sg_entries = 1; + } + + + kern_watermark = 0; + ext_watermark = ext_offset; + len_copied = 0; + for (i = ext_sg_start, j = 0; + i < ext_sg_entries && j < kern_sg_entries;) { + uint8_t *ext_ptr, *kern_ptr; + + len_to_copy = MIN(ext_sglist[i].len - ext_watermark, + kern_sglist[j].len - kern_watermark); + + ext_ptr = (uint8_t *)ext_sglist[i].addr; + ext_ptr = ext_ptr + ext_watermark; + if (ctsio->io_hdr.flags & CTL_FLAG_BUS_ADDR) { + /* + * XXX KDM fix this! + */ + panic("need to implement bus address support"); +#if 0 + kern_ptr = bus_to_virt(kern_sglist[j].addr); +#endif + } else + kern_ptr = (uint8_t *)kern_sglist[j].addr; + kern_ptr = kern_ptr + kern_watermark; + + kern_watermark += len_to_copy; + ext_watermark += len_to_copy; + + if ((ctsio->io_hdr.flags & CTL_FLAG_DATA_MASK) == + CTL_FLAG_DATA_IN) { + CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: copying %d " + "bytes to user\n", len_to_copy)); + CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: from %p " + "to %p\n", kern_ptr, ext_ptr)); + if (copyout(kern_ptr, ext_ptr, len_to_copy) != 0) { + ctl_set_internal_failure(ctsio, + /*sks_valid*/ 0, + /*retry_count*/ 0); + goto bailout; + } + } else { + CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: copying %d " + "bytes from user\n", len_to_copy)); + CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: from %p " + "to %p\n", ext_ptr, kern_ptr)); + if (copyin(ext_ptr, kern_ptr, len_to_copy)!= 0){ + ctl_set_internal_failure(ctsio, + /*sks_valid*/ 0, + /*retry_count*/0); + goto bailout; + } + } + + len_copied += len_to_copy; + + if (ext_sglist[i].len == ext_watermark) { + i++; + ext_watermark = 0; + } + + if (kern_sglist[j].len == kern_watermark) { + j++; + kern_watermark = 0; + } + } + + ctsio->ext_data_filled += len_copied; + + CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: ext_sg_entries: %d, " + "kern_sg_entries: %d\n", ext_sg_entries, + kern_sg_entries)); + CTL_DEBUG_PRINT(("ctl_ioctl_do_datamove: ext_data_len = %d, " + "kern_data_len = %d\n", ctsio->ext_data_len, + ctsio->kern_data_len)); + + + /* XXX KDM set residual?? */ +bailout: + + if (ext_sglist_malloced != 0) + free(ext_sglist, M_CTL); + + return (CTL_RETVAL_COMPLETE); +} + +static void +cfi_datamove(union ctl_io *io) +{ + struct ctl_fe_ioctl_params *params; + + params = (struct ctl_fe_ioctl_params *) + io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + + mtx_lock(¶ms->ioctl_mtx); + params->state = CTL_IOCTL_DATAMOVE; + cv_broadcast(¶ms->sem); + mtx_unlock(¶ms->ioctl_mtx); +} + +static void +cfi_done(union ctl_io *io) +{ + struct ctl_fe_ioctl_params *params; + + params = (struct ctl_fe_ioctl_params *) + io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + + mtx_lock(¶ms->ioctl_mtx); + params->state = CTL_IOCTL_DONE; + cv_broadcast(¶ms->sem); + mtx_unlock(¶ms->ioctl_mtx); +} + +static int +cfi_submit_wait(union ctl_io *io) +{ + struct ctl_fe_ioctl_params params; + ctl_fe_ioctl_state last_state; + int done, retval; + + retval = 0; + + bzero(¶ms, sizeof(params)); + + mtx_init(¶ms.ioctl_mtx, "ctliocmtx", NULL, MTX_DEF); + cv_init(¶ms.sem, "ctlioccv"); + params.state = CTL_IOCTL_INPROG; + last_state = params.state; + + io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = ¶ms; + + CTL_DEBUG_PRINT(("cfi_submit_wait\n")); + + /* This shouldn't happen */ + if ((retval = ctl_queue(io)) != CTL_RETVAL_COMPLETE) + return (retval); + + done = 0; + + do { + mtx_lock(¶ms.ioctl_mtx); + /* + * Check the state here, and don't sleep if the state has + * already changed (i.e. wakeup has already occured, but we + * weren't waiting yet). + */ + if (params.state == last_state) { + /* XXX KDM cv_wait_sig instead? */ + cv_wait(¶ms.sem, ¶ms.ioctl_mtx); + } + last_state = params.state; + + switch (params.state) { + case CTL_IOCTL_INPROG: + /* Why did we wake up? */ + /* XXX KDM error here? */ + mtx_unlock(¶ms.ioctl_mtx); + break; + case CTL_IOCTL_DATAMOVE: + CTL_DEBUG_PRINT(("got CTL_IOCTL_DATAMOVE\n")); + + /* + * change last_state back to INPROG to avoid + * deadlock on subsequent data moves. + */ + params.state = last_state = CTL_IOCTL_INPROG; + + mtx_unlock(¶ms.ioctl_mtx); + ctl_ioctl_do_datamove(&io->scsiio); + /* + * Note that in some cases, most notably writes, + * this will queue the I/O and call us back later. + * In other cases, generally reads, this routine + * will immediately call back and wake us up, + * probably using our own context. + */ + io->scsiio.be_move_done(io); + break; + case CTL_IOCTL_DONE: + mtx_unlock(¶ms.ioctl_mtx); + CTL_DEBUG_PRINT(("got CTL_IOCTL_DONE\n")); + done = 1; + break; + default: + mtx_unlock(¶ms.ioctl_mtx); + /* XXX KDM error here? */ + break; + } + } while (done == 0); + + mtx_destroy(¶ms.ioctl_mtx); + cv_destroy(¶ms.sem); + + return (CTL_RETVAL_COMPLETE); +} + +int +ctl_ioctl_io(struct cdev *dev, u_long cmd, caddr_t addr, int flag, + struct thread *td) +{ + union ctl_io *io; + void *pool_tmp; + int retval = 0; + + /* + * If we haven't been "enabled", don't allow any SCSI I/O + * to this FETD. + */ + if ((cfi_softc.port.status & CTL_PORT_STATUS_ONLINE) == 0) + return (EPERM); + + io = ctl_alloc_io(cfi_softc.port.ctl_pool_ref); + + /* + * Need to save the pool reference so it doesn't get + * spammed by the user's ctl_io. + */ + pool_tmp = io->io_hdr.pool; + memcpy(io, (void *)addr, sizeof(*io)); + io->io_hdr.pool = pool_tmp; + + /* + * No status yet, so make sure the status is set properly. + */ + io->io_hdr.status = CTL_STATUS_NONE; + + /* + * The user sets the initiator ID, target and LUN IDs. + */ + io->io_hdr.nexus.targ_port = cfi_softc.port.targ_port; + io->io_hdr.flags |= CTL_FLAG_USER_REQ; + if ((io->io_hdr.io_type == CTL_IO_SCSI) && + (io->scsiio.tag_type != CTL_TAG_UNTAGGED)) + io->scsiio.tag_num = cfi_softc.cur_tag_num++; + + retval = cfi_submit_wait(io); + if (retval == 0) + memcpy((void *)addr, io, sizeof(*io)); + ctl_free_io(io); + return (retval); +} Modified: head/sys/cam/ctl/ctl_private.h ============================================================================== --- head/sys/cam/ctl/ctl_private.h Sat Aug 15 13:34:38 2015 (r286806) +++ head/sys/cam/ctl/ctl_private.h Sat Aug 15 15:42:21 2015 (r286807) @@ -69,18 +69,6 @@ struct ctl_io_pool { }; typedef enum { - CTL_IOCTL_FLAG_NONE = 0x00, - CTL_IOCTL_FLAG_ENABLED = 0x01 -} ctl_ioctl_flags; - -struct ctl_ioctl_info { - ctl_ioctl_flags flags; - uint32_t cur_tag_num; - struct ctl_port port; - char port_name[24]; -}; - -typedef enum { CTL_SER_BLOCK, CTL_SER_BLOCKOPT, CTL_SER_EXTENT, @@ -460,7 +448,6 @@ struct ctl_softc { int inquiry_pq_no_lun; struct sysctl_ctx_list sysctl_ctx; struct sysctl_oid *sysctl_tree; - struct ctl_ioctl_info ioctl_info; void *othersc_pool; struct proc *ctl_proc; int targ_online; Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Sat Aug 15 13:34:38 2015 (r286806) +++ head/sys/conf/files Sat Aug 15 15:42:21 2015 (r286807) @@ -83,6 +83,7 @@ cam/ctl/ctl_backend_ramdisk.c optional c cam/ctl/ctl_cmd_table.c optional ctl cam/ctl/ctl_frontend.c optional ctl cam/ctl/ctl_frontend_cam_sim.c optional ctl +cam/ctl/ctl_frontend_ioctl.c optional ctl cam/ctl/ctl_frontend_iscsi.c optional ctl cam/ctl/ctl_scsi_all.c optional ctl cam/ctl/ctl_tpc.c optional ctl *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Sat Aug 15 15:44:09 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E34359BAEE7; Sat, 15 Aug 2015 15:44:09 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D443E18EE; Sat, 15 Aug 2015 15:44:09 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FFi97q033521; Sat, 15 Aug 2015 15:44:09 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FFi9Zo033520; Sat, 15 Aug 2015 15:44:09 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508151544.t7FFi9Zo033520@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Sat, 15 Aug 2015 15:44:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286808 - head/sys/dev/vt X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 15:44:10 -0000 Author: marcel Date: Sat Aug 15 15:44:09 2015 New Revision: 286808 URL: https://svnweb.freebsd.org/changeset/base/286808 Log: Improve the VT initialization message: have it say what the resolution is. For text mode this is the number of columns by the number of rows. Include the name of the driver in a much less prominent way. Modified: head/sys/dev/vt/vt_core.c Modified: head/sys/dev/vt/vt_core.c ============================================================================== --- head/sys/dev/vt/vt_core.c Sat Aug 15 15:42:21 2015 (r286807) +++ head/sys/dev/vt/vt_core.c Sat Aug 15 15:44:09 2015 (r286808) @@ -264,8 +264,9 @@ vt_update_static(void *dummy) if (!vty_enabled(VTY_VT)) return; if (main_vd->vd_driver != NULL) - printf("VT: running with driver \"%s\".\n", - main_vd->vd_driver->vd_name); + printf("VT(%s): %s %ux%u\n", main_vd->vd_driver->vd_name, + (main_vd->vd_flags & VDF_TEXTMODE) ? "text" : "resolution", + main_vd->vd_width, main_vd->vd_height); else printf("VT: init without driver.\n"); From owner-svn-src-head@freebsd.org Sat Aug 15 16:13:29 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BC23B9BA4B2; Sat, 15 Aug 2015 16:13:29 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9C9B21C3B; Sat, 15 Aug 2015 16:13:29 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FGDTtR046414; Sat, 15 Aug 2015 16:13:29 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FGDTSJ046413; Sat, 15 Aug 2015 16:13:29 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508151613.t7FGDTSJ046413@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Sat, 15 Aug 2015 16:13:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286809 - head/sys/dev/vt/hw/efifb X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 16:13:29 -0000 Author: marcel Date: Sat Aug 15 16:13:28 2015 New Revision: 286809 URL: https://svnweb.freebsd.org/changeset/base/286809 Log: Improve support for Macs that have a stride not equal to the horizonal resolution (width). In those cases fb_bpp ended up completely wrong -- as in 6 bytes per pixel or something like that. Since we already have a way to calculate fb_depth given the masks and fb_bpp is effectively the same as fb_depth, all we need to do is make sure fb_bpp is rounded to the next multiple of the number of bits in a byte -- we assume we can divide by the number of bits in a byte throughout vt(4). While here: - simplify how we calculate fb_depth. - use fb_bpp instead of fb_depth to calculate fb_stride; we know we can divide fb_bpp. - don't limit fb_width and fb_height by VT_FB_DEFAULT_WIDTH and VT_FB_DEFAULT_HEIGHT (resp.). Those constants have not relation to the size of the frame buffer. This at least fixes "lower-resolution" Macs. We're talking 1280x1024 or so. There still is a problem with 27" Macs, which typically have a horizontal resolution over 2K. PR: 193745 (partial) Ok'd by: emaste@ Modified: head/sys/dev/vt/hw/efifb/efifb.c Modified: head/sys/dev/vt/hw/efifb/efifb.c ============================================================================== --- head/sys/dev/vt/hw/efifb/efifb.c Sat Aug 15 15:44:09 2015 (r286808) +++ head/sys/dev/vt/hw/efifb/efifb.c Sat Aug 15 16:13:28 2015 (r286809) @@ -96,7 +96,6 @@ vt_efifb_probe(struct vt_device *vd) static int vt_efifb_init(struct vt_device *vd) { - int depth, d; struct fb_info *info; struct efi_fb *efifb; caddr_t kmdp; @@ -116,16 +115,13 @@ vt_efifb_init(struct vt_device *vd) info->fb_height = efifb->fb_height; info->fb_width = efifb->fb_width; - depth = fls(efifb->fb_mask_red); - d = fls(efifb->fb_mask_green); - depth = d > depth ? d : depth; - d = fls(efifb->fb_mask_blue); - depth = d > depth ? d : depth; - d = fls(efifb->fb_mask_reserved); - depth = d > depth ? d : depth; - info->fb_depth = depth; + info->fb_depth = fls(efifb->fb_mask_red | efifb->fb_mask_green | + efifb->fb_mask_blue | efifb->fb_mask_reserved); + /* Round to a multiple of the bits in a byte. */ + info->fb_bpp = (info->fb_depth + NBBY - 1) & ~(NBBY - 1); - info->fb_stride = efifb->fb_stride * (depth / 8); + /* Stride in bytes, not pixels */ + info->fb_stride = efifb->fb_stride * (info->fb_bpp / NBBY); vt_generate_cons_palette(info->fb_cmap, COLOR_FORMAT_RGB, efifb->fb_mask_red, ffs(efifb->fb_mask_red) - 1, @@ -137,16 +133,6 @@ vt_efifb_init(struct vt_device *vd) info->fb_vbase = (intptr_t)pmap_mapdev_attr(info->fb_pbase, info->fb_size, VM_MEMATTR_WRITE_COMBINING); - /* Get pixel storage size. */ - info->fb_bpp = info->fb_stride / info->fb_width * 8; - - /* - * Early FB driver work with static window buffer, so reduce to minimal - * size, buffer or screen. - */ - info->fb_width = MIN(info->fb_width, VT_FB_DEFAULT_WIDTH); - info->fb_height = MIN(info->fb_height, VT_FB_DEFAULT_HEIGHT); - vt_fb_init(vd); return (CN_INTERNAL); From owner-svn-src-head@freebsd.org Sat Aug 15 18:22:16 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D3BB59BA475; Sat, 15 Aug 2015 18:22:16 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C07E61036; Sat, 15 Aug 2015 18:22:16 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FIMG3O000185; Sat, 15 Aug 2015 18:22:16 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FIMG5N000184; Sat, 15 Aug 2015 18:22:16 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508151822.t7FIMG5N000184@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sat, 15 Aug 2015 18:22:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286811 - head/sys/cam/ctl X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 18:22:17 -0000 Author: mav Date: Sat Aug 15 18:22:16 2015 New Revision: 286811 URL: https://svnweb.freebsd.org/changeset/base/286811 Log: Polish sizes processing. Modified: head/sys/cam/ctl/ctl_backend_block.c Modified: head/sys/cam/ctl/ctl_backend_block.c ============================================================================== --- head/sys/cam/ctl/ctl_backend_block.c Sat Aug 15 17:52:55 2015 (r286810) +++ head/sys/cam/ctl/ctl_backend_block.c Sat Aug 15 18:22:16 2015 (r286811) @@ -169,7 +169,6 @@ struct ctl_be_block_lun { uint64_t size_blocks; uint64_t size_bytes; uint32_t blocksize; - int blocksize_shift; uint16_t pblockexp; uint16_t pblockoff; uint16_t ublockexp; @@ -772,7 +771,7 @@ ctl_be_block_gls_file(struct ctl_be_bloc DPRINTF("entered\n"); - off = roff = ((off_t)lbalen->lba) << be_lun->blocksize_shift; + off = roff = ((off_t)lbalen->lba) * be_lun->blocksize; vn_lock(be_lun->vn, LK_SHARED | LK_RETRY); error = VOP_IOCTL(be_lun->vn, FIOSEEKHOLE, &off, 0, curthread->td_ucred, curthread); @@ -790,10 +789,9 @@ ctl_be_block_gls_file(struct ctl_be_bloc } VOP_UNLOCK(be_lun->vn, 0); - off >>= be_lun->blocksize_shift; data = (struct scsi_get_lba_status_data *)io->scsiio.kern_data_ptr; scsi_u64to8b(lbalen->lba, data->descr[0].addr); - scsi_ulto4b(MIN(UINT32_MAX, off - lbalen->lba), + scsi_ulto4b(MIN(UINT32_MAX, off / be_lun->blocksize - lbalen->lba), data->descr[0].length); data->descr[0].status = status; @@ -815,14 +813,14 @@ ctl_be_block_getattr_file(struct ctl_be_ if (strcmp(attrname, "blocksused") == 0) { error = VOP_GETATTR(be_lun->vn, &vattr, curthread->td_ucred); if (error == 0) - val = vattr.va_bytes >> be_lun->blocksize_shift; + val = vattr.va_bytes / be_lun->blocksize; } if (strcmp(attrname, "blocksavail") == 0 && (be_lun->vn->v_iflag & VI_DOOMED) == 0) { error = VFS_STATFS(be_lun->vn->v_mount, &statfs); if (error == 0) - val = (statfs.f_bavail * statfs.f_bsize) >> - be_lun->blocksize_shift; + val = statfs.f_bavail * statfs.f_bsize / + be_lun->blocksize; } VOP_UNLOCK(be_lun->vn, 0); return (val); @@ -933,7 +931,7 @@ ctl_be_block_gls_zvol(struct ctl_be_bloc DPRINTF("entered\n"); - off = roff = ((off_t)lbalen->lba) << be_lun->blocksize_shift; + off = roff = ((off_t)lbalen->lba) * be_lun->blocksize; error = (*dev_data->csw->d_ioctl)(dev_data->cdev, FIOSEEKHOLE, (caddr_t)&off, FREAD, curthread); if (error == 0 && off > roff) @@ -949,10 +947,9 @@ ctl_be_block_gls_zvol(struct ctl_be_bloc } } - off >>= be_lun->blocksize_shift; data = (struct scsi_get_lba_status_data *)io->scsiio.kern_data_ptr; scsi_u64to8b(lbalen->lba, data->descr[0].addr); - scsi_ulto4b(MIN(UINT32_MAX, off - lbalen->lba), + scsi_ulto4b(MIN(UINT32_MAX, off / be_lun->blocksize - lbalen->lba), data->descr[0].length); data->descr[0].status = status; @@ -1865,7 +1862,7 @@ ctl_be_block_open_dev(struct ctl_be_bloc struct cdevsw *devsw; char *value; int error, atomic, maxio, unmap; - off_t ps, pss, po, pos, us, uss, uo, uos; + off_t ps, pss, po, pos, us, uss, uo, uos, tmp; params = &be_lun->params; @@ -1908,8 +1905,7 @@ ctl_be_block_open_dev(struct ctl_be_bloc return (ENODEV); } - error = devsw->d_ioctl(dev, DIOCGSECTORSIZE, - (caddr_t)&be_lun->blocksize, FREAD, + error = devsw->d_ioctl(dev, DIOCGSECTORSIZE, (caddr_t)&tmp, FREAD, curthread); if (error) { snprintf(req->error_str, sizeof(req->error_str), @@ -1924,15 +1920,9 @@ ctl_be_block_open_dev(struct ctl_be_bloc * the user is asking for is an even multiple of the underlying * device's blocksize. */ - if ((params->blocksize_bytes != 0) - && (params->blocksize_bytes > be_lun->blocksize)) { - uint32_t bs_multiple, tmp_blocksize; - - bs_multiple = params->blocksize_bytes / be_lun->blocksize; - - tmp_blocksize = bs_multiple * be_lun->blocksize; - - if (tmp_blocksize == params->blocksize_bytes) { + if ((params->blocksize_bytes != 0) && + (params->blocksize_bytes >= tmp)) { + if (params->blocksize_bytes % tmp == 0) { be_lun->blocksize = params->blocksize_bytes; } else { snprintf(req->error_str, sizeof(req->error_str), @@ -1943,17 +1933,16 @@ ctl_be_block_open_dev(struct ctl_be_bloc return (EINVAL); } - } else if ((params->blocksize_bytes != 0) - && (params->blocksize_bytes != be_lun->blocksize)) { + } else if (params->blocksize_bytes != 0) { snprintf(req->error_str, sizeof(req->error_str), "requested blocksize %u < backing device " "blocksize %u", params->blocksize_bytes, be_lun->blocksize); return (EINVAL); - } + } else + be_lun->blocksize = tmp; - error = devsw->d_ioctl(dev, DIOCGMEDIASIZE, - (caddr_t)&be_lun->size_bytes, FREAD, + error = devsw->d_ioctl(dev, DIOCGMEDIASIZE, (caddr_t)&tmp, FREAD, curthread); if (error) { snprintf(req->error_str, sizeof(req->error_str), @@ -1964,7 +1953,7 @@ ctl_be_block_open_dev(struct ctl_be_bloc } if (params->lun_size_bytes != 0) { - if (params->lun_size_bytes > be_lun->size_bytes) { + if (params->lun_size_bytes > tmp) { snprintf(req->error_str, sizeof(req->error_str), "requested LUN size %ju > backing device " "size %ju", @@ -1974,7 +1963,8 @@ ctl_be_block_open_dev(struct ctl_be_bloc } be_lun->size_bytes = params->lun_size_bytes; - } + } else + be_lun->size_bytes = tmp; error = devsw->d_ioctl(dev, DIOCGSTRIPESIZE, (caddr_t)&ps, FREAD, curthread); @@ -2159,14 +2149,8 @@ ctl_be_block_open(struct ctl_be_block_so } VOP_UNLOCK(be_lun->vn, 0); - if (error != 0) { + if (error != 0) ctl_be_block_close(be_lun); - return (error); - } - - be_lun->blocksize_shift = fls(be_lun->blocksize) - 1; - be_lun->size_blocks = be_lun->size_bytes >> be_lun->blocksize_shift; - return (0); } @@ -2223,10 +2207,14 @@ ctl_be_block_create(struct ctl_be_block_ goto bailout_error; } be_lun->dev_path = strdup(value, M_CTLBLK); - be_lun->blocksize = 512; - be_lun->blocksize_shift = fls(be_lun->blocksize) - 1; + be_lun->size_bytes = params->lun_size_bytes; + if (params->blocksize_bytes != 0) + be_lun->blocksize = params->blocksize_bytes; + else + be_lun->blocksize = 512; retval = ctl_be_block_open(softc, be_lun, req); + be_lun->size_blocks = be_lun->size_bytes / be_lun->blocksize; if (retval != 0) { retval = 0; req->status = CTL_LUN_WARNING; @@ -2651,10 +2639,9 @@ ctl_be_block_modify(struct ctl_be_block_ error = ctl_be_block_modify_file(be_lun, req); else error = EINVAL; + be_lun->size_blocks = be_lun->size_bytes / be_lun->blocksize; if (error == 0 && be_lun->size_bytes != oldsize) { - be_lun->size_blocks = be_lun->size_bytes >> - be_lun->blocksize_shift; /* * The maximum LBA is the size - 1. From owner-svn-src-head@freebsd.org Sat Aug 15 19:00:39 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AB72C9BA9D0; Sat, 15 Aug 2015 19:00:39 +0000 (UTC) (envelope-from antoine@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9CA811F13; Sat, 15 Aug 2015 19:00:39 +0000 (UTC) (envelope-from antoine@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FJ0d27013642; Sat, 15 Aug 2015 19:00:39 GMT (envelope-from antoine@FreeBSD.org) Received: (from antoine@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FJ0dxt013641; Sat, 15 Aug 2015 19:00:39 GMT (envelope-from antoine@FreeBSD.org) Message-Id: <201508151900.t7FJ0dxt013641@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: antoine set sender to antoine@FreeBSD.org using -f From: Antoine Brodin Date: Sat, 15 Aug 2015 19:00:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286812 - head/lib/libusb X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 19:00:39 -0000 Author: antoine Date: Sat Aug 15 19:00:38 2015 New Revision: 286812 URL: https://svnweb.freebsd.org/changeset/base/286812 Log: bsd.lib.mk has to be included after MLINKS assignment Modified: head/lib/libusb/Makefile Modified: head/lib/libusb/Makefile ============================================================================== --- head/lib/libusb/Makefile Sat Aug 15 18:22:16 2015 (r286811) +++ head/lib/libusb/Makefile Sat Aug 15 19:00:38 2015 (r286812) @@ -70,8 +70,6 @@ CFLAGS+= -DUSB_GLOBAL_INCLUDE_FILE=\"${L CFLAGS+= -I ../../sys .endif -.include - # LibUSB v1.0 MLINKS += libusb.3 libusb_init.3 MLINKS += libusb.3 libusb_exit.3 @@ -259,3 +257,5 @@ MLINKS += libusb20.3 libusb20_me_decode. MLINKS += libusb20.3 libusb20_desc_foreach.3 MLINKS += libusb20.3 libusb20_strerror.3 MLINKS += libusb20.3 libusb20_error_name.3 + +.include From owner-svn-src-head@freebsd.org Sat Aug 15 21:46:03 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6967B9BAEB2; Sat, 15 Aug 2015 21:46:03 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4FF3BEF2; Sat, 15 Aug 2015 21:46:03 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FLk3Cq081567; Sat, 15 Aug 2015 21:46:03 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FLk2ul081565; Sat, 15 Aug 2015 21:46:02 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508152146.t7FLk2ul081565@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sat, 15 Aug 2015 21:46:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286814 - head/sys/dev/ata X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 21:46:03 -0000 Author: mav Date: Sat Aug 15 21:46:02 2015 New Revision: 286814 URL: https://svnweb.freebsd.org/changeset/base/286814 Log: Remove UMA allocation of ATA requests. After CAM replaced old ATA stack, this driver processes no more then one request at a time per channel. Using UMA after that is overkill, so replace it with simple preallocation of one request per channel. MFC after: 2 weeks Modified: head/sys/dev/ata/ata-all.c head/sys/dev/ata/ata-all.h Modified: head/sys/dev/ata/ata-all.c ============================================================================== --- head/sys/dev/ata/ata-all.c Sat Aug 15 19:58:00 2015 (r286813) +++ head/sys/dev/ata/ata-all.c Sat Aug 15 21:46:02 2015 (r286814) @@ -75,7 +75,6 @@ static void ata_uninit(void); MALLOC_DEFINE(M_ATA, "ata_generic", "ATA driver generic layer"); int (*ata_raid_ioctl_func)(u_long cmd, caddr_t data) = NULL; devclass_t ata_devclass; -uma_zone_t ata_request_zone; int ata_dma_check_80pin = 1; /* sysctl vars */ @@ -650,12 +649,7 @@ ata_cam_begin_transaction(device_t dev, struct ata_channel *ch = device_get_softc(dev); struct ata_request *request; - if (!(request = ata_alloc_request())) { - device_printf(dev, "FAILURE - out of memory in start\n"); - ccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(ccb); - return; - } + request = &ch->request; bzero(request, sizeof(*request)); /* setup request */ @@ -794,7 +788,6 @@ ata_cam_process_sense(device_t dev, stru ccb->ccb_h.status |= CAM_AUTOSENSE_FAIL; } - ata_free_request(request); xpt_done(ccb); /* Do error recovery if needed. */ if (fatalerr) @@ -865,10 +858,8 @@ ata_cam_end_transaction(device_t dev, st if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_SCSI_STATUS_ERROR && (ccb->ccb_h.flags & CAM_DIS_AUTOSENSE) == 0) ata_cam_request_sense(dev, request); - else { - ata_free_request(request); + else xpt_done(ccb); - } /* Do error recovery if needed. */ if (fatalerr) ata_reinit(dev); @@ -1148,18 +1139,3 @@ static moduledata_t ata_moduledata = { " DECLARE_MODULE(ata, ata_moduledata, SI_SUB_CONFIGURE, SI_ORDER_SECOND); MODULE_VERSION(ata, 1); MODULE_DEPEND(ata, cam, 1, 1, 1); - -static void -ata_init(void) -{ - ata_request_zone = uma_zcreate("ata_request", sizeof(struct ata_request), - NULL, NULL, NULL, NULL, 0, 0); -} -SYSINIT(ata_register, SI_SUB_DRIVERS, SI_ORDER_SECOND, ata_init, NULL); - -static void -ata_uninit(void) -{ - uma_zdestroy(ata_request_zone); -} -SYSUNINIT(ata_unregister, SI_SUB_DRIVERS, SI_ORDER_SECOND, ata_uninit, NULL); Modified: head/sys/dev/ata/ata-all.h ============================================================================== --- head/sys/dev/ata/ata-all.h Sat Aug 15 19:58:00 2015 (r286813) +++ head/sys/dev/ata/ata-all.h Sat Aug 15 21:46:02 2015 (r286814) @@ -450,6 +450,7 @@ struct ata_channel { struct ata_cam_device curr[16]; /* Current settings */ int requestsense; /* CCB waiting for SENSE. */ struct callout poll_callout; /* Periodic status poll. */ + struct ata_request request; }; /* disk bay/enclosure related */ @@ -507,14 +508,6 @@ int ata_sata_getrev(device_t dev, int ta int ata_request2fis_h2d(struct ata_request *request, u_int8_t *fis); void ata_pm_identify(device_t dev); -/* macros for alloc/free of struct ata_request */ -extern uma_zone_t ata_request_zone; -#define ata_alloc_request() uma_zalloc(ata_request_zone, M_NOWAIT | M_ZERO) -#define ata_free_request(request) { \ - if (!(request->flags & ATA_R_DANGER2)) \ - uma_zfree(ata_request_zone, request); \ - } - MALLOC_DECLARE(M_ATA); /* misc newbus defines */ From owner-svn-src-head@freebsd.org Sat Aug 15 21:47:08 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0D1659BAEED; Sat, 15 Aug 2015 21:47:08 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F1CA01045; Sat, 15 Aug 2015 21:47:07 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FLl7nl081652; Sat, 15 Aug 2015 21:47:07 GMT (envelope-from gonzo@FreeBSD.org) Received: (from gonzo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FLl7DJ081651; Sat, 15 Aug 2015 21:47:07 GMT (envelope-from gonzo@FreeBSD.org) Message-Id: <201508152147.t7FLl7DJ081651@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gonzo set sender to gonzo@FreeBSD.org using -f From: Oleksandr Tymoshenko Date: Sat, 15 Aug 2015 21:47:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286815 - head/sys/boot/uboot/fdt X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 21:47:08 -0000 Author: gonzo Date: Sat Aug 15 21:47:07 2015 New Revision: 286815 URL: https://svnweb.freebsd.org/changeset/base/286815 Log: Make dtb file configurable via loader(8) variable. ubldr already checks "fdt_file" and "fdtfile" U-Boot variables. Add one more check for "fdt_file" loader(8) variable. loader(8) variable takes precedence over u-boot env one Modified: head/sys/boot/uboot/fdt/uboot_fdt.c Modified: head/sys/boot/uboot/fdt/uboot_fdt.c ============================================================================== --- head/sys/boot/uboot/fdt/uboot_fdt.c Sat Aug 15 21:46:02 2015 (r286814) +++ head/sys/boot/uboot/fdt/uboot_fdt.c Sat Aug 15 21:47:07 2015 (r286815) @@ -69,10 +69,11 @@ fdt_platform_load_dtb(void) } /* - * If the U-boot environment contains a variable giving the name of a - * file, use it if we can load and validate it. + * Try to get FDT filename first from loader env and then from u-boot env */ - s = ub_env_get("fdtfile"); + s = getenv("fdt_file"); + if (s == NULL) + s = ub_env_get("fdtfile"); if (s == NULL) s = ub_env_get("fdt_file"); if (s != NULL && *s != '\0') { From owner-svn-src-head@freebsd.org Sat Aug 15 22:21:05 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BDCA69BA42A; Sat, 15 Aug 2015 22:21:05 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from mx1.sbone.de (mx1.sbone.de [IPv6:2a01:4f8:130:3ffc::401:25]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mx1.sbone.de", Issuer "SBone.DE" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 74AEF1D2C; Sat, 15 Aug 2015 22:21:05 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from mail.sbone.de (mail.sbone.de [IPv6:fde9:577b:c1a9:31::2013:587]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.sbone.de (Postfix) with ESMTPS id 9F46225D389C; Sat, 15 Aug 2015 22:21:00 +0000 (UTC) Received: from content-filter.sbone.de (content-filter.sbone.de [IPv6:fde9:577b:c1a9:31::2013:2742]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPS id 2DA07C76FE4; Sat, 15 Aug 2015 22:21:00 +0000 (UTC) X-Virus-Scanned: amavisd-new at sbone.de Received: from mail.sbone.de ([IPv6:fde9:577b:c1a9:31::2013:587]) by content-filter.sbone.de (content-filter.sbone.de [fde9:577b:c1a9:31::2013:2742]) (amavisd-new, port 10024) with ESMTP id cmdbpAKMYnAi; Sat, 15 Aug 2015 22:20:59 +0000 (UTC) Received: from [IPv6:fde9:577b:c1a9:4410:cbf:80dc:dfab:35a7] (unknown [IPv6:fde9:577b:c1a9:4410:cbf:80dc:dfab:35a7]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPSA id 31A82C76FE0; Sat, 15 Aug 2015 22:20:57 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2102\)) Subject: Re: svn commit: r286814 - head/sys/dev/ata From: "Bjoern A. Zeeb" In-Reply-To: <201508152146.t7FLk2ul081565@repo.freebsd.org> Date: Sat, 15 Aug 2015 22:20:37 +0000 Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: quoted-printable Message-Id: <6B5CDF68-5F7D-444C-9DD9-430159C19646@FreeBSD.org> References: <201508152146.t7FLk2ul081565@repo.freebsd.org> To: Alexander Motin X-Mailer: Apple Mail (2.2102) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 22:21:05 -0000 > On 15 Aug 2015, at 21:46 , Alexander Motin wrote: >=20 > Author: mav > Date: Sat Aug 15 21:46:02 2015 > New Revision: 286814 > URL: https://svnweb.freebsd.org/changeset/base/286814 >=20 > Log: > Remove UMA allocation of ATA requests. >=20 > After CAM replaced old ATA stack, this driver processes no more then = one > request at a time per channel. Using UMA after that is overkill, so > replace it with simple preallocation of one request per channel. >=20 > MFC after: 2 weeks >=20 > Modified: > head/sys/dev/ata/ata-all.c > head/sys/dev/ata/ata-all.h >=20 = /scratch/tmp/bz/head.svn/sys/modules/ata/atacore/../../../dev/ata/ata-all.= c:67: warning: 'ata_init' declared 'static' but never defined = /scratch/tmp/bz/head.svn/sys/modules/ata/atacore/../../../dev/ata/ata-all.= c:72: warning: =E2=80=98ata_uninit' declared 'static' but never defined From owner-svn-src-head@freebsd.org Sat Aug 15 22:55:33 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D46DD9BA813; Sat, 15 Aug 2015 22:55:33 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BBA98A8E; Sat, 15 Aug 2015 22:55:33 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7FMtXcF010547; Sat, 15 Aug 2015 22:55:33 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7FMtXNu010546; Sat, 15 Aug 2015 22:55:33 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201508152255.t7FMtXNu010546@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sat, 15 Aug 2015 22:55:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286816 - head/sys/dev/ata X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 22:55:33 -0000 Author: mav Date: Sat Aug 15 22:55:32 2015 New Revision: 286816 URL: https://svnweb.freebsd.org/changeset/base/286816 Log: Small addition to r286814. Submitted by: bz MFC after: 2 weeks Modified: head/sys/dev/ata/ata-all.c Modified: head/sys/dev/ata/ata-all.c ============================================================================== --- head/sys/dev/ata/ata-all.c Sat Aug 15 21:47:07 2015 (r286815) +++ head/sys/dev/ata/ata-all.c Sat Aug 15 22:55:32 2015 (r286816) @@ -64,12 +64,10 @@ static void ata_cam_end_transaction(devi static void ata_cam_request_sense(device_t dev, struct ata_request *request); static int ata_check_ids(device_t dev, union ccb *ccb); static void ata_conn_event(void *context, int dummy); -static void ata_init(void); static void ata_interrupt_locked(void *data); static int ata_module_event_handler(module_t mod, int what, void *arg); static void ata_periodic_poll(void *data); static int ata_str2mode(const char *str); -static void ata_uninit(void); /* global vars */ MALLOC_DEFINE(M_ATA, "ata_generic", "ATA driver generic layer");