From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 00:11:45 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 69F69D01; Sun, 17 Mar 2013 00:11:45 +0000 (UTC) (envelope-from ray@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 4A6F2977; Sun, 17 Mar 2013 00:11:45 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H0Bing064224; Sun, 17 Mar 2013 00:11:44 GMT (envelope-from ray@svn.freebsd.org) Received: (from ray@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H0BiTx064223; Sun, 17 Mar 2013 00:11:44 GMT (envelope-from ray@svn.freebsd.org) Message-Id: <201303170011.r2H0BiTx064223@svn.freebsd.org> From: Aleksandr Rybalko Date: Sun, 17 Mar 2013 00:11:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248399 - projects/efika_mx/sys/arm/freescale/imx X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 00:11:45 -0000 Author: ray Date: Sun Mar 17 00:11:44 2013 New Revision: 248399 URL: http://svnweb.freebsd.org/changeset/base/248399 Log: Update imx_gpt to use new sbintime_t. Sponsored by: The FreeBSD Foundation Modified: projects/efika_mx/sys/arm/freescale/imx/imx_gpt.c Modified: projects/efika_mx/sys/arm/freescale/imx/imx_gpt.c ============================================================================== --- projects/efika_mx/sys/arm/freescale/imx/imx_gpt.c Sat Mar 16 23:46:50 2013 (r248398) +++ projects/efika_mx/sys/arm/freescale/imx/imx_gpt.c Sun Mar 17 00:11:44 2013 (r248399) @@ -45,19 +45,20 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include #include -#include -#include #include #include #include #include +#define MIN_PERIOD 100LLU + #define WRITE4(_sc, _r, _v) \ bus_space_write_4((_sc)->sc_iot, (_sc)->sc_ioh, (_r), (_v)) #define READ4(_sc, _r) \ @@ -68,8 +69,8 @@ __FBSDID("$FreeBSD$"); WRITE4((_sc), (_r), READ4((_sc), (_r)) & ~(_m)) static u_int imx_gpt_get_timecount(struct timecounter *); -static int imx_gpt_timer_start(struct eventtimer *, - struct bintime *, struct bintime *); +static int imx_gpt_timer_start(struct eventtimer *, sbintime_t, + sbintime_t); static int imx_gpt_timer_stop(struct eventtimer *); static int imx_gpt_intr(void *); @@ -174,12 +175,8 @@ imx_gpt_attach(device_t dev) sc->et.et_flags = ET_FLAGS_ONESHOT | ET_FLAGS_PERIODIC; sc->et.et_quality = 1000; sc->et.et_frequency = sc->clkfreq; - sc->et.et_min_period.sec = 0; - sc->et.et_min_period.frac = - ((0x00000002LLU << 32) / sc->et.et_frequency) << 32; - sc->et.et_max_period.sec = 0xfffffff0U / sc->et.et_frequency; - sc->et.et_max_period.frac = - ((0xfffffffeLLU << 32) / sc->et.et_frequency) << 32; + sc->et.et_min_period = (MIN_PERIOD << 32) / sc->et.et_frequency; + sc->et.et_max_period = (0xfffffffeLLU << 32) / sc->et.et_frequency; sc->et.et_start = imx_gpt_timer_start; sc->et.et_stop = imx_gpt_timer_stop; sc->et.et_priv = sc; @@ -208,26 +205,21 @@ imx_gpt_attach(device_t dev) } static int -imx_gpt_timer_start(struct eventtimer *et, struct bintime *first, - struct bintime *period) +imx_gpt_timer_start(struct eventtimer *et, sbintime_t first, sbintime_t period) { struct imx_gpt_softc *sc; uint32_t ticks; sc = (struct imx_gpt_softc *)et->et_priv; - if (period != NULL) { - sc->sc_period = (et->et_frequency * (first->frac >> 32)) >> 32; - sc->sc_period += et->et_frequency * first->sec; + if (period != 0) { + sc->sc_period = ((uint32_t)et->et_frequency * period) >> 32; /* Set expected value */ WRITE4(sc, IMX_GPT_OCR2, READ4(sc, IMX_GPT_CNT) + sc->sc_period); /* Enable compare register 2 Interrupt */ SET4(sc, IMX_GPT_IR, GPT_IR_OF2); - } else if (first != NULL) { - - ticks = (et->et_frequency * (first->frac >> 32)) >> 32; - if (first->sec != 0) - ticks += et->et_frequency * first->sec; + } else if (first != 0) { + ticks = ((uint32_t)et->et_frequency * first) >> 32; /* * TODO: setupt second compare reg with time which will save From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 01:48:57 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 89FF4F33; Sun, 17 Mar 2013 01:48:57 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 7CF8ABDB; Sun, 17 Mar 2013 01:48:57 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H1mvhv091772; Sun, 17 Mar 2013 01:48:57 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H1mumo091768; Sun, 17 Mar 2013 01:48:56 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303170148.r2H1mumo091768@svn.freebsd.org> From: "Simon J. Gerraty" Date: Sun, 17 Mar 2013 01:48:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248402 - in projects/bmake/pkgs/pseudo: kernel the-lot userland X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 01:48:57 -0000 Author: sjg Date: Sun Mar 17 01:48:56 2013 New Revision: 248402 URL: http://svnweb.freebsd.org/changeset/base/248402 Log: Add kernel and toolchains to the-lot Modified: projects/bmake/pkgs/pseudo/kernel/Makefile.depend projects/bmake/pkgs/pseudo/the-lot/Makefile.depend projects/bmake/pkgs/pseudo/userland/Makefile.depend Modified: projects/bmake/pkgs/pseudo/kernel/Makefile.depend ============================================================================== --- projects/bmake/pkgs/pseudo/kernel/Makefile.depend Sun Mar 17 01:03:41 2013 (r248401) +++ projects/bmake/pkgs/pseudo/kernel/Makefile.depend Sun Mar 17 01:48:56 2013 (r248402) @@ -5,6 +5,8 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} DIRDEPS = \ + include \ + include/xlocale \ usr.sbin/config.host \ Modified: projects/bmake/pkgs/pseudo/the-lot/Makefile.depend ============================================================================== --- projects/bmake/pkgs/pseudo/the-lot/Makefile.depend Sun Mar 17 01:03:41 2013 (r248401) +++ projects/bmake/pkgs/pseudo/the-lot/Makefile.depend Sun Mar 17 01:48:56 2013 (r248402) @@ -5,10 +5,10 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} DIRDEPS = \ + pkgs/pseudo/kernel \ + pkgs/pseudo/toolchain \ + pkgs/pseudo/toolchain.host \ pkgs/pseudo/userland \ -# pkgs/pseudo/clang \ -# pkgs/pseudo/gcc \ - .include Modified: projects/bmake/pkgs/pseudo/userland/Makefile.depend ============================================================================== --- projects/bmake/pkgs/pseudo/userland/Makefile.depend Sun Mar 17 01:03:41 2013 (r248401) +++ projects/bmake/pkgs/pseudo/userland/Makefile.depend Sun Mar 17 01:48:56 2013 (r248402) @@ -21,8 +21,4 @@ DIRDEPS = \ pkgs/pseudo/usr.bin \ pkgs/pseudo/usr.sbin \ - -# pkgs/pseudo/clang \ -# pkgs/pseudo/gcc \ - .include From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 01:49:31 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 4ADBBF4; Sun, 17 Mar 2013 01:49:31 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 24072BE2; Sun, 17 Mar 2013 01:49:31 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H1nV9S091896; Sun, 17 Mar 2013 01:49:31 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H1nVAi091895; Sun, 17 Mar 2013 01:49:31 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303170149.r2H1nVAi091895@svn.freebsd.org> From: "Simon J. Gerraty" Date: Sun, 17 Mar 2013 01:49:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248403 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 01:49:31 -0000 Author: sjg Date: Sun Mar 17 01:49:30 2013 New Revision: 248403 URL: http://svnweb.freebsd.org/changeset/base/248403 Log: Should not be here Deleted: projects/bmake/share/mk/Makefile.depend From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 01:51:24 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 44EF320D; Sun, 17 Mar 2013 01:51:24 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 1B065BE9; Sun, 17 Mar 2013 01:51:24 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H1pNwo093737; Sun, 17 Mar 2013 01:51:23 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H1pNZE093733; Sun, 17 Mar 2013 01:51:23 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303170151.r2H1pNZE093733@svn.freebsd.org> From: "Simon J. Gerraty" Date: Sun, 17 Mar 2013 01:51:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248404 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 01:51:24 -0000 Author: sjg Date: Sun Mar 17 01:51:23 2013 New Revision: 248404 URL: http://svnweb.freebsd.org/changeset/base/248404 Log: Improve DIRDEP filtering. Allow DEP_SKIP_DIR and DEP_DIRDEPS_FILTER to vary by DEP_MACHINE. Modified: projects/bmake/share/mk/dirdeps.mk projects/bmake/share/mk/local.dirdeps.mk Modified: projects/bmake/share/mk/dirdeps.mk ============================================================================== --- projects/bmake/share/mk/dirdeps.mk Sun Mar 17 01:49:30 2013 (r248403) +++ projects/bmake/share/mk/dirdeps.mk Sun Mar 17 01:51:23 2013 (r248404) @@ -246,17 +246,17 @@ _DEP_RELDIR := ${DEP_RELDIR} SKIP_HOSTDIR ?= NSkipHostDir = ${SKIP_HOSTDIR:N*.host:S,$,.host,:N.host:${M_ListToSkip}} -NSkipHostDep = ${SKIP_HOSTDIR:R:@d@*/$d*.host@:${M_ListToSkip}} # things we always skip # SKIP_DIRDEPS allows for adding entries on command line. SKIP_DIR += .host *.WAIT ${SKIP_DIRDEPS} +SKIP_DIR.host += ${SKIP_HOSTDIR} -.ifdef HOSTPROG -SKIP_DIR += ${SKIP_HOSTDIR} -.endif +DEP_SKIP_DIR = ${SKIP_DIR} \ + ${SKIP_DIR.${DEP_MACHINE}:U} \ + ${SKIP_DIRDEPS.${DEP_MACHINE}:U} -NSkipDir = ${SKIP_DIR:${M_ListToSkip}} +NSkipDir = ${DEP_SKIP_DIR:${M_ListToSkip}} .if defined(NO_DIRDEPS) || defined(NODIRDEPS) # confine ourselves to the original dir @@ -374,9 +374,15 @@ _build_dirs += ${_machines:N${DEP_TARGET .endif .if !empty(DIRDEPS) +# these we reset each time through as they can depend on DEP_MACHINE +DEP_DIRDEPS_FILTER = ${DIRDEPS_FILTER.${DEP_MACHINE}:U} ${DIRDEPS_FILTER:U} +.if empty(DEP_DIRDEPS_FILTER) +# something harmless +DEP_DIRDEPS_FILTER = U +.endif # this is what we start with -__depdirs := ${DIRDEPS:${NSkipDir}:${DIRDEPS_FILTER:ts:}:O:u:@d@${SRCTOP}/$d@} +__depdirs := ${DIRDEPS:${NSkipDir}:${DEP_DIRDEPS_FILTER:ts:}:O:u:@d@${SRCTOP}/$d@} # some entries may be qualified with . # the :M*/*/*.* just tries to limit the dirs we check to likely ones. Modified: projects/bmake/share/mk/local.dirdeps.mk ============================================================================== --- projects/bmake/share/mk/local.dirdeps.mk Sun Mar 17 01:49:30 2013 (r248403) +++ projects/bmake/share/mk/local.dirdeps.mk Sun Mar 17 01:51:23 2013 (r248404) @@ -10,7 +10,7 @@ DIRDEPS += pkgs/pseudo/stage .endif # we want to supress these dependencies for host tools -DEP_DIRDEPS_FILTER.host = \ +DIRDEPS_FILTER.host = \ Ninclude* \ Nlib/lib* \ Nlib/csu* \ @@ -18,8 +18,3 @@ DEP_DIRDEPS_FILTER.host = \ Ngnu/lib/csu* \ Ngnu/lib/lib[a-r]* \ - -.if !empty(DIRDEPS) && !empty(DEP_DIRDEPS_FILTER.${DEP_MACHINE}) -DIRDEPS := ${DIRDEPS:${DEP_DIRDEPS_FILTER.${DEP_MACHINE}:ts:}} -.endif - From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 01:53:48 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 6582E4E7; Sun, 17 Mar 2013 01:53:48 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 49422BF3; Sun, 17 Mar 2013 01:53:48 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H1rmhr094067; Sun, 17 Mar 2013 01:53:48 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H1rm4k094066; Sun, 17 Mar 2013 01:53:48 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303170153.r2H1rm4k094066@svn.freebsd.org> From: "Simon J. Gerraty" Date: Sun, 17 Mar 2013 01:53:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248405 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 01:53:48 -0000 Author: sjg Date: Sun Mar 17 01:53:47 2013 New Revision: 248405 URL: http://svnweb.freebsd.org/changeset/base/248405 Log: We need .OBJDIR done earlier Modified: projects/bmake/share/mk/local.sys.mk Modified: projects/bmake/share/mk/local.sys.mk ============================================================================== --- projects/bmake/share/mk/local.sys.mk Sun Mar 17 01:51:23 2013 (r248404) +++ projects/bmake/share/mk/local.sys.mk Sun Mar 17 01:53:47 2013 (r248405) @@ -93,8 +93,10 @@ OBJTOP := ${HOST_OBJTOP} .endif # if you want objdirs make them automatic -.if ${MKOBJDIRS:Uno} == "auto" +# we need .OBJDIR made before we start populating .PATH +.if ${MKOBJDIRS:Uno} == "auto" || defined(WITH_AUTO_OBJ) WITH_AUTO_OBJ= yes +MKOBJDIRS=auto .include .endif From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 01:54:40 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id E3D175FE; Sun, 17 Mar 2013 01:54:40 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id C98C2BF7; Sun, 17 Mar 2013 01:54:40 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H1seFj094239; Sun, 17 Mar 2013 01:54:40 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H1sad9094205; Sun, 17 Mar 2013 01:54:36 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303170154.r2H1sad9094205@svn.freebsd.org> From: "Simon J. Gerraty" Date: Sun, 17 Mar 2013 01:54:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248406 - in projects/bmake: gnu/usr.bin/cc/c++ gnu/usr.bin/cc/c++filt gnu/usr.bin/cc/cc gnu/usr.bin/cc/cc1 gnu/usr.bin/cc/cc1plus gnu/usr.bin/cc/cc_tools gnu/usr.bin/cc/cpp gnu/usr.bin... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 01:54:41 -0000 Author: sjg Date: Sun Mar 17 01:54:35 2013 New Revision: 248406 URL: http://svnweb.freebsd.org/changeset/base/248406 Log: Updated dependencies Modified: projects/bmake/gnu/usr.bin/cc/c++/Makefile.depend projects/bmake/gnu/usr.bin/cc/c++filt/Makefile.depend projects/bmake/gnu/usr.bin/cc/cc/Makefile.depend projects/bmake/gnu/usr.bin/cc/cc1/Makefile.depend projects/bmake/gnu/usr.bin/cc/cc1plus/Makefile.depend projects/bmake/gnu/usr.bin/cc/cc_tools/Makefile.depend projects/bmake/gnu/usr.bin/cc/cpp/Makefile.depend projects/bmake/gnu/usr.bin/cc/gcov/Makefile.depend projects/bmake/lib/clang/include/Makefile.depend projects/bmake/lib/clang/libclanganalysis/Makefile.depend projects/bmake/lib/clang/libclangarcmigrate/Makefile.depend projects/bmake/lib/clang/libclangast/Makefile.depend projects/bmake/lib/clang/libclangbasic/Makefile.depend projects/bmake/lib/clang/libclangcodegen/Makefile.depend projects/bmake/lib/clang/libclangdriver/Makefile.depend projects/bmake/lib/clang/libclangedit/Makefile.depend projects/bmake/lib/clang/libclangfrontend/Makefile.depend projects/bmake/lib/clang/libclangfrontendtool/Makefile.depend projects/bmake/lib/clang/libclanglex/Makefile.depend projects/bmake/lib/clang/libclangparse/Makefile.depend projects/bmake/lib/clang/libclangsema/Makefile.depend projects/bmake/lib/clang/libclangserialization/Makefile.depend projects/bmake/lib/clang/libclangstaticanalyzercheckers/Makefile.depend projects/bmake/lib/clang/libclangstaticanalyzercore/Makefile.depend projects/bmake/lib/clang/libclangstaticanalyzerfrontend/Makefile.depend projects/bmake/lib/clang/libllvmanalysis/Makefile.depend projects/bmake/lib/clang/libllvmarchive/Makefile.depend projects/bmake/lib/clang/libllvmarmasmparser/Makefile.depend projects/bmake/lib/clang/libllvmarmcodegen/Makefile.depend projects/bmake/lib/clang/libllvmarmdesc/Makefile.depend projects/bmake/lib/clang/libllvmarmdisassembler/Makefile.depend projects/bmake/lib/clang/libllvmarminfo/Makefile.depend projects/bmake/lib/clang/libllvmarminstprinter/Makefile.depend projects/bmake/lib/clang/libllvmasmparser/Makefile.depend projects/bmake/lib/clang/libllvmasmprinter/Makefile.depend projects/bmake/lib/clang/libllvmbitreader/Makefile.depend projects/bmake/lib/clang/libllvmbitwriter/Makefile.depend projects/bmake/lib/clang/libllvmcodegen/Makefile.depend projects/bmake/lib/clang/libllvmcore/Makefile.depend projects/bmake/lib/clang/libllvminstcombine/Makefile.depend projects/bmake/lib/clang/libllvminstrumentation/Makefile.depend projects/bmake/lib/clang/libllvmipa/Makefile.depend projects/bmake/lib/clang/libllvmipo/Makefile.depend projects/bmake/lib/clang/libllvmlinker/Makefile.depend projects/bmake/lib/clang/libllvmmc/Makefile.depend projects/bmake/lib/clang/libllvmmcparser/Makefile.depend projects/bmake/lib/clang/libllvmmipsasmparser/Makefile.depend projects/bmake/lib/clang/libllvmmipscodegen/Makefile.depend projects/bmake/lib/clang/libllvmmipsdesc/Makefile.depend projects/bmake/lib/clang/libllvmmipsinfo/Makefile.depend projects/bmake/lib/clang/libllvmmipsinstprinter/Makefile.depend projects/bmake/lib/clang/libllvmobject/Makefile.depend projects/bmake/lib/clang/libllvmpowerpccodegen/Makefile.depend projects/bmake/lib/clang/libllvmpowerpcdesc/Makefile.depend projects/bmake/lib/clang/libllvmpowerpcinfo/Makefile.depend projects/bmake/lib/clang/libllvmpowerpcinstprinter/Makefile.depend projects/bmake/lib/clang/libllvmscalaropts/Makefile.depend projects/bmake/lib/clang/libllvmselectiondag/Makefile.depend projects/bmake/lib/clang/libllvmsupport/Makefile.depend projects/bmake/lib/clang/libllvmtablegen/Makefile.depend projects/bmake/lib/clang/libllvmtarget/Makefile.depend projects/bmake/lib/clang/libllvmtransformutils/Makefile.depend projects/bmake/lib/clang/libllvmvectorize/Makefile.depend projects/bmake/lib/clang/libllvmx86asmparser/Makefile.depend projects/bmake/lib/clang/libllvmx86codegen/Makefile.depend projects/bmake/lib/clang/libllvmx86desc/Makefile.depend projects/bmake/lib/clang/libllvmx86disassembler/Makefile.depend projects/bmake/lib/clang/libllvmx86info/Makefile.depend projects/bmake/lib/clang/libllvmx86instprinter/Makefile.depend projects/bmake/lib/clang/libllvmx86utils/Makefile.depend projects/bmake/usr.bin/clang/clang-tblgen/Makefile.depend projects/bmake/usr.bin/clang/clang/Makefile.depend projects/bmake/usr.bin/clang/tblgen/Makefile.depend Modified: projects/bmake/gnu/usr.bin/cc/c++/Makefile.depend ============================================================================== --- projects/bmake/gnu/usr.bin/cc/c++/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/gnu/usr.bin/cc/c++/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ gnu/lib/libgcc \ gnu/usr.bin/cc/cc_tools \ @@ -13,6 +11,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcompiler_rt \ .include Modified: projects/bmake/gnu/usr.bin/cc/c++filt/Makefile.depend ============================================================================== --- projects/bmake/gnu/usr.bin/cc/c++filt/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/gnu/usr.bin/cc/c++filt/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ gnu/lib/libgcc \ gnu/usr.bin/cc/cc_tools \ @@ -12,6 +10,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcompiler_rt \ .include Modified: projects/bmake/gnu/usr.bin/cc/cc/Makefile.depend ============================================================================== --- projects/bmake/gnu/usr.bin/cc/cc/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/gnu/usr.bin/cc/cc/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ gnu/usr.bin/cc/cc_tools \ gnu/usr.bin/cc/libcpp \ @@ -12,6 +10,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcompiler_rt \ .include Modified: projects/bmake/gnu/usr.bin/cc/cc1/Makefile.depend ============================================================================== --- projects/bmake/gnu/usr.bin/cc/cc1/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/gnu/usr.bin/cc/cc1/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ gnu/usr.bin/cc/cc_int \ gnu/usr.bin/cc/cc_tools \ @@ -14,6 +12,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcompiler_rt \ .include Modified: projects/bmake/gnu/usr.bin/cc/cc1plus/Makefile.depend ============================================================================== --- projects/bmake/gnu/usr.bin/cc/cc1plus/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/gnu/usr.bin/cc/cc1plus/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ gnu/usr.bin/cc/cc_int \ gnu/usr.bin/cc/cc_tools \ @@ -14,6 +12,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcompiler_rt \ .include Modified: projects/bmake/gnu/usr.bin/cc/cc_tools/Makefile.depend ============================================================================== --- projects/bmake/gnu/usr.bin/cc/cc_tools/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/gnu/usr.bin/cc/cc_tools/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -8,6 +8,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcompiler_rt \ lib/msun \ Modified: projects/bmake/gnu/usr.bin/cc/cpp/Makefile.depend ============================================================================== --- projects/bmake/gnu/usr.bin/cc/cpp/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/gnu/usr.bin/cc/cpp/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ gnu/lib/libgcc \ gnu/usr.bin/cc/cc_tools \ @@ -13,6 +11,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcompiler_rt \ .include Modified: projects/bmake/gnu/usr.bin/cc/gcov/Makefile.depend ============================================================================== --- projects/bmake/gnu/usr.bin/cc/gcov/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/gnu/usr.bin/cc/gcov/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ gnu/lib/libgcc \ gnu/usr.bin/cc/cc_tools \ @@ -12,6 +10,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcompiler_rt \ .include Modified: projects/bmake/lib/clang/include/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/include/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/include/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ Modified: projects/bmake/lib/clang/libclanganalysis/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclanganalysis/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclanganalysis/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,8 +2,6 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ gnu/lib/libstdc++ \ gnu/lib/libsupc++ \ @@ -26,6 +24,16 @@ AnalysisDeclContext.po: Attrs.inc.h AnalysisDeclContext.po: DeclNodes.inc.h AnalysisDeclContext.po: DiagnosticCommonKinds.inc.h AnalysisDeclContext.po: StmtNodes.inc.h +BodyFarm.o: AttrList.inc.h +BodyFarm.o: Attrs.inc.h +BodyFarm.o: DeclNodes.inc.h +BodyFarm.o: DiagnosticCommonKinds.inc.h +BodyFarm.o: StmtNodes.inc.h +BodyFarm.po: AttrList.inc.h +BodyFarm.po: Attrs.inc.h +BodyFarm.po: DeclNodes.inc.h +BodyFarm.po: DiagnosticCommonKinds.inc.h +BodyFarm.po: StmtNodes.inc.h CFG.o: AttrList.inc.h CFG.o: Attrs.inc.h CFG.o: DeclNodes.inc.h @@ -98,6 +106,16 @@ LiveVariables.po: Attrs.inc.h LiveVariables.po: DeclNodes.inc.h LiveVariables.po: DiagnosticCommonKinds.inc.h LiveVariables.po: StmtNodes.inc.h +ObjCNoReturn.o: AttrList.inc.h +ObjCNoReturn.o: Attrs.inc.h +ObjCNoReturn.o: DeclNodes.inc.h +ObjCNoReturn.o: DiagnosticCommonKinds.inc.h +ObjCNoReturn.o: StmtNodes.inc.h +ObjCNoReturn.po: AttrList.inc.h +ObjCNoReturn.po: Attrs.inc.h +ObjCNoReturn.po: DeclNodes.inc.h +ObjCNoReturn.po: DiagnosticCommonKinds.inc.h +ObjCNoReturn.po: StmtNodes.inc.h PostOrderCFGView.o: AttrList.inc.h PostOrderCFGView.o: Attrs.inc.h PostOrderCFGView.o: DeclNodes.inc.h Modified: projects/bmake/lib/clang/libclangarcmigrate/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangarcmigrate/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangarcmigrate/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -195,12 +195,14 @@ TransformActions.po: DeclNodes.inc.h TransformActions.po: DiagnosticCommonKinds.inc.h TransformActions.po: StmtNodes.inc.h Transforms.o: AttrList.inc.h +Transforms.o: AttrParsedAttrList.inc.h Transforms.o: Attrs.inc.h Transforms.o: DeclNodes.inc.h Transforms.o: DiagnosticCommonKinds.inc.h Transforms.o: DiagnosticSemaKinds.inc.h Transforms.o: StmtNodes.inc.h Transforms.po: AttrList.inc.h +Transforms.po: AttrParsedAttrList.inc.h Transforms.po: Attrs.inc.h Transforms.po: DeclNodes.inc.h Transforms.po: DiagnosticCommonKinds.inc.h Modified: projects/bmake/lib/clang/libclangast/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangast/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangast/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -24,13 +24,23 @@ APValue.po: Attrs.inc.h APValue.po: DeclNodes.inc.h APValue.po: DiagnosticCommonKinds.inc.h APValue.po: StmtNodes.inc.h +ASTConsumer.o: AttrList.inc.h +ASTConsumer.o: Attrs.inc.h +ASTConsumer.o: DeclNodes.inc.h +ASTConsumer.o: DiagnosticCommonKinds.inc.h +ASTConsumer.po: AttrList.inc.h +ASTConsumer.po: Attrs.inc.h +ASTConsumer.po: DeclNodes.inc.h +ASTConsumer.po: DiagnosticCommonKinds.inc.h ASTContext.o: AttrList.inc.h ASTContext.o: Attrs.inc.h +ASTContext.o: CommentNodes.inc.h ASTContext.o: DeclNodes.inc.h ASTContext.o: DiagnosticCommonKinds.inc.h ASTContext.o: StmtNodes.inc.h ASTContext.po: AttrList.inc.h ASTContext.po: Attrs.inc.h +ASTContext.po: CommentNodes.inc.h ASTContext.po: DeclNodes.inc.h ASTContext.po: DiagnosticCommonKinds.inc.h ASTContext.po: StmtNodes.inc.h @@ -39,11 +49,13 @@ ASTDiagnostic.o: Attrs.inc.h ASTDiagnostic.o: DeclNodes.inc.h ASTDiagnostic.o: DiagnosticASTKinds.inc.h ASTDiagnostic.o: DiagnosticCommonKinds.inc.h +ASTDiagnostic.o: StmtNodes.inc.h ASTDiagnostic.po: AttrList.inc.h ASTDiagnostic.po: Attrs.inc.h ASTDiagnostic.po: DeclNodes.inc.h ASTDiagnostic.po: DiagnosticASTKinds.inc.h ASTDiagnostic.po: DiagnosticCommonKinds.inc.h +ASTDiagnostic.po: StmtNodes.inc.h ASTImporter.o: AttrList.inc.h ASTImporter.o: Attrs.inc.h ASTImporter.o: DeclNodes.inc.h @@ -78,6 +90,60 @@ CXXInheritance.po: Attrs.inc.h CXXInheritance.po: DeclNodes.inc.h CXXInheritance.po: DiagnosticCommonKinds.inc.h CXXInheritance.po: StmtNodes.inc.h +Comment.o: AttrList.inc.h +Comment.o: Attrs.inc.h +Comment.o: CommentNodes.inc.h +Comment.o: DeclNodes.inc.h +Comment.o: DiagnosticCommonKinds.inc.h +Comment.o: StmtNodes.inc.h +Comment.po: AttrList.inc.h +Comment.po: Attrs.inc.h +Comment.po: CommentNodes.inc.h +Comment.po: DeclNodes.inc.h +Comment.po: DiagnosticCommonKinds.inc.h +Comment.po: StmtNodes.inc.h +CommentCommandTraits.o: CommentCommandInfo.inc.h +CommentCommandTraits.po: CommentCommandInfo.inc.h +CommentDumper.o: AttrList.inc.h +CommentDumper.o: Attrs.inc.h +CommentDumper.o: CommentNodes.inc.h +CommentDumper.o: DeclNodes.inc.h +CommentDumper.o: DiagnosticCommonKinds.inc.h +CommentDumper.po: AttrList.inc.h +CommentDumper.po: Attrs.inc.h +CommentDumper.po: CommentNodes.inc.h +CommentDumper.po: DeclNodes.inc.h +CommentDumper.po: DiagnosticCommonKinds.inc.h +CommentLexer.o: CommentHTMLTags.inc.h +CommentLexer.po: CommentHTMLTags.inc.h +CommentParser.o: AttrList.inc.h +CommentParser.o: Attrs.inc.h +CommentParser.o: CommentNodes.inc.h +CommentParser.o: DeclNodes.inc.h +CommentParser.o: DiagnosticCommentKinds.inc.h +CommentParser.o: DiagnosticCommonKinds.inc.h +CommentParser.po: AttrList.inc.h +CommentParser.po: Attrs.inc.h +CommentParser.po: CommentNodes.inc.h +CommentParser.po: DeclNodes.inc.h +CommentParser.po: DiagnosticCommentKinds.inc.h +CommentParser.po: DiagnosticCommonKinds.inc.h +CommentSema.o: AttrList.inc.h +CommentSema.o: Attrs.inc.h +CommentSema.o: CommentHTMLTagsProperties.inc.h +CommentSema.o: CommentNodes.inc.h +CommentSema.o: DeclNodes.inc.h +CommentSema.o: DiagnosticCommentKinds.inc.h +CommentSema.o: DiagnosticCommonKinds.inc.h +CommentSema.o: StmtNodes.inc.h +CommentSema.po: AttrList.inc.h +CommentSema.po: Attrs.inc.h +CommentSema.po: CommentHTMLTagsProperties.inc.h +CommentSema.po: CommentNodes.inc.h +CommentSema.po: DeclNodes.inc.h +CommentSema.po: DiagnosticCommentKinds.inc.h +CommentSema.po: DiagnosticCommonKinds.inc.h +CommentSema.po: StmtNodes.inc.h Decl.o: AttrList.inc.h Decl.o: Attrs.inc.h Decl.o: DeclNodes.inc.h @@ -300,10 +366,12 @@ NSAPI.o: AttrList.inc.h NSAPI.o: Attrs.inc.h NSAPI.o: DeclNodes.inc.h NSAPI.o: DiagnosticCommonKinds.inc.h +NSAPI.o: StmtNodes.inc.h NSAPI.po: AttrList.inc.h NSAPI.po: Attrs.inc.h NSAPI.po: DeclNodes.inc.h NSAPI.po: DiagnosticCommonKinds.inc.h +NSAPI.po: StmtNodes.inc.h NestedNameSpecifier.o: AttrList.inc.h NestedNameSpecifier.o: Attrs.inc.h NestedNameSpecifier.o: DeclNodes.inc.h @@ -324,6 +392,16 @@ ParentMap.po: Attrs.inc.h ParentMap.po: DeclNodes.inc.h ParentMap.po: DiagnosticCommonKinds.inc.h ParentMap.po: StmtNodes.inc.h +RawCommentList.o: AttrList.inc.h +RawCommentList.o: Attrs.inc.h +RawCommentList.o: CommentNodes.inc.h +RawCommentList.o: DeclNodes.inc.h +RawCommentList.o: DiagnosticCommonKinds.inc.h +RawCommentList.po: AttrList.inc.h +RawCommentList.po: Attrs.inc.h +RawCommentList.po: CommentNodes.inc.h +RawCommentList.po: DeclNodes.inc.h +RawCommentList.po: DiagnosticCommonKinds.inc.h RecordLayout.o: AttrList.inc.h RecordLayout.o: Attrs.inc.h RecordLayout.o: DeclNodes.inc.h Modified: projects/bmake/lib/clang/libclangbasic/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangbasic/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangbasic/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,11 +2,12 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ + lib/clang/include \ lib/msun \ @@ -18,6 +19,7 @@ Diagnostic.o: DiagnosticCommonKinds.inc. Diagnostic.po: DiagnosticCommonKinds.inc.h DiagnosticIDs.o: DiagnosticASTKinds.inc.h DiagnosticIDs.o: DiagnosticAnalysisKinds.inc.h +DiagnosticIDs.o: DiagnosticCommentKinds.inc.h DiagnosticIDs.o: DiagnosticCommonKinds.inc.h DiagnosticIDs.o: DiagnosticDriverKinds.inc.h DiagnosticIDs.o: DiagnosticFrontendKinds.inc.h @@ -28,6 +30,7 @@ DiagnosticIDs.o: DiagnosticSemaKinds.inc DiagnosticIDs.o: DiagnosticSerializationKinds.inc.h DiagnosticIDs.po: DiagnosticASTKinds.inc.h DiagnosticIDs.po: DiagnosticAnalysisKinds.inc.h +DiagnosticIDs.po: DiagnosticCommentKinds.inc.h DiagnosticIDs.po: DiagnosticCommonKinds.inc.h DiagnosticIDs.po: DiagnosticDriverKinds.inc.h DiagnosticIDs.po: DiagnosticFrontendKinds.inc.h Modified: projects/bmake/lib/clang/libclangcodegen/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangcodegen/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangcodegen/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -372,10 +372,12 @@ CodeGenTBAA.o: AttrList.inc.h CodeGenTBAA.o: Attrs.inc.h CodeGenTBAA.o: DeclNodes.inc.h CodeGenTBAA.o: DiagnosticCommonKinds.inc.h +CodeGenTBAA.o: StmtNodes.inc.h CodeGenTBAA.po: AttrList.inc.h CodeGenTBAA.po: Attrs.inc.h CodeGenTBAA.po: DeclNodes.inc.h CodeGenTBAA.po: DiagnosticCommonKinds.inc.h +CodeGenTBAA.po: StmtNodes.inc.h CodeGenTypes.o: AttrList.inc.h CodeGenTypes.o: Attrs.inc.h CodeGenTypes.o: DeclNodes.inc.h Modified: projects/bmake/lib/clang/libclangdriver/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangdriver/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangdriver/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -20,8 +20,6 @@ ArgList.po: DiagnosticCommonKinds.inc.h ArgList.po: DiagnosticDriverKinds.inc.h CC1AsOptions.o: CC1AsOptions.inc.h CC1AsOptions.po: CC1AsOptions.inc.h -CC1Options.o: CC1Options.inc.h -CC1Options.po: CC1Options.inc.h Compilation.o: DiagnosticCommonKinds.inc.h Compilation.o: DiagnosticDriverKinds.inc.h Compilation.o: Options.inc.h @@ -36,6 +34,8 @@ Driver.po: DiagnosticDriverKinds.inc.h Driver.po: Options.inc.h DriverOptions.o: Options.inc.h DriverOptions.po: Options.inc.h +OptTable.o: Options.inc.h +OptTable.po: Options.inc.h ToolChain.o: DiagnosticCommonKinds.inc.h ToolChain.o: DiagnosticDriverKinds.inc.h ToolChain.o: Options.inc.h Modified: projects/bmake/lib/clang/libclangedit/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangedit/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangedit/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ Modified: projects/bmake/lib/clang/libclangfrontend/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangfrontend/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangfrontend/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -44,7 +44,6 @@ ASTUnit.o: Attrs.inc.h ASTUnit.o: DeclNodes.inc.h ASTUnit.o: DiagnosticCommonKinds.inc.h ASTUnit.o: DiagnosticFrontendKinds.inc.h -ASTUnit.o: Options.inc.h ASTUnit.o: StmtNodes.inc.h ASTUnit.po: AttrList.inc.h ASTUnit.po: AttrParsedAttrList.inc.h @@ -52,7 +51,6 @@ ASTUnit.po: Attrs.inc.h ASTUnit.po: DeclNodes.inc.h ASTUnit.po: DiagnosticCommonKinds.inc.h ASTUnit.po: DiagnosticFrontendKinds.inc.h -ASTUnit.po: Options.inc.h ASTUnit.po: StmtNodes.inc.h CacheTokens.o: DiagnosticCommonKinds.inc.h CacheTokens.po: DiagnosticCommonKinds.inc.h @@ -86,16 +84,16 @@ CompilerInstance.po: DiagnosticFrontendK CompilerInstance.po: StmtNodes.inc.h CompilerInvocation.o: AttrList.inc.h CompilerInvocation.o: Attrs.inc.h -CompilerInvocation.o: CC1Options.inc.h CompilerInvocation.o: DeclNodes.inc.h CompilerInvocation.o: DiagnosticCommonKinds.inc.h CompilerInvocation.o: DiagnosticDriverKinds.inc.h +CompilerInvocation.o: Options.inc.h CompilerInvocation.po: AttrList.inc.h CompilerInvocation.po: Attrs.inc.h -CompilerInvocation.po: CC1Options.inc.h CompilerInvocation.po: DeclNodes.inc.h CompilerInvocation.po: DiagnosticCommonKinds.inc.h CompilerInvocation.po: DiagnosticDriverKinds.inc.h +CompilerInvocation.po: Options.inc.h CreateInvocationFromCommandLine.o: DiagnosticCommonKinds.inc.h CreateInvocationFromCommandLine.o: DiagnosticFrontendKinds.inc.h CreateInvocationFromCommandLine.o: Options.inc.h @@ -148,8 +146,14 @@ HeaderIncludeGen.po: DiagnosticCommonKin HeaderIncludeGen.po: DiagnosticFrontendKinds.inc.h InitHeaderSearch.o: DiagnosticCommonKinds.inc.h InitHeaderSearch.po: DiagnosticCommonKinds.inc.h +InitPreprocessor.o: AttrList.inc.h +InitPreprocessor.o: Attrs.inc.h +InitPreprocessor.o: DeclNodes.inc.h InitPreprocessor.o: DiagnosticCommonKinds.inc.h InitPreprocessor.o: DiagnosticFrontendKinds.inc.h +InitPreprocessor.po: AttrList.inc.h +InitPreprocessor.po: Attrs.inc.h +InitPreprocessor.po: DeclNodes.inc.h InitPreprocessor.po: DiagnosticCommonKinds.inc.h InitPreprocessor.po: DiagnosticFrontendKinds.inc.h LayoutOverrideSource.o: AttrList.inc.h Modified: projects/bmake/lib/clang/libclangfrontendtool/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangfrontendtool/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangfrontendtool/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -14,10 +14,10 @@ DIRDEPS = \ .if ${DEP_RELDIR} == ${_DEP_RELDIR} # local dependencies - needed for -jN in clean tree -ExecuteCompilerInvocation.o: CC1Options.inc.h ExecuteCompilerInvocation.o: DiagnosticCommonKinds.inc.h ExecuteCompilerInvocation.o: DiagnosticFrontendKinds.inc.h -ExecuteCompilerInvocation.po: CC1Options.inc.h +ExecuteCompilerInvocation.o: Options.inc.h ExecuteCompilerInvocation.po: DiagnosticCommonKinds.inc.h ExecuteCompilerInvocation.po: DiagnosticFrontendKinds.inc.h +ExecuteCompilerInvocation.po: Options.inc.h .endif Modified: projects/bmake/lib/clang/libclanglex/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclanglex/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclanglex/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,11 +2,12 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ + lib/clang/include \ lib/msun \ Modified: projects/bmake/lib/clang/libclangparse/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangparse/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangparse/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -19,12 +19,14 @@ ParseAST.o: AttrParsedAttrList.inc.h ParseAST.o: Attrs.inc.h ParseAST.o: DeclNodes.inc.h ParseAST.o: DiagnosticCommonKinds.inc.h +ParseAST.o: DiagnosticParseKinds.inc.h ParseAST.o: StmtNodes.inc.h ParseAST.po: AttrList.inc.h ParseAST.po: AttrParsedAttrList.inc.h ParseAST.po: Attrs.inc.h ParseAST.po: DeclNodes.inc.h ParseAST.po: DiagnosticCommonKinds.inc.h +ParseAST.po: DiagnosticParseKinds.inc.h ParseAST.po: StmtNodes.inc.h ParseCXXInlineMethods.o: AttrList.inc.h ParseCXXInlineMethods.o: AttrParsedAttrList.inc.h @@ -62,6 +64,7 @@ ParseDeclCXX.o: Attrs.inc.h ParseDeclCXX.o: DeclNodes.inc.h ParseDeclCXX.o: DiagnosticCommonKinds.inc.h ParseDeclCXX.o: DiagnosticParseKinds.inc.h +ParseDeclCXX.o: DiagnosticSemaKinds.inc.h ParseDeclCXX.o: StmtNodes.inc.h ParseDeclCXX.po: AttrList.inc.h ParseDeclCXX.po: AttrParsedAttrList.inc.h @@ -69,6 +72,7 @@ ParseDeclCXX.po: Attrs.inc.h ParseDeclCXX.po: DeclNodes.inc.h ParseDeclCXX.po: DiagnosticCommonKinds.inc.h ParseDeclCXX.po: DiagnosticParseKinds.inc.h +ParseDeclCXX.po: DiagnosticSemaKinds.inc.h ParseDeclCXX.po: StmtNodes.inc.h ParseExpr.o: AttrList.inc.h ParseExpr.o: AttrParsedAttrList.inc.h Modified: projects/bmake/lib/clang/libclangsema/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangsema/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangsema/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -71,11 +71,13 @@ DeclSpec.po: DiagnosticParseKinds.inc.h DeclSpec.po: DiagnosticSemaKinds.inc.h DeclSpec.po: StmtNodes.inc.h DelayedDiagnostic.o: AttrList.inc.h +DelayedDiagnostic.o: AttrParsedAttrList.inc.h DelayedDiagnostic.o: Attrs.inc.h DelayedDiagnostic.o: DeclNodes.inc.h DelayedDiagnostic.o: DiagnosticCommonKinds.inc.h DelayedDiagnostic.o: StmtNodes.inc.h DelayedDiagnostic.po: AttrList.inc.h +DelayedDiagnostic.po: AttrParsedAttrList.inc.h DelayedDiagnostic.po: Attrs.inc.h DelayedDiagnostic.po: DeclNodes.inc.h DelayedDiagnostic.po: DiagnosticCommonKinds.inc.h @@ -102,8 +104,30 @@ JumpDiagnostics.po: DeclNodes.inc.h JumpDiagnostics.po: DiagnosticCommonKinds.inc.h JumpDiagnostics.po: DiagnosticSemaKinds.inc.h JumpDiagnostics.po: StmtNodes.inc.h +MultiplexExternalSemaSource.o: AttrList.inc.h +MultiplexExternalSemaSource.o: AttrParsedAttrList.inc.h +MultiplexExternalSemaSource.o: Attrs.inc.h +MultiplexExternalSemaSource.o: DeclNodes.inc.h +MultiplexExternalSemaSource.o: DiagnosticCommonKinds.inc.h +MultiplexExternalSemaSource.o: StmtNodes.inc.h +MultiplexExternalSemaSource.po: AttrList.inc.h +MultiplexExternalSemaSource.po: AttrParsedAttrList.inc.h +MultiplexExternalSemaSource.po: Attrs.inc.h +MultiplexExternalSemaSource.po: DeclNodes.inc.h +MultiplexExternalSemaSource.po: DiagnosticCommonKinds.inc.h +MultiplexExternalSemaSource.po: StmtNodes.inc.h Scope.o: DiagnosticCommonKinds.inc.h Scope.po: DiagnosticCommonKinds.inc.h +ScopeInfo.o: AttrList.inc.h +ScopeInfo.o: Attrs.inc.h +ScopeInfo.o: DeclNodes.inc.h +ScopeInfo.o: DiagnosticCommonKinds.inc.h +ScopeInfo.o: StmtNodes.inc.h +ScopeInfo.po: AttrList.inc.h +ScopeInfo.po: Attrs.inc.h +ScopeInfo.po: DeclNodes.inc.h +ScopeInfo.po: DiagnosticCommonKinds.inc.h +ScopeInfo.po: StmtNodes.inc.h Sema.o: AttrList.inc.h Sema.o: AttrParsedAttrList.inc.h Sema.o: Attrs.inc.h @@ -210,6 +234,7 @@ SemaDecl.o: AttrList.inc.h SemaDecl.o: AttrParsedAttrList.inc.h SemaDecl.o: Attrs.inc.h SemaDecl.o: DeclNodes.inc.h +SemaDecl.o: DiagnosticCommentKinds.inc.h SemaDecl.o: DiagnosticCommonKinds.inc.h SemaDecl.o: DiagnosticParseKinds.inc.h SemaDecl.o: DiagnosticSemaKinds.inc.h @@ -218,6 +243,7 @@ SemaDecl.po: AttrList.inc.h SemaDecl.po: AttrParsedAttrList.inc.h SemaDecl.po: Attrs.inc.h SemaDecl.po: DeclNodes.inc.h +SemaDecl.po: DiagnosticCommentKinds.inc.h SemaDecl.po: DiagnosticCommonKinds.inc.h SemaDecl.po: DiagnosticParseKinds.inc.h SemaDecl.po: DiagnosticSemaKinds.inc.h @@ -444,6 +470,20 @@ SemaStmt.po: DeclNodes.inc.h SemaStmt.po: DiagnosticCommonKinds.inc.h SemaStmt.po: DiagnosticSemaKinds.inc.h SemaStmt.po: StmtNodes.inc.h +SemaStmtAsm.o: AttrList.inc.h +SemaStmtAsm.o: AttrParsedAttrList.inc.h +SemaStmtAsm.o: Attrs.inc.h +SemaStmtAsm.o: DeclNodes.inc.h +SemaStmtAsm.o: DiagnosticCommonKinds.inc.h +SemaStmtAsm.o: DiagnosticSemaKinds.inc.h +SemaStmtAsm.o: StmtNodes.inc.h +SemaStmtAsm.po: AttrList.inc.h +SemaStmtAsm.po: AttrParsedAttrList.inc.h +SemaStmtAsm.po: Attrs.inc.h +SemaStmtAsm.po: DeclNodes.inc.h +SemaStmtAsm.po: DiagnosticCommonKinds.inc.h +SemaStmtAsm.po: DiagnosticSemaKinds.inc.h +SemaStmtAsm.po: StmtNodes.inc.h SemaStmtAttr.o: AttrList.inc.h SemaStmtAttr.o: AttrParsedAttrList.inc.h SemaStmtAttr.o: Attrs.inc.h Modified: projects/bmake/lib/clang/libclangserialization/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangserialization/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangserialization/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ Modified: projects/bmake/lib/clang/libclangstaticanalyzercheckers/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangstaticanalyzercheckers/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangstaticanalyzercheckers/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -14,18 +14,6 @@ DIRDEPS = \ .if ${DEP_RELDIR} == ${_DEP_RELDIR} # local dependencies - needed for -jN in clean tree -AdjustedReturnValueChecker.o: AttrList.inc.h -AdjustedReturnValueChecker.o: Attrs.inc.h -AdjustedReturnValueChecker.o: Checkers.inc.h -AdjustedReturnValueChecker.o: DeclNodes.inc.h -AdjustedReturnValueChecker.o: DiagnosticCommonKinds.inc.h -AdjustedReturnValueChecker.o: StmtNodes.inc.h -AdjustedReturnValueChecker.po: AttrList.inc.h -AdjustedReturnValueChecker.po: Attrs.inc.h -AdjustedReturnValueChecker.po: Checkers.inc.h -AdjustedReturnValueChecker.po: DeclNodes.inc.h -AdjustedReturnValueChecker.po: DiagnosticCommonKinds.inc.h -AdjustedReturnValueChecker.po: StmtNodes.inc.h AnalyzerStatsChecker.o: AttrList.inc.h AnalyzerStatsChecker.o: Attrs.inc.h AnalyzerStatsChecker.o: Checkers.inc.h @@ -290,6 +278,18 @@ DereferenceChecker.po: Checkers.inc.h DereferenceChecker.po: DeclNodes.inc.h DereferenceChecker.po: DiagnosticCommonKinds.inc.h DereferenceChecker.po: StmtNodes.inc.h +DirectIvarAssignment.o: AttrList.inc.h +DirectIvarAssignment.o: Attrs.inc.h +DirectIvarAssignment.o: Checkers.inc.h +DirectIvarAssignment.o: DeclNodes.inc.h +DirectIvarAssignment.o: DiagnosticCommonKinds.inc.h +DirectIvarAssignment.o: StmtNodes.inc.h +DirectIvarAssignment.po: AttrList.inc.h +DirectIvarAssignment.po: Attrs.inc.h +DirectIvarAssignment.po: Checkers.inc.h +DirectIvarAssignment.po: DeclNodes.inc.h +DirectIvarAssignment.po: DiagnosticCommonKinds.inc.h +DirectIvarAssignment.po: StmtNodes.inc.h DivZeroChecker.o: AttrList.inc.h DivZeroChecker.o: Attrs.inc.h DivZeroChecker.o: Checkers.inc.h @@ -302,6 +302,30 @@ DivZeroChecker.po: Checkers.inc.h DivZeroChecker.po: DeclNodes.inc.h DivZeroChecker.po: DiagnosticCommonKinds.inc.h DivZeroChecker.po: StmtNodes.inc.h +DynamicTypePropagation.o: AttrList.inc.h +DynamicTypePropagation.o: Attrs.inc.h +DynamicTypePropagation.o: Checkers.inc.h +DynamicTypePropagation.o: DeclNodes.inc.h +DynamicTypePropagation.o: DiagnosticCommonKinds.inc.h +DynamicTypePropagation.o: StmtNodes.inc.h +DynamicTypePropagation.po: AttrList.inc.h +DynamicTypePropagation.po: Attrs.inc.h +DynamicTypePropagation.po: Checkers.inc.h +DynamicTypePropagation.po: DeclNodes.inc.h +DynamicTypePropagation.po: DiagnosticCommonKinds.inc.h +DynamicTypePropagation.po: StmtNodes.inc.h +ExprInspectionChecker.o: AttrList.inc.h +ExprInspectionChecker.o: Attrs.inc.h +ExprInspectionChecker.o: Checkers.inc.h +ExprInspectionChecker.o: DeclNodes.inc.h +ExprInspectionChecker.o: DiagnosticCommonKinds.inc.h +ExprInspectionChecker.o: StmtNodes.inc.h +ExprInspectionChecker.po: AttrList.inc.h +ExprInspectionChecker.po: Attrs.inc.h +ExprInspectionChecker.po: Checkers.inc.h +ExprInspectionChecker.po: DeclNodes.inc.h +ExprInspectionChecker.po: DiagnosticCommonKinds.inc.h +ExprInspectionChecker.po: StmtNodes.inc.h FixedAddressChecker.o: AttrList.inc.h FixedAddressChecker.o: Attrs.inc.h FixedAddressChecker.o: Checkers.inc.h @@ -338,18 +362,18 @@ IdempotentOperationChecker.po: Checkers. IdempotentOperationChecker.po: DeclNodes.inc.h IdempotentOperationChecker.po: DiagnosticCommonKinds.inc.h IdempotentOperationChecker.po: StmtNodes.inc.h -IteratorsChecker.o: AttrList.inc.h -IteratorsChecker.o: Attrs.inc.h -IteratorsChecker.o: Checkers.inc.h -IteratorsChecker.o: DeclNodes.inc.h -IteratorsChecker.o: DiagnosticCommonKinds.inc.h -IteratorsChecker.o: StmtNodes.inc.h -IteratorsChecker.po: AttrList.inc.h -IteratorsChecker.po: Attrs.inc.h -IteratorsChecker.po: Checkers.inc.h -IteratorsChecker.po: DeclNodes.inc.h -IteratorsChecker.po: DiagnosticCommonKinds.inc.h -IteratorsChecker.po: StmtNodes.inc.h +IvarInvalidationChecker.o: AttrList.inc.h +IvarInvalidationChecker.o: Attrs.inc.h +IvarInvalidationChecker.o: Checkers.inc.h +IvarInvalidationChecker.o: DeclNodes.inc.h +IvarInvalidationChecker.o: DiagnosticCommonKinds.inc.h +IvarInvalidationChecker.o: StmtNodes.inc.h +IvarInvalidationChecker.po: AttrList.inc.h +IvarInvalidationChecker.po: Attrs.inc.h +IvarInvalidationChecker.po: Checkers.inc.h +IvarInvalidationChecker.po: DeclNodes.inc.h +IvarInvalidationChecker.po: DiagnosticCommonKinds.inc.h +IvarInvalidationChecker.po: StmtNodes.inc.h LLVMConventionsChecker.o: AttrList.inc.h LLVMConventionsChecker.o: Attrs.inc.h LLVMConventionsChecker.o: Checkers.inc.h @@ -458,18 +482,6 @@ NoReturnFunctionChecker.po: Checkers.inc NoReturnFunctionChecker.po: DeclNodes.inc.h NoReturnFunctionChecker.po: DiagnosticCommonKinds.inc.h NoReturnFunctionChecker.po: StmtNodes.inc.h -OSAtomicChecker.o: AttrList.inc.h -OSAtomicChecker.o: Attrs.inc.h -OSAtomicChecker.o: Checkers.inc.h -OSAtomicChecker.o: DeclNodes.inc.h -OSAtomicChecker.o: DiagnosticCommonKinds.inc.h -OSAtomicChecker.o: StmtNodes.inc.h -OSAtomicChecker.po: AttrList.inc.h -OSAtomicChecker.po: Attrs.inc.h -OSAtomicChecker.po: Checkers.inc.h -OSAtomicChecker.po: DeclNodes.inc.h -OSAtomicChecker.po: DiagnosticCommonKinds.inc.h -OSAtomicChecker.po: StmtNodes.inc.h ObjCAtSyncChecker.o: AttrList.inc.h ObjCAtSyncChecker.o: Attrs.inc.h ObjCAtSyncChecker.o: Checkers.inc.h @@ -506,6 +518,18 @@ ObjCContainersChecker.po: Checkers.inc.h ObjCContainersChecker.po: DeclNodes.inc.h ObjCContainersChecker.po: DiagnosticCommonKinds.inc.h ObjCContainersChecker.po: StmtNodes.inc.h +ObjCMissingSuperCallChecker.o: AttrList.inc.h +ObjCMissingSuperCallChecker.o: Attrs.inc.h +ObjCMissingSuperCallChecker.o: Checkers.inc.h +ObjCMissingSuperCallChecker.o: DeclNodes.inc.h +ObjCMissingSuperCallChecker.o: DiagnosticCommonKinds.inc.h +ObjCMissingSuperCallChecker.o: StmtNodes.inc.h +ObjCMissingSuperCallChecker.po: AttrList.inc.h +ObjCMissingSuperCallChecker.po: Attrs.inc.h +ObjCMissingSuperCallChecker.po: Checkers.inc.h +ObjCMissingSuperCallChecker.po: DeclNodes.inc.h +ObjCMissingSuperCallChecker.po: DiagnosticCommonKinds.inc.h +ObjCMissingSuperCallChecker.po: StmtNodes.inc.h ObjCSelfInitChecker.o: AttrList.inc.h ObjCSelfInitChecker.o: Attrs.inc.h ObjCSelfInitChecker.o: Checkers.inc.h @@ -602,6 +626,18 @@ ReturnUndefChecker.po: Checkers.inc.h ReturnUndefChecker.po: DeclNodes.inc.h ReturnUndefChecker.po: DiagnosticCommonKinds.inc.h ReturnUndefChecker.po: StmtNodes.inc.h +SimpleStreamChecker.o: AttrList.inc.h +SimpleStreamChecker.o: Attrs.inc.h +SimpleStreamChecker.o: Checkers.inc.h +SimpleStreamChecker.o: DeclNodes.inc.h +SimpleStreamChecker.o: DiagnosticCommonKinds.inc.h +SimpleStreamChecker.o: StmtNodes.inc.h +SimpleStreamChecker.po: AttrList.inc.h +SimpleStreamChecker.po: Attrs.inc.h +SimpleStreamChecker.po: Checkers.inc.h +SimpleStreamChecker.po: DeclNodes.inc.h +SimpleStreamChecker.po: DiagnosticCommonKinds.inc.h +SimpleStreamChecker.po: StmtNodes.inc.h StackAddrEscapeChecker.o: AttrList.inc.h StackAddrEscapeChecker.o: Attrs.inc.h StackAddrEscapeChecker.o: Checkers.inc.h @@ -638,6 +674,18 @@ TaintTesterChecker.po: Checkers.inc.h TaintTesterChecker.po: DeclNodes.inc.h TaintTesterChecker.po: DiagnosticCommonKinds.inc.h TaintTesterChecker.po: StmtNodes.inc.h +TraversalChecker.o: AttrList.inc.h +TraversalChecker.o: Attrs.inc.h +TraversalChecker.o: Checkers.inc.h +TraversalChecker.o: DeclNodes.inc.h +TraversalChecker.o: DiagnosticCommonKinds.inc.h +TraversalChecker.o: StmtNodes.inc.h +TraversalChecker.po: AttrList.inc.h +TraversalChecker.po: Attrs.inc.h +TraversalChecker.po: Checkers.inc.h +TraversalChecker.po: DeclNodes.inc.h +TraversalChecker.po: DiagnosticCommonKinds.inc.h +TraversalChecker.po: StmtNodes.inc.h UndefBranchChecker.o: AttrList.inc.h UndefBranchChecker.o: Attrs.inc.h UndefBranchChecker.o: Checkers.inc.h Modified: projects/bmake/lib/clang/libclangstaticanalyzercore/Makefile.depend ============================================================================== --- projects/bmake/lib/clang/libclangstaticanalyzercore/Makefile.depend Sun Mar 17 01:53:47 2013 (r248405) +++ projects/bmake/lib/clang/libclangstaticanalyzercore/Makefile.depend Sun Mar 17 01:54:35 2013 (r248406) @@ -2,9 +2,9 @@ DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,} -DEP_MACHINE := ${.PARSEFILE:E} - DIRDEPS = \ + gnu/lib/libstdc++ \ + gnu/lib/libsupc++ \ include \ include/xlocale \ lib/msun \ @@ -24,16 +24,6 @@ AnalysisManager.po: Attrs.inc.h AnalysisManager.po: DeclNodes.inc.h AnalysisManager.po: DiagnosticCommonKinds.inc.h AnalysisManager.po: StmtNodes.inc.h -BasicConstraintManager.o: AttrList.inc.h -BasicConstraintManager.o: Attrs.inc.h -BasicConstraintManager.o: DeclNodes.inc.h -BasicConstraintManager.o: DiagnosticCommonKinds.inc.h -BasicConstraintManager.o: StmtNodes.inc.h -BasicConstraintManager.po: AttrList.inc.h -BasicConstraintManager.po: Attrs.inc.h -BasicConstraintManager.po: DeclNodes.inc.h -BasicConstraintManager.po: DiagnosticCommonKinds.inc.h -BasicConstraintManager.po: StmtNodes.inc.h BasicValueFactory.o: AttrList.inc.h BasicValueFactory.o: Attrs.inc.h BasicValueFactory.o: DeclNodes.inc.h @@ -64,6 +54,16 @@ BugReporterVisitors.po: Attrs.inc.h BugReporterVisitors.po: DeclNodes.inc.h BugReporterVisitors.po: DiagnosticCommonKinds.inc.h BugReporterVisitors.po: StmtNodes.inc.h +CallEvent.o: AttrList.inc.h +CallEvent.o: Attrs.inc.h +CallEvent.o: DeclNodes.inc.h +CallEvent.o: DiagnosticCommonKinds.inc.h +CallEvent.o: StmtNodes.inc.h +CallEvent.po: AttrList.inc.h +CallEvent.po: Attrs.inc.h +CallEvent.po: DeclNodes.inc.h +CallEvent.po: DiagnosticCommonKinds.inc.h +CallEvent.po: StmtNodes.inc.h Checker.o: AttrList.inc.h Checker.o: Attrs.inc.h Checker.o: DeclNodes.inc.h @@ -114,6 +114,16 @@ CheckerRegistry.po: Attrs.inc.h CheckerRegistry.po: DeclNodes.inc.h CheckerRegistry.po: DiagnosticCommonKinds.inc.h CheckerRegistry.po: StmtNodes.inc.h +ConstraintManager.o: AttrList.inc.h +ConstraintManager.o: Attrs.inc.h +ConstraintManager.o: DeclNodes.inc.h +ConstraintManager.o: DiagnosticCommonKinds.inc.h +ConstraintManager.o: StmtNodes.inc.h +ConstraintManager.po: AttrList.inc.h +ConstraintManager.po: Attrs.inc.h +ConstraintManager.po: DeclNodes.inc.h +ConstraintManager.po: DiagnosticCommonKinds.inc.h +ConstraintManager.po: StmtNodes.inc.h CoreEngine.o: AttrList.inc.h CoreEngine.o: Attrs.inc.h CoreEngine.o: DeclNodes.inc.h @@ -222,16 +232,6 @@ MemRegion.po: Attrs.inc.h MemRegion.po: DeclNodes.inc.h MemRegion.po: DiagnosticCommonKinds.inc.h MemRegion.po: StmtNodes.inc.h -ObjCMessage.o: AttrList.inc.h *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 03:06:49 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id C32DB239; Sun, 17 Mar 2013 03:06:49 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id A04D3E71; Sun, 17 Mar 2013 03:06:49 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H36nZh017431; Sun, 17 Mar 2013 03:06:49 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H36n9r017430; Sun, 17 Mar 2013 03:06:49 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303170306.r2H36n9r017430@svn.freebsd.org> From: "Simon J. Gerraty" Date: Sun, 17 Mar 2013 03:06:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248408 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 03:06:49 -0000 Author: sjg Date: Sun Mar 17 03:06:49 2013 New Revision: 248408 URL: http://svnweb.freebsd.org/changeset/base/248408 Log: Don't add libssp for host Modified: projects/bmake/share/mk/local.dirdeps.mk Modified: projects/bmake/share/mk/local.dirdeps.mk ============================================================================== --- projects/bmake/share/mk/local.dirdeps.mk Sun Mar 17 03:04:43 2013 (r248407) +++ projects/bmake/share/mk/local.dirdeps.mk Sun Mar 17 03:06:49 2013 (r248408) @@ -1,9 +1,13 @@ +.if ${DEP_MACHINE} != "host" + # this is how we can handle optional dependencies .if ${MK_SSP:Uno} != "no" && defined(PROG) DIRDEPS += gnu/lib/libssp/libssp_nonshared .endif +.endif + # we need pkgs/pseudo/stage to prep the stage tree .if ${DEP_RELDIR:U${RELDIR}} != "pkgs/pseudo/stage" DIRDEPS += pkgs/pseudo/stage From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 03:07:14 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 91803351; Sun, 17 Mar 2013 03:07:14 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 805A0E74; Sun, 17 Mar 2013 03:07:14 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H37E6d017550; Sun, 17 Mar 2013 03:07:14 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H37E74017549; Sun, 17 Mar 2013 03:07:14 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303170307.r2H37E74017549@svn.freebsd.org> From: "Simon J. Gerraty" Date: Sun, 17 Mar 2013 03:07:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248409 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 03:07:14 -0000 Author: sjg Date: Sun Mar 17 03:07:13 2013 New Revision: 248409 URL: http://svnweb.freebsd.org/changeset/base/248409 Log: Don't forget DEP_TARGET_SPEC Modified: projects/bmake/share/mk/dirdeps.mk Modified: projects/bmake/share/mk/dirdeps.mk ============================================================================== --- projects/bmake/share/mk/dirdeps.mk Sun Mar 17 03:06:49 2013 (r248408) +++ projects/bmake/share/mk/dirdeps.mk Sun Mar 17 03:07:13 2013 (r248409) @@ -253,6 +253,7 @@ SKIP_DIR += .host *.WAIT ${SKIP_DIRDEPS} SKIP_DIR.host += ${SKIP_HOSTDIR} DEP_SKIP_DIR = ${SKIP_DIR} \ + ${SKIP_DIR.${DEP_TARGET_SPEC}:U} \ ${SKIP_DIR.${DEP_MACHINE}:U} \ ${SKIP_DIRDEPS.${DEP_MACHINE}:U} @@ -375,7 +376,10 @@ _build_dirs += ${_machines:N${DEP_TARGET .if !empty(DIRDEPS) # these we reset each time through as they can depend on DEP_MACHINE -DEP_DIRDEPS_FILTER = ${DIRDEPS_FILTER.${DEP_MACHINE}:U} ${DIRDEPS_FILTER:U} +DEP_DIRDEPS_FILTER = \ + ${DIRDEPS_FILTER.${DEP_TARGET_SPEC}:U} \ + ${DIRDEPS_FILTER.${DEP_MACHINE}:U} \ + ${DIRDEPS_FILTER:U} .if empty(DEP_DIRDEPS_FILTER) # something harmless DEP_DIRDEPS_FILTER = U From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 03:09:09 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 8C609483; Sun, 17 Mar 2013 03:09:09 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 69A9CE87; Sun, 17 Mar 2013 03:09:09 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H399DT017913; Sun, 17 Mar 2013 03:09:09 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H399iV017912; Sun, 17 Mar 2013 03:09:09 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303170309.r2H399iV017912@svn.freebsd.org> From: "Simon J. Gerraty" Date: Sun, 17 Mar 2013 03:09:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248410 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 03:09:09 -0000 Author: sjg Date: Sun Mar 17 03:09:08 2013 New Revision: 248410 URL: http://svnweb.freebsd.org/changeset/base/248410 Log: If building for "host" and we do not have Makefile.depend.host; do not update it. This allows us to avoid populating the tree with Makefile.depend.host that aren't absolutely necessary. Modified: projects/bmake/share/mk/local.sys.mk Modified: projects/bmake/share/mk/local.sys.mk ============================================================================== --- projects/bmake/share/mk/local.sys.mk Sun Mar 17 03:07:13 2013 (r248409) +++ projects/bmake/share/mk/local.sys.mk Sun Mar 17 03:09:08 2013 (r248410) @@ -186,9 +186,9 @@ STAGED_INCLUDE_DIR= ${STAGE_OBJTOP}/incl .include "sys.dependfile.mk" -.if ${MACHINE} == "host" -# need a machine specific file -.MAKE.DEPENDFILE= ${.MAKE.DEPENDFILE_PREFIX}.${MACHINE} +.if ${.MAKE.LEVEL} > 0 && ${MACHINE} == "host" && ${.MAKE.DEPENDFILE:E} != "host" +# we can use this but should not update it. +UPDATE_DEPENDFILE= NO .endif .MAKE.META.BAILIWICK = ${SB} ${OBJROOT} ${STAGE_ROOT} From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 07:47:01 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id EEAEB3EC; Sun, 17 Mar 2013 07:47:01 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id D18CF6E4; Sun, 17 Mar 2013 07:47:01 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H7l1BJ001626; Sun, 17 Mar 2013 07:47:01 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H7l0bw001610; Sun, 17 Mar 2013 07:47:00 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201303170747.r2H7l0bw001610@svn.freebsd.org> From: Gleb Smirnoff Date: Sun, 17 Mar 2013 07:47:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248419 - in projects/counters/sys: amd64/include arm/include i386/include ia64/include mips/include powerpc/include sparc64/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 07:47:02 -0000 Author: glebius Date: Sun Mar 17 07:47:00 2013 New Revision: 248419 URL: http://svnweb.freebsd.org/changeset/base/248419 Log: Consistently use C99 inline keyword instead of macro. Modified: projects/counters/sys/amd64/include/counter.h projects/counters/sys/arm/include/counter.h projects/counters/sys/i386/include/counter.h projects/counters/sys/ia64/include/counter.h projects/counters/sys/mips/include/counter.h projects/counters/sys/powerpc/include/counter.h projects/counters/sys/sparc64/include/counter.h Modified: projects/counters/sys/amd64/include/counter.h ============================================================================== --- projects/counters/sys/amd64/include/counter.h Sun Mar 17 07:41:14 2013 (r248418) +++ projects/counters/sys/amd64/include/counter.h Sun Mar 17 07:47:00 2013 (r248419) @@ -33,7 +33,7 @@ extern struct pcpu __pcpu[1]; -static __inline void +static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -43,7 +43,7 @@ counter_u64_inc(counter_u64_t c, uint64_ : "memory", "cc"); } -static __inline void +static inline void counter_u64_dec(counter_u64_t c, uint64_t dec) { Modified: projects/counters/sys/arm/include/counter.h ============================================================================== --- projects/counters/sys/arm/include/counter.h Sun Mar 17 07:41:14 2013 (r248418) +++ projects/counters/sys/arm/include/counter.h Sun Mar 17 07:47:00 2013 (r248419) @@ -31,7 +31,7 @@ #include -static __inline void +static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -40,7 +40,7 @@ counter_u64_inc(counter_u64_t c, uint64_ critical_exit(); } -static __inline void +static inline void counter_u64_dec(counter_u64_t c, uint64_t dec) { Modified: projects/counters/sys/i386/include/counter.h ============================================================================== --- projects/counters/sys/i386/include/counter.h Sun Mar 17 07:41:14 2013 (r248418) +++ projects/counters/sys/i386/include/counter.h Sun Mar 17 07:47:00 2013 (r248419) @@ -52,7 +52,7 @@ counter_64_inc_8b(uint64_t *p, uint64_t : "memory", "cc", "eax", "edx", "ebx", "ecx"); } -static __inline void +static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -65,7 +65,7 @@ counter_u64_inc(counter_u64_t c, uint64_ } } -static __inline void +static inline void counter_u64_dec(counter_u64_t c, uint64_t dec) { Modified: projects/counters/sys/ia64/include/counter.h ============================================================================== --- projects/counters/sys/ia64/include/counter.h Sun Mar 17 07:41:14 2013 (r248418) +++ projects/counters/sys/ia64/include/counter.h Sun Mar 17 07:47:00 2013 (r248419) @@ -31,7 +31,7 @@ #include -static __inline void +static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -40,7 +40,7 @@ counter_u64_inc(counter_u64_t c, uint64_ critical_exit(); } -static __inline void +static inline void counter_u64_dec(counter_u64_t c, uint64_t dec) { Modified: projects/counters/sys/mips/include/counter.h ============================================================================== --- projects/counters/sys/mips/include/counter.h Sun Mar 17 07:41:14 2013 (r248418) +++ projects/counters/sys/mips/include/counter.h Sun Mar 17 07:47:00 2013 (r248419) @@ -31,7 +31,7 @@ #include -static __inline void +static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -40,7 +40,7 @@ counter_u64_inc(counter_u64_t c, uint64_ critical_exit(); } -static __inline void +static inline void counter_u64_dec(counter_u64_t c, uint64_t dec) { Modified: projects/counters/sys/powerpc/include/counter.h ============================================================================== --- projects/counters/sys/powerpc/include/counter.h Sun Mar 17 07:41:14 2013 (r248418) +++ projects/counters/sys/powerpc/include/counter.h Sun Mar 17 07:47:00 2013 (r248419) @@ -31,7 +31,7 @@ #include -static __inline void +static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -40,7 +40,7 @@ counter_u64_inc(counter_u64_t c, uint64_ critical_exit(); } -static __inline void +static inline void counter_u64_dec(counter_u64_t c, uint64_t dec) { Modified: projects/counters/sys/sparc64/include/counter.h ============================================================================== --- projects/counters/sys/sparc64/include/counter.h Sun Mar 17 07:41:14 2013 (r248418) +++ projects/counters/sys/sparc64/include/counter.h Sun Mar 17 07:47:00 2013 (r248419) @@ -31,7 +31,7 @@ #include -static __inline void +static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -40,7 +40,7 @@ counter_u64_inc(counter_u64_t c, uint64_ critical_exit(); } -static __inline void +static inline void counter_u64_dec(counter_u64_t c, uint64_t dec) { From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 07:49:45 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 0A76A50F; Sun, 17 Mar 2013 07:49:45 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id C35336ED; Sun, 17 Mar 2013 07:49:44 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2H7niMo001997; Sun, 17 Mar 2013 07:49:44 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2H7nim0001995; Sun, 17 Mar 2013 07:49:44 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201303170749.r2H7nim0001995@svn.freebsd.org> From: Gleb Smirnoff Date: Sun, 17 Mar 2013 07:49:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248420 - in projects/counters/sys: kern sys X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 07:49:45 -0000 Author: glebius Date: Sun Mar 17 07:49:44 2013 New Revision: 248420 URL: http://svnweb.freebsd.org/changeset/base/248420 Log: Provide generic sysctl handler and macros for counter(9). Modified: projects/counters/sys/kern/subr_counter.c projects/counters/sys/sys/sysctl.h Modified: projects/counters/sys/kern/subr_counter.c ============================================================================== --- projects/counters/sys/kern/subr_counter.c Sun Mar 17 07:47:00 2013 (r248419) +++ projects/counters/sys/kern/subr_counter.c Sun Mar 17 07:49:44 2013 (r248420) @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include static uma_zone_t uint64_pcpu_zone; @@ -77,6 +78,30 @@ counter_u64_free(counter_u64_t c) uma_zfree(uint64_pcpu_zone, c); } +int +sysctl_handle_counter_u64(SYSCTL_HANDLER_ARGS) +{ + uint64_t out; + int error; + + out = counter_u64_fetch(*(counter_u64_t *)arg1); + + error = SYSCTL_OUT(req, &out, sizeof(uint64_t)); + + if (error || !req->newptr) + return (error); + + if (!arg1) + return (EPERM); + + /* + * Any write attempt to a counter zeroes it. + */ + counter_u64_zero(*(counter_u64_t *)arg1); + + return (0); +} + static void counter_startup(void) { Modified: projects/counters/sys/sys/sysctl.h ============================================================================== --- projects/counters/sys/sys/sysctl.h Sun Mar 17 07:47:00 2013 (r248419) +++ projects/counters/sys/sys/sysctl.h Sun Mar 17 07:49:44 2013 (r248420) @@ -184,6 +184,7 @@ int sysctl_handle_long(SYSCTL_HANDLER_AR int sysctl_handle_64(SYSCTL_HANDLER_ARGS); int sysctl_handle_string(SYSCTL_HANDLER_ARGS); int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS); +int sysctl_handle_counter_u64(SYSCTL_HANDLER_ARGS); int sysctl_dpcpu_int(SYSCTL_HANDLER_ARGS); int sysctl_dpcpu_long(SYSCTL_HANDLER_ARGS); @@ -379,6 +380,18 @@ SYSCTL_ALLOWED_TYPES(UINT64, uint64_t *a SYSCTL_ADD_ASSERT_TYPE(UINT64, ptr), 0, \ sysctl_handle_64, "QU", __DESCR(descr)) +#define SYSCTL_COUNTER_U64(parent, nbr, name, access, ptr, val, descr) \ + SYSCTL_ASSERT_TYPE(UINT64, ptr, parent, name); \ + SYSCTL_OID(parent, nbr, name, \ + CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), \ + ptr, val, sysctl_handle_counter_u64, "QU", descr) + +#define SYSCTL_ADD_COUNTER_U64(ctx, parent, nbr, name, access, ptr, descr)\ + sysctl_add_oid(ctx, parent, nbr, name, \ + CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), \ + SYSCTL_ADD_ASSERT_TYPE(UINT64, ptr), 0, \ + sysctl_handle_counter_u64, "QU", __DESCR(descr)) + /* Oid for an opaque object. Specified by a pointer and a length. */ #define SYSCTL_OPAQUE(parent, nbr, name, access, ptr, len, fmt, descr) \ SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|(access), \ From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 10:57:06 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id F288FA43; Sun, 17 Mar 2013 10:57:05 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id D6895B54; Sun, 17 Mar 2013 10:57:05 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HAv5vW059697; Sun, 17 Mar 2013 10:57:05 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HAv5Kr059691; Sun, 17 Mar 2013 10:57:05 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303171057.r2HAv5Kr059691@svn.freebsd.org> From: Martin Matuska Date: Sun, 17 Mar 2013 10:57:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248421 - in projects/libzfs_core: cddl/contrib/opensolaris/lib/libzfs/common sys/cddl/contrib/opensolaris/common/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 10:57:06 -0000 Author: mm Date: Sun Mar 17 10:57:04 2013 New Revision: 248421 URL: http://svnweb.freebsd.org/changeset/base/248421 Log: libzfs_core: - provide complete backwards compatibility (old utility, new kernel) - add zfs_cmd_t compatibility mapping in both directions - determine ioctl address in zfs_ioctl_compat.c Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h Sun Mar 17 07:49:44 2013 (r248420) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h Sun Mar 17 10:57:04 2013 (r248421) @@ -43,18 +43,18 @@ static int zfs_ioctl_version = 0; static __inline int zcmd_ioctl(int fd, int request, zfs_cmd_t *zc) { - unsigned long cmd; size_t oldsize, zfs_kernel_version_size, zfs_ioctl_version_size; int version, ret, cflag = ZFS_CMD_COMPAT_NONE; - cmd = _IOWR('Z', request, struct zfs_cmd); - zfs_ioctl_version_size = sizeof(zfs_ioctl_version); if (zfs_ioctl_version == 0) { sysctlbyname("vfs.zfs.version.ioctl", &zfs_ioctl_version, &zfs_ioctl_version_size, NULL, 0); } + if (zfs_ioctl_version == ZFS_IOCVER_DEADMAN) + cflag = ZFS_CMD_COMPAT_DEADMAN; + /* * If vfs.zfs.version.ioctl is not defined, assume we have v28 * compatible binaries and use vfs.zfs.version.spa to test for v15 @@ -76,7 +76,7 @@ zcmd_ioctl(int fd, int request, zfs_cmd_ } oldsize = zc->zc_nvlist_dst_size; - ret = zcmd_ioctl_compat(fd, cmd, zc, cflag); + ret = zcmd_ioctl_compat(fd, request, zc, cflag); if (ret == 0 && oldsize < zc->zc_nvlist_dst_size) { ret = -1; @@ -85,7 +85,7 @@ zcmd_ioctl(int fd, int request, zfs_cmd_ return (ret); } -#define ioctl(fd, cmd, zc) zcmd_ioctl((fd), (cmd), (zc)) +#define ioctl(fd, ioc, zc) zcmd_ioctl((fd), (ioc), (zc)) #ifdef __cplusplus } Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c Sun Mar 17 07:49:44 2013 (r248420) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c Sun Mar 17 10:57:04 2013 (r248421) @@ -33,6 +33,7 @@ #include #include #include +#include "zfs_namecheck.h" #include "zfs_ioctl_compat.h" static int zfs_version_ioctl = ZFS_IOCVER_CURRENT; @@ -49,8 +50,53 @@ zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_ { zfs_cmd_v15_t *zc_c; zfs_cmd_v28_t *zc28_c; + zfs_cmd_deadman_t *zcdm_c; switch (cflag) { + case ZFS_CMD_COMPAT_DEADMAN: + zcdm_c = (void *)addr; + /* zc */ + strlcpy(zc->zc_name, zcdm_c->zc_name, MAXPATHLEN); + strlcpy(zc->zc_value, zcdm_c->zc_value, MAXPATHLEN * 2); + strlcpy(zc->zc_string, zcdm_c->zc_string, MAXPATHLEN); + strlcpy(zc->zc_top_ds, zcdm_c->zc_top_ds, MAXPATHLEN); + zc->zc_guid = zcdm_c->zc_guid; + zc->zc_nvlist_conf = zcdm_c->zc_nvlist_conf; + zc->zc_nvlist_conf_size = zcdm_c->zc_nvlist_conf_size; + zc->zc_nvlist_src = zcdm_c->zc_nvlist_src; + zc->zc_nvlist_src_size = zcdm_c->zc_nvlist_src_size; + zc->zc_nvlist_dst = zcdm_c->zc_nvlist_dst; + zc->zc_nvlist_dst_size = zcdm_c->zc_nvlist_dst_size; + zc->zc_cookie = zcdm_c->zc_cookie; + zc->zc_objset_type = zcdm_c->zc_objset_type; + zc->zc_perm_action = zcdm_c->zc_perm_action; + zc->zc_history = zcdm_c->zc_history; + zc->zc_history_len = zcdm_c->zc_history_len; + zc->zc_history_offset = zcdm_c->zc_history_offset; + zc->zc_obj = zcdm_c->zc_obj; + zc->zc_iflags = zcdm_c->zc_iflags; + zc->zc_share = zcdm_c->zc_share; + zc->zc_jailid = zcdm_c->zc_jailid; + zc->zc_objset_stats = zcdm_c->zc_objset_stats; + zc->zc_begin_record = zcdm_c->zc_begin_record; + zc->zc_defer_destroy = zcdm_c->zc_defer_destroy; + zc->zc_temphold = zcdm_c->zc_temphold; + zc->zc_action_handle = zcdm_c->zc_action_handle; + zc->zc_cleanup_fd = zcdm_c->zc_cleanup_fd; + zc->zc_simple = zcdm_c->zc_simple; + bcopy(zcdm_c->zc_pad, zc->zc_pad, sizeof(zc->zc_pad)); + zc->zc_sendobj = zcdm_c->zc_sendobj; + zc->zc_fromobj = zcdm_c->zc_fromobj; + zc->zc_createtxg = zcdm_c->zc_createtxg; + zc->zc_stat = zcdm_c->zc_stat; + + /* zc_inject_record doesn't change in libzfs_core */ + zcdm_c->zc_inject_record = zc->zc_inject_record; + + /* we always assume zc_nvlist_dst_filled is true */ + zc->zc_nvlist_dst_filled = B_TRUE; + break; + case ZFS_CMD_COMPAT_V28: zc28_c = (void *)addr; @@ -178,8 +224,51 @@ zfs_cmd_compat_put(zfs_cmd_t *zc, caddr_ { zfs_cmd_v15_t *zc_c; zfs_cmd_v28_t *zc28_c; + zfs_cmd_deadman_t *zcdm_c; switch (cflag) { + case ZFS_CMD_COMPAT_DEADMAN: + zcdm_c = (void *)addr; + + strlcpy(zcdm_c->zc_name, zc->zc_name, MAXPATHLEN); + strlcpy(zcdm_c->zc_value, zc->zc_value, MAXPATHLEN * 2); + strlcpy(zcdm_c->zc_string, zc->zc_string, MAXPATHLEN); + strlcpy(zcdm_c->zc_top_ds, zc->zc_top_ds, MAXPATHLEN); + zcdm_c->zc_guid = zc->zc_guid; + zcdm_c->zc_nvlist_conf = zc->zc_nvlist_conf; + zcdm_c->zc_nvlist_conf_size = zc->zc_nvlist_conf_size; + zcdm_c->zc_nvlist_src = zc->zc_nvlist_src; + zcdm_c->zc_nvlist_src_size = zc->zc_nvlist_src_size; + zcdm_c->zc_nvlist_dst = zc->zc_nvlist_dst; + zcdm_c->zc_nvlist_dst_size = zc->zc_nvlist_dst_size; + zcdm_c->zc_cookie = zc->zc_cookie; + zcdm_c->zc_objset_type = zc->zc_objset_type; + zcdm_c->zc_perm_action = zc->zc_perm_action; + zcdm_c->zc_history = zc->zc_history; + zcdm_c->zc_history_len = zc->zc_history_len; + zcdm_c->zc_history_offset = zc->zc_history_offset; + zcdm_c->zc_obj = zc->zc_obj; + zcdm_c->zc_iflags = zc->zc_iflags; + zcdm_c->zc_share = zc->zc_share; + zcdm_c->zc_jailid = zc->zc_jailid; + zcdm_c->zc_objset_stats = zc->zc_objset_stats; + zcdm_c->zc_begin_record = zc->zc_begin_record; + zcdm_c->zc_defer_destroy = zc->zc_defer_destroy; + zcdm_c->zc_temphold = zc->zc_temphold; + zcdm_c->zc_action_handle = zc->zc_action_handle; + zcdm_c->zc_cleanup_fd = zc->zc_cleanup_fd; + zcdm_c->zc_simple = zc->zc_simple; + bcopy(zc->zc_pad, zcdm_c->zc_pad, sizeof(zcdm_c->zc_pad)); + zcdm_c->zc_sendobj = zc->zc_sendobj; + zcdm_c->zc_fromobj = zc->zc_fromobj; + zcdm_c->zc_createtxg = zc->zc_createtxg; + zcdm_c->zc_stat = zc->zc_stat; + + /* zc_inject_record doesn't change in libzfs_core */ + zc->zc_inject_record = zcdm_c->zc_inject_record; + + break; + case ZFS_CMD_COMPAT_V28: zc28_c = (void *)addr; @@ -476,7 +565,7 @@ zfs_ioctl_compat_pool_get_props(zfs_cmd_ #ifndef _KERNEL int -zcmd_ioctl_compat(int fd, unsigned long cmd, zfs_cmd_t *zc, const int cflag) +zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag) { int nc, ret; void *zc_c; @@ -484,16 +573,21 @@ zcmd_ioctl_compat(int fd, unsigned long switch (cflag) { case ZFS_CMD_COMPAT_NONE: - ret = ioctl(fd, cmd, zc); + ncmd = _IOWR('Z', request, struct zfs_cmd); + ret = ioctl(fd, ncmd, zc); return (ret); + case ZFS_CMD_COMPAT_DEADMAN: + zc_c = malloc(sizeof(zfs_cmd_deadman_t)); + ncmd = _IOWR('Z', request, struct zfs_cmd_deadman); + break; case ZFS_CMD_COMPAT_V28: zc_c = malloc(sizeof(zfs_cmd_v28_t)); - ncmd = _IOWR('Z', ZFS_IOCREQ(cmd), struct zfs_cmd_v28); + ncmd = _IOWR('Z', request, struct zfs_cmd_v28); break; case ZFS_CMD_COMPAT_V15: - nc = zfs_ioctl_v28_to_v15[ZFS_IOCREQ(cmd)]; + nc = zfs_ioctl_v28_to_v15[request]; zc_c = malloc(sizeof(zfs_cmd_v15_t)); - ncmd = _IOWR('Z', nc, struct zfs_cmd_v15); + ncmd = _IOWR('Z', request, struct zfs_cmd_v15); break; default: return (EINVAL); @@ -505,18 +599,18 @@ zcmd_ioctl_compat(int fd, unsigned long zfs_cmd_compat_put(zc, (caddr_t)zc_c, cflag); ret = ioctl(fd, ncmd, zc_c); if (cflag == ZFS_CMD_COMPAT_V15 && - nc == 2 /* ZFS_IOC_POOL_IMPORT */) - ret = ioctl(fd, _IOWR('Z', 4 /* ZFS_IOC_POOL_CONFIGS */, + nc == ZFS_IOC_POOL_IMPORT) + ret = ioctl(fd, _IOWR('Z', ZFS_IOC_POOL_CONFIGS, struct zfs_cmd_v15), zc_c); zfs_cmd_compat_get(zc, (caddr_t)zc_c, cflag); free(zc_c); if (cflag == ZFS_CMD_COMPAT_V15) { switch (nc) { - case 2: /* ZFS_IOC_POOL_IMPORT */ - case 4: /* ZFS_IOC_POOL_CONFIGS */ - case 5: /* ZFS_IOC_POOL_STATS */ - case 6: /* ZFS_IOC_POOL_TRYIMPORT */ + case ZFS_IOC_POOL_IMPORT: + case ZFS_IOC_POOL_CONFIGS: + case ZFS_IOC_POOL_STATS: + case ZFS_IOC_POOL_TRYIMPORT: zfs_ioctl_compat_fix_stats(zc, nc); break; case 41: /* ZFS_IOC_POOL_GET_PROPS (v15) */ @@ -528,16 +622,25 @@ zcmd_ioctl_compat(int fd, unsigned long return (ret); } #else /* _KERNEL */ -void +int zfs_ioctl_compat_pre(zfs_cmd_t *zc, int *vec, const int cflag) { - if (cflag == ZFS_CMD_COMPAT_V15) + int error = 0; + + /* are we creating a clone? */ + if (*vec == ZFS_IOC_CREATE && zc->zc_value[0] != '\0') + *vec = ZFS_IOC_CLONE; + + if (cflag == ZFS_CMD_COMPAT_V15) { switch (*vec) { case 7: /* ZFS_IOC_POOL_SCRUB (v15) */ zc->zc_cookie = POOL_SCAN_SCRUB; break; } + } + + return (error); } void @@ -545,9 +648,9 @@ zfs_ioctl_compat_post(zfs_cmd_t *zc, int { if (cflag == ZFS_CMD_COMPAT_V15) { switch (vec) { - case 4: /* ZFS_IOC_POOL_CONFIGS */ - case 5: /* ZFS_IOC_POOL_STATS */ - case 6: /* ZFS_IOC_POOL_TRYIMPORT */ + case ZFS_IOC_POOL_CONFIGS: + case ZFS_IOC_POOL_STATS: + case ZFS_IOC_POOL_TRYIMPORT: zfs_ioctl_compat_fix_stats(zc, vec); break; case 41: /* ZFS_IOC_POOL_GET_PROPS (v15) */ @@ -556,4 +659,127 @@ zfs_ioctl_compat_post(zfs_cmd_t *zc, int } } } + +nvlist_t * +zfs_ioctl_compat_innvl(zfs_cmd_t *zc, nvlist_t * innvl, const int vec, + const int cflag) +{ + nvlist_t *nvl, *tmpnvl; + char *poolname, *snapname; + int err; + + if (cflag == ZFS_CMD_COMPAT_NONE) + goto out; + + switch (vec) { + case ZFS_IOC_CREATE: + nvl = fnvlist_alloc(); + fnvlist_add_int32(nvl, "type", zc->zc_objset_type); + if (innvl != NULL) { + fnvlist_add_nvlist(nvl, "props", innvl); + nvlist_free(innvl); + } + return (nvl); + break; + case ZFS_IOC_CLONE: + nvl = fnvlist_alloc(); + fnvlist_add_string(nvl, "origin", zc->zc_value); + if (innvl != NULL) { + fnvlist_add_nvlist(nvl, "props", innvl); + nvlist_free(innvl); + } + return (nvl); + break; + case ZFS_IOC_SNAPSHOT: + if (innvl == NULL) + goto out; + nvl = fnvlist_alloc(); + fnvlist_add_nvlist(nvl, "props", innvl); + tmpnvl = fnvlist_alloc(); + snapname = kmem_asprintf("%s@%s", zc->zc_name, zc->zc_value); + fnvlist_add_boolean(tmpnvl, snapname); + kmem_free(snapname, strlen(snapname + 1)); + /* check if we are doing a recursive snapshot */ + if (zc->zc_cookie) + dmu_get_recursive_snaps_nvl(zc->zc_name, zc->zc_value, + tmpnvl); + fnvlist_add_nvlist(nvl, "snaps", tmpnvl); + fnvlist_free(tmpnvl); + nvlist_free(innvl); + /* strip dataset part from zc->zc_name */ + zc->zc_name[strcspn(zc->zc_name, "/@")] = '\0'; + return (nvl); + break; + case ZFS_IOC_SPACE_SNAPS: + nvl = fnvlist_alloc(); + fnvlist_add_string(nvl, "firstsnap", zc->zc_value); + if (innvl != NULL) + nvlist_free(innvl); + return (nvl); + break; + case ZFS_IOC_DESTROY_SNAPS: + if (innvl == NULL && cflag == ZFS_CMD_COMPAT_DEADMAN) + goto out; + nvl = fnvlist_alloc(); + if (innvl != NULL) { + fnvlist_add_nvlist(nvl, "snaps", innvl); + } else { + /* + * We are probably called by even older binaries, + * allocate and populate nvlist with recursive + * snapshots + */ + if (snapshot_namecheck(zc->zc_value, NULL, + NULL) == 0) { + tmpnvl = fnvlist_alloc(); + if (dmu_get_recursive_snaps_nvl(zc->zc_name, + zc->zc_value, tmpnvl) == 0) + fnvlist_add_nvlist(nvl, "snaps", + tmpnvl); + nvlist_free(tmpnvl); + } + } + if (innvl != NULL) + nvlist_free(innvl); + /* strip dataset part from zc->zc_name */ + zc->zc_name[strcspn(zc->zc_name, "/@")] = '\0'; + return (nvl); + break; + } +out: + return (innvl); +} + +nvlist_t * +zfs_ioctl_compat_outnvl(zfs_cmd_t *zc, nvlist_t * outnvl, const int vec, + const int cflag) +{ + nvlist_t *tmpnvl; + + if (cflag == ZFS_CMD_COMPAT_NONE) + return (outnvl); + + switch (vec) { + case ZFS_IOC_SPACE_SNAPS: + (void) nvlist_lookup_uint64(outnvl, "used", &zc->zc_cookie); + (void) nvlist_lookup_uint64(outnvl, "compressed", + &zc->zc_objset_type); + (void) nvlist_lookup_uint64(outnvl, "uncompressed", + &zc->zc_perm_action); + nvlist_free(outnvl); + /* return empty outnvl */ + tmpnvl = fnvlist_alloc(); + return (tmpnvl); + break; + case ZFS_IOC_CREATE: + case ZFS_IOC_CLONE: + nvlist_free(outnvl); + /* return empty outnvl */ + tmpnvl = fnvlist_alloc(); + return (tmpnvl); + break; + } + + return (outnvl); +} #endif /* KERNEL */ Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h Sun Mar 17 07:49:44 2013 (r248420) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h Sun Mar 17 10:57:04 2013 (r248421) @@ -45,13 +45,15 @@ extern "C" { */ /* ioctl versions for vfs.zfs.version.ioctl */ +#define ZFS_IOCVER_LZC 2 #define ZFS_IOCVER_DEADMAN 1 -#define ZFS_IOCVER_CURRENT ZFS_IOCVER_DEADMAN +#define ZFS_IOCVER_CURRENT ZFS_IOCVER_LZC /* compatibility conversion flag */ #define ZFS_CMD_COMPAT_NONE 0 #define ZFS_CMD_COMPAT_V15 1 #define ZFS_CMD_COMPAT_V28 2 +#define ZFS_CMD_COMPAT_DEADMAN 3 #define ZFS_IOC_COMPAT_PASS 254 #define ZFS_IOC_COMPAT_FAIL 255 @@ -150,6 +152,44 @@ typedef struct zfs_cmd_v28 { zfs_stat_t zc_stat; } zfs_cmd_v28_t; +typedef struct zfs_cmd_deadman { + char zc_name[MAXPATHLEN]; + char zc_value[MAXPATHLEN * 2]; + char zc_string[MAXNAMELEN]; + char zc_top_ds[MAXPATHLEN]; + uint64_t zc_guid; + uint64_t zc_nvlist_conf; /* really (char *) */ + uint64_t zc_nvlist_conf_size; + uint64_t zc_nvlist_src; /* really (char *) */ + uint64_t zc_nvlist_src_size; + uint64_t zc_nvlist_dst; /* really (char *) */ + uint64_t zc_nvlist_dst_size; + uint64_t zc_cookie; + uint64_t zc_objset_type; + uint64_t zc_perm_action; + uint64_t zc_history; /* really (char *) */ + uint64_t zc_history_len; + uint64_t zc_history_offset; + uint64_t zc_obj; + uint64_t zc_iflags; /* internal to zfs(7fs) */ + zfs_share_t zc_share; + uint64_t zc_jailid; + dmu_objset_stats_t zc_objset_stats; + struct drr_begin zc_begin_record; + /* zc_inject_record doesn't change in libzfs_core */ + zinject_record_t zc_inject_record; + boolean_t zc_defer_destroy; + boolean_t zc_temphold; + uint64_t zc_action_handle; + int zc_cleanup_fd; + uint8_t zc_simple; + uint8_t zc_pad[3]; /* alignment */ + uint64_t zc_sendobj; + uint64_t zc_fromobj; + uint64_t zc_createtxg; + zfs_stat_t zc_stat; +} zfs_cmd_deadman_t; + #ifdef _KERNEL unsigned static long zfs_ioctl_v15_to_v28[] = { 0, /* 0 ZFS_IOC_POOL_CREATE */ @@ -274,10 +314,14 @@ unsigned static long zfs_ioctl_v28_to_v1 #endif /* ! _KERNEL */ #ifdef _KERNEL -void zfs_ioctl_compat_pre(zfs_cmd_t *, int *, const int); +int zfs_ioctl_compat_pre(zfs_cmd_t *, int *, const int); void zfs_ioctl_compat_post(zfs_cmd_t *, const int, const int); +nvlist_t *zfs_ioctl_compat_innvl(zfs_cmd_t *, nvlist_t *, const int, + const int); +nvlist_t *zfs_ioctl_compat_outnvl(zfs_cmd_t *, nvlist_t *, const int, + const int); #else -int zcmd_ioctl_compat(int, unsigned long, zfs_cmd_t *, const int); +int zcmd_ioctl_compat(int, int, zfs_cmd_t *, const int); #endif /* _KERNEL */ void zfs_cmd_compat_get(zfs_cmd_t *, caddr_t, const int); void zfs_cmd_compat_put(zfs_cmd_t *, caddr_t, const int); Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Sun Mar 17 07:49:44 2013 (r248420) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Sun Mar 17 10:57:04 2013 (r248421) @@ -5805,7 +5805,7 @@ zfsdev_ioctl(struct cdev *dev, u_long zc #ifdef illumos minor_t minor = getminor(dev); #else - int cflag, cmd; + int cflag, cmd, oldvecnum; cred_t *cr = td->td_ucred; #endif const zfs_ioc_vec_t *vec; @@ -5821,7 +5821,10 @@ zfsdev_ioctl(struct cdev *dev, u_long zc * and translate zfs_cmd if necessary */ if (len < sizeof(zfs_cmd_t)) - if (len == sizeof(zfs_cmd_v28_t)) { + if (len == sizeof(zfs_cmd_deadman_t)) { + cflag = ZFS_CMD_COMPAT_DEADMAN; + vecnum = cmd; + } else if (len == sizeof(zfs_cmd_v28_t)) { cflag = ZFS_CMD_COMPAT_V28; vecnum = cmd; } else if (len == sizeof(zfs_cmd_v15_t)) { @@ -5870,7 +5873,12 @@ zfsdev_ioctl(struct cdev *dev, u_long zc zc = kmem_zalloc(sizeof(zfs_cmd_t), KM_SLEEP); bzero(zc, sizeof(zfs_cmd_t)); zfs_cmd_compat_get(zc, arg, cflag); - zfs_ioctl_compat_pre(zc, &vecnum, cflag); + oldvecnum = vecnum; + error = zfs_ioctl_compat_pre(zc, &vecnum, cflag); + if (error != 0) + goto out; + if (oldvecnum != vecnum) + vec = &zfs_ioc_vec[vecnum]; } else zc = (void *)arg; @@ -5882,6 +5890,10 @@ zfsdev_ioctl(struct cdev *dev, u_long zc goto out; } + /* rewrite innvl for backwards compatibility */ + if (cflag != ZFS_CMD_COMPAT_NONE) + innvl = zfs_ioctl_compat_innvl(zc, innvl, vecnum, cflag); + /* * Ensure that all pool/dataset names are valid before we pass down to * the lower layers. @@ -5955,6 +5967,11 @@ zfsdev_ioctl(struct cdev *dev, u_long zc } fnvlist_free(lognv); + /* rewrite outnvl for backwards compatibility */ + if (cflag != ZFS_CMD_COMPAT_NONE) + outnvl = zfs_ioctl_compat_outnvl(zc, outnvl, vecnum, + cflag); + if (!nvlist_empty(outnvl) || zc->zc_nvlist_dst_size != 0) { int smusherror = 0; if (vec->zvec_smush_outnvlist) { From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 17:13:44 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 3899E83B; Sun, 17 Mar 2013 17:13:44 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 134D0A30; Sun, 17 Mar 2013 17:13:44 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HHDhR4079785; Sun, 17 Mar 2013 17:13:43 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HHDhl0079783; Sun, 17 Mar 2013 17:13:43 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201303171713.r2HHDhl0079783@svn.freebsd.org> From: Gleb Smirnoff Date: Sun, 17 Mar 2013 17:13:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248432 - in projects/counters/sys: kern sys X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 17:13:44 -0000 Author: glebius Date: Sun Mar 17 17:13:43 2013 New Revision: 248432 URL: http://svnweb.freebsd.org/changeset/base/248432 Log: Fixes to r248420: - Remove a check that never fires in sysctl_handle_counter_u64() - Add comment above SYSCTL_COUNTER_U64() Submitted by: jilles Modified: projects/counters/sys/kern/subr_counter.c projects/counters/sys/sys/sysctl.h Modified: projects/counters/sys/kern/subr_counter.c ============================================================================== --- projects/counters/sys/kern/subr_counter.c Sun Mar 17 16:49:37 2013 (r248431) +++ projects/counters/sys/kern/subr_counter.c Sun Mar 17 17:13:43 2013 (r248432) @@ -91,9 +91,6 @@ sysctl_handle_counter_u64(SYSCTL_HANDLER if (error || !req->newptr) return (error); - if (!arg1) - return (EPERM); - /* * Any write attempt to a counter zeroes it. */ Modified: projects/counters/sys/sys/sysctl.h ============================================================================== --- projects/counters/sys/sys/sysctl.h Sun Mar 17 16:49:37 2013 (r248431) +++ projects/counters/sys/sys/sysctl.h Sun Mar 17 17:13:43 2013 (r248432) @@ -380,6 +380,7 @@ SYSCTL_ALLOWED_TYPES(UINT64, uint64_t *a SYSCTL_ADD_ASSERT_TYPE(UINT64, ptr), 0, \ sysctl_handle_64, "QU", __DESCR(descr)) +/* Oid for a 64-bin unsigned counter(9). The pointer must be non NULL. */ #define SYSCTL_COUNTER_U64(parent, nbr, name, access, ptr, val, descr) \ SYSCTL_ASSERT_TYPE(UINT64, ptr, parent, name); \ SYSCTL_OID(parent, nbr, name, \ From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 17:28:06 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id D18D1EF8; Sun, 17 Mar 2013 17:28:06 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id B8D3DA8B; Sun, 17 Mar 2013 17:28:06 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HHS6q1083715; Sun, 17 Mar 2013 17:28:06 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HHS6q1083713; Sun, 17 Mar 2013 17:28:06 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303171728.r2HHS6q1083713@svn.freebsd.org> From: Martin Matuska Date: Sun, 17 Mar 2013 17:28:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248433 - projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 17:28:06 -0000 Author: mm Date: Sun Mar 17 17:28:06 2013 New Revision: 248433 URL: http://svnweb.freebsd.org/changeset/base/248433 Log: Fix accidentially changed ioc variable for old v15 compatibility Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c Sun Mar 17 17:13:43 2013 (r248432) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c Sun Mar 17 17:28:06 2013 (r248433) @@ -587,7 +587,7 @@ zcmd_ioctl_compat(int fd, int request, z case ZFS_CMD_COMPAT_V15: nc = zfs_ioctl_v28_to_v15[request]; zc_c = malloc(sizeof(zfs_cmd_v15_t)); - ncmd = _IOWR('Z', request, struct zfs_cmd_v15); + ncmd = _IOWR('Z', nc, struct zfs_cmd_v15); break; default: return (EINVAL); From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 18:33:07 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 8E2B5158; Sun, 17 Mar 2013 18:33:07 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 79E00D55; Sun, 17 Mar 2013 18:33:07 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HIX7vB004827; Sun, 17 Mar 2013 18:33:07 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HIX6IX004819; Sun, 17 Mar 2013 18:33:06 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303171833.r2HIX6IX004819@svn.freebsd.org> From: Martin Matuska Date: Sun, 17 Mar 2013 18:33:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248435 - in projects/libzfs_core/cddl: contrib/opensolaris/lib/libzfs_core/common lib/libzfs_core X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 18:33:07 -0000 Author: mm Date: Sun Mar 17 18:33:06 2013 New Revision: 248435 URL: http://svnweb.freebsd.org/changeset/base/248435 Log: Add forwards compatibility for libzfs_core Unsupported: creation of multiple snapshots including "zfs snapshot -r" Added: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.h Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h projects/libzfs_core/cddl/lib/libzfs_core/Makefile Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Sun Mar 17 18:05:29 2013 (r248434) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Sun Mar 17 18:33:06 2013 (r248435) @@ -86,6 +86,10 @@ #include #include +#ifdef __FreeBSD__ +extern int zfs_ioctl_version; +#endif + static int g_fd; static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER; static int g_refcount; @@ -124,12 +128,24 @@ lzc_ioctl(zfs_ioc_t ioc, const char *nam zfs_cmd_t zc = { 0 }; int error = 0; char *packed; +#ifdef __FreeBSD__ + nvlist_t *oldsource; +#endif size_t size; ASSERT3S(g_refcount, >, 0); (void) strlcpy(zc.zc_name, name, sizeof (zc.zc_name)); +#ifdef __FreeBSD__ + if (zfs_ioctl_version < ZFS_IOCVER_LZC) { + oldsource = source; + error = lzc_compat_pre(&zc, &ioc, &source); + if (error) + return (error); + } +#endif + packed = fnvlist_pack(source, &size); zc.zc_nvlist_src = (uint64_t)(uintptr_t)packed; zc.zc_nvlist_src_size = size; @@ -167,14 +183,29 @@ lzc_ioctl(zfs_ioc_t ioc, const char *nam break; } } + +#ifdef __FreeBSD__ + if (zfs_ioctl_version < ZFS_IOCVER_LZC) + lzc_compat_post(&zc, ioc); +#endif if (zc.zc_nvlist_dst_filled) { *resultp = fnvlist_unpack((void *)(uintptr_t)zc.zc_nvlist_dst, zc.zc_nvlist_dst_size); } else if (resultp != NULL) { *resultp = NULL; } - +#ifdef __FreeBSD__ + if (zfs_ioctl_version < ZFS_IOCVER_LZC) + lzc_compat_outnvl(&zc, ioc, resultp); +#endif out: +#ifdef __FreeBSD__ + if (zfs_ioctl_version < ZFS_IOCVER_LZC) { + if (source != oldsource) + nvlist_free(source); + source = oldsource; + } +#endif fnvlist_pack_free(packed, size); free((void *)(uintptr_t)zc.zc_nvlist_dst); return (error); Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h Sun Mar 17 18:05:29 2013 (r248434) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h Sun Mar 17 18:33:06 2013 (r248435) @@ -31,6 +31,9 @@ #include #include #include +#ifdef __FreeBSD__ +#include "libzfs_core_compat.h" +#endif #ifdef __cplusplus extern "C" { Added: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c Sun Mar 17 18:33:06 2013 (r248435) @@ -0,0 +1,134 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2013 Martin Matuska . All rights reserved. + */ + +#include +#include + +extern int zfs_ioctl_version; + +int +lzc_compat_pre(zfs_cmd_t *zc, zfs_ioc_t *ioc, nvlist_t **source) +{ + nvlist_t *nvl = NULL; + nvpair_t *pair; + char *buf; + zfs_ioc_t vecnum; + uint32_t type32; + int error = 0; + int pos; + + if (zfs_ioctl_version >= ZFS_IOCVER_LZC) + return (0); + + vecnum = *ioc; + + switch (vecnum) { + case ZFS_IOC_CREATE: + type32 = fnvlist_lookup_int32(*source, "type"); + zc->zc_objset_type = (uint64_t)type32; + nvlist_lookup_nvlist(*source, "props", &nvl); + *source = nvl; + break; + case ZFS_IOC_CLONE: + buf = fnvlist_lookup_string(*source, "origin"); + strlcpy(zc->zc_value, buf, MAXPATHLEN); + nvlist_lookup_nvlist(*source, "props", &nvl); + *ioc = ZFS_IOC_CREATE; + *source = nvl; + break; + case ZFS_IOC_SNAPSHOT: + nvl = fnvlist_lookup_nvlist(*source, "snaps"); + pair = nvlist_next_nvpair(nvl, NULL); + if (pair != NULL) { + buf = nvpair_name(pair); + pos = strcspn(buf, "@"); + strlcpy(zc->zc_name, buf, pos + 1); + strlcpy(zc->zc_value, buf + pos + 1, MAXPATHLEN); + } else + error = EOPNOTSUPP; + /* old kernel cannot create multiple snapshots */ + if (!error && nvlist_next_nvpair(nvl, pair) != NULL) + error = EOPNOTSUPP; + nvlist_free(nvl); + nvl = NULL; + nvlist_lookup_nvlist(*source, "props", &nvl); + *source = nvl; + break; + case ZFS_IOC_SPACE_SNAPS: + buf = fnvlist_lookup_string(*source, "firstsnap"); + strlcpy(zc->zc_value, buf, MAXPATHLEN); + break; + case ZFS_IOC_DESTROY_SNAPS: + nvl = fnvlist_lookup_nvlist(*source, "snaps"); + pair = nvlist_next_nvpair(nvl, NULL); + if (pair != NULL) { + buf = nvpair_name(pair); + pos = strcspn(buf, "@"); + strlcpy(zc->zc_name, buf, pos + 1); + } + *source = nvl; + break; + } + + return (error); +} + +void +lzc_compat_post(zfs_cmd_t *zc, const zfs_ioc_t ioc) +{ + if (zfs_ioctl_version >= ZFS_IOCVER_LZC) + return; + + switch (ioc) { + case ZFS_IOC_CREATE: + case ZFS_IOC_CLONE: + case ZFS_IOC_SNAPSHOT: + case ZFS_IOC_SPACE_SNAPS: + case ZFS_IOC_DESTROY_SNAPS: + zc->zc_nvlist_dst_filled = B_FALSE; + break; + } +} + +int +lzc_compat_outnvl(zfs_cmd_t *zc, const zfs_ioc_t ioc, nvlist_t **outnvl) +{ + nvlist_t *nvl; + + if (zfs_ioctl_version >= ZFS_IOCVER_LZC) + return (0); + + switch (ioc) { + case ZFS_IOC_SPACE_SNAPS: + nvl = fnvlist_alloc(); + fnvlist_add_uint64(nvl, "used", zc->zc_cookie); + fnvlist_add_uint64(nvl, "compressed", zc->zc_objset_type); + fnvlist_add_uint64(nvl, "uncompressed", zc->zc_perm_action); + *outnvl = nvl; + break; + } + + return (0); +} Added: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.h Sun Mar 17 18:33:06 2013 (r248435) @@ -0,0 +1,47 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2013 by Martin Matuska . All rights reserved. + */ + +#ifndef _LIBZFS_CORE_COMPAT_H +#define _LIBZFS_CORE_COMPAT_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +int lzc_compat_pre(zfs_cmd_t *, zfs_ioc_t *, nvlist_t **); +void lzc_compat_post(zfs_cmd_t *, const zfs_ioc_t); +int lzc_compat_outnvl(zfs_cmd_t *, const zfs_ioc_t, nvlist_t **); + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBZFS_CORE_COMPAT_H */ Modified: projects/libzfs_core/cddl/lib/libzfs_core/Makefile ============================================================================== --- projects/libzfs_core/cddl/lib/libzfs_core/Makefile Sun Mar 17 18:05:29 2013 (r248434) +++ projects/libzfs_core/cddl/lib/libzfs_core/Makefile Sun Mar 17 18:33:06 2013 (r248435) @@ -9,7 +9,7 @@ LIB= zfs_core DPADD= ${LIBNVPAIR} LDADD= -lnvpair -SRCS= libzfs_core.c +SRCS= libzfs_core.c libzfs_core_compat.c WARNS?= 0 CSTD= c99 From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 18:49:11 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id D7F044DD; Sun, 17 Mar 2013 18:49:11 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id B2C63DBC; Sun, 17 Mar 2013 18:49:11 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HInBDa008625; Sun, 17 Mar 2013 18:49:11 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HInBbS008624; Sun, 17 Mar 2013 18:49:11 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303171849.r2HInBbS008624@svn.freebsd.org> From: Martin Matuska Date: Sun, 17 Mar 2013 18:49:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248437 - projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 18:49:11 -0000 Author: mm Date: Sun Mar 17 18:49:11 2013 New Revision: 248437 URL: http://svnweb.freebsd.org/changeset/base/248437 Log: Merge libzfs_core part of r239388 Illumos ZFS issues: 3085 zfs diff panics, then panics in a loop on booting References: https://www.illumos.org/issues/3085 Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c Sun Mar 17 18:34:09 2013 (r248436) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c Sun Mar 17 18:49:11 2013 (r248437) @@ -444,8 +444,10 @@ log_internal(nvlist_t *nvl, const char * * initialized yet, so don't bother logging the internal events. * Likewise if the pool is not writeable. */ - if (tx->tx_txg == TXG_INITIAL || !spa_writeable(spa)) + if (tx->tx_txg == TXG_INITIAL || !spa_writeable(spa)) { + fnvlist_free(nvl); return; + } va_copy(adx2, adx); From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 19:12:02 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 859F6905; Sun, 17 Mar 2013 19:12:02 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 71D58E4D; Sun, 17 Mar 2013 19:12:02 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HJC21m016956; Sun, 17 Mar 2013 19:12:02 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HJC1nF016954; Sun, 17 Mar 2013 19:12:01 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201303171912.r2HJC1nF016954@svn.freebsd.org> From: Gleb Smirnoff Date: Sun, 17 Mar 2013 19:12:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248438 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 19:12:02 -0000 Author: glebius Date: Sun Mar 17 19:12:01 2013 New Revision: 248438 URL: http://svnweb.freebsd.org/changeset/base/248438 Log: Document counter(9). Added: projects/counters/share/man/man9/counter.9 (contents, props changed) Modified: projects/counters/share/man/man9/Makefile Modified: projects/counters/share/man/man9/Makefile ============================================================================== --- projects/counters/share/man/man9/Makefile Sun Mar 17 18:49:11 2013 (r248437) +++ projects/counters/share/man/man9/Makefile Sun Mar 17 19:12:01 2013 (r248438) @@ -51,6 +51,7 @@ MAN= accept_filter.9 \ config_intrhook.9 \ contigmalloc.9 \ copy.9 \ + counter.9 \ cr_cansee.9 \ critical_enter.9 \ cr_seeothergids.9 \ @@ -569,6 +570,12 @@ MLINKS+=copy.9 copyin.9 \ copy.9 copyout.9 \ copy.9 copyout_nofault.9 \ copy.9 copystr.9 +MLINKS+=counter.9 counter_u64_alloc.9 \ + counter.9 counter_u64_free.9 \ + counter.9 counter_u64_inc.9 \ + counter.9 counter_u64_dec.9 \ + counter.9 counter_u64_fetch.9 \ + counter.9 counter_u64_zero.9 MLINKS+=critical_enter.9 critical.9 \ critical_enter.9 critical_exit.9 MLINKS+=crypto.9 crypto_dispatch.9 \ Added: projects/counters/share/man/man9/counter.9 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/counters/share/man/man9/counter.9 Sun Mar 17 19:12:01 2013 (r248438) @@ -0,0 +1,179 @@ +.\" Copyright (c) 2013 Gleb Smirnoff +.\" 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$ +.\" +.Dd March 17, 2013 +.Dt COUNTER 9 +.Os +.Sh NAME +.Nm counter +.Nd "generic kernel counter implementation" +.Sh SYNOPSIS +.In sys/types.h +.In sys/counter.h +.Ft counter_u64_t +.Fn counter_u64_alloc "int wait" +.Ft void +.Fn counter_u64_free "counter_u64_t cnt" +.Ft void +.Fn counter_u64_inc "counter_u64_t cnt" "uint64_t inc" +.Ft void +.Fn counter_u64_dec "counter_u64_t cnt "uint64_t dec" +.Ft uint64_t +.Fn counter_u64_fetch "counter_u64_t cnt" +.Ft void +.Fn counter_u64_zero "counter_u64_t cnt" +.In sys/sysctl.h +.Fn SYSCTL_COUNTER_U64 parent nbr name access ptr val descr +.Fn SYSCTL_ADD_COUNTER_U64 ctx parent nbr name access ptr descr +.Sh DESCRIPTION +The +.Nm +is a generic facility, which allows to create counters, +that can be utilized to collect statistical data or for other purposes. +A +.Nm +is guaranteed to be lossless when several kernel threads do simultaneous +update. +However, +.Nm +does not imply any +.Xr locking 9 , +neither any +.Xr atomic 9 +operations, thus are expected to be fast. +Moreover, +.Nm +has special optimisations for SMP environment making +.Nm +update faster than simple "+=" or "++" operation. +.Bl -tag -width indent +.It Fn counter_u64_alloc how +Allocate a new 64-bit unsigned counter. +The +.Fa wait +argument is +.Xr malloc 9 +wait flag, should be either +.Va M_NOWAIT +or +.Va M_WAITOK . +With no-wait semantics operation may fail. +.It Fn counter_u64_free cnt +Free previously allocated +.Nm +.Fa cnt . +.It Fn counter_u64_inc cnt inc +Add value of +.Fa inc +to +.Nm +.Fa cnt . +.It Fn counter_u64_dec cnt dec +Subtract value of +.Fa dec +from +.Nm +.Fa cnt . +API doesn't guarantee any protection from underflow. +See +.Sx IMPLEMENTATION DETAILS . +.It Fn counter_u64_fetch cnt +Obtain current snapshot of the data collected in +.Nm +.Fa cnt . +The data obtained isn't guaranteed to be precise. +.It Fn counter_u64_zero cnt +Clear data collected in +.Nm +.Fa cnt +and set its value to zero. +.It Fn SYSCTL_COUNTER_U64 parent nbr name access ptr val descr +Declare a static +.Xr sysctl +oid that would represent a +.Nm . +The +.Fa ptr +argument should be a pointer to allocated +.Vt counter_u64_t . +Any read of oid returns value obtained through +.Fn counter_u64_fetch . +Any write to oid zeroes it. +.It Fn SYSCTL_ADD_COUNTER_U64 ctx parent nbr name access ptr descr +Create a +.Xr sysctl +oid that would represent a +.Nm . +The +.Fa ptr +argument should be a pointer to allocated +.Vt counter_u64_t . +Any read of oid returns value obtained through +.Fn counter_u64_fetch . +Any write to oid zeroes it. +.El +.Sh IMPLEMENTATION DETAILS +On all architectures +.Nm +is implemented using per-CPU data fields, that are specially aligned in +memory, to avoid excessive CPU cache invalidation during updates. +These are allocated using +.Va UMA_ZONE_PCPU +.Xr uma 9 +zone. +Update operation touches only the field that is private to current CPU. +Fetch operation loops through all per-CPU fields and obtains a snapshot +sum of all fields. +.Pp +On amd64 a +.Nm counter +update is implemented as a single instruction without lock semantics. +.Pp +On i386 with cmpxchg8 instruction available, this instruction is used. +.Pp +On some architectures updating a counter require a +.Xr critical 9 +section. +.Sh SEE ALSO +.Xr atomic 9 , +.Xr critical 9 , +.Xr locking 9 , +.Xr malloc 9 , +.Xr sysctl , +.Xr uma 9 +.Sh HISTORY +The +.Nm +facility first appeared in +.Fx 10.0 . +.Sh AUTHORS +.An -nosplit +The +.Nm +facility was written by +.An Gleb Smirnoff +and +.An Konstantin Belousov . From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 19:13:14 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id A313BA35; Sun, 17 Mar 2013 19:13:14 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebius.int.ru (glebius.int.ru [81.19.69.10]) by mx1.freebsd.org (Postfix) with ESMTP id 0744DE59; Sun, 17 Mar 2013 19:13:12 +0000 (UTC) Received: from cell.glebius.int.ru (localhost [127.0.0.1]) by cell.glebius.int.ru (8.14.6/8.14.6) with ESMTP id r2HJDB1o063829; Sun, 17 Mar 2013 23:13:11 +0400 (MSK) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebius.int.ru (8.14.6/8.14.6/Submit) id r2HJDBvU063828; Sun, 17 Mar 2013 23:13:11 +0400 (MSK) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebius.int.ru: glebius set sender to glebius@FreeBSD.org using -f Date: Sun, 17 Mar 2013 23:13:11 +0400 From: Gleb Smirnoff To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: Re: svn commit: r248438 - projects/counters/share/man/man9 Message-ID: <20130317191311.GW48089@FreeBSD.org> References: <201303171912.r2HJC1nF016954@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline In-Reply-To: <201303171912.r2HJC1nF016954@svn.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 19:13:14 -0000 On Sun, Mar 17, 2013 at 07:12:01PM +0000, Gleb Smirnoff wrote: T> Author: glebius T> Date: Sun Mar 17 19:12:01 2013 T> New Revision: 248438 T> URL: http://svnweb.freebsd.org/changeset/base/248438 T> T> Log: T> Document counter(9). Native speakers review requested. Feel free to commit any wording fixes without my approvement. T> Added: T> projects/counters/share/man/man9/counter.9 (contents, props changed) T> Modified: T> projects/counters/share/man/man9/Makefile T> T> Modified: projects/counters/share/man/man9/Makefile T> ============================================================================== T> --- projects/counters/share/man/man9/Makefile Sun Mar 17 18:49:11 2013 (r248437) T> +++ projects/counters/share/man/man9/Makefile Sun Mar 17 19:12:01 2013 (r248438) T> @@ -51,6 +51,7 @@ MAN= accept_filter.9 \ T> config_intrhook.9 \ T> contigmalloc.9 \ T> copy.9 \ T> + counter.9 \ T> cr_cansee.9 \ T> critical_enter.9 \ T> cr_seeothergids.9 \ T> @@ -569,6 +570,12 @@ MLINKS+=copy.9 copyin.9 \ T> copy.9 copyout.9 \ T> copy.9 copyout_nofault.9 \ T> copy.9 copystr.9 T> +MLINKS+=counter.9 counter_u64_alloc.9 \ T> + counter.9 counter_u64_free.9 \ T> + counter.9 counter_u64_inc.9 \ T> + counter.9 counter_u64_dec.9 \ T> + counter.9 counter_u64_fetch.9 \ T> + counter.9 counter_u64_zero.9 T> MLINKS+=critical_enter.9 critical.9 \ T> critical_enter.9 critical_exit.9 T> MLINKS+=crypto.9 crypto_dispatch.9 \ T> T> Added: projects/counters/share/man/man9/counter.9 T> ============================================================================== T> --- /dev/null 00:00:00 1970 (empty, because file is newly added) T> +++ projects/counters/share/man/man9/counter.9 Sun Mar 17 19:12:01 2013 (r248438) T> @@ -0,0 +1,179 @@ T> +.\" Copyright (c) 2013 Gleb Smirnoff T> +.\" All rights reserved. T> +.\" T> +.\" Redistribution and use in source and binary forms, with or without T> +.\" modification, are permitted provided that the following conditions T> +.\" are met: T> +.\" 1. Redistributions of source code must retain the above copyright T> +.\" notice, this list of conditions and the following disclaimer. T> +.\" 2. Redistributions in binary form must reproduce the above copyright T> +.\" notice, this list of conditions and the following disclaimer in the T> +.\" documentation and/or other materials provided with the distribution. T> +.\" T> +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND T> +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE T> +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE T> +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE T> +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL T> +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS T> +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) T> +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT T> +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY T> +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF T> +.\" SUCH DAMAGE. T> +.\" T> +.\" $FreeBSD$ T> +.\" T> +.Dd March 17, 2013 T> +.Dt COUNTER 9 T> +.Os T> +.Sh NAME T> +.Nm counter T> +.Nd "generic kernel counter implementation" T> +.Sh SYNOPSIS T> +.In sys/types.h T> +.In sys/counter.h T> +.Ft counter_u64_t T> +.Fn counter_u64_alloc "int wait" T> +.Ft void T> +.Fn counter_u64_free "counter_u64_t cnt" T> +.Ft void T> +.Fn counter_u64_inc "counter_u64_t cnt" "uint64_t inc" T> +.Ft void T> +.Fn counter_u64_dec "counter_u64_t cnt "uint64_t dec" T> +.Ft uint64_t T> +.Fn counter_u64_fetch "counter_u64_t cnt" T> +.Ft void T> +.Fn counter_u64_zero "counter_u64_t cnt" T> +.In sys/sysctl.h T> +.Fn SYSCTL_COUNTER_U64 parent nbr name access ptr val descr T> +.Fn SYSCTL_ADD_COUNTER_U64 ctx parent nbr name access ptr descr T> +.Sh DESCRIPTION T> +The T> +.Nm T> +is a generic facility, which allows to create counters, T> +that can be utilized to collect statistical data or for other purposes. T> +A T> +.Nm T> +is guaranteed to be lossless when several kernel threads do simultaneous T> +update. T> +However, T> +.Nm T> +does not imply any T> +.Xr locking 9 , T> +neither any T> +.Xr atomic 9 T> +operations, thus are expected to be fast. T> +Moreover, T> +.Nm T> +has special optimisations for SMP environment making T> +.Nm T> +update faster than simple "+=" or "++" operation. T> +.Bl -tag -width indent T> +.It Fn counter_u64_alloc how T> +Allocate a new 64-bit unsigned counter. T> +The T> +.Fa wait T> +argument is T> +.Xr malloc 9 T> +wait flag, should be either T> +.Va M_NOWAIT T> +or T> +.Va M_WAITOK . T> +With no-wait semantics operation may fail. T> +.It Fn counter_u64_free cnt T> +Free previously allocated T> +.Nm T> +.Fa cnt . T> +.It Fn counter_u64_inc cnt inc T> +Add value of T> +.Fa inc T> +to T> +.Nm T> +.Fa cnt . T> +.It Fn counter_u64_dec cnt dec T> +Subtract value of T> +.Fa dec T> +from T> +.Nm T> +.Fa cnt . T> +API doesn't guarantee any protection from underflow. T> +See T> +.Sx IMPLEMENTATION DETAILS . T> +.It Fn counter_u64_fetch cnt T> +Obtain current snapshot of the data collected in T> +.Nm T> +.Fa cnt . T> +The data obtained isn't guaranteed to be precise. T> +.It Fn counter_u64_zero cnt T> +Clear data collected in T> +.Nm T> +.Fa cnt T> +and set its value to zero. T> +.It Fn SYSCTL_COUNTER_U64 parent nbr name access ptr val descr T> +Declare a static T> +.Xr sysctl T> +oid that would represent a T> +.Nm . T> +The T> +.Fa ptr T> +argument should be a pointer to allocated T> +.Vt counter_u64_t . T> +Any read of oid returns value obtained through T> +.Fn counter_u64_fetch . T> +Any write to oid zeroes it. T> +.It Fn SYSCTL_ADD_COUNTER_U64 ctx parent nbr name access ptr descr T> +Create a T> +.Xr sysctl T> +oid that would represent a T> +.Nm . T> +The T> +.Fa ptr T> +argument should be a pointer to allocated T> +.Vt counter_u64_t . T> +Any read of oid returns value obtained through T> +.Fn counter_u64_fetch . T> +Any write to oid zeroes it. T> +.El T> +.Sh IMPLEMENTATION DETAILS T> +On all architectures T> +.Nm T> +is implemented using per-CPU data fields, that are specially aligned in T> +memory, to avoid excessive CPU cache invalidation during updates. T> +These are allocated using T> +.Va UMA_ZONE_PCPU T> +.Xr uma 9 T> +zone. T> +Update operation touches only the field that is private to current CPU. T> +Fetch operation loops through all per-CPU fields and obtains a snapshot T> +sum of all fields. T> +.Pp T> +On amd64 a T> +.Nm counter T> +update is implemented as a single instruction without lock semantics. T> +.Pp T> +On i386 with cmpxchg8 instruction available, this instruction is used. T> +.Pp T> +On some architectures updating a counter require a T> +.Xr critical 9 T> +section. T> +.Sh SEE ALSO T> +.Xr atomic 9 , T> +.Xr critical 9 , T> +.Xr locking 9 , T> +.Xr malloc 9 , T> +.Xr sysctl , T> +.Xr uma 9 T> +.Sh HISTORY T> +The T> +.Nm T> +facility first appeared in T> +.Fx 10.0 . T> +.Sh AUTHORS T> +.An -nosplit T> +The T> +.Nm T> +facility was written by T> +.An Gleb Smirnoff T> +and T> +.An Konstantin Belousov . -- Totus tuus, Glebius. From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 19:24:29 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 53D59CBF; Sun, 17 Mar 2013 19:24:29 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 240AEE9D; Sun, 17 Mar 2013 19:24:29 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HJOTKX020358; Sun, 17 Mar 2013 19:24:29 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HJOTXj020357; Sun, 17 Mar 2013 19:24:29 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201303171924.r2HJOTXj020357@svn.freebsd.org> From: Eitan Adler Date: Sun, 17 Mar 2013 19:24:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248439 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 19:24:29 -0000 Author: eadler Date: Sun Mar 17 19:24:28 2013 New Revision: 248439 URL: http://svnweb.freebsd.org/changeset/base/248439 Log: English language changes Approved by: glebius (implicit) Modified: projects/counters/share/man/man9/counter.9 Modified: projects/counters/share/man/man9/counter.9 ============================================================================== --- projects/counters/share/man/man9/counter.9 Sun Mar 17 19:12:01 2013 (r248438) +++ projects/counters/share/man/man9/counter.9 Sun Mar 17 19:24:28 2013 (r248439) @@ -49,38 +49,39 @@ .Fn SYSCTL_COUNTER_U64 parent nbr name access ptr val descr .Fn SYSCTL_ADD_COUNTER_U64 ctx parent nbr name access ptr descr .Sh DESCRIPTION -The .Nm -is a generic facility, which allows to create counters, -that can be utilized to collect statistical data or for other purposes. +is a generic facility to create counters +that can be utilized for purpose (such as collecting statistical +data). A .Nm is guaranteed to be lossless when several kernel threads do simultaneous -update. +updates. However, .Nm does not imply any .Xr locking 9 , -neither any +or .Xr atomic 9 -operations, thus are expected to be fast. +operations and are therefore expected to be fast. Moreover, .Nm -has special optimisations for SMP environment making +has special optimisations for SMP environments making .Nm -update faster than simple "+=" or "++" operation. +update faster than simple addition operations. .Bl -tag -width indent .It Fn counter_u64_alloc how Allocate a new 64-bit unsigned counter. The .Fa wait -argument is +argument is the .Xr malloc 9 wait flag, should be either .Va M_NOWAIT or .Va M_WAITOK . -With no-wait semantics operation may fail. +If +.Va M_WAITOK is specified the operation may fail. .It Fn counter_u64_free cnt Free previously allocated .Nm @@ -97,14 +98,14 @@ Subtract value of from .Nm .Fa cnt . -API doesn't guarantee any protection from underflow. +The API does not guarantee any protection from underflow. See .Sx IMPLEMENTATION DETAILS . .It Fn counter_u64_fetch cnt Obtain current snapshot of the data collected in .Nm .Fa cnt . -The data obtained isn't guaranteed to be precise. +The data obtained is not guaranteed to be precise. .It Fn counter_u64_zero cnt Clear data collected in .Nm @@ -144,7 +145,7 @@ These are allocated using .Va UMA_ZONE_PCPU .Xr uma 9 zone. -Update operation touches only the field that is private to current CPU. +The update operation only touches the field that is private to current CPU. Fetch operation loops through all per-CPU fields and obtains a snapshot sum of all fields. .Pp From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 19:25:39 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 4531FDE2; Sun, 17 Mar 2013 19:25:39 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 1FF22EA7; Sun, 17 Mar 2013 19:25:39 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HJPdgq020546; Sun, 17 Mar 2013 19:25:39 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HJPcKQ020545; Sun, 17 Mar 2013 19:25:38 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201303171925.r2HJPcKQ020545@svn.freebsd.org> From: Eitan Adler Date: Sun, 17 Mar 2013 19:25:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248440 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 19:25:39 -0000 Author: eadler Date: Sun Mar 17 19:25:38 2013 New Revision: 248440 URL: http://svnweb.freebsd.org/changeset/base/248440 Log: Add copyright marker Approved by: glebius (implicit) Modified: projects/counters/share/man/man9/counter.9 Modified: projects/counters/share/man/man9/counter.9 ============================================================================== --- projects/counters/share/man/man9/counter.9 Sun Mar 17 19:24:28 2013 (r248439) +++ projects/counters/share/man/man9/counter.9 Sun Mar 17 19:25:38 2013 (r248440) @@ -1,3 +1,4 @@ +.\"- .\" Copyright (c) 2013 Gleb Smirnoff .\" All rights reserved. .\" From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 19:26:43 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id B5B85EFE; Sun, 17 Mar 2013 19:26:43 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) by mx1.freebsd.org (Postfix) with ESMTP id 4A922EAE; Sun, 17 Mar 2013 19:26:43 +0000 (UTC) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.6/8.14.6) with ESMTP id r2HJQYwS018816; Sun, 17 Mar 2013 21:26:34 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.8.0 kib.kiev.ua r2HJQYwS018816 Received: (from kostik@localhost) by tom.home (8.14.6/8.14.6/Submit) id r2HJQYeo018815; Sun, 17 Mar 2013 21:26:34 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Sun, 17 Mar 2013 21:26:34 +0200 From: Konstantin Belousov To: Gleb Smirnoff Subject: Re: svn commit: r248438 - projects/counters/share/man/man9 Message-ID: <20130317192634.GW3794@kib.kiev.ua> References: <201303171912.r2HJC1nF016954@svn.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="0uNolHhSuKIW4i3A" Content-Disposition: inline In-Reply-To: <201303171912.r2HJC1nF016954@svn.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) 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 version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on tom.home Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 19:26:43 -0000 --0uNolHhSuKIW4i3A Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sun, Mar 17, 2013 at 07:12:01PM +0000, Gleb Smirnoff wrote: > Author: glebius > Date: Sun Mar 17 19:12:01 2013 > New Revision: 248438 > URL: http://svnweb.freebsd.org/changeset/base/248438 >=20 > Log: > Document counter(9). > +However, > +.Nm > +does not imply any > +.Xr locking 9 , > +neither any > +.Xr atomic 9 > +operations, thus are expected to be fast. I am unsure what do you mean there. E.g., the current i386 operation uses atomic(9) (not in the form of the code borrowed from atomic(9), but a locked instruction). I have intent to do the same for powerpc. > +API doesn't guarantee any protection from underflow. I suggest to not use term API when describing kernel programming interface. > +See > +.Sx IMPLEMENTATION DETAILS . > +.It Fn counter_u64_fetch cnt > +Obtain current snapshot of the data collected in > +.Nm > +.Fa cnt . > +The data obtained isn't guaranteed to be precise. Again, I am not sure what does the sentence mean. Without external synchronization, the returned value is invalid/obsoleted immediately, as usual, and it does not deserve a separate note. What could be more important for the caller, is that the returned sum might not reflect any real cumulative value for any moment. But the differences should be tiny. > +On all architectures > +.Nm > +is implemented using per-CPU data fields, that are specially aligned in > +memory, to avoid excessive CPU cache invalidation during updates. I would say 'to avoid unneeded inter-cpu bus traffic due to shared use of the variables between CPUs'. > +These are allocated using > +.Va UMA_ZONE_PCPU > +.Xr uma 9 > +zone. > +Update operation touches only the field that is private to current CPU. 'and which lives in the cache line that is used exclusively by the updating CPU'. --0uNolHhSuKIW4i3A Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iQIcBAEBAgAGBQJRRhjpAAoJEJDCuSvBvK1BRJ0P/3MKmIrnc+gwLQsT/lpj/tHN E1ttPCtDwiZUGpYi5ma32Mxw/06RKBOLB0cKWtqVoszZGbN0SbWrnJNMzMIdih5R yQh7TQiehFjCBSiGeFJwmreAqMNBj5N16AAvJIif2cPAU3qW7uRdNxkYztsmB3ds LAzxu4ce0M21bAOvMPLqlHrEi58SblC+nkGuZEghEIZzxmvyrK6ZZ4K4GpQ/h3cT r0zgJUEZJ7Id1p9yUrdistUkgBa/6ljYOdJZZLi3jm8I5hTq+YYdzoeNbIZKKB69 tyI3uzvCpMT9bTOrlFYyZ6ReyGy3dy3JubA1ZZA5lxla+eTTxqMADzKzBncVpp8/ hMhaP5Q98haI9PHWz9Z0Z+KU8ok8G8PD0gVnM/RbwLggInbTRUFcLdA8ESEJNfMY 9ZQofLyx8YsFbZ4rshuUecbSBFu42YXQvMBB2qoPi0kz7xWMYvMAMfBjjWJAuMRA DIvSwpPwewwA0Lr1cB5yBPglxhWqmZ7gEMUkh6hfUmUBVWslU9LD7iOSxgVXt/ab YVzHT2dHUuHhdyLFMGn1Ty5SbtJA+JwyQsOTUGVJSE588ffArspo6Sk5oAdRjVd+ OtCx4Y2+POyIrXARE+CYAnFNk+F+cCW6qTS1mvIg+vrFiiwvcyzKHMIAag4x3qWD XaVsgNalNA+l4h3WCBLj =eUSw -----END PGP SIGNATURE----- --0uNolHhSuKIW4i3A-- From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 19:27:14 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id D6F1592; Sun, 17 Mar 2013 19:27:14 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id C60DAEB4; Sun, 17 Mar 2013 19:27:14 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HJREFT020791; Sun, 17 Mar 2013 19:27:14 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HJREAd020790; Sun, 17 Mar 2013 19:27:14 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201303171927.r2HJREAd020790@svn.freebsd.org> From: Eitan Adler Date: Sun, 17 Mar 2013 19:27:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248441 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 19:27:14 -0000 Author: eadler Date: Sun Mar 17 19:27:14 2013 New Revision: 248441 URL: http://svnweb.freebsd.org/changeset/base/248441 Log: English language changes Approved by: glebius (implicit) Modified: projects/counters/share/man/man9/counter.9 Modified: projects/counters/share/man/man9/counter.9 ============================================================================== --- projects/counters/share/man/man9/counter.9 Sun Mar 17 19:25:38 2013 (r248440) +++ projects/counters/share/man/man9/counter.9 Sun Mar 17 19:27:14 2013 (r248441) @@ -52,7 +52,7 @@ .Sh DESCRIPTION .Nm is a generic facility to create counters -that can be utilized for purpose (such as collecting statistical +that can be utilized for any purpose (such as collecting statistical data). A .Nm @@ -61,10 +61,10 @@ updates. However, .Nm does not imply any -.Xr locking 9 , +.Xr locking 9 or .Xr atomic 9 -operations and are therefore expected to be fast. +operations and is therefore expected to be fast. Moreover, .Nm has special optimisations for SMP environments making From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 20:11:09 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id A7166C30; Sun, 17 Mar 2013 20:11:09 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 83EF4B7; Sun, 17 Mar 2013 20:11:09 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HKB9YF035253; Sun, 17 Mar 2013 20:11:09 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HKB9ks035252; Sun, 17 Mar 2013 20:11:09 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201303172011.r2HKB9ks035252@svn.freebsd.org> From: Eitan Adler Date: Sun, 17 Mar 2013 20:11:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248442 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 20:11:09 -0000 Author: eadler Date: Sun Mar 17 20:11:08 2013 New Revision: 248442 URL: http://svnweb.freebsd.org/changeset/base/248442 Log: Content and English language changes Discussed with: glebius, jilles, kib Approved by: glebius (implicit) Modified: projects/counters/share/man/man9/counter.9 Modified: projects/counters/share/man/man9/counter.9 ============================================================================== --- projects/counters/share/man/man9/counter.9 Sun Mar 17 19:27:14 2013 (r248441) +++ projects/counters/share/man/man9/counter.9 Sun Mar 17 20:11:08 2013 (r248442) @@ -99,14 +99,15 @@ Subtract value of from .Nm .Fa cnt . -The API does not guarantee any protection from underflow. +The KPI does not guarantee any protection from underflow. See .Sx IMPLEMENTATION DETAILS . .It Fn counter_u64_fetch cnt Obtain current snapshot of the data collected in .Nm .Fa cnt . -The data obtained is not guaranteed to be precise. +The data obtained is not guaranteed to reflect the real cumulative +value for any moment. .It Fn counter_u64_zero cnt Clear data collected in .Nm @@ -140,8 +141,9 @@ Any write to oid zeroes it. .Sh IMPLEMENTATION DETAILS On all architectures .Nm -is implemented using per-CPU data fields, that are specially aligned in -memory, to avoid excessive CPU cache invalidation during updates. +is implemented using per-CPU data fields that are specially aligned +in memory, to avoid inter-CPU bus traffic due to shared use +of the variables between CPUs. These are allocated using .Va UMA_ZONE_PCPU .Xr uma 9 From owner-svn-src-projects@FreeBSD.ORG Sun Mar 17 22:24:10 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 18D8936E; Sun, 17 Mar 2013 22:24:10 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id F03DD6C8; Sun, 17 Mar 2013 22:24:09 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HMO9oJ076664; Sun, 17 Mar 2013 22:24:09 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HMO9To076660; Sun, 17 Mar 2013 22:24:09 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303172224.r2HMO9To076660@svn.freebsd.org> From: Martin Matuska Date: Sun, 17 Mar 2013 22:24:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248445 - in projects/libzfs_core/cddl/contrib/opensolaris/lib: libzfs/common libzfs_core/common X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 22:24:10 -0000 Author: mm Date: Sun Mar 17 22:24:08 2013 New Revision: 248445 URL: http://svnweb.freebsd.org/changeset/base/248445 Log: Fix working with zfs_ioctl_version in libzfs_compat.h and include mirror lzc_ioctl_version in libzfs_core Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h Sun Mar 17 20:44:09 2013 (r248444) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h Sun Mar 17 22:24:08 2013 (r248445) @@ -32,8 +32,23 @@ extern "C" { #endif +static int zfs_ioctl_version = -1; static int zfs_kernel_version = 0; -static int zfs_ioctl_version = 0; + +/* + * Get zfs_ioctl_version + */ +static __inline int +get_zfs_ioctl_version(void) +{ + size_t ver_size; + int ver = 0; + + ver_size = sizeof(ver); + sysctlbyname("vfs.zfs.version.ioctl", &ver, &ver_size, NULL, 0); + + return (ver); +} /* * This is FreeBSD version of ioctl, because Solaris' ioctl() updates @@ -43,14 +58,11 @@ static int zfs_ioctl_version = 0; static __inline int zcmd_ioctl(int fd, int request, zfs_cmd_t *zc) { - size_t oldsize, zfs_kernel_version_size, zfs_ioctl_version_size; + size_t oldsize, zfs_kernel_version_size; int version, ret, cflag = ZFS_CMD_COMPAT_NONE; - zfs_ioctl_version_size = sizeof(zfs_ioctl_version); - if (zfs_ioctl_version == 0) { - sysctlbyname("vfs.zfs.version.ioctl", &zfs_ioctl_version, - &zfs_ioctl_version_size, NULL, 0); - } + if (zfs_ioctl_version == -1) + zfs_ioctl_version = get_zfs_ioctl_version(); if (zfs_ioctl_version == ZFS_IOCVER_DEADMAN) cflag = ZFS_CMD_COMPAT_DEADMAN; Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Sun Mar 17 20:44:09 2013 (r248444) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Sun Mar 17 22:24:08 2013 (r248445) @@ -84,10 +84,11 @@ #include #include #include -#include +#include "libzfs_core_compat.h" +#include "libzfs_compat.h" #ifdef __FreeBSD__ -extern int zfs_ioctl_version; +int lzc_ioctl_version = -1; #endif static int g_fd; @@ -107,6 +108,7 @@ libzfs_core_init(void) } g_refcount++; (void) pthread_mutex_unlock(&g_lock); + return (0); } @@ -138,7 +140,10 @@ lzc_ioctl(zfs_ioc_t ioc, const char *nam (void) strlcpy(zc.zc_name, name, sizeof (zc.zc_name)); #ifdef __FreeBSD__ - if (zfs_ioctl_version < ZFS_IOCVER_LZC) { + if (lzc_ioctl_version == -1) + lzc_ioctl_version = get_zfs_ioctl_version(); + + if (lzc_ioctl_version < ZFS_IOCVER_LZC) { oldsource = source; error = lzc_compat_pre(&zc, &ioc, &source); if (error) @@ -185,7 +190,7 @@ lzc_ioctl(zfs_ioc_t ioc, const char *nam } #ifdef __FreeBSD__ - if (zfs_ioctl_version < ZFS_IOCVER_LZC) + if (lzc_ioctl_version < ZFS_IOCVER_LZC) lzc_compat_post(&zc, ioc); #endif if (zc.zc_nvlist_dst_filled) { @@ -195,12 +200,12 @@ lzc_ioctl(zfs_ioc_t ioc, const char *nam *resultp = NULL; } #ifdef __FreeBSD__ - if (zfs_ioctl_version < ZFS_IOCVER_LZC) + if (lzc_ioctl_version < ZFS_IOCVER_LZC) lzc_compat_outnvl(&zc, ioc, resultp); #endif out: #ifdef __FreeBSD__ - if (zfs_ioctl_version < ZFS_IOCVER_LZC) { + if (lzc_ioctl_version < ZFS_IOCVER_LZC) { if (source != oldsource) nvlist_free(source); source = oldsource; Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h Sun Mar 17 20:44:09 2013 (r248444) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h Sun Mar 17 22:24:08 2013 (r248445) @@ -31,9 +31,6 @@ #include #include #include -#ifdef __FreeBSD__ -#include "libzfs_core_compat.h" -#endif #ifdef __cplusplus extern "C" { Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c Sun Mar 17 20:44:09 2013 (r248444) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c Sun Mar 17 22:24:08 2013 (r248445) @@ -24,9 +24,10 @@ */ #include -#include +#include +#include "libzfs_core_compat.h" -extern int zfs_ioctl_version; +extern int lzc_ioctl_version; int lzc_compat_pre(zfs_cmd_t *zc, zfs_ioc_t *ioc, nvlist_t **source) @@ -39,7 +40,7 @@ lzc_compat_pre(zfs_cmd_t *zc, zfs_ioc_t int error = 0; int pos; - if (zfs_ioctl_version >= ZFS_IOCVER_LZC) + if (lzc_ioctl_version >= ZFS_IOCVER_LZC) return (0); vecnum = *ioc; @@ -98,7 +99,7 @@ lzc_compat_pre(zfs_cmd_t *zc, zfs_ioc_t void lzc_compat_post(zfs_cmd_t *zc, const zfs_ioc_t ioc) { - if (zfs_ioctl_version >= ZFS_IOCVER_LZC) + if (lzc_ioctl_version >= ZFS_IOCVER_LZC) return; switch (ioc) { @@ -117,7 +118,7 @@ lzc_compat_outnvl(zfs_cmd_t *zc, const z { nvlist_t *nvl; - if (zfs_ioctl_version >= ZFS_IOCVER_LZC) + if (lzc_ioctl_version >= ZFS_IOCVER_LZC) return (0); switch (ioc) { From owner-svn-src-projects@FreeBSD.ORG Mon Mar 18 11:06:35 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 77311820; Mon, 18 Mar 2013 11:06:35 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 67945A76; Mon, 18 Mar 2013 11:06:35 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2I9du56083162; Mon, 18 Mar 2013 09:39:56 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2I9dqT8083139; Mon, 18 Mar 2013 09:39:52 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303180939.r2I9dqT8083139@svn.freebsd.org> From: Martin Matuska Date: Mon, 18 Mar 2013 09:39:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248462 - in projects/libzfs_core: . bin/cp bin/ls bin/mkdir bin/mv bin/ps bin/rm bin/rmdir bin/sh cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensol... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Mar 2013 11:06:35 -0000 Author: mm Date: Mon Mar 18 09:39:51 2013 New Revision: 248462 URL: http://svnweb.freebsd.org/changeset/base/248462 Log: MFC @248461 Added: projects/libzfs_core/contrib/unvis/ - copied from r248461, head/contrib/unvis/ projects/libzfs_core/contrib/vis/ - copied from r248461, head/contrib/vis/ projects/libzfs_core/lib/libusb/libusb_global_linux.h - copied unchanged from r248461, head/lib/libusb/libusb_global_linux.h projects/libzfs_core/sys/cddl/dev/fbt/fbt_powerpc.c - copied unchanged from r248461, head/sys/cddl/dev/fbt/fbt_powerpc.c projects/libzfs_core/sys/libkern/arm/aeabi_unwind.c - copied unchanged from r248461, head/sys/libkern/arm/aeabi_unwind.c projects/libzfs_core/sys/libkern/arm/memcpy.S - copied unchanged from r248461, head/sys/libkern/arm/memcpy.S projects/libzfs_core/sys/libkern/arm/memset.S - copied unchanged from r248461, head/sys/libkern/arm/memset.S projects/libzfs_core/sys/vm/_vm_radix.h - copied unchanged from r248461, head/sys/vm/_vm_radix.h projects/libzfs_core/sys/vm/vm_radix.c - copied unchanged from r248461, head/sys/vm/vm_radix.c projects/libzfs_core/sys/vm/vm_radix.h - copied unchanged from r248461, head/sys/vm/vm_radix.h projects/libzfs_core/tools/regression/bin/sh/builtins/wait6.0 - copied unchanged from r248461, head/tools/regression/bin/sh/builtins/wait6.0 projects/libzfs_core/tools/regression/bin/sh/builtins/wait7.0 - copied unchanged from r248461, head/tools/regression/bin/sh/builtins/wait7.0 Deleted: projects/libzfs_core/games/fortune/datfiles/fortunes-o.fake projects/libzfs_core/games/fortune/datfiles/fortunes-o.real projects/libzfs_core/games/fortune/datfiles/fortunes-o.sp.ok projects/libzfs_core/lib/libncp/ projects/libzfs_core/lib/libprocstat/nwfs.c projects/libzfs_core/share/examples/cvsup/ports-supfile projects/libzfs_core/share/examples/cvsup/refuse projects/libzfs_core/share/examples/cvsup/refuse.README projects/libzfs_core/share/examples/nwclient/ projects/libzfs_core/share/man/man4/vinum.4 projects/libzfs_core/sys/fs/nwfs/ projects/libzfs_core/sys/modules/ncp/ projects/libzfs_core/sys/modules/nwfs/ projects/libzfs_core/sys/netncp/ projects/libzfs_core/usr.bin/ncplist/ projects/libzfs_core/usr.bin/ncplogin/ projects/libzfs_core/usr.bin/unvis/unvis.1 projects/libzfs_core/usr.bin/unvis/unvis.c projects/libzfs_core/usr.bin/vis/extern.h projects/libzfs_core/usr.bin/vis/foldit.c projects/libzfs_core/usr.bin/vis/vis.1 projects/libzfs_core/usr.bin/vis/vis.c projects/libzfs_core/usr.sbin/mount_nwfs/ Modified: projects/libzfs_core/ObsoleteFiles.inc projects/libzfs_core/bin/cp/cp.1 projects/libzfs_core/bin/ls/ls.1 projects/libzfs_core/bin/mkdir/mkdir.1 projects/libzfs_core/bin/mv/mv.1 projects/libzfs_core/bin/ps/ps.1 projects/libzfs_core/bin/rm/rm.1 projects/libzfs_core/bin/rmdir/rmdir.1 projects/libzfs_core/bin/sh/jobs.c projects/libzfs_core/cddl/contrib/opensolaris/cmd/zdb/zdb.c projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs.8 projects/libzfs_core/cddl/contrib/opensolaris/cmd/zpool/zpool.8 projects/libzfs_core/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c projects/libzfs_core/contrib/binutils/gas/config/tc-arm.c projects/libzfs_core/contrib/libc-vis/unvis.3 projects/libzfs_core/contrib/libc-vis/unvis.c projects/libzfs_core/contrib/libc-vis/vis.3 projects/libzfs_core/contrib/libc-vis/vis.c projects/libzfs_core/contrib/libc-vis/vis.h projects/libzfs_core/contrib/tzdata/africa projects/libzfs_core/contrib/tzdata/antarctica projects/libzfs_core/contrib/tzdata/asia projects/libzfs_core/contrib/tzdata/australasia projects/libzfs_core/contrib/tzdata/europe projects/libzfs_core/contrib/tzdata/northamerica projects/libzfs_core/contrib/tzdata/southamerica projects/libzfs_core/contrib/tzdata/zone.tab projects/libzfs_core/crypto/openssh/session.c projects/libzfs_core/etc/mtree/BSD.include.dist projects/libzfs_core/games/fortune/datfiles/Makefile projects/libzfs_core/gnu/lib/libgcc/Makefile projects/libzfs_core/lib/libc/gen/Makefile.inc projects/libzfs_core/lib/libc/gen/Symbol.map projects/libzfs_core/lib/libc/gen/getcontext.3 projects/libzfs_core/lib/libc/net/nscachedcli.c projects/libzfs_core/lib/libc/stdlib/realpath.3 projects/libzfs_core/lib/libc/sys/chflags.2 projects/libzfs_core/lib/libipsec/test-policy.c projects/libzfs_core/lib/libnetgraph/msg.c projects/libzfs_core/lib/libusb/Makefile projects/libzfs_core/lib/libusb/libusb.h projects/libzfs_core/lib/libusb/libusb01.c projects/libzfs_core/lib/libusb/libusb10.c projects/libzfs_core/lib/libusb/libusb10.h projects/libzfs_core/lib/libusb/libusb10_desc.c projects/libzfs_core/lib/libusb/libusb10_io.c projects/libzfs_core/lib/libusb/libusb20.c projects/libzfs_core/lib/libusb/libusb20.h projects/libzfs_core/lib/libusb/libusb20_desc.c projects/libzfs_core/lib/libusb/libusb20_desc.h projects/libzfs_core/lib/libusb/libusb20_ugen20.c projects/libzfs_core/lib/libusb/usb.h projects/libzfs_core/lib/libutil/gr_util.c projects/libzfs_core/lib/libutil/pidfile.c projects/libzfs_core/sbin/ccdconfig/ccdconfig.8 projects/libzfs_core/sbin/ffsinfo/ffsinfo.8 projects/libzfs_core/sbin/geom/class/concat/gconcat.8 projects/libzfs_core/sbin/geom/class/mirror/gmirror.8 projects/libzfs_core/sbin/geom/class/raid/graid.8 projects/libzfs_core/sbin/geom/class/stripe/gstripe.8 projects/libzfs_core/sbin/gvinum/gvinum.8 projects/libzfs_core/sbin/hastctl/hastctl.8 projects/libzfs_core/sbin/hastctl/hastctl.c projects/libzfs_core/sbin/hastd/hastd.8 projects/libzfs_core/sbin/hastd/secondary.c projects/libzfs_core/sbin/hastd/subr.c projects/libzfs_core/sbin/recoverdisk/recoverdisk.c projects/libzfs_core/share/examples/Makefile projects/libzfs_core/share/examples/cvsup/README projects/libzfs_core/share/examples/cvsup/cvs-supfile projects/libzfs_core/share/examples/cvsup/stable-supfile projects/libzfs_core/share/man/man4/Makefile projects/libzfs_core/share/man/man4/cas.4 projects/libzfs_core/share/man/man4/ccd.4 projects/libzfs_core/share/man/man4/geom.4 projects/libzfs_core/share/man/man4/sge.4 projects/libzfs_core/share/man/man4/udp.4 projects/libzfs_core/share/misc/bsd-family-tree projects/libzfs_core/share/misc/committers-ports.dot projects/libzfs_core/share/misc/organization.dot projects/libzfs_core/sys/Makefile projects/libzfs_core/sys/amd64/amd64/pmap.c projects/libzfs_core/sys/amd64/include/pmap.h projects/libzfs_core/sys/amd64/vmm/intel/vmx.c projects/libzfs_core/sys/amd64/vmm/vmm.c projects/libzfs_core/sys/amd64/vmm/vmm_stat.c projects/libzfs_core/sys/amd64/vmm/vmm_stat.h projects/libzfs_core/sys/arm/arm/bcopy_page.S projects/libzfs_core/sys/arm/arm/bcopyinout.S projects/libzfs_core/sys/arm/arm/bcopyinout_xscale.S projects/libzfs_core/sys/arm/arm/blockio.S projects/libzfs_core/sys/arm/arm/bus_space_asm_generic.S projects/libzfs_core/sys/arm/arm/copystr.S projects/libzfs_core/sys/arm/arm/cpufunc_asm.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_arm10.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_arm11.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_arm11x6.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_arm7tdmi.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_arm8.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_arm9.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_armv4.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_armv5.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_armv5_ec.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_armv6.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_armv7.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_fa526.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_ixp12x0.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_pj4b.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_sa1.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_sa11x0.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_sheeva.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_xscale.S projects/libzfs_core/sys/arm/arm/cpufunc_asm_xscale_c3.S projects/libzfs_core/sys/arm/arm/db_trace.c projects/libzfs_core/sys/arm/arm/disassem.c projects/libzfs_core/sys/arm/arm/elf_trampoline.c projects/libzfs_core/sys/arm/arm/exception.S projects/libzfs_core/sys/arm/arm/fiq_subr.S projects/libzfs_core/sys/arm/arm/fusu.S projects/libzfs_core/sys/arm/arm/in_cksum_arm.S projects/libzfs_core/sys/arm/arm/irq_dispatch.S projects/libzfs_core/sys/arm/arm/locore.S projects/libzfs_core/sys/arm/arm/pmap-v6.c projects/libzfs_core/sys/arm/arm/pmap.c projects/libzfs_core/sys/arm/arm/setcpsr.S projects/libzfs_core/sys/arm/arm/support.S projects/libzfs_core/sys/arm/arm/swtch.S projects/libzfs_core/sys/arm/at91/if_ate.c projects/libzfs_core/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c projects/libzfs_core/sys/arm/include/asm.h projects/libzfs_core/sys/arm/include/bus.h projects/libzfs_core/sys/arm/include/param.h projects/libzfs_core/sys/arm/include/pmap.h projects/libzfs_core/sys/arm/include/signal.h projects/libzfs_core/sys/arm/ti/cpsw/if_cpsw.c projects/libzfs_core/sys/arm/ti/ti_mmchs.c projects/libzfs_core/sys/boot/common/load_elf.c projects/libzfs_core/sys/boot/fdt/fdt_loader_cmd.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h projects/libzfs_core/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S projects/libzfs_core/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c projects/libzfs_core/sys/cddl/dev/dtrace/powerpc/dtrace_subr.c projects/libzfs_core/sys/compat/ndis/kern_ndis.c projects/libzfs_core/sys/conf/Makefile.arm projects/libzfs_core/sys/conf/NOTES projects/libzfs_core/sys/conf/files projects/libzfs_core/sys/conf/files.arm projects/libzfs_core/sys/conf/ldscript.arm projects/libzfs_core/sys/dev/acpica/acpi_hpet.c projects/libzfs_core/sys/dev/acpica/acpi_powerres.c projects/libzfs_core/sys/dev/ath/ath_hal/ar5416/ar5416reg.h projects/libzfs_core/sys/dev/ath/ath_hal/ar9002/ar9285_btcoex.c projects/libzfs_core/sys/dev/ath/if_ath.c projects/libzfs_core/sys/dev/ath/if_ath_rx.c projects/libzfs_core/sys/dev/ath/if_ath_rx_edma.c projects/libzfs_core/sys/dev/ath/if_ath_sysctl.c projects/libzfs_core/sys/dev/ath/if_ath_tx.c projects/libzfs_core/sys/dev/ath/if_athioctl.h projects/libzfs_core/sys/dev/ath/if_athvar.h projects/libzfs_core/sys/dev/bge/if_bge.c projects/libzfs_core/sys/dev/ichwd/ichwd.c projects/libzfs_core/sys/dev/iscsi/initiator/isc_soc.c projects/libzfs_core/sys/dev/puc/pucdata.c projects/libzfs_core/sys/dev/re/if_re.c projects/libzfs_core/sys/dev/sis/if_sis.c projects/libzfs_core/sys/dev/sis/if_sisreg.h projects/libzfs_core/sys/dev/sound/pci/hda/hdaa_patches.c projects/libzfs_core/sys/dev/sound/pci/hda/hdac.h projects/libzfs_core/sys/dev/sound/pcm/sndstat.c projects/libzfs_core/sys/dev/usb/serial/uftdi.c projects/libzfs_core/sys/dev/usb/usb_device.c projects/libzfs_core/sys/dev/usb/usb_request.c projects/libzfs_core/sys/dev/usb/usbdevs projects/libzfs_core/sys/dev/usb/wlan/if_run.c projects/libzfs_core/sys/fs/cd9660/cd9660_vnops.c projects/libzfs_core/sys/fs/ext2fs/ext2_balloc.c projects/libzfs_core/sys/fs/ext2fs/ext2_vnops.c projects/libzfs_core/sys/fs/msdosfs/msdosfs_vnops.c projects/libzfs_core/sys/fs/nfs/nfsport.h projects/libzfs_core/sys/fs/nfsclient/nfs_clbio.c projects/libzfs_core/sys/fs/nfsclient/nfs_clvnops.c projects/libzfs_core/sys/fs/smbfs/smbfs_smb.c projects/libzfs_core/sys/fs/smbfs/smbfs_vnops.c projects/libzfs_core/sys/fs/tmpfs/tmpfs_vnops.c projects/libzfs_core/sys/fs/udf/udf_vnops.c projects/libzfs_core/sys/geom/gate/g_gate.c projects/libzfs_core/sys/i386/i386/pmap.c projects/libzfs_core/sys/i386/include/pmap.h projects/libzfs_core/sys/i386/xen/pmap.c projects/libzfs_core/sys/ia64/ia64/pmap.c projects/libzfs_core/sys/kern/capabilities.conf projects/libzfs_core/sys/kern/imgact_elf.c projects/libzfs_core/sys/kern/kern_et.c projects/libzfs_core/sys/kern/kern_racct.c projects/libzfs_core/sys/kern/kern_synch.c projects/libzfs_core/sys/kern/kern_time.c projects/libzfs_core/sys/kern/kern_timeout.c projects/libzfs_core/sys/kern/kern_umtx.c projects/libzfs_core/sys/kern/subr_sleepqueue.c projects/libzfs_core/sys/kern/subr_trap.c projects/libzfs_core/sys/kern/uipc_mbuf.c projects/libzfs_core/sys/kern/uipc_sockbuf.c projects/libzfs_core/sys/kern/uipc_socket.c projects/libzfs_core/sys/kern/uipc_syscalls.c projects/libzfs_core/sys/kern/uipc_usrreq.c projects/libzfs_core/sys/kern/vfs_bio.c projects/libzfs_core/sys/kern/vfs_cluster.c projects/libzfs_core/sys/kern/vfs_syscalls.c projects/libzfs_core/sys/kern/vfs_vnops.c projects/libzfs_core/sys/libkern/arm/divsi3.S projects/libzfs_core/sys/libkern/arm/ffs.S projects/libzfs_core/sys/libkern/arm/ldivmod.S projects/libzfs_core/sys/mips/mips/pmap.c projects/libzfs_core/sys/modules/ath/Makefile projects/libzfs_core/sys/modules/dtrace/Makefile projects/libzfs_core/sys/modules/dtrace/dtraceall/dtraceall.c projects/libzfs_core/sys/modules/dtrace/fbt/Makefile projects/libzfs_core/sys/modules/uart/Makefile projects/libzfs_core/sys/net/bpf.c projects/libzfs_core/sys/net/bridgestp.c projects/libzfs_core/sys/net/if_bridge.c projects/libzfs_core/sys/net/if_gre.c projects/libzfs_core/sys/net/rtsock.c projects/libzfs_core/sys/net80211/ieee80211_output.c projects/libzfs_core/sys/net80211/ieee80211_superg.c projects/libzfs_core/sys/netinet/igmp.c projects/libzfs_core/sys/netinet/ip_carp.c projects/libzfs_core/sys/netinet/ip_input.c projects/libzfs_core/sys/netinet/ip_mroute.c projects/libzfs_core/sys/netinet/ip_options.c projects/libzfs_core/sys/netinet/ip_output.c projects/libzfs_core/sys/netinet/libalias/alias.c projects/libzfs_core/sys/netinet/libalias/alias_db.c projects/libzfs_core/sys/netinet/tcp_output.c projects/libzfs_core/sys/netinet/tcp_subr.c projects/libzfs_core/sys/netinet6/icmp6.c projects/libzfs_core/sys/netinet6/ip6_input.c projects/libzfs_core/sys/netinet6/ip6_mroute.c projects/libzfs_core/sys/netinet6/ip6_output.c projects/libzfs_core/sys/netinet6/mld6.c projects/libzfs_core/sys/netinet6/nd6_nbr.c projects/libzfs_core/sys/netinet6/raw_ip6.c projects/libzfs_core/sys/netipsec/key.c projects/libzfs_core/sys/netpfil/pf/if_pfsync.c projects/libzfs_core/sys/netpfil/pf/pf.c projects/libzfs_core/sys/netsmb/smb_dev.c projects/libzfs_core/sys/nfs/krpc_subr.c projects/libzfs_core/sys/nfs/nfs_common.c projects/libzfs_core/sys/nfsclient/nfs_bio.c projects/libzfs_core/sys/nfsclient/nfs_subs.c projects/libzfs_core/sys/nfsclient/nfs_vfsops.c projects/libzfs_core/sys/nfsclient/nfs_vnops.c projects/libzfs_core/sys/nfsclient/nfsm_subs.h projects/libzfs_core/sys/nfsclient/nfsmount.h projects/libzfs_core/sys/powerpc/aim/mmu_oea.c projects/libzfs_core/sys/powerpc/aim/mmu_oea64.c projects/libzfs_core/sys/powerpc/aim/trap.c projects/libzfs_core/sys/powerpc/aim/trap_subr32.S projects/libzfs_core/sys/powerpc/aim/trap_subr64.S projects/libzfs_core/sys/powerpc/booke/pmap.c projects/libzfs_core/sys/powerpc/powerpc/mmu_if.m projects/libzfs_core/sys/powerpc/powerpc/pmap_dispatch.c projects/libzfs_core/sys/rpc/clnt_dg.c projects/libzfs_core/sys/rpc/clnt_rc.c projects/libzfs_core/sys/rpc/clnt_vc.c projects/libzfs_core/sys/rpc/rpc_generic.c projects/libzfs_core/sys/rpc/rpcm_subs.h projects/libzfs_core/sys/rpc/svc.c projects/libzfs_core/sys/rpc/svc_dg.c projects/libzfs_core/sys/rpc/svc_vc.c projects/libzfs_core/sys/sparc64/sparc64/pmap.c projects/libzfs_core/sys/sys/buf.h projects/libzfs_core/sys/sys/mbuf.h projects/libzfs_core/sys/sys/param.h projects/libzfs_core/sys/sys/vnode.h projects/libzfs_core/sys/ufs/ffs/ffs_balloc.c projects/libzfs_core/sys/ufs/ffs/ffs_vnops.c projects/libzfs_core/sys/ufs/ufs/ufs_vnops.c projects/libzfs_core/sys/vm/pmap.h projects/libzfs_core/sys/vm/vm_kern.c projects/libzfs_core/sys/vm/vm_object.c projects/libzfs_core/sys/vm/vm_object.h projects/libzfs_core/sys/vm/vm_page.c projects/libzfs_core/sys/vm/vm_page.h projects/libzfs_core/sys/vm/vm_reserv.c projects/libzfs_core/sys/vm/vnode_pager.c projects/libzfs_core/sys/xdr/xdr_mbuf.c projects/libzfs_core/tools/regression/pjdfstest/tests/misc.sh projects/libzfs_core/tools/regression/security/cap_test/cap_test_capabilities.c projects/libzfs_core/usr.bin/ee/nls/ru_RU.KOI8-R/ee.msg projects/libzfs_core/usr.bin/find/find.h projects/libzfs_core/usr.bin/find/function.c projects/libzfs_core/usr.bin/grep/regex/tre-fastmatch.c projects/libzfs_core/usr.bin/head/head.1 projects/libzfs_core/usr.bin/netstat/netstat.1 projects/libzfs_core/usr.bin/renice/renice.8 projects/libzfs_core/usr.bin/script/script.1 projects/libzfs_core/usr.bin/tail/tail.1 projects/libzfs_core/usr.bin/top/machine.c projects/libzfs_core/usr.bin/unifdef/unifdefall.sh projects/libzfs_core/usr.bin/unvis/Makefile projects/libzfs_core/usr.bin/vis/Makefile projects/libzfs_core/usr.sbin/ac/ac.8 projects/libzfs_core/usr.sbin/bhyve/pci_passthru.c projects/libzfs_core/usr.sbin/bhyve/pci_virtio_net.c projects/libzfs_core/usr.sbin/pkg/Makefile projects/libzfs_core/usr.sbin/usbconfig/usbconfig.c Directory Properties: projects/libzfs_core/ (props changed) projects/libzfs_core/cddl/contrib/opensolaris/ (props changed) projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/ (props changed) projects/libzfs_core/contrib/binutils/ (props changed) projects/libzfs_core/contrib/libc-vis/ (props changed) projects/libzfs_core/contrib/tzdata/ (props changed) projects/libzfs_core/crypto/openssh/ (props changed) projects/libzfs_core/gnu/lib/ (props changed) projects/libzfs_core/lib/libc/ (props changed) projects/libzfs_core/lib/libutil/ (props changed) projects/libzfs_core/sbin/ (props changed) projects/libzfs_core/share/man/man4/ (props changed) projects/libzfs_core/sys/ (props changed) projects/libzfs_core/sys/amd64/vmm/ (props changed) projects/libzfs_core/sys/boot/ (props changed) projects/libzfs_core/sys/cddl/contrib/opensolaris/ (props changed) projects/libzfs_core/sys/conf/ (props changed) projects/libzfs_core/usr.sbin/bhyve/ (props changed) Modified: projects/libzfs_core/ObsoleteFiles.inc ============================================================================== --- projects/libzfs_core/ObsoleteFiles.inc Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/ObsoleteFiles.inc Mon Mar 18 09:39:51 2013 (r248462) @@ -38,6 +38,51 @@ # xargs -n1 | sort | uniq -d; # done +OLD_FILES+=usr/share/man/man4/vinum.4.gz +# 20130311: Ports are no more available via cvsup +OLD_FILES+=usr/share/examples/cvsup/ports-supfile +OLD_FILES+=usr/share/examples/cvsup/refuse +OLD_FILES+=usr/share/examples/cvsup/refuse.README +# 20130309: NWFS and NCP supports removed +OLD_FILES+=usr/bin/ncplist +OLD_FILES+=usr/bin/ncplogin +OLD_FILES+=usr/bin/ncplogout +OLD_FILES+=usr/include/fs/nwfs/nwfs.h +OLD_FILES+=usr/include/fs/nwfs/nwfs_mount.h +OLD_FILES+=usr/include/fs/nwfs/nwfs_node.h +OLD_FILES+=usr/include/fs/nwfs/nwfs_subr.h +OLD_DIRS+=usr/include/fs/nwfs +OLD_FILES+=usr/include/netncp/ncp.h +OLD_FILES+=usr/include/netncp/ncp_cfg.h +OLD_FILES+=usr/include/netncp/ncp_conn.h +OLD_FILES+=usr/include/netncp/ncp_file.h +OLD_FILES+=usr/include/netncp/ncp_lib.h +OLD_FILES+=usr/include/netncp/ncp_ncp.h +OLD_FILES+=usr/include/netncp/ncp_nls.h +OLD_FILES+=usr/include/netncp/ncp_rcfile.h +OLD_FILES+=usr/include/netncp/ncp_rq.h +OLD_FILES+=usr/include/netncp/ncp_sock.h +OLD_FILES+=usr/include/netncp/ncp_subr.h +OLD_FILES+=usr/include/netncp/ncp_user.h +OLD_FILES+=usr/include/netncp/ncpio.h +OLD_FILES+=usr/include/netncp/nwerror.h +OLD_DIRS+=usr/include/netncp +OLD_FILES+=usr/lib/libncp.a +OLD_FILES+=usr/lib/libncp.so +OLD_LIBS+=usr/lib/libncp.so.4 +OLD_FILES+=usr/lib/libncp_p.a +OLD_FILES+=usr/lib32/libncp.a +OLD_FILES+=usr/lib32/libncp.so +OLD_LIBS+=usr/lib32/libncp.so.4 +OLD_FILES+=usr/lib32/libncp_p.a +OLD_FILES+=usr/sbin/mount_nwfs +OLD_FILES+=usr/share/examples/nwclient/dot.nwfsrc +OLD_FILES+=usr/share/examples/nwclient/nwfs.sh.sample +OLD_DIRS+=usr/share/examples/nwclient +OLD_FILES+=usr/share/man/man1/ncplist.1.gz +OLD_FILES+=usr/share/man/man1/ncplogin.1.gz +OLD_FILES+=usr/share/man/man1/ncplogout.1.gz +OLD_FILES+=usr/share/man/man8/mount_nwfs.8.gz # 20130302: NTFS support removed OLD_FILES+=rescue/mount_ntfs OLD_FILES+=sbin/mount_ntfs @@ -62,6 +107,12 @@ OLD_FILES+=usr/share/man/man8/mount_port OLD_FILES+=usr/share/man/man4/coda.4.gz # 20130302: XFS support removed OLD_FILES+=usr/share/man/man5/xfs.5.gz +# 20130302: Capsicum overhaul +OLD_FILES+=usr/share/man/man2/cap_getrights.2.gz +OLD_FILES+=usr/share/man/man2/cap_new.2.gz +# 20130213: OpenSSL 1.0.1e import +OLD_FILES+=usr/share/openssl/man/man3/EVP_PKEY_verifyrecover.3.gz +OLD_FILES+=usr/share/openssl/man/man3/EVP_PKEY_verifyrecover_init.3.gz # 20130116: removed long unused directories for .1aout section manpages OLD_FILES+=usr/share/man/en.ISO8859-1/man1aout OLD_FILES+=usr/share/man/en.UTF-8/man1aout Modified: projects/libzfs_core/bin/cp/cp.1 ============================================================================== --- projects/libzfs_core/bin/cp/cp.1 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/bin/cp/cp.1 Mon Mar 18 09:39:51 2013 (r248462) @@ -32,7 +32,7 @@ .\" @(#)cp.1 8.3 (Berkeley) 4/18/94 .\" $FreeBSD$ .\" -.Dd September 4, 2012 +.Dd March 15, 2013 .Dt CP 1 .Os .Sh NAME @@ -251,6 +251,27 @@ signal, the current input and output fil will be written to the standard output. .Sh EXIT STATUS .Ex -std +.Sh EXAMPLES +Make a copy of file +.Pa foo +named +.Pa bar : +.Pp +.Dl $ cp foo bar +.Pp +Copy a group of files to the +.Pa /tmp +directory: +.Pp +.Dl $ cp *.txt /tmp +.Pp +Copy the directory +.Pa junk +and all of its contents (including any subdirectories) to the +.Pa /tmp +directory: +.Pp +.Dl $ cp -R junk /tmp .Sh COMPATIBILITY Historic versions of the .Nm Modified: projects/libzfs_core/bin/ls/ls.1 ============================================================================== --- projects/libzfs_core/bin/ls/ls.1 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/bin/ls/ls.1 Mon Mar 18 09:39:51 2013 (r248462) @@ -32,7 +32,7 @@ .\" @(#)ls.1 8.7 (Berkeley) 7/29/94 .\" $FreeBSD$ .\" -.Dd November 8, 2012 +.Dd March 15, 2013 .Dt LS 1 .Os .Sh NAME @@ -718,6 +718,24 @@ for more information. .El .Sh EXIT STATUS .Ex -std +.Sh EXAMPLES +List the contents of the current working directory in long format: +.Pp +.Dl $ ls -l +.Pp +In addition to listing the contents of the current working directory in +long format, show inode numbers, file flags (see +.Xr chflags 1 ) , +and suffix each filename with a symbol representing its file type: +.Pp +.Dl $ ls -lioF +.Pp +List the files in +.Pa /var/log , +sorting the output such that the mostly recently modified entries are +printed first: +.Pp +.Dl $ ls -lt /var/log .Sh COMPATIBILITY The group field is now automatically included in the long listing for files in order to be compatible with the Modified: projects/libzfs_core/bin/mkdir/mkdir.1 ============================================================================== --- projects/libzfs_core/bin/mkdir/mkdir.1 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/bin/mkdir/mkdir.1 Mon Mar 18 09:39:51 2013 (r248462) @@ -32,7 +32,7 @@ .\" @(#)mkdir.1 8.2 (Berkeley) 1/25/94 .\" $FreeBSD$ .\" -.Dd January 25, 1994 +.Dd March 15, 2013 .Dt MKDIR 1 .Os .Sh NAME @@ -87,6 +87,23 @@ Be verbose when creating directories, li The user must have write permission in the parent directory. .Sh EXIT STATUS .Ex -std +.Sh EXAMPLES +Create a directory named +.Pa foobar : +.Pp +.Dl $ mkdir foobar +.Pp +Create a directory named +.Pa foobar +and set its file mode to 700: +.Pp +.Dl $ mkdir -m 700 foobar +.Pp +Create a directory named +.Pa cow/horse/monkey , +creating any non-existent intermediate directories as necessary: +.Pp +.Dl $ mkdir -p cow/horse/monkey .Sh COMPATIBILITY The .Fl v Modified: projects/libzfs_core/bin/mv/mv.1 ============================================================================== --- projects/libzfs_core/bin/mv/mv.1 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/bin/mv/mv.1 Mon Mar 18 09:39:51 2013 (r248462) @@ -32,7 +32,7 @@ .\" @(#)mv.1 8.1 (Berkeley) 5/31/93 .\" $FreeBSD$ .\" -.Dd August 28, 2012 +.Dd March 15, 2013 .Dt MV 1 .Os .Sh NAME @@ -155,6 +155,16 @@ rm -rf source_file .Ed .Sh EXIT STATUS .Ex -std +.Sh EXAMPLES +Rename file +.Pa foo +to +.Pa bar , +overwriting +.Pa bar +if it already exists: +.Pp +.Dl $ mv -f foo bar .Sh COMPATIBILITY The .Fl h , Modified: projects/libzfs_core/bin/ps/ps.1 ============================================================================== --- projects/libzfs_core/bin/ps/ps.1 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/bin/ps/ps.1 Mon Mar 18 09:39:51 2013 (r248462) @@ -29,7 +29,7 @@ .\" @(#)ps.1 8.3 (Berkeley) 4/18/94 .\" $FreeBSD$ .\" -.Dd February 7, 2013 +.Dd March 15, 2013 .Dt PS 1 .Os .Sh NAME @@ -689,6 +689,10 @@ attempts to automatically determine the .It Pa /boot/kernel/kernel default system namelist .El +.Sh EXAMPLES +Display information on all system processes: +.Pp +.Dl $ ps -auxw .Sh SEE ALSO .Xr kill 1 , .Xr pgrep 1 , Modified: projects/libzfs_core/bin/rm/rm.1 ============================================================================== --- projects/libzfs_core/bin/rm/rm.1 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/bin/rm/rm.1 Mon Mar 18 09:39:51 2013 (r248462) @@ -32,7 +32,7 @@ .\" @(#)rm.1 8.5 (Berkeley) 12/5/94 .\" $FreeBSD$ .\" -.Dd October 31, 2010 +.Dd March 15, 2013 .Dt RM 1 .Os .Sh NAME @@ -193,6 +193,19 @@ When is specified with .Fl f the file will be overwritten and removed even if it has hard links. +.Sh EXAMPLES +Recursively remove all files contained within the +.Pa foobar +directory hierarchy: +.Pp +.Dl $ rm -rf foobar +.Pp +Either of these commands will remove the file +.Pa -f : +.Bd -literal -offset indent +$ rm -- -f +$ rm ./-f +.Ed .Sh COMPATIBILITY The .Nm Modified: projects/libzfs_core/bin/rmdir/rmdir.1 ============================================================================== --- projects/libzfs_core/bin/rmdir/rmdir.1 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/bin/rmdir/rmdir.1 Mon Mar 18 09:39:51 2013 (r248462) @@ -32,7 +32,7 @@ .\" @(#)rmdir.1 8.1 (Berkeley) 5/31/93 .\" $FreeBSD$ .\" -.Dd March 21, 2004 +.Dd March 15, 2013 .Dt RMDIR 1 .Os .Sh NAME @@ -86,6 +86,18 @@ successfully. .It Li >0 An error occurred. .El +.Sh EXAMPLES +Remove the directory +.Pa foobar , +if it is empty: +.Pp +.Dl $ rmdir foobar +.Pp +Remove all directories up to and including +.Pa cow , +stopping at the first non-empty directory (if any): +.Pp +.Dl $ rmdir -p cow/horse/monkey .Sh SEE ALSO .Xr rm 1 .Sh STANDARDS Modified: projects/libzfs_core/bin/sh/jobs.c ============================================================================== --- projects/libzfs_core/bin/sh/jobs.c Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/bin/sh/jobs.c Mon Mar 18 09:39:51 2013 (r248462) @@ -458,14 +458,15 @@ freejob(struct job *jp) int -waitcmd(int argc, char **argv) +waitcmd(int argc __unused, char **argv __unused) { struct job *job; int status, retval; struct job *jp; - if (argc > 1) { - job = getjob(argv[1]); + nextopt(""); + if (*argptr != NULL) { + job = getjob(*argptr); } else { job = NULL; } Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/zdb/zdb.c Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/zdb/zdb.c Mon Mar 18 09:39:51 2013 (r248462) @@ -1256,6 +1256,7 @@ dump_bpobj(bpobj_t *bpo, char *name, int continue; } dump_bpobj(&subbpo, "subobj", indent + 1); + bpobj_close(&subbpo); } } else { (void) printf(" %*s: object %llu, %llu blkptrs, %s\n", Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Mon Mar 18 09:39:51 2013 (r248462) @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 10, 2013 +.Dd March 1, 2013 .Dt ZFS 8 .Os .Sh NAME Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zpool/zpool.8 ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Mon Mar 18 09:39:51 2013 (r248462) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 15, 2012 +.Dd March 14, 2013 .Dt ZPOOL 8 .Os .Sh NAME @@ -1608,14 +1608,15 @@ is specified, the command exits after .Ar count reports are printed. .Pp -If a scrub or resilver is in progress, this command reports the percentage done -and the estimated time to completion. Both of these are only approximate, +If a scrub or resilver is in progress, this command reports the percentage +done and the estimated time to completion. Both of these are only approximate, because the amount of data in the pool and the other workloads on the system can change. .Bl -tag -width indent .It Fl x Only display status for pools that are exhibiting errors or are otherwise unavailable. +Warnings about pools not using the latest on-disk format will not be included. .It Fl v Displays verbose data error information, printing out a complete list of all data errors since the last complete pool scrub. Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Mar 18 09:39:51 2013 (r248462) @@ -4037,7 +4037,10 @@ status_callback(zpool_handle_t *zhp, voi * If we were given 'zpool status -x', only report those pools with * problems. */ - if (reason == ZPOOL_STATUS_OK && cbp->cb_explain) { + if (cbp->cb_explain && + (reason == ZPOOL_STATUS_OK || + reason == ZPOOL_STATUS_VERSION_OLDER || + reason == ZPOOL_STATUS_FEAT_DISABLED)) { if (!cbp->cb_allpools) { (void) printf(gettext("pool '%s' is healthy\n"), zpool_get_name(zhp)); Modified: projects/libzfs_core/contrib/binutils/gas/config/tc-arm.c ============================================================================== --- projects/libzfs_core/contrib/binutils/gas/config/tc-arm.c Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/contrib/binutils/gas/config/tc-arm.c Mon Mar 18 09:39:51 2013 (r248462) @@ -651,6 +651,7 @@ struct asm_opcode #define BAD_ARGS _("bad arguments to instruction") #define BAD_PC _("r15 not allowed here") +#define BAD_SP _("r13 not allowed here") #define BAD_COND _("instruction cannot be conditional") #define BAD_OVERLAP _("registers may not be the same") #define BAD_HIREG _("lo register required") @@ -659,6 +660,7 @@ struct asm_opcode #define BAD_BRANCH _("branch must be last instruction in IT block") #define BAD_NOT_IT _("instruction not allowed in IT block") #define BAD_FPU _("selected FPU does not support instruction") +#define BAD_VMRS _("APSR_nzcv may only be used with fpscr") static struct hash_control *arm_ops_hsh; static struct hash_control *arm_cond_hsh; @@ -5164,10 +5166,6 @@ parse_neon_mov (char **str, int *which_o Case 10: VMOV.F32 , # Case 11: VMOV.F64
, # */ inst.operands[i].immisfloat = 1; - else if (parse_big_immediate (&ptr, i) == SUCCESS) - /* Case 2: VMOV.
, # - Case 3: VMOV.
, # */ - ; else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype, &optype)) != FAIL) { @@ -5207,6 +5205,10 @@ parse_neon_mov (char **str, int *which_o inst.operands[i++].present = 1; } } + else if (parse_big_immediate (&ptr, i) == SUCCESS) + /* Case 2: VMOV.
, # + Case 3: VMOV.
, # */ + ; else { first_error (_("expected or or operand")); @@ -7095,6 +7097,68 @@ do_vfp_nsyn_msr (void) return SUCCESS; } +static int +do_vfp_vmrs (void) +{ + int rt; + + /* The destination register can be r0-r14 or APSR_nzcv */ + if (inst.operands[0].reg > 14) + { + inst.error = BAD_PC; + return FAIL; + } + + /* If the destination is r13 and not in ARM mode then unprefictable */ + if (thumb_mode && inst.operands[0].reg == REG_SP) + { + inst.error = BAD_SP; + return FAIL; + } + + /* If the destination is APSR_nzcv */ + if (inst.operands[0].isvec && inst.operands[1].reg != 1) + { + inst.error = BAD_VMRS; + return FAIL; + } + + if (inst.operands[0].isvec) + rt = 15; + else + rt = inst.operands[0].reg; + + /* Or in the registers to use */ + inst.instruction |= rt << 12; + inst.instruction |= inst.operands[1].reg << 16; + + return SUCCESS; +} + +static int +do_vfp_vmsr (void) +{ + /* The destination register can be r0-r14 or APSR_nzcv */ + if (inst.operands[1].reg > 14) + { + inst.error = BAD_PC; + return FAIL; + } + + /* If the destination is r13 and not in ARM mode then unprefictable */ + if (thumb_mode && inst.operands[0].reg == REG_SP) + { + inst.error = BAD_SP; + return FAIL; + } + + /* Or in the registers to use */ + inst.instruction |= inst.operands[1].reg << 12; + inst.instruction |= inst.operands[0].reg << 16; + + return SUCCESS; +} + static void do_mrs (void) { @@ -15726,6 +15790,8 @@ static const struct asm_opcode insns[] = cCE(ftouizs, ebc0ac0, 2, (RVS, RVS), vfp_sp_monadic), cCE(fmrx, ef00a10, 2, (RR, RVC), rd_rn), cCE(fmxr, ee00a10, 2, (RVC, RR), rn_rd), + cCE(vmrs, ef00a10, 2, (APSR_RR, RVC), vfp_vmrs), + cCE(vmsr, ee00a10, 2, (RVC, RR), vfp_vmsr), /* Memory operations. */ cCE(flds, d100a00, 2, (RVS, ADDRGLDC), vfp_sp_ldst), Modified: projects/libzfs_core/contrib/libc-vis/unvis.3 ============================================================================== --- projects/libzfs_core/contrib/libc-vis/unvis.3 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/contrib/libc-vis/unvis.3 Mon Mar 18 09:39:51 2013 (r248462) @@ -1,4 +1,4 @@ -.\" $NetBSD: unvis.3,v 1.23 2011/03/17 14:06:29 wiz Exp $ +.\" $NetBSD: unvis.3,v 1.27 2012/12/15 07:34:36 wiz Exp $ .\" $FreeBSD$ .\" .\" Copyright (c) 1989, 1991, 1993 @@ -126,15 +126,17 @@ The function has several return codes that must be handled properly. They are: .Bl -tag -width UNVIS_VALIDPUSH -.It Li \&0 (zero) +.It Li \&0 No (zero) Another character is necessary; nothing has been recognized yet. .It Dv UNVIS_VALID A valid character has been recognized and is available at the location -pointed to by cp. +pointed to by +.Fa cp . .It Dv UNVIS_VALIDPUSH A valid character has been recognized and is available at the location -pointed to by cp; however, the character currently passed in should -be passed in again. +pointed to by +.Fa cp ; +however, the character currently passed in should be passed in again. .It Dv UNVIS_NOCHAR A valid sequence was detected, but no character was produced. This return code is necessary to indicate a logical break between characters. @@ -150,7 +152,7 @@ one more time with flag set to to extract any remaining character (the character passed in is ignored). .Pp The -.Ar flag +.Fa flag argument is also used to specify the encoding style of the source. If set to .Dv VIS_HTTPSTYLE @@ -161,7 +163,8 @@ will decode URI strings as specified in If set to .Dv VIS_HTTP1866 , .Fn unvis -will decode URI strings as specified in RFC 1866. +will decode entity references and numeric character references +as specified in RFC 1866. If set to .Dv VIS_MIMESTYLE , .Fn unvis @@ -169,7 +172,9 @@ will decode MIME Quoted-Printable string If set to .Dv VIS_NOESCAPE , .Fn unvis -will not decode \e quoted characters. +will not decode +.Ql \e +quoted characters. .Pp The following code fragment illustrates a proper use of .Fn unvis . @@ -204,7 +209,7 @@ The functions and .Fn strnunvisx will return \-1 on error and set -.Va errno +.Va errno to: .Bl -tag -width Er .It Bq Er EINVAL @@ -212,7 +217,7 @@ An invalid escape sequence was detected, .El .Pp In addition the functions -.Fn strnunvis +.Fn strnunvis and .Fn strnunvisx will can also set @@ -244,4 +249,14 @@ and functions appeared in .Nx 6.0 and -.Fx 10.0 . +.Fx 9.2 . +.Sh BUGS +The names +.Dv VIS_HTTP1808 +and +.Dv VIS_HTTP1866 +are wrong. +Percent-encoding was defined in RFC 1738, the original RFC for URL. +RFC 1866 defines HTML 2.0, an application of SGML, from which it +inherits concepts of numeric character references and entity +references. Modified: projects/libzfs_core/contrib/libc-vis/unvis.c ============================================================================== --- projects/libzfs_core/contrib/libc-vis/unvis.c Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/contrib/libc-vis/unvis.c Mon Mar 18 09:39:51 2013 (r248462) @@ -1,4 +1,4 @@ -/* $NetBSD: unvis.c,v 1.40 2012/12/14 21:31:01 christos Exp $ */ +/* $NetBSD: unvis.c,v 1.41 2012/12/15 04:29:53 matt Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)unvis.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: unvis.c,v 1.40 2012/12/14 21:31:01 christos Exp $"); +__RCSID("$NetBSD: unvis.c,v 1.41 2012/12/15 04:29:53 matt Exp $"); #endif #endif /* LIBC_SCCS and not lint */ __FBSDID("$FreeBSD$"); @@ -90,7 +90,7 @@ __weak_alias(strnunvisx,_strnunvisx) * RFC 1866 */ static const struct nv { - const char name[7]; + char name[7]; uint8_t value; } nv[] = { { "AElig", 198 }, /* capital AE diphthong (ligature) */ Modified: projects/libzfs_core/contrib/libc-vis/vis.3 ============================================================================== --- projects/libzfs_core/contrib/libc-vis/vis.3 Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/contrib/libc-vis/vis.3 Mon Mar 18 09:39:51 2013 (r248462) @@ -1,4 +1,4 @@ -.\" $NetBSD: vis.3,v 1.29 2012/12/14 22:55:59 christos Exp $ +.\" $NetBSD: vis.3,v 1.39 2013/02/20 20:05:26 christos Exp $ .\" $FreeBSD$ .\" .\" Copyright (c) 1989, 1991, 1993 @@ -30,7 +30,7 @@ .\" .\" @(#)vis.3 8.1 (Berkeley) 6/9/93 .\" -.Dd December 14, 2012 +.Dd February 19, 2013 .Dt VIS 3 .Os .Sh NAME @@ -40,12 +40,14 @@ .Nm strnvis , .Nm strvisx , .Nm strnvisx , +.Nm strenvisx , .Nm svis , .Nm snvis , .Nm strsvis , .Nm strsnvis , -.Nm strsvisx -.Nm strsnvisx +.Nm strsvisx , +.Nm strsnvisx , +.Nm strsenvisx .Nd visually encode characters .Sh LIBRARY .Lb libc @@ -63,6 +65,8 @@ .Fn strvisx "char *dst" "const char *src" "size_t len" "int flag" .Ft int .Fn strnvisx "char *dst" "size_t dlen" "const char *src" "size_t len" "int flag" +.Ft int +.Fn strenvisx "char *dst" "size_t dlen" "const char *src" "size_t len" "int flag" "int *cerr_ptr" .Ft char * .Fn svis "char *dst" "int c" "int flag" "int nextc" "const char *extra" .Ft char * @@ -75,6 +79,8 @@ .Fn strsvisx "char *dst" "const char *src" "size_t len" "int flag" "const char *extra" .Ft int .Fn strsnvisx "char *dst" "size_t dlen" "const char *src" "size_t len" "int flag" "const char *extra" +.Ft int +.Fn strsenvisx "char *dst" "size_t dlen" "const char *src" "size_t len" "int flag" "const char *extra" "int *cerr_ptr" .Sh DESCRIPTION The .Fn vis @@ -89,11 +95,11 @@ needs no encoding, it is copied in unalt The string is null terminated, and a pointer to the end of the string is returned. The maximum length of any encoding is four -characters (not including the trailing +bytes (not including the trailing .Dv NUL ) ; thus, when encoding a set of characters into a buffer, the size of the buffer should -be four times the number of characters encoded, plus one for the trailing +be four times the number of bytes encoded, plus one for the trailing .Dv NUL . The flag parameter is used for altering the default range of characters considered for encoding and for altering the visual @@ -142,16 +148,17 @@ terminate The size of .Fa dst must be four times the number -of characters encoded from +of bytes encoded from .Fa src (plus one for the .Dv NUL ) . Both -forms return the number of characters in dst (not including -the trailing +forms return the number of characters in +.Fa dst +(not including the trailing .Dv NUL ) . The -.Dq n +.Dq Nm n versions of the functions also take an additional argument .Fa dlen that indicates the length of the @@ -159,7 +166,7 @@ that indicates the length of the buffer. If .Fa dlen -is not large enough to fix the converted string then the +is not large enough to fit the converted string then the .Fn strnvis and .Fn strnvisx @@ -167,6 +174,14 @@ functions return \-1 and set .Va errno to .Dv ENOSPC . +The +.Fn strenvisx +function takes an additional argument, +.Fa cerr_ptr , +that is used to pass in and out a multibyte conversion error flag. +This is useful when processing single characters at a time when +it is possible that the locale may be set to something other +than the locale of the characters in the input data. .Pp The functions .Fn svis , @@ -174,16 +189,18 @@ The functions .Fn strsvis , .Fn strsnvis , .Fn strsvisx , +.Fn strsnvisx , and -.Fn strsnvisx +.Fn strsenvisx correspond to .Fn vis , .Fn nvis , .Fn strvis , .Fn strnvis , .Fn strvisx , +.Fn strnvisx , and -.Fn strnvisx +.Fn strenvisx but have an additional argument .Fa extra , pointing to a @@ -214,14 +231,13 @@ and .Fn strnvisx ) , and the type of representation used. By default, all non-graphic characters, -except space, tab, and newline are encoded. -(See -.Xr isgraph 3 . ) +except space, tab, and newline are encoded (see +.Xr isgraph 3 ) . The following flags alter this: .Bl -tag -width VIS_WHITEX .It Dv VIS_GLOB -Also encode magic characters +Also encode the magic characters .Ql ( * , .Ql \&? , .Ql \&[ @@ -243,11 +259,13 @@ Synonym for \&| .Dv VIS_NL . .It Dv VIS_SAFE -Only encode "unsafe" characters. +Only encode +.Dq unsafe +characters. Unsafe means control characters which may cause common terminals to perform unexpected functions. Currently this form allows space, tab, newline, backspace, bell, and -return - in addition to all graphic characters - unencoded. +return \(em in addition to all graphic characters \(em unencoded. .El .Pp (The above flags have no effect for @@ -287,8 +305,8 @@ Use an to represent meta characters (characters with the 8th bit set), and use caret .Ql ^ -to represent control characters see -.Pf ( Xr iscntrl 3 ) . +to represent control characters (see +.Xr iscntrl 3 ) . The following formats are used: .Bl -tag -width xxxxx .It Dv \e^C @@ -335,19 +353,20 @@ Use C-style backslash sequences to repre characters. The following sequences are used to represent the indicated characters: .Bd -unfilled -offset indent -.Li \ea Tn - BEL No (007) -.Li \eb Tn - BS No (010) -.Li \ef Tn - NP No (014) -.Li \en Tn - NL No (012) -.Li \er Tn - CR No (015) -.Li \es Tn - SP No (040) -.Li \et Tn - HT No (011) -.Li \ev Tn - VT No (013) -.Li \e0 Tn - NUL No (000) +.Li \ea Tn \(em BEL No (007) +.Li \eb Tn \(em BS No (010) +.Li \ef Tn \(em NP No (014) +.Li \en Tn \(em NL No (012) +.Li \er Tn \(em CR No (015) +.Li \es Tn \(em SP No (040) +.Li \et Tn \(em HT No (011) +.Li \ev Tn \(em VT No (013) +.Li \e0 Tn \(em NUL No (000) .Ed .Pp -When using this format, the nextc parameter is looked at to determine -if a +When using this format, the +.Fa nextc +parameter is looked at to determine if a .Dv NUL character can be encoded as .Ql \e0 @@ -374,8 +393,8 @@ represents a lower case hexadecimal digi .It Dv VIS_MIMESTYLE Use MIME Quoted-Printable encoding as described in RFC 2045, only don't break lines and don't handle CRLF. -The form is: -.Ql %XX +The form is +.Ql =XX where .Em X represents an upper case hexadecimal digit. @@ -392,6 +411,41 @@ meta characters as .Ql M-C ) . With this flag set, the encoding is ambiguous and non-invertible. +.Sh MULTIBYTE CHARACTER SUPPORT +These functions support multibyte character input. +The encoding conversion is influenced by the setting of the +.Ev LC_CTYPE +environment variable which defines the set of characters +that can be copied without encoding. +.Pp +When 8-bit data is present in the input, +.Ev LC_CTYPE +must be set to the correct locale or to the C locale. +If the locales of the data and the conversion are mismatched, +multibyte character recognition may fail and encoding will be performed +byte-by-byte instead. +.Pp +As noted above, +.Fa dst +must be four times the number of bytes processed from +.Fa src . +But note that each multibyte character can be up to +.Dv MB_LEN_MAX +bytes +.\" (see +.\" .Xr multibyte 3 ) +so in terms of multibyte characters, +.Fa dst +must be four times +.Dv MB_LEN_MAX +times the number of characters processed from +.Fa src . +.Sh ENVIRONMENT +.Bl -tag -width ".Ev LC_CTYPE" +.It Ev LC_CTYPE +Specify the locale of the input data. +Set to C if the input data locale is unknown. +.El .Sh ERRORS The functions .Fn nvis @@ -407,11 +461,11 @@ and .Fn strsnvisx , will return \-1 when the .Fa dlen -destination buffer length size is not enough to perform the conversion while +destination buffer size is not enough to perform the conversion while setting .Va errno to: -.Bl -tag -width Er +.Bl -tag -width ".Bq Er ENOSPC" .It Bq Er ENOSPC The destination buffer size is not large enough to perform the conversion. .El @@ -419,18 +473,23 @@ The destination buffer size is not large .Xr unvis 1 , .Xr vis 1 , .Xr glob 3 , +.\" .Xr multibyte 3 , .Xr unvis 3 .Rs .%A T. Berners-Lee .%T Uniform Resource Locators (URL) -.%O RFC1738 +.%O "RFC 1738" +.Re +.Rs +.%T "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies" +.%O "RFC 2045" .Re .Sh HISTORY The .Fn vis , .Fn strvis , and -.Fa strvisx +.Fn strvisx functions first appeared in .Bx 4.4 . The @@ -441,7 +500,7 @@ and functions appeared in .Nx 1.5 and -.Fx 10.0 . +.Fx 9.2 . The buffer size limited versions of the functions .Po Fn nvis , .Fn strnvis , @@ -451,6 +510,9 @@ The buffer size limited versions of the and .Fn strsnvisx Pc appeared in -.Nx 6.0 and -.Fx 10.0 . +.Fx 9.2 . +Myltibyte character support was added in +.Nx 7.0 +and +.Fx 9.2 . Modified: projects/libzfs_core/contrib/libc-vis/vis.c ============================================================================== --- projects/libzfs_core/contrib/libc-vis/vis.c Mon Mar 18 09:32:29 2013 (r248461) +++ projects/libzfs_core/contrib/libc-vis/vis.c Mon Mar 18 09:39:51 2013 (r248462) @@ -1,4 +1,4 @@ -/* $NetBSD: vis.c,v 1.45 2012/12/14 21:38:18 christos Exp $ */ +/* $NetBSD: vis.c,v 1.60 2013/02/21 16:21:20 joerg Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -57,19 +57,23 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: vis.c,v 1.45 2012/12/14 21:38:18 christos Exp $"); +__RCSID("$NetBSD: vis.c,v 1.60 2013/02/21 16:21:20 joerg Exp $"); #endif /* LIBC_SCCS and not lint */ +#ifdef __FBSDID __FBSDID("$FreeBSD$"); +#define _DIAGASSERT(x) assert(x) +#endif #include "namespace.h" #include +#include #include #include #include #include - -#define _DIAGASSERT(x) assert(x) +#include +#include #ifdef __weak_alias __weak_alias(strvisx,_strvisx) @@ -81,65 +85,66 @@ __weak_alias(strvisx,_strvisx) #include #include -static char *do_svis(char *, size_t *, int, int, int, const char *); +/* + * The reason for going through the trouble to deal with character encodings + * in vis(3), is that we use this to safe encode output of commands. This + * safe encoding varies depending on the character set. For example if we + * display ps output in French, we don't want to display French characters + * as M-foo. + */ + +static wchar_t *do_svis(wchar_t *, wint_t, int, wint_t, const wchar_t *); #undef BELL -#define BELL '\a' +#define BELL L'\a' + +#define iswoctal(c) (((u_char)(c)) >= L'0' && ((u_char)(c)) <= L'7') +#define iswwhite(c) (c == L' ' || c == L'\t' || c == L'\n') +#define iswsafe(c) (c == L'\b' || c == BELL || c == L'\r') +#define xtoa(c) L"0123456789abcdef"[c] +#define XTOA(c) L"0123456789ABCDEF"[c] -#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') -#define iswhite(c) (c == ' ' || c == '\t' || c == '\n') -#define issafe(c) (c == '\b' || c == BELL || c == '\r') -#define xtoa(c) "0123456789abcdef"[c] -#define XTOA(c) "0123456789ABCDEF"[c] *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Mon Mar 18 11:06:35 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 9C4FD824; Mon, 18 Mar 2013 11:06:35 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 80D29A79; Mon, 18 Mar 2013 11:06:35 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2I9WUIX081961; Mon, 18 Mar 2013 09:32:30 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2I9WTb1081954; Mon, 18 Mar 2013 09:32:29 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303180932.r2I9WTb1081954@svn.freebsd.org> From: Martin Matuska Date: Mon, 18 Mar 2013 09:32:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248461 - in projects/libzfs_core: cddl/contrib/opensolaris/lib/libzfs/common cddl/contrib/opensolaris/lib/libzfs_core/common cddl/lib/libzfs cddl/lib/libzfs_core sys/cddl/contrib/opens... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Mar 2013 11:06:35 -0000 Author: mm Date: Mon Mar 18 09:32:29 2013 New Revision: 248461 URL: http://svnweb.freebsd.org/changeset/base/248461 Log: Move common zfs ioctl compatibility functions (userland) into libzfs_compat.c Introduce additional constants for zfs ioctl versions Added: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c projects/libzfs_core/cddl/lib/libzfs/Makefile projects/libzfs_core/cddl/lib/libzfs_core/Makefile projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h Added: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c Mon Mar 18 09:32:29 2013 (r248461) @@ -0,0 +1,103 @@ +/* + * CDDL HEADER SART + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2013 Martin Matuska . All rights reserved. + */ + +#include "libzfs_compat.h" + +int zfs_ioctl_version = ZFS_IOCVER_UNDEF; +static int zfs_spa_version = -1; + +/* + * Get zfs_ioctl_version + */ +int +get_zfs_ioctl_version(void) +{ + size_t ver_size; + int ver = ZFS_IOCVER_NONE; + + ver_size = sizeof(ver); + sysctlbyname("vfs.zfs.version.ioctl", &ver, &ver_size, NULL, 0); + + return (ver); +} + +/* + * Get the SPA version + */ +static int +get_zfs_spa_version(void) +{ + size_t ver_size; + int ver = 0; + + ver_size = sizeof(ver); + sysctlbyname("vfs.zfs.version.spa", &ver, &ver_size, NULL, 0); + + return (ver); +} + +/* + * This is FreeBSD version of ioctl, because Solaris' ioctl() updates + * zc_nvlist_dst_size even if an error is returned, on FreeBSD if an + * error is returned zc_nvlist_dst_size won't be updated. + */ +int +zcmd_ioctl(int fd, int request, zfs_cmd_t *zc) +{ + size_t oldsize; + int ret, cflag = ZFS_CMD_COMPAT_NONE; + + if (zfs_ioctl_version == ZFS_IOCVER_UNDEF) + zfs_ioctl_version = get_zfs_ioctl_version(); + + if (zfs_ioctl_version == ZFS_IOCVER_DEADMAN) + cflag = ZFS_CMD_COMPAT_DEADMAN; + + /* + * If vfs.zfs.version.ioctl is not defined, assume we have v28 + * compatible binaries and use vfs.zfs.version.spa to test for v15 + */ + if (zfs_ioctl_version < ZFS_IOCVER_DEADMAN) { + cflag = ZFS_CMD_COMPAT_V28; + + if (zfs_spa_version < 0) + zfs_spa_version = get_zfs_spa_version(); + + if (zfs_spa_version == SPA_VERSION_15 || + zfs_spa_version == SPA_VERSION_14 || + zfs_spa_version == SPA_VERSION_13) + cflag = ZFS_CMD_COMPAT_V15; + } + + oldsize = zc->zc_nvlist_dst_size; + ret = zcmd_ioctl_compat(fd, request, zc, cflag); + + if (ret == 0 && oldsize < zc->zc_nvlist_dst_size) { + ret = -1; + errno = ENOMEM; + } + + return (ret); +} Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h Mon Mar 18 08:22:35 2013 (r248460) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h Mon Mar 18 09:32:29 2013 (r248461) @@ -32,71 +32,9 @@ extern "C" { #endif -static int zfs_ioctl_version = -1; -static int zfs_kernel_version = 0; +int get_zfs_ioctl_version(void); +int zcmd_ioctl(int fd, int request, zfs_cmd_t *zc); -/* - * Get zfs_ioctl_version - */ -static __inline int -get_zfs_ioctl_version(void) -{ - size_t ver_size; - int ver = 0; - - ver_size = sizeof(ver); - sysctlbyname("vfs.zfs.version.ioctl", &ver, &ver_size, NULL, 0); - - return (ver); -} - -/* - * This is FreeBSD version of ioctl, because Solaris' ioctl() updates - * zc_nvlist_dst_size even if an error is returned, on FreeBSD if an - * error is returned zc_nvlist_dst_size won't be updated. - */ -static __inline int -zcmd_ioctl(int fd, int request, zfs_cmd_t *zc) -{ - size_t oldsize, zfs_kernel_version_size; - int version, ret, cflag = ZFS_CMD_COMPAT_NONE; - - if (zfs_ioctl_version == -1) - zfs_ioctl_version = get_zfs_ioctl_version(); - - if (zfs_ioctl_version == ZFS_IOCVER_DEADMAN) - cflag = ZFS_CMD_COMPAT_DEADMAN; - - /* - * If vfs.zfs.version.ioctl is not defined, assume we have v28 - * compatible binaries and use vfs.zfs.version.spa to test for v15 - */ - if (zfs_ioctl_version < ZFS_IOCVER_DEADMAN) { - cflag = ZFS_CMD_COMPAT_V28; - zfs_kernel_version_size = sizeof(zfs_kernel_version); - - if (zfs_kernel_version == 0) { - sysctlbyname("vfs.zfs.version.spa", - &zfs_kernel_version, - &zfs_kernel_version_size, NULL, 0); - } - - if (zfs_kernel_version == SPA_VERSION_15 || - zfs_kernel_version == SPA_VERSION_14 || - zfs_kernel_version == SPA_VERSION_13) - cflag = ZFS_CMD_COMPAT_V15; - } - - oldsize = zc->zc_nvlist_dst_size; - ret = zcmd_ioctl_compat(fd, request, zc, cflag); - - if (ret == 0 && oldsize < zc->zc_nvlist_dst_size) { - ret = -1; - errno = ENOMEM; - } - - return (ret); -} #define ioctl(fd, ioc, zc) zcmd_ioctl((fd), (ioc), (zc)) #ifdef __cplusplus Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Mon Mar 18 08:22:35 2013 (r248460) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Mon Mar 18 09:32:29 2013 (r248461) @@ -88,7 +88,7 @@ #include "libzfs_compat.h" #ifdef __FreeBSD__ -int lzc_ioctl_version = -1; +extern int zfs_ioctl_version; #endif static int g_fd; @@ -140,10 +140,10 @@ lzc_ioctl(zfs_ioc_t ioc, const char *nam (void) strlcpy(zc.zc_name, name, sizeof (zc.zc_name)); #ifdef __FreeBSD__ - if (lzc_ioctl_version == -1) - lzc_ioctl_version = get_zfs_ioctl_version(); + if (zfs_ioctl_version == ZFS_IOCVER_UNDEF) + zfs_ioctl_version = get_zfs_ioctl_version(); - if (lzc_ioctl_version < ZFS_IOCVER_LZC) { + if (zfs_ioctl_version < ZFS_IOCVER_LZC) { oldsource = source; error = lzc_compat_pre(&zc, &ioc, &source); if (error) @@ -190,7 +190,7 @@ lzc_ioctl(zfs_ioc_t ioc, const char *nam } #ifdef __FreeBSD__ - if (lzc_ioctl_version < ZFS_IOCVER_LZC) + if (zfs_ioctl_version < ZFS_IOCVER_LZC) lzc_compat_post(&zc, ioc); #endif if (zc.zc_nvlist_dst_filled) { @@ -200,12 +200,12 @@ lzc_ioctl(zfs_ioc_t ioc, const char *nam *resultp = NULL; } #ifdef __FreeBSD__ - if (lzc_ioctl_version < ZFS_IOCVER_LZC) + if (zfs_ioctl_version < ZFS_IOCVER_LZC) lzc_compat_outnvl(&zc, ioc, resultp); #endif out: #ifdef __FreeBSD__ - if (lzc_ioctl_version < ZFS_IOCVER_LZC) { + if (zfs_ioctl_version < ZFS_IOCVER_LZC) { if (source != oldsource) nvlist_free(source); source = oldsource; Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c Mon Mar 18 08:22:35 2013 (r248460) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c Mon Mar 18 09:32:29 2013 (r248461) @@ -27,7 +27,7 @@ #include #include "libzfs_core_compat.h" -extern int lzc_ioctl_version; +extern int zfs_ioctl_version; int lzc_compat_pre(zfs_cmd_t *zc, zfs_ioc_t *ioc, nvlist_t **source) @@ -40,7 +40,7 @@ lzc_compat_pre(zfs_cmd_t *zc, zfs_ioc_t int error = 0; int pos; - if (lzc_ioctl_version >= ZFS_IOCVER_LZC) + if (zfs_ioctl_version >= ZFS_IOCVER_LZC) return (0); vecnum = *ioc; @@ -99,7 +99,7 @@ lzc_compat_pre(zfs_cmd_t *zc, zfs_ioc_t void lzc_compat_post(zfs_cmd_t *zc, const zfs_ioc_t ioc) { - if (lzc_ioctl_version >= ZFS_IOCVER_LZC) + if (zfs_ioctl_version >= ZFS_IOCVER_LZC) return; switch (ioc) { @@ -118,7 +118,7 @@ lzc_compat_outnvl(zfs_cmd_t *zc, const z { nvlist_t *nvl; - if (lzc_ioctl_version >= ZFS_IOCVER_LZC) + if (zfs_ioctl_version >= ZFS_IOCVER_LZC) return (0); switch (ioc) { Modified: projects/libzfs_core/cddl/lib/libzfs/Makefile ============================================================================== --- projects/libzfs_core/cddl/lib/libzfs/Makefile Mon Mar 18 08:22:35 2013 (r248460) +++ projects/libzfs_core/cddl/lib/libzfs/Makefile Mon Mar 18 09:32:29 2013 (r248461) @@ -18,6 +18,7 @@ SRCS= deviceid.c \ zone.c SRCS+= libzfs_changelist.c \ + libzfs_compat.c \ libzfs_config.c \ libzfs_dataset.c \ libzfs_diff.c \ Modified: projects/libzfs_core/cddl/lib/libzfs_core/Makefile ============================================================================== --- projects/libzfs_core/cddl/lib/libzfs_core/Makefile Mon Mar 18 08:22:35 2013 (r248460) +++ projects/libzfs_core/cddl/lib/libzfs_core/Makefile Mon Mar 18 09:32:29 2013 (r248461) @@ -4,12 +4,16 @@ .PATH: ${.CURDIR}/../../../sys/cddl/contrib/opensolaris/common/zfs .PATH: ${.CURDIR}/../../../sys/cddl/contrib/opensolaris/uts/common/fs/zfs .PATH: ${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libzfs_core/common +.PATH: ${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libzfs/common LIB= zfs_core DPADD= ${LIBNVPAIR} LDADD= -lnvpair -SRCS= libzfs_core.c libzfs_core_compat.c +SRCS= libzfs_core.c \ + libzfs_core_compat.c + +SRCS+= libzfs_compat.c WARNS?= 0 CSTD= c99 Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h Mon Mar 18 08:22:35 2013 (r248460) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h Mon Mar 18 09:32:29 2013 (r248461) @@ -45,8 +45,10 @@ extern "C" { */ /* ioctl versions for vfs.zfs.version.ioctl */ -#define ZFS_IOCVER_LZC 2 +#define ZFS_IOCVER_UNDEF -1 +#define ZFS_IOCVER_NONE 0 #define ZFS_IOCVER_DEADMAN 1 +#define ZFS_IOCVER_LZC 2 #define ZFS_IOCVER_CURRENT ZFS_IOCVER_LZC /* compatibility conversion flag */ From owner-svn-src-projects@FreeBSD.ORG Mon Mar 18 15:38:21 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 193BCA71; Mon, 18 Mar 2013 15:38:21 +0000 (UTC) (envelope-from ray@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id E028131D; Mon, 18 Mar 2013 15:38:20 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2IFcKv2094853; Mon, 18 Mar 2013 15:38:20 GMT (envelope-from ray@svn.freebsd.org) Received: (from ray@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2IFcFHF094819; Mon, 18 Mar 2013 15:38:15 GMT (envelope-from ray@svn.freebsd.org) Message-Id: <201303181538.r2IFcFHF094819@svn.freebsd.org> From: Aleksandr Rybalko Date: Mon, 18 Mar 2013 15:38:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248469 - in projects/efika_mx: contrib/binutils/gas/config crypto/openssh gnu/lib/libgcc lib/libc/stdlib lib/libc/sys sbin/ccdconfig sbin/ffsinfo sbin/geom/class/concat sbin/geom/class... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Mar 2013 15:38:21 -0000 Author: ray Date: Mon Mar 18 15:38:15 2013 New Revision: 248469 URL: http://svnweb.freebsd.org/changeset/base/248469 Log: MFC @r248468 Added: projects/efika_mx/sys/cddl/dev/fbt/fbt_powerpc.c - copied unchanged from r248468, head/sys/cddl/dev/fbt/fbt_powerpc.c projects/efika_mx/sys/libkern/arm/memset.S - copied unchanged from r248468, head/sys/libkern/arm/memset.S projects/efika_mx/sys/vm/_vm_radix.h - copied unchanged from r248468, head/sys/vm/_vm_radix.h projects/efika_mx/sys/vm/vm_radix.c - copied unchanged from r248468, head/sys/vm/vm_radix.c projects/efika_mx/sys/vm/vm_radix.h - copied unchanged from r248468, head/sys/vm/vm_radix.h Modified: projects/efika_mx/contrib/binutils/gas/config/tc-arm.c projects/efika_mx/crypto/openssh/sshd_config projects/efika_mx/gnu/lib/libgcc/Makefile projects/efika_mx/lib/libc/stdlib/realpath.3 projects/efika_mx/lib/libc/sys/chflags.2 projects/efika_mx/sbin/ccdconfig/ccdconfig.8 projects/efika_mx/sbin/ffsinfo/ffsinfo.8 projects/efika_mx/sbin/geom/class/concat/gconcat.8 projects/efika_mx/sbin/geom/class/mirror/gmirror.8 projects/efika_mx/sbin/geom/class/raid/graid.8 projects/efika_mx/sbin/geom/class/stripe/gstripe.8 projects/efika_mx/sbin/gvinum/gvinum.8 projects/efika_mx/share/man/man4/ccd.4 projects/efika_mx/sys/amd64/amd64/pmap.c projects/efika_mx/sys/amd64/include/pmap.h projects/efika_mx/sys/amd64/vmm/intel/vmx.c projects/efika_mx/sys/amd64/vmm/vmm.c projects/efika_mx/sys/amd64/vmm/vmm_stat.c projects/efika_mx/sys/amd64/vmm/vmm_stat.h projects/efika_mx/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c projects/efika_mx/sys/arm/include/bus.h projects/efika_mx/sys/arm/ti/cpsw/if_cpsw.c projects/efika_mx/sys/arm/ti/ti_mmchs.c projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h projects/efika_mx/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S projects/efika_mx/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c projects/efika_mx/sys/cddl/dev/dtrace/powerpc/dtrace_subr.c projects/efika_mx/sys/conf/Makefile.arm projects/efika_mx/sys/conf/files projects/efika_mx/sys/conf/files.arm projects/efika_mx/sys/dev/acpica/acpi_powerres.c projects/efika_mx/sys/dev/ath/if_ath_rx_edma.c projects/efika_mx/sys/dev/ath/if_ath_sysctl.c projects/efika_mx/sys/dev/sis/if_sis.c projects/efika_mx/sys/dev/sis/if_sisreg.h projects/efika_mx/sys/dev/sound/pcm/sndstat.c projects/efika_mx/sys/dev/usb/usbdevs projects/efika_mx/sys/dev/usb/wlan/if_run.c projects/efika_mx/sys/fs/tmpfs/tmpfs_vnops.c projects/efika_mx/sys/i386/i386/pmap.c projects/efika_mx/sys/i386/include/pmap.h projects/efika_mx/sys/i386/xen/pmap.c projects/efika_mx/sys/kern/uipc_mbuf.c projects/efika_mx/sys/kern/vfs_syscalls.c projects/efika_mx/sys/modules/dtrace/Makefile projects/efika_mx/sys/modules/dtrace/dtraceall/dtraceall.c projects/efika_mx/sys/modules/dtrace/fbt/Makefile projects/efika_mx/sys/modules/uart/Makefile projects/efika_mx/sys/netinet/libalias/alias.c projects/efika_mx/sys/powerpc/aim/trap.c projects/efika_mx/sys/powerpc/aim/trap_subr32.S projects/efika_mx/sys/powerpc/aim/trap_subr64.S projects/efika_mx/sys/sys/mbuf.h projects/efika_mx/sys/ufs/ufs/ufs_vnops.c projects/efika_mx/sys/vm/vm_object.c projects/efika_mx/sys/vm/vm_object.h projects/efika_mx/sys/vm/vm_page.c projects/efika_mx/sys/vm/vm_page.h projects/efika_mx/sys/vm/vm_reserv.c projects/efika_mx/tools/regression/security/cap_test/cap_test_capabilities.c projects/efika_mx/usr.bin/find/find.h projects/efika_mx/usr.bin/find/function.c projects/efika_mx/usr.bin/head/head.1 projects/efika_mx/usr.bin/renice/renice.8 projects/efika_mx/usr.bin/script/script.1 projects/efika_mx/usr.bin/tail/tail.1 projects/efika_mx/usr.sbin/ac/ac.8 Directory Properties: projects/efika_mx/ (props changed) projects/efika_mx/contrib/binutils/ (props changed) projects/efika_mx/crypto/openssh/ (props changed) projects/efika_mx/gnu/lib/ (props changed) projects/efika_mx/lib/libc/ (props changed) projects/efika_mx/sbin/ (props changed) projects/efika_mx/share/man/man4/ (props changed) projects/efika_mx/sys/ (props changed) projects/efika_mx/sys/amd64/vmm/ (props changed) projects/efika_mx/sys/cddl/contrib/opensolaris/ (props changed) projects/efika_mx/sys/conf/ (props changed) Modified: projects/efika_mx/contrib/binutils/gas/config/tc-arm.c ============================================================================== --- projects/efika_mx/contrib/binutils/gas/config/tc-arm.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/contrib/binutils/gas/config/tc-arm.c Mon Mar 18 15:38:15 2013 (r248469) @@ -651,6 +651,7 @@ struct asm_opcode #define BAD_ARGS _("bad arguments to instruction") #define BAD_PC _("r15 not allowed here") +#define BAD_SP _("r13 not allowed here") #define BAD_COND _("instruction cannot be conditional") #define BAD_OVERLAP _("registers may not be the same") #define BAD_HIREG _("lo register required") @@ -659,6 +660,7 @@ struct asm_opcode #define BAD_BRANCH _("branch must be last instruction in IT block") #define BAD_NOT_IT _("instruction not allowed in IT block") #define BAD_FPU _("selected FPU does not support instruction") +#define BAD_VMRS _("APSR_nzcv may only be used with fpscr") static struct hash_control *arm_ops_hsh; static struct hash_control *arm_cond_hsh; @@ -5164,10 +5166,6 @@ parse_neon_mov (char **str, int *which_o Case 10: VMOV.F32 , # Case 11: VMOV.F64
, # */ inst.operands[i].immisfloat = 1; - else if (parse_big_immediate (&ptr, i) == SUCCESS) - /* Case 2: VMOV.
, # - Case 3: VMOV.
, # */ - ; else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype, &optype)) != FAIL) { @@ -5207,6 +5205,10 @@ parse_neon_mov (char **str, int *which_o inst.operands[i++].present = 1; } } + else if (parse_big_immediate (&ptr, i) == SUCCESS) + /* Case 2: VMOV.
, # + Case 3: VMOV.
, # */ + ; else { first_error (_("expected or or operand")); @@ -7096,6 +7098,64 @@ do_vfp_nsyn_msr (void) } static void +do_vfp_vmrs (void) +{ + int rt; + + /* The destination register can be r0-r14 or APSR_nzcv */ + if (inst.operands[0].reg > 14) + { + inst.error = BAD_PC; + return; + } + + /* If the destination is r13 and not in ARM mode then unprefictable */ + if (thumb_mode && inst.operands[0].reg == REG_SP) + { + inst.error = BAD_SP; + return; + } + + /* If the destination is APSR_nzcv */ + if (inst.operands[0].isvec && inst.operands[1].reg != 1) + { + inst.error = BAD_VMRS; + return; + } + + if (inst.operands[0].isvec) + rt = 15; + else + rt = inst.operands[0].reg; + + /* Or in the registers to use */ + inst.instruction |= rt << 12; + inst.instruction |= inst.operands[1].reg << 16; +} + +static void +do_vfp_vmsr (void) +{ + /* The destination register can be r0-r14 or APSR_nzcv */ + if (inst.operands[1].reg > 14) + { + inst.error = BAD_PC; + return; + } + + /* If the destination is r13 and not in ARM mode then unprefictable */ + if (thumb_mode && inst.operands[0].reg == REG_SP) + { + inst.error = BAD_SP; + return; + } + + /* Or in the registers to use */ + inst.instruction |= inst.operands[1].reg << 12; + inst.instruction |= inst.operands[0].reg << 16; +} + +static void do_mrs (void) { if (do_vfp_nsyn_mrs () == SUCCESS) @@ -15726,6 +15786,8 @@ static const struct asm_opcode insns[] = cCE(ftouizs, ebc0ac0, 2, (RVS, RVS), vfp_sp_monadic), cCE(fmrx, ef00a10, 2, (RR, RVC), rd_rn), cCE(fmxr, ee00a10, 2, (RVC, RR), rn_rd), + cCE(vmrs, ef00a10, 2, (APSR_RR, RVC), vfp_vmrs), + cCE(vmsr, ee00a10, 2, (RVC, RR), vfp_vmsr), /* Memory operations. */ cCE(flds, d100a00, 2, (RVS, ADDRGLDC), vfp_sp_ldst), Modified: projects/efika_mx/crypto/openssh/sshd_config ============================================================================== --- projects/efika_mx/crypto/openssh/sshd_config Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/crypto/openssh/sshd_config Mon Mar 18 15:38:15 2013 (r248469) @@ -50,8 +50,7 @@ #PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 -# but this is overridden so installations will only check .ssh/authorized_keys -AuthorizedKeysFile .ssh/authorized_keys +#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 #AuthorizedPrincipalsFile none Modified: projects/efika_mx/gnu/lib/libgcc/Makefile ============================================================================== --- projects/efika_mx/gnu/lib/libgcc/Makefile Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/gnu/lib/libgcc/Makefile Mon Mar 18 15:38:15 2013 (r248469) @@ -123,10 +123,10 @@ CFLAGS+= -fheinous-gnu-extensions LIB1ASMSRC = lib1funcs.asm LIB1ASMFUNCS = _dvmd_tls _bb_init_func .if ${MK_ARM_EABI} != "no" -LIB1ASMFUNCS+= _addsubdf3 _addsubsf3 _cmpdf2 _cmpsf2 _fixdfsi _fixsfsi \ - _fixunsdfsi _fixunsdfsi _muldivdf3 _muldivsf3 _udivsi3 - LIB2ADDEH = unwind-arm.c libunwind.S pr-support.c unwind-c.c +# Some compilers generate __aeabi_ functions libgcc_s is missing +DPADD+= ${LIBGCC} +LDADD+= -lgcc .else LIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c .endif Modified: projects/efika_mx/lib/libc/stdlib/realpath.3 ============================================================================== --- projects/efika_mx/lib/libc/stdlib/realpath.3 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/lib/libc/stdlib/realpath.3 Mon Mar 18 15:38:15 2013 (r248469) @@ -42,7 +42,7 @@ .Sh SYNOPSIS .In stdlib.h .Ft "char *" -.Fn realpath "const char *pathname" "char *resolved_path" +.Fn realpath "const char * restrict pathname" "char * restrict resolved_path" .Sh DESCRIPTION The .Fn realpath Modified: projects/efika_mx/lib/libc/sys/chflags.2 ============================================================================== --- projects/efika_mx/lib/libc/sys/chflags.2 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/lib/libc/sys/chflags.2 Mon Mar 18 15:38:15 2013 (r248469) @@ -232,3 +232,7 @@ and .Fn fchflags system calls first appeared in .Bx 4.4 . +The +.Fn lchflags +system call first appeared in +.Fx 5.0 . Modified: projects/efika_mx/sbin/ccdconfig/ccdconfig.8 ============================================================================== --- projects/efika_mx/sbin/ccdconfig/ccdconfig.8 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sbin/ccdconfig/ccdconfig.8 Mon Mar 18 15:38:15 2013 (r248469) @@ -234,14 +234,14 @@ RAID controllers (see GENERIC), or software RAID systems such as .Xr geom 8 and -.Xr vinum 8 . +.Xr gvinum 8 . .Sh SEE ALSO .Xr dd 1 , .Xr ccd 4 , .Xr disklabel 8 , .Xr fdisk 8 , -.Xr rc 8 , -.Xr vinum 8 +.Xr gvinum 8 , +.Xr rc 8 .Sh HISTORY The .Nm Modified: projects/efika_mx/sbin/ffsinfo/ffsinfo.8 ============================================================================== --- projects/efika_mx/sbin/ffsinfo/ffsinfo.8 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sbin/ffsinfo/ffsinfo.8 Mon Mar 18 15:38:15 2013 (r248469) @@ -125,9 +125,9 @@ with all available information. .Xr dumpfs 8 , .Xr fsck 8 , .Xr growfs 8 , +.Xr gvinum 8 , .Xr newfs 8 , -.Xr tunefs 8 , -.Xr vinum 8 +.Xr tunefs 8 .Sh HISTORY The .Nm Modified: projects/efika_mx/sbin/geom/class/concat/gconcat.8 ============================================================================== --- projects/efika_mx/sbin/geom/class/concat/gconcat.8 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sbin/geom/class/concat/gconcat.8 Mon Mar 18 15:38:15 2013 (r248469) @@ -183,11 +183,11 @@ growfs /dev/concat/data .Xr loader.conf 5 , .Xr geom 8 , .Xr growfs 8 , +.Xr gvinum 8 , .Xr mount 8 , .Xr newfs 8 , .Xr sysctl 8 , -.Xr umount 8 , -.Xr vinum 8 +.Xr umount 8 .Sh HISTORY The .Nm Modified: projects/efika_mx/sbin/geom/class/mirror/gmirror.8 ============================================================================== --- projects/efika_mx/sbin/geom/class/mirror/gmirror.8 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sbin/geom/class/mirror/gmirror.8 Mon Mar 18 15:38:15 2013 (r248469) @@ -340,11 +340,11 @@ there. .Xr geom 4 , .Xr dumpon 8 , .Xr geom 8 , +.Xr gvinum 8 , .Xr mount 8 , .Xr newfs 8 , .Xr savecore 8 , -.Xr umount 8 , -.Xr vinum 8 +.Xr umount 8 .Sh HISTORY The .Nm Modified: projects/efika_mx/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/efika_mx/sbin/geom/class/raid/graid.8 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sbin/geom/class/raid/graid.8 Mon Mar 18 15:38:15 2013 (r248469) @@ -314,7 +314,7 @@ Exit status is 0 on success, and non-zer .Sh SEE ALSO .Xr geom 4 , .Xr geom 8 , -.Xr vinum 8 +.Xr gvinum 8 .Sh HISTORY The .Nm Modified: projects/efika_mx/sbin/geom/class/stripe/gstripe.8 ============================================================================== --- projects/efika_mx/sbin/geom/class/stripe/gstripe.8 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sbin/geom/class/stripe/gstripe.8 Mon Mar 18 15:38:15 2013 (r248469) @@ -232,11 +232,11 @@ for .Xr atacontrol 8 , .Xr ccdconfig 8 , .Xr geom 8 , +.Xr gvinum 8 , .Xr mount 8 , .Xr newfs 8 , .Xr sysctl 8 , -.Xr umount 8 , -.Xr vinum 8 +.Xr umount 8 .Sh HISTORY The .Nm Modified: projects/efika_mx/sbin/gvinum/gvinum.8 ============================================================================== --- projects/efika_mx/sbin/gvinum/gvinum.8 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sbin/gvinum/gvinum.8 Mon Mar 18 15:38:15 2013 (r248469) @@ -422,9 +422,9 @@ This may leave data unprotected and is p Currently, .Nm does not yet fully implement all of the functions found in -.Xr vinum 4 . +.Nm vinum . Specifically, the following commands from -.Xr vinum 4 +.Nm vinum are not supported: .Bl -tag -width indent .It Ic debug Modified: projects/efika_mx/share/man/man4/ccd.4 ============================================================================== --- projects/efika_mx/share/man/man4/ccd.4 Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/share/man/man4/ccd.4 Mon Mar 18 15:38:15 2013 (r248469) @@ -279,9 +279,9 @@ device special files .Xr config 8 , .Xr disklabel 8 , .Xr fsck 8 , +.Xr gvinum 8 , .Xr mount 8 , -.Xr newfs 8 , -.Xr vinum 8 +.Xr newfs 8 .Sh HISTORY The concatenated disk driver was originally written at the University of Utah. Modified: projects/efika_mx/sys/amd64/amd64/pmap.c ============================================================================== --- projects/efika_mx/sys/amd64/amd64/pmap.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/amd64/amd64/pmap.c Mon Mar 18 15:38:15 2013 (r248469) @@ -131,6 +131,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -1497,7 +1498,8 @@ pmap_free_zero_pages(vm_page_t free) while (free != NULL) { m = free; - free = m->right; + free = (void *)m->object; + m->object = NULL; /* Preserve the page's PG_ZERO setting. */ vm_page_free_toq(m); } @@ -1516,7 +1518,7 @@ pmap_add_delayed_free_list(vm_page_t m, m->flags |= PG_ZERO; else m->flags &= ~PG_ZERO; - m->right = *free; + m->object = (void *)*free; *free = m; } @@ -1526,31 +1528,12 @@ pmap_add_delayed_free_list(vm_page_t m, * for mapping a distinct range of virtual addresses. The pmap's collection is * ordered by this virtual address range. */ -static void +static __inline void pmap_insert_pt_page(pmap_t pmap, vm_page_t mpte) { - vm_page_t root; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - root = pmap->pm_root; - if (root == NULL) { - mpte->left = NULL; - mpte->right = NULL; - } else { - root = vm_page_splay(mpte->pindex, root); - if (mpte->pindex < root->pindex) { - mpte->left = root->left; - mpte->right = root; - root->left = NULL; - } else if (mpte->pindex == root->pindex) - panic("pmap_insert_pt_page: pindex already inserted"); - else { - mpte->right = root->right; - mpte->left = root; - root->right = NULL; - } - } - pmap->pm_root = mpte; + vm_radix_insert(&pmap->pm_root, mpte); } /* @@ -1558,19 +1541,12 @@ pmap_insert_pt_page(pmap_t pmap, vm_page * specified pmap's collection of idle page table pages. Returns NULL if there * is no page table page corresponding to the specified virtual address. */ -static vm_page_t +static __inline vm_page_t pmap_lookup_pt_page(pmap_t pmap, vm_offset_t va) { - vm_page_t mpte; - vm_pindex_t pindex = pmap_pde_pindex(va); PMAP_LOCK_ASSERT(pmap, MA_OWNED); - if ((mpte = pmap->pm_root) != NULL && mpte->pindex != pindex) { - mpte = vm_page_splay(pindex, mpte); - if ((pmap->pm_root = mpte)->pindex != pindex) - mpte = NULL; - } - return (mpte); + return (vm_radix_lookup(&pmap->pm_root, pmap_pde_pindex(va))); } /* @@ -1578,25 +1554,12 @@ pmap_lookup_pt_page(pmap_t pmap, vm_offs * of idle page table pages. The specified page table page must be a member of * the pmap's collection. */ -static void +static __inline void pmap_remove_pt_page(pmap_t pmap, vm_page_t mpte) { - vm_page_t root; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - if (mpte != pmap->pm_root) { - root = vm_page_splay(mpte->pindex, pmap->pm_root); - KASSERT(mpte == root, - ("pmap_remove_pt_page: mpte %p is missing from pmap %p", - mpte, pmap)); - } - if (mpte->left == NULL) - root = mpte->right; - else { - root = vm_page_splay(mpte->pindex, mpte->left); - root->right = mpte->right; - } - pmap->pm_root = root; + vm_radix_remove(&pmap->pm_root, mpte->pindex); } /* @@ -1693,7 +1656,7 @@ pmap_pinit0(pmap_t pmap) PMAP_LOCK_INIT(pmap); pmap->pm_pml4 = (pml4_entry_t *)PHYS_TO_DMAP(KPML4phys); - pmap->pm_root = NULL; + pmap->pm_root.rt_root = 0; CPU_ZERO(&pmap->pm_active); PCPU_SET(curpmap, pmap); TAILQ_INIT(&pmap->pm_pvchunk); @@ -1734,7 +1697,7 @@ pmap_pinit(pmap_t pmap) /* install self-referential address mapping entry(s) */ pmap->pm_pml4[PML4PML4I] = VM_PAGE_TO_PHYS(pml4pg) | PG_V | PG_RW | PG_A | PG_M; - pmap->pm_root = NULL; + pmap->pm_root.rt_root = 0; CPU_ZERO(&pmap->pm_active); TAILQ_INIT(&pmap->pm_pvchunk); bzero(&pmap->pm_stats, sizeof pmap->pm_stats); @@ -1976,7 +1939,7 @@ pmap_release(pmap_t pmap) KASSERT(pmap->pm_stats.resident_count == 0, ("pmap_release: pmap resident count %ld != 0", pmap->pm_stats.resident_count)); - KASSERT(pmap->pm_root == NULL, + KASSERT(vm_radix_is_empty(&pmap->pm_root), ("pmap_release: pmap has reserved page table page(s)")); m = PHYS_TO_VM_PAGE(pmap->pm_pml4[PML4PML4I] & PG_FRAME); @@ -2273,7 +2236,7 @@ reclaim_pv_chunk(pmap_t locked_pmap, str } if (m_pc == NULL && free != NULL) { m_pc = free; - free = m_pc->right; + free = (void *)m_pc->object; /* Recycle a freed page table page. */ m_pc->wire_count = 1; atomic_add_int(&cnt.v_wire_count, 1); Modified: projects/efika_mx/sys/amd64/include/pmap.h ============================================================================== --- projects/efika_mx/sys/amd64/include/pmap.h Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/amd64/include/pmap.h Mon Mar 18 15:38:15 2013 (r248469) @@ -150,6 +150,8 @@ #include #include +#include + typedef u_int64_t pd_entry_t; typedef u_int64_t pt_entry_t; typedef u_int64_t pdp_entry_t; @@ -250,7 +252,7 @@ struct pmap { cpuset_t pm_active; /* active on cpus */ /* spare u_int here due to padding */ struct pmap_statistics pm_stats; /* pmap statistics */ - vm_page_t pm_root; /* spare page table pages */ + struct vm_radix pm_root; /* spare page table pages */ }; typedef struct pmap *pmap_t; Modified: projects/efika_mx/sys/amd64/vmm/intel/vmx.c ============================================================================== --- projects/efika_mx/sys/amd64/vmm/intel/vmx.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/amd64/vmm/intel/vmx.c Mon Mar 18 15:38:15 2013 (r248469) @@ -153,10 +153,7 @@ static int cap_unrestricted_guest; static int cap_monitor_trap; /* statistics */ -static VMM_STAT_DEFINE(VCPU_MIGRATIONS, "vcpu migration across host cpus"); -static VMM_STAT_DEFINE(VMEXIT_EXTINT, "vm exits due to external interrupt"); -static VMM_STAT_DEFINE(VMEXIT_HLT_IGNORED, "number of times hlt was ignored"); -static VMM_STAT_DEFINE(VMEXIT_HLT, "number of times hlt was intercepted"); +static VMM_STAT_INTEL(VMEXIT_HLT_IGNORED, "number of times hlt was ignored"); #ifdef KTR static const char * @@ -1216,6 +1213,8 @@ vmx_exit_process(struct vmx *vmx, int vc qual = vmexit->u.vmx.exit_qualification; vmexit->exitcode = VM_EXITCODE_BOGUS; + vmm_stat_incr(vmx->vm, vcpu, VMEXIT_COUNT, 1); + switch (vmexit->u.vmx.exit_reason) { case EXIT_REASON_CR_ACCESS: handled = vmx_emulate_cr_access(vmx, vcpu, qual); Modified: projects/efika_mx/sys/amd64/vmm/vmm.c ============================================================================== --- projects/efika_mx/sys/amd64/vmm/vmm.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/amd64/vmm/vmm.c Mon Mar 18 15:38:15 2013 (r248469) @@ -139,7 +139,7 @@ static MALLOC_DEFINE(M_VM, "vm", "vm"); CTASSERT(VMM_MSR_NUM <= 64); /* msr_mask can keep track of up to 64 msrs */ /* statistics */ -static VMM_STAT_DEFINE(VCPU_TOTAL_RUNTIME, "vcpu total runtime"); +static VMM_STAT(VCPU_TOTAL_RUNTIME, "vcpu total runtime"); static void vcpu_cleanup(struct vcpu *vcpu) @@ -612,7 +612,7 @@ save_guest_fpustate(struct vcpu *vcpu) fpu_start_emulating(); } -static VMM_STAT_DEFINE(VCPU_IDLE_TICKS, "number of ticks vcpu was idle"); +static VMM_STAT(VCPU_IDLE_TICKS, "number of ticks vcpu was idle"); int vm_run(struct vm *vm, struct vm_run *vmrun) @@ -717,7 +717,7 @@ vm_inject_event(struct vm *vm, int vcpui return (VMINJECT(vm->cookie, vcpuid, type, vector, code, code_valid)); } -static VMM_STAT_DEFINE(VCPU_NMI_COUNT, "number of NMIs delivered to vcpu"); +static VMM_STAT(VCPU_NMI_COUNT, "number of NMIs delivered to vcpu"); int vm_inject_nmi(struct vm *vm, int vcpuid) @@ -937,7 +937,7 @@ vm_set_x2apic_state(struct vm *vm, int v if (vcpuid < 0 || vcpuid >= VM_MAXCPU) return (EINVAL); - if (state < 0 || state >= X2APIC_STATE_LAST) + if (state >= X2APIC_STATE_LAST) return (EINVAL); vm->vcpu[vcpuid].x2apic_state = state; Modified: projects/efika_mx/sys/amd64/vmm/vmm_stat.c ============================================================================== --- projects/efika_mx/sys/amd64/vmm/vmm_stat.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/amd64/vmm/vmm_stat.c Mon Mar 18 15:38:15 2013 (r248469) @@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include "vmm_util.h" #include "vmm_stat.h" static int vstnum; @@ -52,6 +53,12 @@ vmm_stat_init(void *arg) if (vst->desc == NULL) return; + if (vst->scope == VMM_STAT_SCOPE_INTEL && !vmm_is_intel()) + return; + + if (vst->scope == VMM_STAT_SCOPE_AMD && !vmm_is_amd()) + return; + if (vstnum >= MAX_VMM_STAT_TYPES) { printf("Cannot accomodate vmm stat type \"%s\"!\n", vst->desc); return; @@ -102,3 +109,9 @@ vmm_stat_desc(int index) else return (NULL); } + +/* global statistics */ +VMM_STAT(VCPU_MIGRATIONS, "vcpu migration across host cpus"); +VMM_STAT(VMEXIT_COUNT, "total number of vm exits"); +VMM_STAT(VMEXIT_EXTINT, "vm exits due to external interrupt"); +VMM_STAT(VMEXIT_HLT, "number of times hlt was intercepted"); Modified: projects/efika_mx/sys/amd64/vmm/vmm_stat.h ============================================================================== --- projects/efika_mx/sys/amd64/vmm/vmm_stat.h Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/amd64/vmm/vmm_stat.h Mon Mar 18 15:38:15 2013 (r248469) @@ -36,19 +36,36 @@ struct vm; #define MAX_VMM_STAT_TYPES 64 /* arbitrary */ +enum vmm_stat_scope { + VMM_STAT_SCOPE_ANY, + VMM_STAT_SCOPE_INTEL, /* Intel VMX specific statistic */ + VMM_STAT_SCOPE_AMD, /* AMD SVM specific statistic */ +}; + struct vmm_stat_type { - const char *desc; /* description of statistic */ int index; /* position in the stats buffer */ + const char *desc; /* description of statistic */ + enum vmm_stat_scope scope; }; void vmm_stat_init(void *arg); -#define VMM_STAT_DEFINE(type, desc) \ +#define VMM_STAT_DEFINE(type, desc, scope) \ struct vmm_stat_type type[1] = { \ - { desc, -1 } \ + { -1, desc, scope } \ }; \ SYSINIT(type##_stat, SI_SUB_KLD, SI_ORDER_ANY, vmm_stat_init, type) +#define VMM_STAT_DECLARE(type) \ + extern struct vmm_stat_type type[1] + +#define VMM_STAT(type, desc) \ + VMM_STAT_DEFINE(type, desc, VMM_STAT_SCOPE_ANY) +#define VMM_STAT_INTEL(type, desc) \ + VMM_STAT_DEFINE(type, desc, VMM_STAT_SCOPE_INTEL) +#define VMM_STAT_AMD(type, desc) \ + VMM_STAT_DEFINE(type, desc, VMM_STAT_SCOPE_AMD) + void *vmm_stat_alloc(void); void vmm_stat_free(void *vp); @@ -68,4 +85,8 @@ vmm_stat_incr(struct vm *vm, int vcpu, s #endif } +VMM_STAT_DECLARE(VCPU_MIGRATIONS); +VMM_STAT_DECLARE(VMEXIT_COUNT); +VMM_STAT_DECLARE(VMEXIT_EXTINT); +VMM_STAT_DECLARE(VMEXIT_HLT); #endif Modified: projects/efika_mx/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c ============================================================================== --- projects/efika_mx/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c Mon Mar 18 15:38:15 2013 (r248469) @@ -122,9 +122,7 @@ struct bcm_sdhci_softc { int sc_dma_ch; bus_dma_tag_t sc_dma_tag; bus_dmamap_t sc_dma_map; - void *sc_dma_buffer; - vm_paddr_t sc_dma_buffer_phys; - vm_paddr_t sc_sdhci_buffer_phys;; + vm_paddr_t sc_sdhci_buffer_phys; }; static int bcm_sdhci_probe(device_t); @@ -171,9 +169,6 @@ bcm_sdhci_attach(device_t dev) phandle_t node; pcell_t cell; int default_freq; - void *buffer; - vm_paddr_t buffer_phys; - void *va; sc->sc_dev = dev; sc->sc_req = NULL; @@ -210,7 +205,7 @@ bcm_sdhci_attach(device_t dev) goto fail; } - if (bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_MISC | INTR_MPSAFE, + if (bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, NULL, bcm_sdhci_intr, sc, &sc->sc_intrhand)) { bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res); @@ -243,7 +238,7 @@ bcm_sdhci_attach(device_t dev) bcm_dma_setup_intr(sc->sc_dma_ch, bcm_sdhci_dma_intr, sc); - /* Allocate DMA buffers */ + /* Allocate bus_dma resources. */ err = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, @@ -256,37 +251,14 @@ bcm_sdhci_attach(device_t dev) goto fail; } - err = bus_dmamem_alloc(sc->sc_dma_tag, &buffer, - BUS_DMA_WAITOK | BUS_DMA_COHERENT| BUS_DMA_ZERO, - &sc->sc_dma_map); - - if (err) { - device_printf(dev, "cannot allocate DMA memory\n"); - goto fail; - } - - err = bus_dmamap_load(sc->sc_dma_tag, sc->sc_dma_map, buffer, - BCM_SDHCI_BUFFER_SIZE, bcm_dmamap_cb, &buffer_phys, - BUS_DMA_WAITOK); + err = bus_dmamap_create(sc->sc_dma_tag, 0, &sc->sc_dma_map); if (err) { - device_printf(dev, "cannot load DMA memory\n"); - goto fail; - } - - /* - * Sanity check: two least bits of address should be zero - */ - if ((uintptr_t)buffer & 3) { - device_printf(dev, - "DMA address is not word-aligned\n"); + device_printf(dev, "bus_dmamap_create failed\n"); goto fail; } - sc->sc_dma_buffer = buffer; - sc->sc_dma_buffer_phys = buffer_phys; - va = (void*)rman_get_start(sc->sc_mem_res); - sc->sc_sdhci_buffer_phys = - pmap_kextract((vm_offset_t)va) + SDHCI_BUFFER; + sc->sc_sdhci_buffer_phys = BUS_SPACE_PHYSADDR(sc->sc_mem_res, + SDHCI_BUFFER); bus_generic_probe(dev); bus_generic_attach(dev); @@ -447,27 +419,23 @@ bcm_sdhci_dma_intr(int ch, void *arg) struct bcm_sdhci_softc *sc = (struct bcm_sdhci_softc *)arg; struct sdhci_slot *slot = &sc->sc_slot; uint32_t reg, mask; - void *buffer; + bus_addr_t pmem; + vm_paddr_t pdst, psrc; size_t len; - int left; + int left, sync_op; mtx_lock(&slot->mtx); - /* copy DMA buffer to VA if READ */ len = bcm_dma_length(sc->sc_dma_ch); if (slot->curcmd->data->flags & MMC_DATA_READ) { - bus_dmamap_sync(sc->sc_dma_tag, sc->sc_dma_map, - BUS_DMASYNC_POSTREAD); - + sync_op = BUS_DMASYNC_POSTREAD; mask = SDHCI_INT_DATA_AVAIL; - /* all dma data in single or contiguous page */ - buffer = (uint8_t*)(slot->curcmd->data->data) + slot->offset; - memcpy(buffer, sc->sc_dma_buffer, len); } else { - bus_dmamap_sync(sc->sc_dma_tag, sc->sc_dma_map, - BUS_DMASYNC_POSTWRITE); + sync_op = BUS_DMASYNC_POSTWRITE; mask = SDHCI_INT_SPACE_AVAIL; } + bus_dmamap_sync(sc->sc_dma_tag, sc->sc_dma_map, sync_op); + bus_dmamap_unload(sc->sc_dma_tag, sc->sc_dma_map); slot->offset += len; sc->sc_dma_inuse = 0; @@ -501,27 +469,22 @@ bcm_sdhci_dma_intr(int ch, void *arg) SDHCI_INT_STATUS, mask); /* continue next DMA transfer */ + bus_dmamap_load(sc->sc_dma_tag, sc->sc_dma_map, + (uint8_t *)slot->curcmd->data->data + + slot->offset, left, bcm_dmamap_cb, &pmem, 0); if (slot->curcmd->data->flags & MMC_DATA_READ) { - bus_dmamap_sync(sc->sc_dma_tag, sc->sc_dma_map, - BUS_DMASYNC_PREREAD); - - /* DMA start */ - if (bcm_dma_start(sc->sc_dma_ch, - sc->sc_sdhci_buffer_phys, - sc->sc_dma_buffer_phys, left) != 0) - device_printf(sc->sc_dev, "failed DMA start\n"); + psrc = sc->sc_sdhci_buffer_phys; + pdst = pmem; + sync_op = BUS_DMASYNC_PREREAD; } else { - buffer = (char*)slot->curcmd->data->data + slot->offset; - memcpy(sc->sc_dma_buffer, buffer, left); - - bus_dmamap_sync(sc->sc_dma_tag, - sc->sc_dma_map, BUS_DMASYNC_PREWRITE); - - /* DMA start */ - if (bcm_dma_start(sc->sc_dma_ch, - sc->sc_dma_buffer_phys, - sc->sc_sdhci_buffer_phys, left) != 0) - device_printf(sc->sc_dev, "failed DMA start\n"); + psrc = pmem; + pdst = sc->sc_sdhci_buffer_phys; + sync_op = BUS_DMASYNC_PREWRITE; + } + bus_dmamap_sync(sc->sc_dma_tag, sc->sc_dma_map, sync_op); + if (bcm_dma_start(sc->sc_dma_ch, psrc, pdst, left)) { + /* XXX stop xfer, other error recovery? */ + device_printf(sc->sc_dev, "failed DMA start\n"); } } else { /* wait for next data by INT */ @@ -542,6 +505,7 @@ bcm_sdhci_read_dma(struct sdhci_slot *sl { struct bcm_sdhci_softc *sc = device_get_softc(slot->bus); size_t left; + bus_addr_t paddr; if (sc->sc_dma_inuse) { device_printf(sc->sc_dev, "DMA in use\n"); @@ -562,12 +526,16 @@ bcm_sdhci_read_dma(struct sdhci_slot *sl BCM_DMA_INC_ADDR, (left & 0xf) ? BCM_DMA_32BIT : BCM_DMA_128BIT); + bus_dmamap_load(sc->sc_dma_tag, sc->sc_dma_map, + (uint8_t *)slot->curcmd->data->data + slot->offset, left, + bcm_dmamap_cb, &paddr, 0); + bus_dmamap_sync(sc->sc_dma_tag, sc->sc_dma_map, BUS_DMASYNC_PREREAD); /* DMA start */ if (bcm_dma_start(sc->sc_dma_ch, sc->sc_sdhci_buffer_phys, - sc->sc_dma_buffer_phys, left) != 0) + paddr, left) != 0) device_printf(sc->sc_dev, "failed DMA start\n"); } @@ -575,8 +543,8 @@ static void bcm_sdhci_write_dma(struct sdhci_slot *slot) { struct bcm_sdhci_softc *sc = device_get_softc(slot->bus); - char *buffer; size_t left; + bus_addr_t paddr; if (sc->sc_dma_inuse) { device_printf(sc->sc_dev, "DMA in use\n"); @@ -591,8 +559,9 @@ bcm_sdhci_write_dma(struct sdhci_slot *s KASSERT((left & 3) == 0, ("%s: len = %d, not word-aligned", __func__, left)); - buffer = (char*)slot->curcmd->data->data + slot->offset; - memcpy(sc->sc_dma_buffer, buffer, left); + bus_dmamap_load(sc->sc_dma_tag, sc->sc_dma_map, + (uint8_t *)slot->curcmd->data->data + slot->offset, left, + bcm_dmamap_cb, &paddr, 0); bcm_dma_setup_src(sc->sc_dma_ch, BCM_DMA_DREQ_NONE, BCM_DMA_INC_ADDR, @@ -604,7 +573,7 @@ bcm_sdhci_write_dma(struct sdhci_slot *s BUS_DMASYNC_PREWRITE); /* DMA start */ - if (bcm_dma_start(sc->sc_dma_ch, sc->sc_dma_buffer_phys, + if (bcm_dma_start(sc->sc_dma_ch, paddr, sc->sc_sdhci_buffer_phys, left) != 0) device_printf(sc->sc_dev, "failed DMA start\n"); } @@ -614,11 +583,16 @@ bcm_sdhci_will_handle_transfer(device_t { size_t left; - /* Do not use DMA for transfers less then block size */ + /* + * Do not use DMA for transfers less than block size or with a length + * that is not a multiple of four. + */ left = min(BCM_DMA_BLOCK_SIZE, slot->curcmd->data->len - slot->offset); if (left < BCM_DMA_BLOCK_SIZE) return (0); + if (left & 0x03) + return (0); return (1); } Modified: projects/efika_mx/sys/arm/include/bus.h ============================================================================== --- projects/efika_mx/sys/arm/include/bus.h Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/arm/include/bus.h Mon Mar 18 15:38:15 2013 (r248469) @@ -725,4 +725,12 @@ bs_c_8_proto(f); #include +/* + * Get the physical address of a bus space memory-mapped resource. + * Doing this as a macro is a temporary solution until a more robust fix is + * designed. It also serves to mark the locations needing that fix. + */ +#define BUS_SPACE_PHYSADDR(res, offs) \ + ((u_int)(rman_get_start(res)+(offs))) + #endif /* _MACHINE_BUS_H_ */ Modified: projects/efika_mx/sys/arm/ti/cpsw/if_cpsw.c ============================================================================== --- projects/efika_mx/sys/arm/ti/cpsw/if_cpsw.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/arm/ti/cpsw/if_cpsw.c Mon Mar 18 15:38:15 2013 (r248469) @@ -327,7 +327,7 @@ cpsw_debugf(const char *fmt, ...) #define cpsw_cpdma_bd_offset(i) (CPSW_CPPI_RAM_OFFSET + ((i)*16)) #define cpsw_cpdma_bd_paddr(sc, slot) \ - (slot->bd_offset + vtophys(rman_get_start(sc->res[0]))) + BUS_SPACE_PHYSADDR(sc->res[0], slot->bd_offset) #define cpsw_cpdma_read_bd(sc, slot, val) \ bus_read_region_4(sc->res[0], slot->bd_offset, (uint32_t *) val, 4) #define cpsw_cpdma_write_bd(sc, slot, val) \ Modified: projects/efika_mx/sys/arm/ti/ti_mmchs.c ============================================================================== --- projects/efika_mx/sys/arm/ti/ti_mmchs.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/arm/ti/ti_mmchs.c Mon Mar 18 15:38:15 2013 (r248469) @@ -1584,7 +1584,6 @@ static int ti_mmchs_activate(device_t dev) { struct ti_mmchs_softc *sc = device_get_softc(dev); - unsigned long addr; int rid; int err; @@ -1630,8 +1629,8 @@ ti_mmchs_activate(device_t dev) panic("Unknown OMAP device\n"); /* Get the physical address of the MMC data register, needed for DMA */ - addr = vtophys(rman_get_start(sc->sc_mem_res)); - sc->sc_data_reg_paddr = addr + sc->sc_reg_off + MMCHS_DATA; + sc->sc_data_reg_paddr = BUS_SPACE_PHYSADDR(sc->sc_mem_res, + sc->sc_reg_off + MMCHS_DATA); /* Set the initial power state to off */ sc->sc_cur_power_mode = power_off; Modified: projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c ============================================================================== --- projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c Mon Mar 18 15:38:15 2013 (r248469) @@ -271,7 +271,7 @@ uint64_t zfs_deadman_synctime = 1000ULL; TUNABLE_QUAD("vfs.zfs.deadman_synctime", &zfs_deadman_synctime); SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, deadman_synctime, CTLFLAG_RDTUN, &zfs_deadman_synctime, 0, - "Stalled ZFS I/O expiration time in units of vfs.zfs.txg_synctime_ms"); + "Stalled ZFS I/O expiration time in units of vfs.zfs.txg.synctime_ms"); /* * Default value of -1 for zfs_deadman_enabled is resolved in Modified: projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h ============================================================================== --- projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h Mon Mar 18 15:38:15 2013 (r248469) @@ -2313,10 +2313,10 @@ extern int dtrace_mach_aframes(void); #if defined(__i386) || defined(__amd64) extern int dtrace_instr_size(uchar_t *instr); extern int dtrace_instr_size_isa(uchar_t *, model_t, int *); -extern void dtrace_invop_add(int (*)(uintptr_t, uintptr_t *, uintptr_t)); -extern void dtrace_invop_remove(int (*)(uintptr_t, uintptr_t *, uintptr_t)); extern void dtrace_invop_callsite(void); #endif +extern void dtrace_invop_add(int (*)(uintptr_t, uintptr_t *, uintptr_t)); +extern void dtrace_invop_remove(int (*)(uintptr_t, uintptr_t *, uintptr_t)); #ifdef __sparc extern int dtrace_blksuword32(uintptr_t, uint32_t *, int); @@ -2349,6 +2349,15 @@ extern void dtrace_helpers_destroy(proc_ #define DTRACE_INVOP_NOP 4 #define DTRACE_INVOP_RET 5 +#elif defined(__powerpc__) + +#define DTRACE_INVOP_RET 1 +#define DTRACE_INVOP_BCTR 2 +#define DTRACE_INVOP_BLR 3 +#define DTRACE_INVOP_JUMP 4 +#define DTRACE_INVOP_MFLR_R0 5 +#define DTRACE_INVOP_NOP 6 + #endif #ifdef __cplusplus Modified: projects/efika_mx/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S ============================================================================== --- projects/efika_mx/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S Mon Mar 18 15:27:59 2013 (r248468) +++ projects/efika_mx/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S Mon Mar 18 15:38:15 2013 (r248469) @@ -85,10 +85,10 @@ ASENTRY_NOPROF(dtrace_cas32) 1: lwarx %r0,0,%r3 cmpw %r4,%r0 - bne 2f + bne 2f stwcx. %r5,0,%r3 - bne 1b -2: mr %r3,%r0 + bne 1b +2: mr %r3,%r0 blr END(dtrace_cas32) @@ -100,22 +100,15 @@ ASENTRY_NOPROF(dtrace_casptr) 1: lwarx %r0,0,%r3 cmpw %r4,%r0 - bne 2f + bne 2f stwcx. %r5,0,%r3 - bne 1b -2: mr %r3,%r0 + bne 1b +2: mr %r3,%r0 blr END(dtrace_casptr) /* -uintptr_t -dtrace_fulword(void *addr) -*/ -ASENTRY_NOPROF(dtrace_fulword) -END(dtrace_fulword) - -/* XXX: unoptimized void dtrace_copy(uintptr_t src, uintptr_t dest, size_t size) @@ -127,7 +120,7 @@ ASENTRY_NOPROF(dtrace_copy) lbzu %r3,1(%r7) stbu %r3,1(%r8) addme %r5,%r5 - beq 2f + beq 2f 2: blr END(dtrace_copy) @@ -144,42 +137,19 @@ ASENTRY_NOPROF(dtrace_copystr) lbzu %r3,1(%r7) stbu %r3,1(%r8) addme %r5,%r5 - beq 2f - or %r3,%r3,%r3 - beq 2f + beq 2f + or %r3,%r3,%r3 + beq 2f andi. %r0,%r5,0x0fff - beq 2f - lwz %r0,0(%r6) + beq 2f + lwz %r0,0(%r6) andi. %r0,%r0,CPU_DTRACE_BADADDR - beq 1b + beq 1b 2: blr END(dtrace_copystr) /* -void dtrace_invop_init(void) -*/ -ASENTRY_NOPROF(dtrace_invop_init) - /* XXX: impement it properly -- implement dtrace_invop_start */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Mon Mar 18 20:22:41 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 11E87733; Mon, 18 Mar 2013 20:22:41 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 030A6862; Mon, 18 Mar 2013 20:22:41 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2IKMe6L082890; Mon, 18 Mar 2013 20:22:40 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2IKMetm082889; Mon, 18 Mar 2013 20:22:40 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303182022.r2IKMetm082889@svn.freebsd.org> From: Martin Matuska Date: Mon, 18 Mar 2013 20:22:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248473 - projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Mar 2013 20:22:41 -0000 Author: mm Date: Mon Mar 18 20:22:40 2013 New Revision: 248473 URL: http://svnweb.freebsd.org/changeset/base/248473 Log: Add missing zvol_create_mirrors() on zfs_ioc_create() Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Mon Mar 18 19:22:51 2013 (r248472) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Mon Mar 18 20:22:40 2013 (r248473) @@ -3268,6 +3268,10 @@ zfs_ioc_create(const char *fsname, nvlis if (error != 0) (void) dmu_objset_destroy(fsname, B_FALSE); } +#ifdef __FreeBSD__ + if (error == 0 && type == DMU_OST_ZVOL) + zvol_create_minors(fsname); +#endif return (error); } From owner-svn-src-projects@FreeBSD.ORG Mon Mar 18 21:29:31 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id C5EDD54E; Mon, 18 Mar 2013 21:29:31 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id B74A4CD3; Mon, 18 Mar 2013 21:29:31 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2ILTVN7003031; Mon, 18 Mar 2013 21:29:31 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2ILTVAu003030; Mon, 18 Mar 2013 21:29:31 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303182129.r2ILTVAu003030@svn.freebsd.org> From: "Simon J. Gerraty" Date: Mon, 18 Mar 2013 21:29:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248476 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Mar 2013 21:29:31 -0000 Author: sjg Date: Mon Mar 18 21:29:31 2013 New Revision: 248476 URL: http://svnweb.freebsd.org/changeset/base/248476 Log: Revert the dance for skipping machine qualified dependfile. We just note when using non-machine qualified dependfile for "host" and skip update. Modified: projects/bmake/share/mk/gendirdeps.mk Modified: projects/bmake/share/mk/gendirdeps.mk ============================================================================== --- projects/bmake/share/mk/gendirdeps.mk Mon Mar 18 21:11:31 2013 (r248475) +++ projects/bmake/share/mk/gendirdeps.mk Mon Mar 18 21:29:31 2013 (r248476) @@ -281,10 +281,6 @@ CAT_DEPEND ?= .depend # .depend may contain things we don't want. # The sed command at the end of the stream, allows for the filters # to output _{VAR} tokens which we will turn into proper ${VAR} references. -# Note: if we have a non-machine qualified .MAKE.DEPENDFILE_DEFAULT -# which exists and _DEPENDFILE does not yet and is machine qualified; -# compare new _DEPENDFILE to default and if they are the same we do -# not need _DEPENDFILE. ${_DEPENDFILE}: ${CAT_DEPEND:M.depend} ${META_FILES:O:u:@m@${exists($m):?$m:}@} ${_this} ${META2DEPS} @(echo '# Autogenerated - do NOT edit!'; echo; \ echo 'DEP_RELDIR := $${_PARSEDIR:S,$${SRCTOP}/,,}'; echo; \ @@ -297,9 +293,6 @@ ${_DEPENDFILE}: ${CAT_DEPEND:M.depend} $ echo '# local dependencies - needed for -jN in clean tree'; \ [ -s ${CAT_DEPEND} ] && { grep : ${CAT_DEPEND} | grep -v '[/\\]'; }; \ echo '.endif' ) | sed 's,_\([{(]\),$$\1,g' > $@.new${.MAKE.PID} -.if ${.MAKE.DEPENDFILE_DEFAULT:E} != ${MACHINE} && ${@:E} == ${MACHINE} && !exists($@) && exists(${@:H}/${.MAKE.DEPENDFILE_DEFAULT:T}) - @cmp -s ${@:H}/${.MAKE.DEPENDFILE_DEFAULT:T} $@.new${.MAKE.PID} && rm $@.new${.MAKE.PID}; : -.endif @${InstallNew}; InstallNew -s $@.new${.MAKE.PID} .endif # meta2deps failed From owner-svn-src-projects@FreeBSD.ORG Tue Mar 19 11:09:20 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 65C1CCC9; Tue, 19 Mar 2013 11:09:20 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 564ABA51; Tue, 19 Mar 2013 11:09:20 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2JB9KkG052286; Tue, 19 Mar 2013 11:09:20 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2JB9GcS052256; Tue, 19 Mar 2013 11:09:16 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303191109.r2JB9GcS052256@svn.freebsd.org> From: Martin Matuska Date: Tue, 19 Mar 2013 11:09:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248495 - in projects/libzfs_core: contrib/binutils/gas/config crypto/openssh etc/mtree etc/rc.d lib/libc/sys lib/libvmmapi sbin/geom/class/eli share/examples share/examples/bhyve share... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Mar 2013 11:09:20 -0000 Author: mm Date: Tue Mar 19 11:09:15 2013 New Revision: 248495 URL: http://svnweb.freebsd.org/changeset/base/248495 Log: MFC @248493 Added: projects/libzfs_core/share/examples/bhyve/ - copied from r248493, head/share/examples/bhyve/ Modified: projects/libzfs_core/contrib/binutils/gas/config/tc-arm.c projects/libzfs_core/crypto/openssh/sshd_config projects/libzfs_core/etc/mtree/BSD.usr.dist projects/libzfs_core/etc/rc.d/savecore projects/libzfs_core/lib/libc/sys/mlock.2 projects/libzfs_core/lib/libvmmapi/vmmapi.c projects/libzfs_core/lib/libvmmapi/vmmapi.h projects/libzfs_core/sbin/geom/class/eli/geom_eli.c projects/libzfs_core/share/examples/Makefile projects/libzfs_core/share/man/man4/psm.4 projects/libzfs_core/sys/arm/include/bus.h projects/libzfs_core/sys/cddl/compat/opensolaris/sys/sig.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c projects/libzfs_core/sys/dev/atkbdc/psm.c projects/libzfs_core/sys/dev/fdt/fdt_common.c projects/libzfs_core/sys/dev/fdt/fdtbus.c projects/libzfs_core/sys/dev/fdt/simplebus.c projects/libzfs_core/sys/dev/puc/pucdata.c projects/libzfs_core/sys/kern/kern_sig.c projects/libzfs_core/sys/kern/kern_synch.c projects/libzfs_core/sys/kern/subr_sleepqueue.c projects/libzfs_core/sys/kern/subr_trap.c projects/libzfs_core/sys/modules/dtrace/fbt/Makefile projects/libzfs_core/sys/net/pfil.c projects/libzfs_core/sys/net/pfil.h projects/libzfs_core/sys/netpfil/ipfw/ip_fw2.c projects/libzfs_core/sys/netpfil/ipfw/ip_fw_private.h projects/libzfs_core/sys/sys/mouse.h projects/libzfs_core/sys/sys/param.h projects/libzfs_core/sys/sys/signalvar.h projects/libzfs_core/sys/sys/sleepqueue.h projects/libzfs_core/usr.sbin/bhyve/acpi.c projects/libzfs_core/usr.sbin/bhyve/bhyverun.c projects/libzfs_core/usr.sbin/bhyve/bhyverun.h projects/libzfs_core/usr.sbin/bhyve/mptbl.c projects/libzfs_core/usr.sbin/bhyve/pci_emul.c projects/libzfs_core/usr.sbin/bhyve/pci_virtio_block.c projects/libzfs_core/usr.sbin/bhyve/pci_virtio_net.c projects/libzfs_core/usr.sbin/bhyvectl/bhyvectl.c projects/libzfs_core/usr.sbin/bhyveload/bhyveload.8 projects/libzfs_core/usr.sbin/bhyveload/bhyveload.c projects/libzfs_core/usr.sbin/moused/moused.c Directory Properties: projects/libzfs_core/ (props changed) projects/libzfs_core/contrib/binutils/ (props changed) projects/libzfs_core/crypto/openssh/ (props changed) projects/libzfs_core/lib/libc/ (props changed) projects/libzfs_core/lib/libvmmapi/ (props changed) projects/libzfs_core/sbin/ (props changed) projects/libzfs_core/share/man/man4/ (props changed) projects/libzfs_core/sys/ (props changed) projects/libzfs_core/sys/cddl/contrib/opensolaris/ (props changed) projects/libzfs_core/usr.sbin/bhyve/ (props changed) projects/libzfs_core/usr.sbin/bhyvectl/ (props changed) projects/libzfs_core/usr.sbin/bhyveload/ (props changed) Modified: projects/libzfs_core/contrib/binutils/gas/config/tc-arm.c ============================================================================== --- projects/libzfs_core/contrib/binutils/gas/config/tc-arm.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/contrib/binutils/gas/config/tc-arm.c Tue Mar 19 11:09:15 2013 (r248495) @@ -7097,7 +7097,7 @@ do_vfp_nsyn_msr (void) return SUCCESS; } -static int +static void do_vfp_vmrs (void) { int rt; @@ -7106,21 +7106,21 @@ do_vfp_vmrs (void) if (inst.operands[0].reg > 14) { inst.error = BAD_PC; - return FAIL; + return; } /* If the destination is r13 and not in ARM mode then unprefictable */ if (thumb_mode && inst.operands[0].reg == REG_SP) { inst.error = BAD_SP; - return FAIL; + return; } /* If the destination is APSR_nzcv */ if (inst.operands[0].isvec && inst.operands[1].reg != 1) { inst.error = BAD_VMRS; - return FAIL; + return; } if (inst.operands[0].isvec) @@ -7131,32 +7131,28 @@ do_vfp_vmrs (void) /* Or in the registers to use */ inst.instruction |= rt << 12; inst.instruction |= inst.operands[1].reg << 16; - - return SUCCESS; } -static int +static void do_vfp_vmsr (void) { /* The destination register can be r0-r14 or APSR_nzcv */ if (inst.operands[1].reg > 14) { inst.error = BAD_PC; - return FAIL; + return; } /* If the destination is r13 and not in ARM mode then unprefictable */ if (thumb_mode && inst.operands[0].reg == REG_SP) { inst.error = BAD_SP; - return FAIL; + return; } /* Or in the registers to use */ inst.instruction |= inst.operands[1].reg << 12; inst.instruction |= inst.operands[0].reg << 16; - - return SUCCESS; } static void Modified: projects/libzfs_core/crypto/openssh/sshd_config ============================================================================== --- projects/libzfs_core/crypto/openssh/sshd_config Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/crypto/openssh/sshd_config Tue Mar 19 11:09:15 2013 (r248495) @@ -50,8 +50,7 @@ #PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 -# but this is overridden so installations will only check .ssh/authorized_keys -AuthorizedKeysFile .ssh/authorized_keys +#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 #AuthorizedPrincipalsFile none Modified: projects/libzfs_core/etc/mtree/BSD.usr.dist ============================================================================== --- projects/libzfs_core/etc/mtree/BSD.usr.dist Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/etc/mtree/BSD.usr.dist Tue Mar 19 11:09:15 2013 (r248495) @@ -217,6 +217,8 @@ .. atf .. + bhyve + .. bootforth .. csh Modified: projects/libzfs_core/etc/rc.d/savecore ============================================================================== --- projects/libzfs_core/etc/rc.d/savecore Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/etc/rc.d/savecore Tue Mar 19 11:09:15 2013 (r248495) @@ -23,6 +23,9 @@ savecore_prestart() return 1 ;; [Aa][Uu][Tt][Oo]) + if [ ! -L /dev/dumpdev ]; then + return 1 + fi dumpdev=`/bin/realpath /dev/dumpdev` ;; esac Modified: projects/libzfs_core/lib/libc/sys/mlock.2 ============================================================================== --- projects/libzfs_core/lib/libc/sys/mlock.2 Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/lib/libc/sys/mlock.2 Tue Mar 19 11:09:15 2013 (r248495) @@ -28,7 +28,7 @@ .\" @(#)mlock.2 8.2 (Berkeley) 12/11/93 .\" $FreeBSD$ .\" -.Dd December 25, 2012 +.Dd March 18, 2013 .Dt MLOCK 2 .Os .Sh NAME @@ -138,7 +138,12 @@ is set to 0 and the caller is not the su .It Bq Er EINVAL The address given is not page aligned or the length is negative. .It Bq Er ENOMEM -Some portion of the indicated address range is not allocated. +Some or all of the address range specified by the addr and len +arguments does not correspond to valid mapped pages in the address space +of the process. +.It Bq Er ENOMEM +Locking the pages mapped by the specified range would exceed a limit on +the amount of memory that the process may lock. .El .Sh "SEE ALSO" .Xr fork 2 , Modified: projects/libzfs_core/lib/libvmmapi/vmmapi.c ============================================================================== --- projects/libzfs_core/lib/libvmmapi/vmmapi.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/lib/libvmmapi/vmmapi.c Tue Mar 19 11:09:15 2013 (r248495) @@ -48,8 +48,16 @@ __FBSDID("$FreeBSD$"); #include "vmmapi.h" +#define GB (1024 * 1024 * 1024UL) + struct vmctx { int fd; + uint32_t lowmem_limit; + enum vm_mmap_style vms; + size_t lowmem; + char *lowmem_addr; + size_t highmem; + char *highmem_addr; char *name; }; @@ -90,6 +98,7 @@ vm_open(const char *name) assert(vm != NULL); vm->fd = -1; + vm->lowmem_limit = 3 * GB; vm->name = (char *)(vm + 1); strcpy(vm->name, name); @@ -151,8 +160,22 @@ vm_get_memory_seg(struct vmctx *ctx, vm_ return (error); } -int -vm_setup_memory(struct vmctx *ctx, vm_paddr_t gpa, size_t len, char **mapaddr) +uint32_t +vm_get_lowmem_limit(struct vmctx *ctx) +{ + + return (ctx->lowmem_limit); +} + +void +vm_set_lowmem_limit(struct vmctx *ctx, uint32_t limit) +{ + + ctx->lowmem_limit = limit; +} + +static int +setup_memory_segment(struct vmctx *ctx, vm_paddr_t gpa, size_t len, char **addr) { int error; struct vm_memory_segment seg; @@ -165,20 +188,69 @@ vm_setup_memory(struct vmctx *ctx, vm_pa seg.gpa = gpa; seg.len = len; error = ioctl(ctx->fd, VM_MAP_MEMORY, &seg); - if (error == 0 && mapaddr != NULL) { - *mapaddr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, + if (error == 0 && addr != NULL) { + *addr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, ctx->fd, gpa); } return (error); } -char * -vm_map_memory(struct vmctx *ctx, vm_paddr_t gpa, size_t len) +int +vm_setup_memory(struct vmctx *ctx, size_t memsize, enum vm_mmap_style vms) +{ + char **addr; + int error; + + /* XXX VM_MMAP_SPARSE not implemented yet */ + assert(vms == VM_MMAP_NONE || vms == VM_MMAP_ALL); + ctx->vms = vms; + + /* + * If 'memsize' cannot fit entirely in the 'lowmem' segment then + * create another 'highmem' segment above 4GB for the remainder. + */ + if (memsize > ctx->lowmem_limit) { + ctx->lowmem = ctx->lowmem_limit; + ctx->highmem = memsize - ctx->lowmem; + } else { + ctx->lowmem = memsize; + ctx->highmem = 0; + } + + if (ctx->lowmem > 0) { + addr = (vms == VM_MMAP_ALL) ? &ctx->lowmem_addr : NULL; + error = setup_memory_segment(ctx, 0, ctx->lowmem, addr); + if (error) + return (error); + } + + if (ctx->highmem > 0) { + addr = (vms == VM_MMAP_ALL) ? &ctx->highmem_addr : NULL; + error = setup_memory_segment(ctx, 4*GB, ctx->highmem, addr); + if (error) + return (error); + } + + return (0); +} + +void * +vm_map_gpa(struct vmctx *ctx, vm_paddr_t gaddr, size_t len) { - /* Map 'len' bytes of memory at guest physical address 'gpa' */ - return ((char *)mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, - ctx->fd, gpa)); + /* XXX VM_MMAP_SPARSE not implemented yet */ + assert(ctx->vms == VM_MMAP_ALL); + + if (gaddr < ctx->lowmem && gaddr + len <= ctx->lowmem) + return ((void *)(ctx->lowmem_addr + gaddr)); + + if (gaddr >= 4*GB) { + gaddr -= 4*GB; + if (gaddr < ctx->highmem && gaddr + len <= ctx->highmem) + return ((void *)(ctx->highmem_addr + gaddr)); + } + + return (NULL); } int Modified: projects/libzfs_core/lib/libvmmapi/vmmapi.h ============================================================================== --- projects/libzfs_core/lib/libvmmapi/vmmapi.h Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/lib/libvmmapi/vmmapi.h Tue Mar 19 11:09:15 2013 (r248495) @@ -32,24 +32,26 @@ struct vmctx; enum x2apic_state; +/* + * Different styles of mapping the memory assigned to a VM into the address + * space of the controlling process. + */ +enum vm_mmap_style { + VM_MMAP_NONE, /* no mapping */ + VM_MMAP_ALL, /* fully and statically mapped */ + VM_MMAP_SPARSE, /* mappings created on-demand */ +}; + int vm_create(const char *name); struct vmctx *vm_open(const char *name); void vm_destroy(struct vmctx *ctx); size_t vmm_get_mem_total(void); size_t vmm_get_mem_free(void); int vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len); -/* - * Create a memory segment of 'len' bytes in the guest physical address space - * at offset 'gpa'. - * - * If 'mapaddr' is not NULL then this region is mmap'ed into the address - * space of the calling process. If there is an mmap error then *mapaddr - * will be set to MAP_FAILED. - */ - -int vm_setup_memory(struct vmctx *ctx, vm_paddr_t gpa, size_t len, - char **mapaddr); -char * vm_map_memory(struct vmctx *ctx, vm_paddr_t gpa, size_t len); +int vm_setup_memory(struct vmctx *ctx, size_t len, enum vm_mmap_style s); +void *vm_map_gpa(struct vmctx *ctx, vm_paddr_t gaddr, size_t len); +uint32_t vm_get_lowmem_limit(struct vmctx *ctx); +void vm_set_lowmem_limit(struct vmctx *ctx, uint32_t limit); int vm_set_desc(struct vmctx *ctx, int vcpu, int reg, uint64_t base, uint32_t limit, uint32_t access); int vm_get_desc(struct vmctx *ctx, int vcpu, int reg, Modified: projects/libzfs_core/sbin/geom/class/eli/geom_eli.c ============================================================================== --- projects/libzfs_core/sbin/geom/class/eli/geom_eli.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sbin/geom/class/eli/geom_eli.c Tue Mar 19 11:09:15 2013 (r248495) @@ -259,6 +259,8 @@ struct g_command class_commands[] = { static int verbose = 0; +#define BUFSIZE 1024 + static int eli_protect(struct gctl_req *req) { @@ -344,7 +346,7 @@ static int eli_genkey_files(struct gctl_req *req, bool new, const char *type, struct hmac_ctx *ctxp, char *passbuf, size_t passbufsize) { - char *p, buf[MAXPHYS], argname[16]; + char *p, buf[BUFSIZE], argname[16]; const char *file; int error, fd, i; ssize_t done; @@ -431,7 +433,7 @@ eli_genkey_passphrase_prompt(struct gctl } if (new) { - char tmpbuf[BUFSIZ]; + char tmpbuf[BUFSIZE]; p = readpassphrase("Reenter new passphrase: ", tmpbuf, sizeof(tmpbuf), @@ -460,7 +462,7 @@ static int eli_genkey_passphrase(struct gctl_req *req, struct g_eli_metadata *md, bool new, struct hmac_ctx *ctxp) { - char passbuf[MAXPHYS]; + char passbuf[BUFSIZE]; bool nopassphrase; int nfiles; Modified: projects/libzfs_core/share/examples/Makefile ============================================================================== --- projects/libzfs_core/share/examples/Makefile Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/share/examples/Makefile Tue Mar 19 11:09:15 2013 (r248495) @@ -7,6 +7,7 @@ LDIRS= BSD_daemon \ FreeBSD_version \ IPv6 \ + bhyve \ bootforth \ csh \ cvsup \ @@ -42,6 +43,7 @@ XFILES= BSD_daemon/FreeBSD.pfa \ FreeBSD_version/Makefile \ FreeBSD_version/README \ IPv6/USAGE \ + bhyve/vmrun.sh \ bootforth/README \ bootforth/boot.4th \ bootforth/frames.4th \ Modified: projects/libzfs_core/share/man/man4/psm.4 ============================================================================== --- projects/libzfs_core/share/man/man4/psm.4 Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/share/man/man4/psm.4 Tue Mar 19 11:09:15 2013 (r248495) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 27, 2012 +.Dd March 18, 2013 .Dt PSM 4 .Os .Sh NAME @@ -339,6 +339,12 @@ at boot-time. This will enable .Nm to handle packets from guest devices (sticks) and extra buttons. +Similarly, extended support for IBM/Lenovo TrackPoint can be enabled +by setting +.Va hw.psm.trackpoint_support +to +.Em 1 +at boot-time. .Pp Tap and drag gestures can be disabled by setting .Va hw.psm.tap_enabled @@ -832,8 +838,8 @@ In contrast, some pad products, e.g.\& s and Interlink VersaPad, treat the tapping action as fourth button events. .Pp -It is reported that ALPS GlidePoint, Synaptics Touchpad, and -Interlink VersaPad require +It is reported that ALPS GlidePoint, Synaptics Touchpad, IBM/Lenovo +TrackPoint, and Interlink VersaPad require .Em INITAFTERSUSPEND flag in order to recover from suspended state. This flag is automatically set when one of these devices is detected by the Modified: projects/libzfs_core/sys/arm/include/bus.h ============================================================================== --- projects/libzfs_core/sys/arm/include/bus.h Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/arm/include/bus.h Tue Mar 19 11:09:15 2013 (r248495) @@ -731,6 +731,6 @@ bs_c_8_proto(f); * designed. It also serves to mark the locations needing that fix. */ #define BUS_SPACE_PHYSADDR(res, offs) \ - (vtophys(rman_get_start(res)+(offs))) + ((u_int)(rman_get_start(res)+(offs))) #endif /* _MACHINE_BUS_H_ */ Modified: projects/libzfs_core/sys/cddl/compat/opensolaris/sys/sig.h ============================================================================== --- projects/libzfs_core/sys/cddl/compat/opensolaris/sys/sig.h Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/cddl/compat/opensolaris/sys/sig.h Tue Mar 19 11:09:15 2013 (r248495) @@ -55,7 +55,7 @@ issig(int why) p = td->td_proc; PROC_LOCK(p); mtx_lock(&p->p_sigacts->ps_mtx); - sig = cursig(td, SIG_STOP_ALLOWED); + sig = cursig(td); mtx_unlock(&p->p_sigacts->ps_mtx); PROC_UNLOCK(p); if (sig != 0) Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Mar 19 11:09:15 2013 (r248495) @@ -919,7 +919,8 @@ dsl_check_snap_cb(const char *name, void char *dsname; dsname = kmem_asprintf("%s@%s", name, da->snapname); - VERIFY(nvlist_add_boolean(da->nvl, dsname) == 0); + fnvlist_add_boolean(da->nvl, dsname); + kmem_free(dsname, strlen(dsname) + 1); return (0); } Modified: projects/libzfs_core/sys/dev/atkbdc/psm.c ============================================================================== --- projects/libzfs_core/sys/dev/atkbdc/psm.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/dev/atkbdc/psm.c Tue Mar 19 11:09:15 2013 (r248495) @@ -260,6 +260,38 @@ typedef struct synapticsaction { int in_vscroll; } synapticsaction_t; +enum { + TRACKPOINT_SYSCTL_SENSITIVITY, + TRACKPOINT_SYSCTL_NEGATIVE_INERTIA, + TRACKPOINT_SYSCTL_UPPER_PLATEAU, + TRACKPOINT_SYSCTL_BACKUP_RANGE, + TRACKPOINT_SYSCTL_DRAG_HYSTERESIS, + TRACKPOINT_SYSCTL_MINIMUM_DRAG, + TRACKPOINT_SYSCTL_UP_THRESHOLD, + TRACKPOINT_SYSCTL_THRESHOLD, + TRACKPOINT_SYSCTL_JENKS_CURVATURE, + TRACKPOINT_SYSCTL_Z_TIME, + TRACKPOINT_SYSCTL_PRESS_TO_SELECT, + TRACKPOINT_SYSCTL_SKIP_BACKUPS +}; + +typedef struct trackpointinfo { + struct sysctl_ctx_list sysctl_ctx; + struct sysctl_oid *sysctl_tree; + int sensitivity; + int inertia; + int uplateau; + int reach; + int draghys; + int mindrag; + int upthresh; + int threshold; + int jenks; + int ztime; + int pts; + int skipback; +} trackpointinfo_t; + /* driver control block */ struct psm_softc { /* Driver status information */ int unit; @@ -274,6 +306,8 @@ struct psm_softc { /* Driver status inf synapticshw_t synhw; /* Synaptics hardware information */ synapticsinfo_t syninfo; /* Synaptics configuration */ synapticsaction_t synaction; /* Synaptics action context */ + int tphw; /* TrackPoint hardware information */ + trackpointinfo_t tpinfo; /* TrackPoint configuration */ mousemode_t mode; /* operation mode */ mousemode_t dflt_mode; /* default operation mode */ mousestatus_t status; /* accumulated mouse movement */ @@ -344,6 +378,9 @@ TUNABLE_INT("hw.psm.tap_enabled", &tap_e static int synaptics_support = 0; TUNABLE_INT("hw.psm.synaptics_support", &synaptics_support); +static int trackpoint_support = 0; +TUNABLE_INT("hw.psm.trackpoint_support", &trackpoint_support); + static int verbose = PSM_DEBUG; TUNABLE_INT("debug.psm.loglevel", &verbose); @@ -432,6 +469,7 @@ static probefunc_t enable_4dmouse; static probefunc_t enable_4dplus; static probefunc_t enable_mmanplus; static probefunc_t enable_synaptics; +static probefunc_t enable_trackpoint; static probefunc_t enable_versapad; static struct { @@ -466,6 +504,8 @@ static struct { 0x80, MOUSE_PS2_PACKETSIZE, enable_kmouse }, { MOUSE_MODEL_VERSAPAD, /* Interlink electronics VersaPad */ 0xe8, MOUSE_PS2VERSA_PACKETSIZE, enable_versapad }, + { MOUSE_MODEL_TRACKPOINT, /* IBM/Lenovo TrackPoint */ + 0xc0, MOUSE_PS2_PACKETSIZE, enable_trackpoint }, { MOUSE_MODEL_GENERIC, 0xc0, MOUSE_PS2_PACKETSIZE, NULL }, }; @@ -707,6 +747,7 @@ model_name(int model) { MOUSE_MODEL_4D, "4D Mouse" }, { MOUSE_MODEL_4DPLUS, "4D+ Mouse" }, { MOUSE_MODEL_SYNAPTICS, "Synaptics Touchpad" }, + { MOUSE_MODEL_TRACKPOINT, "IBM/Lenovo TrackPoint" }, { MOUSE_MODEL_GENERIC, "Generic PS/2 mouse" }, { MOUSE_MODEL_UNKNOWN, "Unknown" }, }; @@ -1452,7 +1493,7 @@ psmattach(device_t dev) sc->config |= PSM_CONFIG_INITAFTERSUSPEND; break; default: - if (sc->synhw.infoMajor >= 4) + if (sc->synhw.infoMajor >= 4 || sc->tphw > 0) sc->config |= PSM_CONFIG_INITAFTERSUSPEND; break; } @@ -3442,6 +3483,7 @@ psmsoftintr(void *arg) goto next; break; + case MOUSE_MODEL_TRACKPOINT: case MOUSE_MODEL_GENERIC: default: break; @@ -4474,6 +4516,233 @@ enable_synaptics(KBDC kbdc, struct psm_s return (TRUE); } +/* IBM/Lenovo TrackPoint */ +static int +trackpoint_command(KBDC kbdc, int cmd, int loc, int val) +{ + const int seq[] = { 0xe2, cmd, loc, val }; + int i; + + for (i = 0; i < nitems(seq); i++) + if (send_aux_command(kbdc, seq[i]) != PSM_ACK) + return (EIO); + return (0); +} + +#define PSM_TPINFO(x) offsetof(struct psm_softc, tpinfo.x) +#define TPMASK 0 +#define TPLOC 1 +#define TPINFO 2 + +static int +trackpoint_sysctl(SYSCTL_HANDLER_ARGS) +{ + static const int data[][3] = { + { 0x00, 0x4a, PSM_TPINFO(sensitivity) }, + { 0x00, 0x4d, PSM_TPINFO(inertia) }, + { 0x00, 0x60, PSM_TPINFO(uplateau) }, + { 0x00, 0x57, PSM_TPINFO(reach) }, + { 0x00, 0x58, PSM_TPINFO(draghys) }, + { 0x00, 0x59, PSM_TPINFO(mindrag) }, + { 0x00, 0x5a, PSM_TPINFO(upthresh) }, + { 0x00, 0x5c, PSM_TPINFO(threshold) }, + { 0x00, 0x5d, PSM_TPINFO(jenks) }, + { 0x00, 0x5e, PSM_TPINFO(ztime) }, + { 0x01, 0x2c, PSM_TPINFO(pts) }, + { 0x08, 0x2d, PSM_TPINFO(skipback) } + }; + struct psm_softc *sc; + int error, newval, *oldvalp; + const int *tp; + + if (arg1 == NULL || arg2 < 0 || arg2 >= nitems(data)) + return (EINVAL); + sc = arg1; + tp = data[arg2]; + oldvalp = (int *)((intptr_t)sc + tp[TPINFO]); + newval = *oldvalp; + error = sysctl_handle_int(oidp, &newval, 0, req); + if (error != 0) + return (error); + if (newval == *oldvalp) + return (0); + if (newval < 0 || newval > (tp[TPMASK] == 0 ? 255 : 1)) + return (EINVAL); + error = trackpoint_command(sc->kbdc, tp[TPMASK] == 0 ? 0x81 : 0x47, + tp[TPLOC], tp[TPMASK] == 0 ? newval : tp[TPMASK]); + if (error != 0) + return (error); + *oldvalp = newval; + + return (0); +} + +static void +trackpoint_sysctl_create_tree(struct psm_softc *sc) +{ + + if (sc->tpinfo.sysctl_tree != NULL) + return; + + /* Attach extra trackpoint sysctl nodes under hw.psm.trackpoint */ + sysctl_ctx_init(&sc->tpinfo.sysctl_ctx); + sc->tpinfo.sysctl_tree = SYSCTL_ADD_NODE(&sc->tpinfo.sysctl_ctx, + SYSCTL_STATIC_CHILDREN(_hw_psm), OID_AUTO, "trackpoint", CTLFLAG_RD, + 0, "IBM/Lenovo TrackPoint"); + + /* hw.psm.trackpoint.sensitivity */ + sc->tpinfo.sensitivity = 0x64; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "sensitivity", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_SENSITIVITY, + trackpoint_sysctl, "I", + "Sensitivity"); + + /* hw.psm.trackpoint.negative_inertia */ + sc->tpinfo.inertia = 0x06; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "negative_inertia", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_NEGATIVE_INERTIA, + trackpoint_sysctl, "I", + "Negative inertia factor"); + + /* hw.psm.trackpoint.upper_plateau */ + sc->tpinfo.uplateau = 0x61; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "upper_plateau", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_UPPER_PLATEAU, + trackpoint_sysctl, "I", + "Transfer function upper plateau speed"); + + /* hw.psm.trackpoint.backup_range */ + sc->tpinfo.reach = 0x0a; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "backup_range", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_BACKUP_RANGE, + trackpoint_sysctl, "I", + "Backup range"); + + /* hw.psm.trackpoint.drag_hysteresis */ + sc->tpinfo.draghys = 0xff; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "drag_hysteresis", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_DRAG_HYSTERESIS, + trackpoint_sysctl, "I", + "Drag hysteresis"); + + /* hw.psm.trackpoint.minimum_drag */ + sc->tpinfo.mindrag = 0x14; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "minimum_drag", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_MINIMUM_DRAG, + trackpoint_sysctl, "I", + "Minimum drag"); + + /* hw.psm.trackpoint.up_threshold */ + sc->tpinfo.upthresh = 0xff; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "up_threshold", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_UP_THRESHOLD, + trackpoint_sysctl, "I", + "Up threshold for release"); + + /* hw.psm.trackpoint.threshold */ + sc->tpinfo.threshold = 0x08; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "threshold", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_THRESHOLD, + trackpoint_sysctl, "I", + "Threshold"); + + /* hw.psm.trackpoint.jenks_curvature */ + sc->tpinfo.jenks = 0x87; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "jenks_curvature", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_JENKS_CURVATURE, + trackpoint_sysctl, "I", + "Jenks curvature"); + + /* hw.psm.trackpoint.z_time */ + sc->tpinfo.ztime = 0x26; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "z_time", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_Z_TIME, + trackpoint_sysctl, "I", + "Z time constant"); + + /* hw.psm.trackpoint.press_to_select */ + sc->tpinfo.pts = 0x00; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "press_to_select", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_PRESS_TO_SELECT, + trackpoint_sysctl, "I", + "Press to Select"); + + /* hw.psm.trackpoint.skip_backups */ + sc->tpinfo.skipback = 0x00; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "skip_backups", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_SKIP_BACKUPS, + trackpoint_sysctl, "I", + "Skip backups from drags"); +} + +static int +enable_trackpoint(KBDC kbdc, struct psm_softc *sc) +{ + int id; + + kbdc = sc->kbdc; + + if (send_aux_command(kbdc, 0xe1) != PSM_ACK || + read_aux_data(kbdc) != 0x01) + return (FALSE); + id = read_aux_data(kbdc); + if (id < 0x01) + return (FALSE); + if (sc != NULL) + sc->tphw = id; + if (!trackpoint_support) + return (FALSE); + + if (sc != NULL) { + /* Create sysctl tree. */ + trackpoint_sysctl_create_tree(sc); + + trackpoint_command(kbdc, 0x81, 0x4a, sc->tpinfo.sensitivity); + trackpoint_command(kbdc, 0x81, 0x4d, sc->tpinfo.inertia); + trackpoint_command(kbdc, 0x81, 0x60, sc->tpinfo.uplateau); + trackpoint_command(kbdc, 0x81, 0x57, sc->tpinfo.reach); + trackpoint_command(kbdc, 0x81, 0x58, sc->tpinfo.draghys); + trackpoint_command(kbdc, 0x81, 0x59, sc->tpinfo.mindrag); + trackpoint_command(kbdc, 0x81, 0x5a, sc->tpinfo.upthresh); + trackpoint_command(kbdc, 0x81, 0x5c, sc->tpinfo.threshold); + trackpoint_command(kbdc, 0x81, 0x5d, sc->tpinfo.jenks); + trackpoint_command(kbdc, 0x81, 0x5e, sc->tpinfo.ztime); + if (sc->tpinfo.pts == 0x01) + trackpoint_command(kbdc, 0x47, 0x2c, 0x01); + if (sc->tpinfo.skipback == 0x01) + trackpoint_command(kbdc, 0x47, 0x2d, 0x08); + + sc->hw.hwid = id; + sc->hw.buttons = 3; + } + + return (TRUE); +} + /* Interlink electronics VersaPad */ static int enable_versapad(KBDC kbdc, struct psm_softc *sc) Modified: projects/libzfs_core/sys/dev/fdt/fdt_common.c ============================================================================== --- projects/libzfs_core/sys/dev/fdt/fdt_common.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/dev/fdt/fdt_common.c Tue Mar 19 11:09:15 2013 (r248495) @@ -421,12 +421,12 @@ fdt_regsize(phandle_t node, u_long *base int fdt_reg_to_rl(phandle_t node, struct resource_list *rl) { - u_long start, end, count; + u_long count; pcell_t *reg, *regptr; pcell_t addr_cells, size_cells; int tuple_size, tuples; int i, rv; - bus_space_handle_t vaddr; + bus_space_handle_t start, end; long busaddr, bussize; if (fdt_addrsize_cells(OF_parent(node), &addr_cells, &size_cells) != 0) @@ -457,14 +457,12 @@ fdt_reg_to_rl(phandle_t node, struct res /* Calculate address range relative to base. */ start += busaddr; - if (bus_space_map(fdtbus_bs_tag, start, count, 0, &vaddr) != 0) - panic("Couldn't map the device memory"); - end = vaddr + count - 1; + end = start + count - 1; - debugf("reg addr start = %lx, end = %lx, count = %lx\n", vaddr, + debugf("reg addr start = %lx, end = %lx, count = %lx\n", start, end, count); - resource_list_add(rl, SYS_RES_MEMORY, i, vaddr, end, + resource_list_add(rl, SYS_RES_MEMORY, i, start, end, count); } rv = 0; Modified: projects/libzfs_core/sys/dev/fdt/fdtbus.c ============================================================================== --- projects/libzfs_core/sys/dev/fdt/fdtbus.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/dev/fdt/fdtbus.c Tue Mar 19 11:09:15 2013 (r248495) @@ -617,6 +617,16 @@ static int fdtbus_activate_resource(device_t bus, device_t child, int type, int rid, struct resource *res) { + bus_space_handle_t p; + int error; + + if (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) { + error = bus_space_map(rman_get_bustag(res), + rman_get_bushandle(res), rman_get_size(res), 0, &p); + if (error) + return (error); + rman_set_bushandle(res, p); + } return (rman_activate_resource(res)); } Modified: projects/libzfs_core/sys/dev/fdt/simplebus.c ============================================================================== --- projects/libzfs_core/sys/dev/fdt/simplebus.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/dev/fdt/simplebus.c Tue Mar 19 11:09:15 2013 (r248495) @@ -129,17 +129,19 @@ static driver_t simplebus_driver = { devclass_t simplebus_devclass; DRIVER_MODULE(simplebus, fdtbus, simplebus_driver, simplebus_devclass, 0, 0); +DRIVER_MODULE(simplebus, simplebus, simplebus_driver, simplebus_devclass, 0, + 0); static int simplebus_probe(device_t dev) { - if (!ofw_bus_is_compatible_strict(dev, "simple-bus")) + if (!ofw_bus_is_compatible(dev, "simple-bus")) return (ENXIO); device_set_desc(dev, "Flattened device tree simple bus"); - return (BUS_PROBE_DEFAULT); + return (BUS_PROBE_GENERIC); } static int @@ -179,7 +181,6 @@ simplebus_attach(device_t dev) device_printf(dev, "%s: could not process 'reg' " "property\n", di->di_ofw.obd_name); - /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; @@ -189,7 +190,6 @@ simplebus_attach(device_t dev) device_printf(dev, "%s: could not process " "'interrupts' property\n", di->di_ofw.obd_name); resource_list_free(&di->di_res); - /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; @@ -201,7 +201,6 @@ simplebus_attach(device_t dev) device_printf(dev, "could not add child: %s\n", di->di_ofw.obd_name); resource_list_free(&di->di_res); - /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; @@ -254,8 +253,9 @@ simplebus_alloc_resource(device_t bus, d rle = resource_list_find(&di->di_res, type, *rid); if (rle == NULL) { - device_printf(bus, "no default resources for " - "rid = %d, type = %d\n", *rid, type); + if (bootverbose) + device_printf(bus, "no default resources for " + "rid = %d, type = %d\n", *rid, type); return (NULL); } start = rle->start; @@ -286,9 +286,6 @@ simplebus_setup_intr(device_t bus, devic enum intr_polarity pol; int error, rid; - if (device_get_parent(child) != bus) - return (ECHILD); - di = device_get_ivars(child); if (di == NULL) return (ENXIO); Modified: projects/libzfs_core/sys/dev/puc/pucdata.c ============================================================================== --- projects/libzfs_core/sys/dev/puc/pucdata.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/dev/puc/pucdata.c Tue Mar 19 11:09:15 2013 (r248495) @@ -629,6 +629,7 @@ const struct puc_cfg puc_pci_devices[] = "Exar XR17V258IV", DEFAULT_RCLK * 8, PUC_PORT_8S, 0x10, 0, -1, + .config_function = puc_config_exar }, /* The XR17V358 uses the 125MHz PCIe clock as its reference clock. */ Modified: projects/libzfs_core/sys/kern/kern_sig.c ============================================================================== --- projects/libzfs_core/sys/kern/kern_sig.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/kern/kern_sig.c Tue Mar 19 11:09:15 2013 (r248495) @@ -108,7 +108,7 @@ SDT_PROBE_ARGTYPE(proc, kernel, , signal static int coredump(struct thread *); static int killpg1(struct thread *td, int sig, int pgid, int all, ksiginfo_t *ksi); -static int issignal(struct thread *td, int stop_allowed); +static int issignal(struct thread *td); static int sigprop(int sig); static void tdsigwakeup(struct thread *, int, sig_t, int); static void sig_suspend_threads(struct thread *, struct proc *, int); @@ -560,19 +560,17 @@ sigqueue_delete_stopmask_proc(struct pro } /* - * Determine signal that should be delivered to process p, the current - * process, 0 if none. If there is a pending stop signal with default + * Determine signal that should be delivered to thread td, the current + * thread, 0 if none. If there is a pending stop signal with default * action, the process stops in issignal(). */ int -cursig(struct thread *td, int stop_allowed) +cursig(struct thread *td) { PROC_LOCK_ASSERT(td->td_proc, MA_OWNED); - KASSERT(stop_allowed == SIG_STOP_ALLOWED || - stop_allowed == SIG_STOP_NOT_ALLOWED, ("cursig: stop_allowed")); mtx_assert(&td->td_proc->p_sigacts->ps_mtx, MA_OWNED); THREAD_LOCK_ASSERT(td, MA_NOTOWNED); - return (SIGPENDING(td) ? issignal(td, stop_allowed) : 0); + return (SIGPENDING(td) ? issignal(td) : 0); } /* @@ -1202,7 +1200,7 @@ kern_sigtimedwait(struct thread *td, sig SIGSETNAND(td->td_sigmask, waitset); for (;;) { mtx_lock(&ps->ps_mtx); - sig = cursig(td, SIG_STOP_ALLOWED); + sig = cursig(td); mtx_unlock(&ps->ps_mtx); if (sig != 0 && SIGISMEMBER(waitset, sig)) { if (sigqueue_get(&td->td_sigqueue, sig, ksi) != 0 || @@ -1465,7 +1463,7 @@ kern_sigsuspend(struct thread *td, sigse /* void */; thread_suspend_check(0); mtx_lock(&p->p_sigacts->ps_mtx); - while ((sig = cursig(td, SIG_STOP_ALLOWED)) != 0) + while ((sig = cursig(td)) != 0) has_sig += postsig(sig); mtx_unlock(&p->p_sigacts->ps_mtx); } @@ -2150,9 +2148,9 @@ tdsendsignal(struct proc *p, struct thre * Some signals have a process-wide effect and a per-thread * component. Most processing occurs when the process next * tries to cross the user boundary, however there are some - * times when processing needs to be done immediatly, such as + * times when processing needs to be done immediately, such as * waking up threads so that they can cross the user boundary. - * We try do the per-process part here. + * We try to do the per-process part here. */ if (P_SHOULDSTOP(p)) { KASSERT(!(p->p_flag & P_WEXIT), @@ -2399,12 +2397,10 @@ static void sig_suspend_threads(struct thread *td, struct proc *p, int sending) { struct thread *td2; - int wakeup_swapper; PROC_LOCK_ASSERT(p, MA_OWNED); PROC_SLOCK_ASSERT(p, MA_OWNED); - wakeup_swapper = 0; FOREACH_THREAD_IN_PROC(p, td2) { thread_lock(td2); td2->td_flags |= TDF_ASTPENDING | TDF_NEEDSUSPCHK; @@ -2431,8 +2427,6 @@ sig_suspend_threads(struct thread *td, s } thread_unlock(td2); } - if (wakeup_swapper) - kick_proc0(); } int @@ -2584,7 +2578,7 @@ sigallowstop() * postsig(sig); */ static int -issignal(struct thread *td, int stop_allowed) +issignal(struct thread *td) { struct proc *p; struct sigacts *ps; Modified: projects/libzfs_core/sys/kern/kern_synch.c ============================================================================== --- projects/libzfs_core/sys/kern/kern_synch.c Tue Mar 19 11:07:12 2013 (r248494) +++ projects/libzfs_core/sys/kern/kern_synch.c Tue Mar 19 11:09:15 2013 (r248495) @@ -205,8 +205,6 @@ _sleep(void *ident, struct lock_object * sleepq_flags = SLEEPQ_SLEEP; if (catch) sleepq_flags |= SLEEPQ_INTERRUPTIBLE; - if (priority & PBDRY) - sleepq_flags |= SLEEPQ_STOP_ON_BDRY; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Tue Mar 19 12:51:20 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 03A2EA00; Tue, 19 Mar 2013 12:51:20 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id E1CF2106; Tue, 19 Mar 2013 12:51:19 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2JCpJuN084282; Tue, 19 Mar 2013 12:51:19 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2JCpIfA084273; Tue, 19 Mar 2013 12:51:18 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303191251.r2JCpIfA084273@svn.freebsd.org> From: Martin Matuska Date: Tue, 19 Mar 2013 12:51:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248498 - in projects/libzfs_core: cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensolaris/cmd/zhack cddl/contrib/opensolaris/cmd/ztest cddl/contrib/o... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Mar 2013 12:51:20 -0000 Author: mm Date: Tue Mar 19 12:51:18 2013 New Revision: 248498 URL: http://svnweb.freebsd.org/changeset/base/248498 Log: MFV r247580: Merge synctask code restructuring from vendor. Modify forward and backward compatibility to support new change. Illumos ZFS issues: 3464 zfs synctask code needs restructuring Sponsored by: Hybrid Logic Ltd. Added: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c - copied unchanged from r247580, vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_destroy.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c - copied unchanged from r247580, vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_userhold.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h - copied, changed from r247580, vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dmu_send.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_destroy.h - copied unchanged from r247580, vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dsl_destroy.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_userhold.h - copied unchanged from r247580, vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dsl_userhold.h Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zdb/zdb.c projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs.8 projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c projects/libzfs_core/cddl/contrib/opensolaris/cmd/zhack/zhack.c projects/libzfs_core/cddl/contrib/opensolaris/cmd/ztest/ztest.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core_compat.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c projects/libzfs_core/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h projects/libzfs_core/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c projects/libzfs_core/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/Makefile.files projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bplist.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/refcount.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/rrwlock.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_tx.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_prop.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_debug.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/txg.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/sys/nvpair.h Directory Properties: projects/libzfs_core/cddl/contrib/opensolaris/ (props changed) projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/ (props changed) projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/ (props changed) projects/libzfs_core/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/zdb/zdb.c Tue Mar 19 12:42:14 2013 (r248497) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/zdb/zdb.c Tue Mar 19 12:51:18 2013 (r248498) @@ -1692,7 +1692,9 @@ dump_dir(objset_t *os) int print_header = 1; int i, error; + dsl_pool_config_enter(dmu_objset_pool(os), FTAG); dmu_objset_fast_stat(os, &dds); + dsl_pool_config_exit(dmu_objset_pool(os), FTAG); if (dds.dds_type < DMU_OST_NUMTYPES) type = objset_types[dds.dds_type]; @@ -2101,7 +2103,6 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog NULL, NULL, ZIO_PRIORITY_ASYNC_READ, flags, zb)); free(data); - if (ioerr && !(flags & ZIO_FLAG_SPECULATIVE)) { zcb->zcb_haderrors = 1; zcb->zcb_errors[ioerr]++; Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Tue Mar 19 12:42:14 2013 (r248497) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Tue Mar 19 12:51:18 2013 (r248498) @@ -1618,7 +1618,11 @@ multiple snapshots. Destroy (or mark for deferred deletion) all snapshots with this name in descendent file systems. .It Fl R -Recursively destroy all dependents. +Recursively destroy all clones of these snapshots, including the clones, +snapshots, and children. +If this flag is specified, the +.Op fl d +flag will have no effect. .It Fl n Do a dry-run ("No-op") deletion. No data will be deleted. This is useful in conjunction with the Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Tue Mar 19 12:42:14 2013 (r248497) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Tue Mar 19 12:51:18 2013 (r248498) @@ -916,6 +916,7 @@ typedef struct destroy_cbdata { boolean_t cb_parsable; boolean_t cb_dryrun; nvlist_t *cb_nvl; + nvlist_t *cb_batchedsnaps; /* first snap in contiguous run */ char *cb_firstsnap; @@ -1012,9 +1013,27 @@ destroy_callback(zfs_handle_t *zhp, void zfs_close(zhp); return (0); } + if (cb->cb_dryrun) { + zfs_close(zhp); + return (0); + } + + /* + * We batch up all contiguous snapshots (even of different + * filesystems) and destroy them with one ioctl. We can't + * simply do all snap deletions and then all fs deletions, + * because we must delete a clone before its origin. + */ + if (zfs_get_type(zhp) == ZFS_TYPE_SNAPSHOT) { + fnvlist_add_boolean(cb->cb_batchedsnaps, name); + } else { + int error = zfs_destroy_snaps_nvl(g_zfs, + cb->cb_batchedsnaps, B_FALSE); + fnvlist_free(cb->cb_batchedsnaps); + cb->cb_batchedsnaps = fnvlist_alloc(); - if (!cb->cb_dryrun) { - if (zfs_unmount(zhp, NULL, cb->cb_force ? MS_FORCE : 0) != 0 || + if (error != 0 || + zfs_unmount(zhp, NULL, cb->cb_force ? MS_FORCE : 0) != 0 || zfs_destroy(zhp, cb->cb_defer_destroy) != 0) { zfs_close(zhp); return (-1); @@ -1170,8 +1189,10 @@ static int zfs_do_destroy(int argc, char **argv) { destroy_cbdata_t cb = { 0 }; + int rv = 0; + int err = 0; int c; - zfs_handle_t *zhp; + zfs_handle_t *zhp = NULL; char *at; zfs_type_t type = ZFS_TYPE_DATASET; @@ -1225,11 +1246,9 @@ zfs_do_destroy(int argc, char **argv) at = strchr(argv[0], '@'); if (at != NULL) { - int err = 0; /* Build the list of snaps to destroy in cb_nvl. */ - if (nvlist_alloc(&cb.cb_nvl, NV_UNIQUE_NAME, 0) != 0) - nomem(); + cb.cb_nvl = fnvlist_alloc(); *at = '\0'; zhp = zfs_open(g_zfs, argv[0], @@ -1240,17 +1259,15 @@ zfs_do_destroy(int argc, char **argv) cb.cb_snapspec = at + 1; if (gather_snapshots(zfs_handle_dup(zhp), &cb) != 0 || cb.cb_error) { - zfs_close(zhp); - nvlist_free(cb.cb_nvl); - return (1); + rv = 1; + goto out; } if (nvlist_empty(cb.cb_nvl)) { (void) fprintf(stderr, gettext("could not find any " "snapshots to destroy; check snapshot names.\n")); - zfs_close(zhp); - nvlist_free(cb.cb_nvl); - return (1); + rv = 1; + goto out; } if (cb.cb_verbose) { @@ -1269,18 +1286,26 @@ zfs_do_destroy(int argc, char **argv) } if (!cb.cb_dryrun) { - if (cb.cb_doclones) + if (cb.cb_doclones) { + cb.cb_batchedsnaps = fnvlist_alloc(); err = destroy_clones(&cb); + if (err == 0) { + err = zfs_destroy_snaps_nvl(g_zfs, + cb.cb_batchedsnaps, B_FALSE); + } + if (err != 0) { + rv = 1; + goto out; + } + } if (err == 0) { - err = zfs_destroy_snaps_nvl(zhp, cb.cb_nvl, + err = zfs_destroy_snaps_nvl(g_zfs, cb.cb_nvl, cb.cb_defer_destroy); } } - zfs_close(zhp); - nvlist_free(cb.cb_nvl); if (err != 0) - return (1); + rv = 1; } else { /* Open the given dataset */ if ((zhp = zfs_open(g_zfs, argv[0], type)) == NULL) @@ -1301,8 +1326,8 @@ zfs_do_destroy(int argc, char **argv) zfs_get_name(zhp)); (void) fprintf(stderr, gettext("use 'zpool destroy %s' " "to destroy the pool itself\n"), zfs_get_name(zhp)); - zfs_close(zhp); - return (1); + rv = 1; + goto out; } /* @@ -1312,30 +1337,42 @@ zfs_do_destroy(int argc, char **argv) if (!cb.cb_doclones && zfs_iter_dependents(zhp, B_TRUE, destroy_check_dependent, &cb) != 0) { - zfs_close(zhp); - return (1); + rv = 1; + goto out; } if (cb.cb_error) { - zfs_close(zhp); - return (1); + rv = 1; + goto out; } + cb.cb_batchedsnaps = fnvlist_alloc(); if (zfs_iter_dependents(zhp, B_FALSE, destroy_callback, &cb) != 0) { - zfs_close(zhp); - return (1); + rv = 1; + goto out; } /* * Do the real thing. The callback will close the * handle regardless of whether it succeeds or not. */ - if (destroy_callback(zhp, &cb) != 0) - return (1); + err = destroy_callback(zhp, &cb); + zhp = NULL; + if (err == 0) { + err = zfs_destroy_snaps_nvl(g_zfs, + cb.cb_batchedsnaps, cb.cb_defer_destroy); + } + if (err != 0) + rv = 1; } - return (0); +out: + fnvlist_free(cb.cb_batchedsnaps); + fnvlist_free(cb.cb_nvl); + if (zhp != NULL) + zfs_close(zhp); + return (rv); } static boolean_t @@ -5121,28 +5158,12 @@ cleanup2: return (error); } -/* - * zfs allow [-r] [-t] ... - * - * -r Recursively hold - * -t Temporary hold (hidden option) - * - * Apply a user-hold with the given tag to the list of snapshots. - */ static int zfs_do_allow(int argc, char **argv) { return (zfs_do_allow_unallow_impl(argc, argv, B_FALSE)); } -/* - * zfs unallow [-r] [-t] ... - * - * -r Recursively hold - * -t Temporary hold (hidden option) - * - * Apply a user-hold with the given tag to the list of snapshots. - */ static int zfs_do_unallow(int argc, char **argv) { @@ -5156,7 +5177,6 @@ zfs_do_hold_rele_impl(int argc, char **a int i; const char *tag; boolean_t recursive = B_FALSE; - boolean_t temphold = B_FALSE; const char *opts = holding ? "rt" : "r"; int c; @@ -5166,9 +5186,6 @@ zfs_do_hold_rele_impl(int argc, char **a case 'r': recursive = B_TRUE; break; - case 't': - temphold = B_TRUE; - break; case '?': (void) fprintf(stderr, gettext("invalid option '%c'\n"), optopt); @@ -5217,7 +5234,7 @@ zfs_do_hold_rele_impl(int argc, char **a } if (holding) { if (zfs_hold(zhp, delim+1, tag, recursive, - temphold, B_FALSE, -1, 0, 0) != 0) + B_FALSE, -1) != 0) ++errors; } else { if (zfs_release(zhp, delim+1, tag, recursive) != 0) @@ -5233,7 +5250,6 @@ zfs_do_hold_rele_impl(int argc, char **a * zfs hold [-r] [-t] ... * * -r Recursively hold - * -t Temporary hold (hidden option) * * Apply a user-hold with the given tag to the list of snapshots. */ Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/zhack/zhack.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/zhack/zhack.c Tue Mar 19 12:42:14 2013 (r248497) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/zhack/zhack.c Tue Mar 19 12:51:18 2013 (r248498) @@ -46,6 +46,7 @@ #include #include #include +#include #undef ZFS_MAXNAMELEN #undef verify #include @@ -273,10 +274,10 @@ zhack_do_feature_stat(int argc, char **a } static void -feature_enable_sync(void *arg1, void *arg2, dmu_tx_t *tx) +feature_enable_sync(void *arg, dmu_tx_t *tx) { - spa_t *spa = arg1; - zfeature_info_t *feature = arg2; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + zfeature_info_t *feature = arg; spa_feature_enable(spa, feature, tx); spa_history_log_internal(spa, "zhack enable feature", tx, @@ -344,8 +345,8 @@ zhack_do_feature_enable(int argc, char * if (0 == zap_contains(mos, spa->spa_feat_desc_obj, feature.fi_guid)) fatal("feature already enabled: %s", feature.fi_guid); - VERIFY3U(0, ==, dsl_sync_task_do(spa->spa_dsl_pool, NULL, - feature_enable_sync, spa, &feature, 5)); + VERIFY0(dsl_sync_task(spa_name(spa), NULL, + feature_enable_sync, &feature, 5)); spa_close(spa, FTAG); @@ -353,10 +354,10 @@ zhack_do_feature_enable(int argc, char * } static void -feature_incr_sync(void *arg1, void *arg2, dmu_tx_t *tx) +feature_incr_sync(void *arg, dmu_tx_t *tx) { - spa_t *spa = arg1; - zfeature_info_t *feature = arg2; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + zfeature_info_t *feature = arg; spa_feature_incr(spa, feature, tx); spa_history_log_internal(spa, "zhack feature incr", tx, @@ -364,10 +365,10 @@ feature_incr_sync(void *arg1, void *arg2 } static void -feature_decr_sync(void *arg1, void *arg2, dmu_tx_t *tx) +feature_decr_sync(void *arg, dmu_tx_t *tx) { - spa_t *spa = arg1; - zfeature_info_t *feature = arg2; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + zfeature_info_t *feature = arg; spa_feature_decr(spa, feature, tx); spa_history_log_internal(spa, "zhack feature decr", tx, @@ -442,8 +443,8 @@ zhack_do_feature_ref(int argc, char **ar if (decr && !spa_feature_is_active(spa, &feature)) fatal("feature refcount already 0: %s", feature.fi_guid); - VERIFY3U(0, ==, dsl_sync_task_do(spa->spa_dsl_pool, NULL, - decr ? feature_decr_sync : feature_incr_sync, spa, &feature, 5)); + VERIFY0(dsl_sync_task(spa_name(spa), NULL, + decr ? feature_decr_sync : feature_incr_sync, &feature, 5)); spa_close(spa, FTAG); } Modified: projects/libzfs_core/cddl/contrib/opensolaris/cmd/ztest/ztest.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/cmd/ztest/ztest.c Tue Mar 19 12:42:14 2013 (r248497) +++ projects/libzfs_core/cddl/contrib/opensolaris/cmd/ztest/ztest.c Tue Mar 19 12:51:18 2013 (r248498) @@ -104,10 +104,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -367,7 +369,7 @@ ztest_info_t ztest_info[] = { { ztest_scrub, 1, &zopt_rarely }, { ztest_spa_upgrade, 1, &zopt_rarely }, { ztest_dsl_dataset_promote_busy, 1, &zopt_rarely }, - { ztest_vdev_attach_detach, 1, &zopt_rarely }, + { ztest_vdev_attach_detach, 1, &zopt_sometimes }, { ztest_vdev_LUN_growth, 1, &zopt_rarely }, { ztest_vdev_add_remove, 1, &ztest_opts.zo_vdevtime }, @@ -1008,9 +1010,8 @@ ztest_dsl_prop_set_uint64(char *osname, uint64_t curval; int error; - error = dsl_prop_set(osname, propname, - (inherit ? ZPROP_SRC_NONE : ZPROP_SRC_LOCAL), - sizeof (value), 1, &value); + error = dsl_prop_set_int(osname, propname, + (inherit ? ZPROP_SRC_NONE : ZPROP_SRC_LOCAL), value); if (error == ENOSPC) { ztest_record_enospc(FTAG); @@ -1018,8 +1019,7 @@ ztest_dsl_prop_set_uint64(char *osname, } ASSERT0(error); - VERIFY3U(dsl_prop_get(osname, propname, sizeof (curval), - 1, &curval, setpoint), ==, 0); + VERIFY0(dsl_prop_get_integer(osname, propname, &curval, setpoint)); if (ztest_opts.zo_verbose >= 6) { VERIFY(zfs_prop_index_to_string(prop, curval, &valname) == 0); @@ -2481,8 +2481,7 @@ ztest_vdev_add_remove(ztest_ds_t *zd, ui int error; VERIFY(mutex_lock(&ztest_vdev_lock) == 0); - leaves = - MAX(zs->zs_mirrors + zs->zs_splits, 1) * ztest_opts.zo_raidz; + leaves = MAX(zs->zs_mirrors + zs->zs_splits, 1) * ztest_opts.zo_raidz; spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER); @@ -3182,7 +3181,7 @@ ztest_objset_destroy_cb(const char *name /* * Verify that the dataset contains a directory object. */ - VERIFY3U(0, ==, dmu_objset_hold(name, FTAG, &os)); + VERIFY0(dmu_objset_own(name, DMU_OST_OTHER, B_TRUE, FTAG, &os)); error = dmu_object_info(os, ZTEST_DIROBJ, &doi); if (error != ENOENT) { /* We could have crashed in the middle of destroying it */ @@ -3190,12 +3189,16 @@ ztest_objset_destroy_cb(const char *name ASSERT3U(doi.doi_type, ==, DMU_OT_ZAP_OTHER); ASSERT3S(doi.doi_physical_blocks_512, >=, 0); } - dmu_objset_rele(os, FTAG); + dmu_objset_disown(os, FTAG); /* * Destroy the dataset. */ - VERIFY3U(0, ==, dmu_objset_destroy(name, B_FALSE)); + if (strchr(name, '@') != NULL) { + VERIFY0(dsl_destroy_snapshot(name, B_FALSE)); + } else { + VERIFY0(dsl_destroy_head(name)); + } return (0); } @@ -3205,16 +3208,17 @@ ztest_snapshot_create(char *osname, uint char snapname[MAXNAMELEN]; int error; - (void) snprintf(snapname, MAXNAMELEN, "%s@%llu", osname, - (u_longlong_t)id); + (void) snprintf(snapname, sizeof (snapname), "%llu", (u_longlong_t)id); - error = dmu_objset_snapshot_one(osname, strchr(snapname, '@') + 1); + error = dmu_objset_snapshot_one(osname, snapname); if (error == ENOSPC) { ztest_record_enospc(FTAG); return (B_FALSE); } - if (error != 0 && error != EEXIST) - fatal(0, "ztest_snapshot_create(%s) = %d", snapname, error); + if (error != 0 && error != EEXIST) { + fatal(0, "ztest_snapshot_create(%s@%s) = %d", osname, + snapname, error); + } return (B_TRUE); } @@ -3227,7 +3231,7 @@ ztest_snapshot_destroy(char *osname, uin (void) snprintf(snapname, MAXNAMELEN, "%s@%llu", osname, (u_longlong_t)id); - error = dmu_objset_destroy(snapname, B_FALSE); + error = dsl_destroy_snapshot(snapname, B_FALSE); if (error != 0 && error != ENOENT) fatal(0, "ztest_snapshot_destroy(%s) = %d", snapname, error); return (B_TRUE); @@ -3273,7 +3277,8 @@ ztest_dmu_objset_create_destroy(ztest_ds /* * Verify that the destroyed dataset is no longer in the namespace. */ - VERIFY3U(ENOENT, ==, dmu_objset_hold(name, FTAG, &os)); + VERIFY3U(ENOENT, ==, dmu_objset_own(name, DMU_OST_OTHER, B_TRUE, + FTAG, &os)); /* * Verify that we can create a new dataset. @@ -3288,8 +3293,7 @@ ztest_dmu_objset_create_destroy(ztest_ds fatal(0, "dmu_objset_create(%s) = %d", name, error); } - VERIFY3U(0, ==, - dmu_objset_own(name, DMU_OST_OTHER, B_FALSE, FTAG, &os)); + VERIFY0(dmu_objset_own(name, DMU_OST_OTHER, B_FALSE, FTAG, &os)); ztest_zd_init(&zdtmp, NULL, os); @@ -3365,21 +3369,21 @@ ztest_dsl_dataset_cleanup(char *osname, (void) snprintf(clone2name, MAXNAMELEN, "%s/c2_%llu", osname, id); (void) snprintf(snap3name, MAXNAMELEN, "%s@s3_%llu", clone1name, id); - error = dmu_objset_destroy(clone2name, B_FALSE); + error = dsl_destroy_head(clone2name); if (error && error != ENOENT) - fatal(0, "dmu_objset_destroy(%s) = %d", clone2name, error); - error = dmu_objset_destroy(snap3name, B_FALSE); + fatal(0, "dsl_destroy_head(%s) = %d", clone2name, error); + error = dsl_destroy_snapshot(snap3name, B_FALSE); if (error && error != ENOENT) - fatal(0, "dmu_objset_destroy(%s) = %d", snap3name, error); - error = dmu_objset_destroy(snap2name, B_FALSE); + fatal(0, "dsl_destroy_snapshot(%s) = %d", snap3name, error); + error = dsl_destroy_snapshot(snap2name, B_FALSE); if (error && error != ENOENT) - fatal(0, "dmu_objset_destroy(%s) = %d", snap2name, error); - error = dmu_objset_destroy(clone1name, B_FALSE); + fatal(0, "dsl_destroy_snapshot(%s) = %d", snap2name, error); + error = dsl_destroy_head(clone1name); if (error && error != ENOENT) - fatal(0, "dmu_objset_destroy(%s) = %d", clone1name, error); - error = dmu_objset_destroy(snap1name, B_FALSE); + fatal(0, "dsl_destroy_head(%s) = %d", clone1name, error); + error = dsl_destroy_snapshot(snap1name, B_FALSE); if (error && error != ENOENT) - fatal(0, "dmu_objset_destroy(%s) = %d", snap1name, error); + fatal(0, "dsl_destroy_snapshot(%s) = %d", snap1name, error); } /* @@ -3388,8 +3392,7 @@ ztest_dsl_dataset_cleanup(char *osname, void ztest_dsl_dataset_promote_busy(ztest_ds_t *zd, uint64_t id) { - objset_t *clone; - dsl_dataset_t *ds; + objset_t *os; char snap1name[MAXNAMELEN]; char clone1name[MAXNAMELEN]; char snap2name[MAXNAMELEN]; @@ -3417,12 +3420,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_ fatal(0, "dmu_take_snapshot(%s) = %d", snap1name, error); } - error = dmu_objset_hold(snap1name, FTAG, &clone); - if (error) - fatal(0, "dmu_open_snapshot(%s) = %d", snap1name, error); - - error = dmu_objset_clone(clone1name, dmu_objset_ds(clone), 0); - dmu_objset_rele(clone, FTAG); + error = dmu_objset_clone(clone1name, snap1name); if (error) { if (error == ENOSPC) { ztest_record_enospc(FTAG); @@ -3449,12 +3447,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_ fatal(0, "dmu_open_snapshot(%s) = %d", snap3name, error); } - error = dmu_objset_hold(snap3name, FTAG, &clone); - if (error) - fatal(0, "dmu_open_snapshot(%s) = %d", snap3name, error); - - error = dmu_objset_clone(clone2name, dmu_objset_ds(clone), 0); - dmu_objset_rele(clone, FTAG); + error = dmu_objset_clone(clone2name, snap3name); if (error) { if (error == ENOSPC) { ztest_record_enospc(FTAG); @@ -3463,14 +3456,14 @@ ztest_dsl_dataset_promote_busy(ztest_ds_ fatal(0, "dmu_objset_create(%s) = %d", clone2name, error); } - error = dsl_dataset_own(snap2name, B_FALSE, FTAG, &ds); + error = dmu_objset_own(snap2name, DMU_OST_ANY, B_TRUE, FTAG, &os); if (error) - fatal(0, "dsl_dataset_own(%s) = %d", snap2name, error); + fatal(0, "dmu_objset_own(%s) = %d", snap2name, error); error = dsl_dataset_promote(clone2name, NULL); if (error != EBUSY) fatal(0, "dsl_dataset_promote(%s), %d, not EBUSY", clone2name, error); - dsl_dataset_disown(ds, FTAG); + dmu_objset_disown(os, FTAG); out: ztest_dsl_dataset_cleanup(osname, id); @@ -4282,7 +4275,7 @@ ztest_zap_parallel(ztest_ds_t *zd, uint6 } count = -1ULL; - VERIFY(zap_count(os, object, &count) == 0); + VERIFY0(zap_count(os, object, &count)); ASSERT(count != -1ULL); /* @@ -4593,6 +4586,22 @@ ztest_spa_prop_get_set(ztest_ds_t *zd, u (void) rw_unlock(&ztest_name_lock); } +static int +user_release_one(const char *snapname, const char *holdname) +{ + nvlist_t *snaps, *holds; + int error; + + snaps = fnvlist_alloc(); + holds = fnvlist_alloc(); + fnvlist_add_boolean(holds, holdname); + fnvlist_add_nvlist(snaps, snapname, holds); + fnvlist_free(holds); + error = dsl_dataset_user_release(snaps, NULL); + fnvlist_free(snaps); + return (error); +} + /* * Test snapshot hold/release and deferred destroy. */ @@ -4607,22 +4616,30 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, char clonename[100]; char tag[100]; char osname[MAXNAMELEN]; + nvlist_t *holds; (void) rw_rdlock(&ztest_name_lock); dmu_objset_name(os, osname); - (void) snprintf(snapname, 100, "sh1_%llu", id); - (void) snprintf(fullname, 100, "%s@%s", osname, snapname); - (void) snprintf(clonename, 100, "%s/ch1_%llu", osname, id); - (void) snprintf(tag, 100, "%tag_%llu", id); + (void) snprintf(snapname, sizeof (snapname), "sh1_%llu", id); + (void) snprintf(fullname, sizeof (fullname), "%s@%s", osname, snapname); + (void) snprintf(clonename, sizeof (clonename), + "%s/ch1_%llu", osname, id); + (void) snprintf(tag, sizeof (tag), "tag_%llu", id); /* * Clean up from any previous run. */ - (void) dmu_objset_destroy(clonename, B_FALSE); - (void) dsl_dataset_user_release(osname, snapname, tag, B_FALSE); - (void) dmu_objset_destroy(fullname, B_FALSE); + error = dsl_destroy_head(clonename); + if (error != ENOENT) + ASSERT0(error); + error = user_release_one(fullname, tag); + if (error != ESRCH && error != ENOENT) + ASSERT0(error); + error = dsl_destroy_snapshot(fullname, B_FALSE); + if (error != ENOENT) + ASSERT0(error); /* * Create snapshot, clone it, mark snap for deferred destroy, @@ -4637,12 +4654,7 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, fatal(0, "dmu_objset_snapshot(%s) = %d", fullname, error); } - error = dmu_objset_hold(fullname, FTAG, &origin); - if (error) - fatal(0, "dmu_objset_hold(%s) = %d", fullname, error); - - error = dmu_objset_clone(clonename, dmu_objset_ds(origin), 0); - dmu_objset_rele(origin, FTAG); + error = dmu_objset_clone(clonename, fullname); if (error) { if (error == ENOSPC) { ztest_record_enospc("dmu_objset_clone"); @@ -4651,15 +4663,15 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, fatal(0, "dmu_objset_clone(%s) = %d", clonename, error); } - error = dmu_objset_destroy(fullname, B_TRUE); + error = dsl_destroy_snapshot(fullname, B_TRUE); if (error) { - fatal(0, "dmu_objset_destroy(%s, B_TRUE) = %d", + fatal(0, "dsl_destroy_snapshot(%s, B_TRUE) = %d", fullname, error); } - error = dmu_objset_destroy(clonename, B_FALSE); + error = dsl_destroy_head(clonename); if (error) - fatal(0, "dmu_objset_destroy(%s) = %d", clonename, error); + fatal(0, "dsl_destroy_head(%s) = %d", clonename, error); error = dmu_objset_hold(fullname, FTAG, &origin); if (error != ENOENT) @@ -4679,28 +4691,31 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, fatal(0, "dmu_objset_snapshot(%s) = %d", fullname, error); } - error = dsl_dataset_user_hold(osname, snapname, tag, B_FALSE, - B_TRUE, -1); + holds = fnvlist_alloc(); + fnvlist_add_string(holds, fullname, tag); + error = dsl_dataset_user_hold(holds, 0, NULL); + fnvlist_free(holds); + if (error) fatal(0, "dsl_dataset_user_hold(%s)", fullname, tag); - error = dmu_objset_destroy(fullname, B_FALSE); + error = dsl_destroy_snapshot(fullname, B_FALSE); if (error != EBUSY) { - fatal(0, "dmu_objset_destroy(%s, B_FALSE) = %d", + fatal(0, "dsl_destroy_snapshot(%s, B_FALSE) = %d", fullname, error); } - error = dmu_objset_destroy(fullname, B_TRUE); + error = dsl_destroy_snapshot(fullname, B_TRUE); if (error) { - fatal(0, "dmu_objset_destroy(%s, B_TRUE) = %d", + fatal(0, "dsl_destroy_snapshot(%s, B_TRUE) = %d", fullname, error); } - error = dsl_dataset_user_release(osname, snapname, tag, B_FALSE); + error = user_release_one(fullname, tag); if (error) - fatal(0, "dsl_dataset_user_release(%s)", fullname, tag); + fatal(0, "user_release_one(%s)", fullname, tag); - VERIFY(dmu_objset_hold(fullname, FTAG, &origin) == ENOENT); + VERIFY3U(dmu_objset_hold(fullname, FTAG, &origin), ==, ENOENT); out: (void) rw_unlock(&ztest_name_lock); @@ -4954,8 +4969,12 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_ */ for (int i = 0; i < copies; i++) { uint64_t offset = i * blocksize; - VERIFY0(dmu_buf_hold(os, object, offset, FTAG, &db, - DMU_READ_NO_PREFETCH)); + int error = dmu_buf_hold(os, object, offset, FTAG, &db, + DMU_READ_NO_PREFETCH); + if (error != 0) { + fatal(B_FALSE, "dmu_buf_hold(%p, %llu, %llu) = %u", + os, (long long)object, (long long) offset, error); + } ASSERT(db->db_offset == offset); ASSERT(db->db_size == blocksize); ASSERT(ztest_pattern_match(db->db_data, db->db_size, pattern) || @@ -5166,6 +5185,7 @@ ztest_spa_import_export(char *oldname, c nvlist_t *config, *newconfig; uint64_t pool_guid; spa_t *spa; + int error; if (ztest_opts.zo_verbose >= 4) { (void) printf("import/export: old = %s, new = %s\n", @@ -5210,7 +5230,12 @@ ztest_spa_import_export(char *oldname, c /* * Import it under the new name. */ - VERIFY3U(0, ==, spa_import(newname, config, NULL, 0)); + error = spa_import(newname, config, NULL, 0); + if (error != 0) { + dump_nvlist(config, 0); + fatal(B_FALSE, "couldn't import pool %s as %s: error %u", + oldname, newname, error); + } ztest_walk_pool_directory("pools after import"); @@ -5417,7 +5442,7 @@ ztest_dataset_open(int d) } ASSERT(error == 0 || error == EEXIST); - VERIFY0(dmu_objset_hold(name, zd, &os)); + VERIFY0(dmu_objset_own(name, DMU_OST_OTHER, B_FALSE, zd, &os)); (void) rw_unlock(&ztest_name_lock); ztest_zd_init(zd, ZTEST_GET_SHARED_DS(d), os); @@ -5458,7 +5483,7 @@ ztest_dataset_close(int d) ztest_ds_t *zd = &ztest_ds[d]; zil_close(zd->zd_zilog); - dmu_objset_rele(zd->zd_os, zd); + dmu_objset_disown(zd->zd_os, zd); ztest_zd_fini(zd); } @@ -5502,13 +5527,14 @@ ztest_run(ztest_shared_t *zs) * Open our pool. */ kernel_init(FREAD | FWRITE); - VERIFY(spa_open(ztest_opts.zo_pool, &spa, FTAG) == 0); + VERIFY0(spa_open(ztest_opts.zo_pool, &spa, FTAG)); spa->spa_debug = B_TRUE; ztest_spa = spa; - VERIFY3U(0, ==, dmu_objset_hold(ztest_opts.zo_pool, FTAG, &os)); + VERIFY0(dmu_objset_own(ztest_opts.zo_pool, + DMU_OST_ANY, B_TRUE, FTAG, &os)); zs->zs_guid = dmu_objset_fsid_guid(os); - dmu_objset_rele(os, FTAG); + dmu_objset_disown(os, FTAG); spa->spa_dedup_ditto = 2 * ZIO_DEDUPDITTO_MIN; Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Tue Mar 19 12:42:14 2013 (r248497) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Tue Mar 19 12:51:18 2013 (r248498) @@ -554,7 +554,7 @@ extern int zfs_create(libzfs_handle_t *, extern int zfs_create_ancestors(libzfs_handle_t *, const char *); extern int zfs_destroy(zfs_handle_t *, boolean_t); extern int zfs_destroy_snaps(zfs_handle_t *, char *, boolean_t); -extern int zfs_destroy_snaps_nvl(zfs_handle_t *, nvlist_t *, boolean_t); +extern int zfs_destroy_snaps_nvl(libzfs_handle_t *, nvlist_t *, boolean_t); extern int zfs_clone(zfs_handle_t *, const char *, nvlist_t *); extern int zfs_snapshot(libzfs_handle_t *, const char *, boolean_t, nvlist_t *); extern int zfs_snapshot_nvl(libzfs_handle_t *hdl, nvlist_t *snaps, @@ -610,8 +610,8 @@ extern int zfs_send(zfs_handle_t *, cons sendflags_t *, int, snapfilter_cb_t, void *, nvlist_t **); extern int zfs_promote(zfs_handle_t *); -extern int zfs_hold(zfs_handle_t *, const char *, const char *, boolean_t, - boolean_t, boolean_t, int, uint64_t, uint64_t); +extern int zfs_hold(zfs_handle_t *, const char *, const char *, + boolean_t, boolean_t, int); extern int zfs_release(zfs_handle_t *, const char *, const char *, boolean_t); extern int zfs_get_holds(zfs_handle_t *, nvlist_t **); extern uint64_t zvol_volsize_to_reservation(uint64_t, nvlist_t *); Modified: projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c ============================================================================== --- projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Tue Mar 19 12:42:14 2013 (r248497) +++ projects/libzfs_core/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Tue Mar 19 12:51:18 2013 (r248498) @@ -2016,10 +2016,7 @@ get_clones_cb(zfs_handle_t *zhp, void *a NULL, NULL, 0, B_TRUE) != 0) goto out; if (strcmp(gca->buf, gca->origin) == 0) { - if (nvlist_add_boolean(gca->value, zfs_get_name(zhp)) != 0) { - zfs_close(zhp); - return (no_memory(zhp->zfs_hdl)); - } + fnvlist_add_boolean(gca->value, zfs_get_name(zhp)); gca->numclones--; } @@ -3197,45 +3194,49 @@ zfs_destroy_snaps(zfs_handle_t *zhp, cha dgettext(TEXT_DOMAIN, "cannot destroy '%s@%s'"), zhp->zfs_name, snapname); } else { - ret = zfs_destroy_snaps_nvl(zhp, dd.nvl, defer); + ret = zfs_destroy_snaps_nvl(zhp->zfs_hdl, dd.nvl, defer); } nvlist_free(dd.nvl); return (ret); } /* - * Destroys all the snapshots named in the nvlist. They must be underneath - * the zhp (either snapshots of it, or snapshots of its descendants). + * Destroys all the snapshots named in the nvlist. */ int -zfs_destroy_snaps_nvl(zfs_handle_t *zhp, nvlist_t *snaps, boolean_t defer) +zfs_destroy_snaps_nvl(libzfs_handle_t *hdl, nvlist_t *snaps, boolean_t defer) { int ret; nvlist_t *errlist; ret = lzc_destroy_snaps(snaps, defer, &errlist); - if (ret != 0) { - for (nvpair_t *pair = nvlist_next_nvpair(errlist, NULL); - pair != NULL; pair = nvlist_next_nvpair(errlist, pair)) { - char errbuf[1024]; - (void) snprintf(errbuf, sizeof (errbuf), - dgettext(TEXT_DOMAIN, "cannot destroy snapshot %s"), - nvpair_name(pair)); + if (ret == 0) + return (0); - switch (fnvpair_value_int32(pair)) { - case EEXIST: - zfs_error_aux(zhp->zfs_hdl, - dgettext(TEXT_DOMAIN, - "snapshot is cloned")); - ret = zfs_error(zhp->zfs_hdl, EZFS_EXISTS, - errbuf); - break; - default: - ret = zfs_standard_error(zhp->zfs_hdl, errno, - errbuf); - break; - } + if (nvlist_next_nvpair(errlist, NULL) == NULL) { + char errbuf[1024]; + (void) snprintf(errbuf, sizeof (errbuf), + dgettext(TEXT_DOMAIN, "cannot destroy snapshots")); + + ret = zfs_standard_error(hdl, ret, errbuf); + } + for (nvpair_t *pair = nvlist_next_nvpair(errlist, NULL); + pair != NULL; pair = nvlist_next_nvpair(errlist, pair)) { + char errbuf[1024]; + (void) snprintf(errbuf, sizeof (errbuf), + dgettext(TEXT_DOMAIN, "cannot destroy snapshot %s"), + nvpair_name(pair)); + + switch (fnvpair_value_int32(pair)) { + case EEXIST: + zfs_error_aux(hdl, + dgettext(TEXT_DOMAIN, "snapshot is cloned")); + ret = zfs_error(hdl, EZFS_EXISTS, errbuf); + break; + default: + ret = zfs_standard_error(hdl, errno, errbuf); + break; } } @@ -4134,7 +4135,7 @@ zfs_userspace(zfs_handle_t *zhp, zfs_use zc.zc_nvlist_dst_size = sizeof (buf); if (zfs_ioctl(hdl, ZFS_IOC_USERSPACE_MANY, &zc) != 0) { - char errbuf[ZFS_MAXNAMELEN + 32]; + char errbuf[1024]; (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, @@ -4156,37 +4157,83 @@ zfs_userspace(zfs_handle_t *zhp, zfs_use return (0); } +struct holdarg { + nvlist_t *nvl; + const char *snapname; + const char *tag; + boolean_t recursive; +}; + +static int +zfs_hold_one(zfs_handle_t *zhp, void *arg) +{ + struct holdarg *ha = arg; + zfs_handle_t *szhp; + char name[ZFS_MAXNAMELEN]; + int rv = 0; + + (void) snprintf(name, sizeof (name), + "%s@%s", zhp->zfs_name, ha->snapname); + + szhp = make_dataset_handle(zhp->zfs_hdl, name); + if (szhp) { + fnvlist_add_string(ha->nvl, name, ha->tag); + zfs_close(szhp); + } + + if (ha->recursive) + rv = zfs_iter_filesystems(zhp, zfs_hold_one, ha); + zfs_close(zhp); + return (rv); +} + int zfs_hold(zfs_handle_t *zhp, const char *snapname, const char *tag, - boolean_t recursive, boolean_t temphold, boolean_t enoent_ok, - int cleanup_fd, uint64_t dsobj, uint64_t createtxg) + boolean_t recursive, boolean_t enoent_ok, int cleanup_fd) { - zfs_cmd_t zc = { 0 }; + int ret; + struct holdarg ha; + nvlist_t *errors; libzfs_handle_t *hdl = zhp->zfs_hdl; + char errbuf[1024]; + nvpair_t *elem; - ASSERT(!recursive || dsobj == 0); + ha.nvl = fnvlist_alloc(); + ha.snapname = snapname; + ha.tag = tag; + ha.recursive = recursive; + (void) zfs_hold_one(zfs_handle_dup(zhp), &ha); + ret = lzc_hold(ha.nvl, cleanup_fd, &errors); + fnvlist_free(ha.nvl); - (void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name)); - (void) strlcpy(zc.zc_value, snapname, sizeof (zc.zc_value)); - if (strlcpy(zc.zc_string, tag, sizeof (zc.zc_string)) - >= sizeof (zc.zc_string)) - return (zfs_error(hdl, EZFS_TAGTOOLONG, tag)); - zc.zc_cookie = recursive; - zc.zc_temphold = temphold; - zc.zc_cleanup_fd = cleanup_fd; - zc.zc_sendobj = dsobj; - zc.zc_createtxg = createtxg; + if (ret == 0) + return (0); - if (zfs_ioctl(hdl, ZFS_IOC_HOLD, &zc) != 0) { - char errbuf[ZFS_MAXNAMELEN+32]; + if (nvlist_next_nvpair(errors, NULL) == NULL) { + /* no hold-specific errors */ + (void) snprintf(errbuf, sizeof (errbuf), + dgettext(TEXT_DOMAIN, "cannot hold")); + switch (ret) { + case ENOTSUP: + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "pool must be upgraded")); + (void) zfs_error(hdl, EZFS_BADVERSION, errbuf); + break; + case EINVAL: + (void) zfs_error(hdl, EZFS_BADTYPE, errbuf); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Tue Mar 19 14:39:24 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id D111F1BF; Tue, 19 Mar 2013 14:39:24 +0000 (UTC) (envelope-from ray@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id C0845AF0; Tue, 19 Mar 2013 14:39:24 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2JEdOdg020328; Tue, 19 Mar 2013 14:39:24 GMT (envelope-from ray@svn.freebsd.org) Received: (from ray@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2JEdJxD020291; Tue, 19 Mar 2013 14:39:19 GMT (envelope-from ray@svn.freebsd.org) Message-Id: <201303191439.r2JEdJxD020291@svn.freebsd.org> From: Aleksandr Rybalko Date: Tue, 19 Mar 2013 14:39:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248513 - in projects/efika_mx: etc/mtree etc/rc.d lib/libc/sys lib/libvmmapi sbin/geom/class/eli sbin/ldconfig share/examples share/examples/bhyve share/man/man4 sys/amd64/amd64 sys/ar... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Mar 2013 14:39:24 -0000 Author: ray Date: Tue Mar 19 14:39:19 2013 New Revision: 248513 URL: http://svnweb.freebsd.org/changeset/base/248513 Log: MFC @r248511. Added: projects/efika_mx/share/examples/bhyve/ - copied from r248511, head/share/examples/bhyve/ Modified: projects/efika_mx/etc/mtree/BSD.usr.dist projects/efika_mx/etc/rc.d/savecore projects/efika_mx/lib/libc/sys/mlock.2 projects/efika_mx/lib/libvmmapi/vmmapi.c projects/efika_mx/lib/libvmmapi/vmmapi.h projects/efika_mx/sbin/geom/class/eli/geom_eli.c projects/efika_mx/sbin/ldconfig/ldconfig.8 projects/efika_mx/share/examples/Makefile projects/efika_mx/share/man/man4/iwn.4 projects/efika_mx/share/man/man4/psm.4 projects/efika_mx/sys/amd64/amd64/pmap.c projects/efika_mx/sys/arm/arm/pmap-v6.c projects/efika_mx/sys/arm/arm/pmap.c projects/efika_mx/sys/cam/cam_periph.c projects/efika_mx/sys/cddl/compat/opensolaris/sys/sig.h projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c projects/efika_mx/sys/dev/atkbdc/psm.c projects/efika_mx/sys/dev/fdt/fdt_common.c projects/efika_mx/sys/dev/fdt/simplebus.c projects/efika_mx/sys/dev/puc/pucdata.c projects/efika_mx/sys/dev/usb/serial/u3g.c projects/efika_mx/sys/dev/usb/usbdevs projects/efika_mx/sys/fs/nfsclient/nfs_clbio.c projects/efika_mx/sys/geom/geom.h projects/efika_mx/sys/geom/geom_io.c projects/efika_mx/sys/geom/geom_vfs.c projects/efika_mx/sys/i386/i386/pmap.c projects/efika_mx/sys/i386/xen/pmap.c projects/efika_mx/sys/ia64/ia64/pmap.c projects/efika_mx/sys/kern/kern_sig.c projects/efika_mx/sys/kern/kern_synch.c projects/efika_mx/sys/kern/subr_bus_dma.c projects/efika_mx/sys/kern/subr_param.c projects/efika_mx/sys/kern/subr_sleepqueue.c projects/efika_mx/sys/kern/subr_trap.c projects/efika_mx/sys/kern/vfs_bio.c projects/efika_mx/sys/kern/vfs_cluster.c projects/efika_mx/sys/mips/mips/pmap.c projects/efika_mx/sys/modules/dtrace/fbt/Makefile projects/efika_mx/sys/net/pfil.c projects/efika_mx/sys/net/pfil.h projects/efika_mx/sys/netpfil/ipfw/ip_fw2.c projects/efika_mx/sys/netpfil/ipfw/ip_fw_private.h projects/efika_mx/sys/nfsclient/nfs_bio.c projects/efika_mx/sys/powerpc/aim/mmu_oea64.c projects/efika_mx/sys/powerpc/powerpc/pmap_dispatch.c projects/efika_mx/sys/sparc64/sparc64/pmap.c projects/efika_mx/sys/sys/bio.h projects/efika_mx/sys/sys/buf.h projects/efika_mx/sys/sys/mount.h projects/efika_mx/sys/sys/mouse.h projects/efika_mx/sys/sys/param.h projects/efika_mx/sys/sys/signalvar.h projects/efika_mx/sys/sys/sleepqueue.h projects/efika_mx/sys/sys/systm.h projects/efika_mx/sys/vm/vm.h projects/efika_mx/sys/vm/vm_init.c projects/efika_mx/sys/vm/vm_kern.c projects/efika_mx/usr.sbin/bhyve/acpi.c projects/efika_mx/usr.sbin/bhyve/bhyverun.c projects/efika_mx/usr.sbin/bhyve/bhyverun.h projects/efika_mx/usr.sbin/bhyve/mptbl.c projects/efika_mx/usr.sbin/bhyve/pci_emul.c projects/efika_mx/usr.sbin/bhyve/pci_virtio_block.c projects/efika_mx/usr.sbin/bhyve/pci_virtio_net.c projects/efika_mx/usr.sbin/bhyvectl/bhyvectl.c projects/efika_mx/usr.sbin/bhyveload/bhyveload.8 projects/efika_mx/usr.sbin/bhyveload/bhyveload.c projects/efika_mx/usr.sbin/moused/moused.c Directory Properties: projects/efika_mx/ (props changed) projects/efika_mx/lib/libc/ (props changed) projects/efika_mx/lib/libvmmapi/ (props changed) projects/efika_mx/sbin/ (props changed) projects/efika_mx/share/man/man4/ (props changed) projects/efika_mx/sys/ (props changed) projects/efika_mx/sys/cddl/contrib/opensolaris/ (props changed) projects/efika_mx/usr.sbin/bhyve/ (props changed) projects/efika_mx/usr.sbin/bhyvectl/ (props changed) projects/efika_mx/usr.sbin/bhyveload/ (props changed) Modified: projects/efika_mx/etc/mtree/BSD.usr.dist ============================================================================== --- projects/efika_mx/etc/mtree/BSD.usr.dist Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/etc/mtree/BSD.usr.dist Tue Mar 19 14:39:19 2013 (r248513) @@ -217,6 +217,8 @@ .. atf .. + bhyve + .. bootforth .. csh Modified: projects/efika_mx/etc/rc.d/savecore ============================================================================== --- projects/efika_mx/etc/rc.d/savecore Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/etc/rc.d/savecore Tue Mar 19 14:39:19 2013 (r248513) @@ -23,6 +23,9 @@ savecore_prestart() return 1 ;; [Aa][Uu][Tt][Oo]) + if [ ! -L /dev/dumpdev ]; then + return 1 + fi dumpdev=`/bin/realpath /dev/dumpdev` ;; esac Modified: projects/efika_mx/lib/libc/sys/mlock.2 ============================================================================== --- projects/efika_mx/lib/libc/sys/mlock.2 Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/lib/libc/sys/mlock.2 Tue Mar 19 14:39:19 2013 (r248513) @@ -28,7 +28,7 @@ .\" @(#)mlock.2 8.2 (Berkeley) 12/11/93 .\" $FreeBSD$ .\" -.Dd December 25, 2012 +.Dd March 18, 2013 .Dt MLOCK 2 .Os .Sh NAME @@ -138,7 +138,12 @@ is set to 0 and the caller is not the su .It Bq Er EINVAL The address given is not page aligned or the length is negative. .It Bq Er ENOMEM -Some portion of the indicated address range is not allocated. +Some or all of the address range specified by the addr and len +arguments does not correspond to valid mapped pages in the address space +of the process. +.It Bq Er ENOMEM +Locking the pages mapped by the specified range would exceed a limit on +the amount of memory that the process may lock. .El .Sh "SEE ALSO" .Xr fork 2 , Modified: projects/efika_mx/lib/libvmmapi/vmmapi.c ============================================================================== --- projects/efika_mx/lib/libvmmapi/vmmapi.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/lib/libvmmapi/vmmapi.c Tue Mar 19 14:39:19 2013 (r248513) @@ -48,8 +48,16 @@ __FBSDID("$FreeBSD$"); #include "vmmapi.h" +#define GB (1024 * 1024 * 1024UL) + struct vmctx { int fd; + uint32_t lowmem_limit; + enum vm_mmap_style vms; + size_t lowmem; + char *lowmem_addr; + size_t highmem; + char *highmem_addr; char *name; }; @@ -90,6 +98,7 @@ vm_open(const char *name) assert(vm != NULL); vm->fd = -1; + vm->lowmem_limit = 3 * GB; vm->name = (char *)(vm + 1); strcpy(vm->name, name); @@ -151,8 +160,22 @@ vm_get_memory_seg(struct vmctx *ctx, vm_ return (error); } -int -vm_setup_memory(struct vmctx *ctx, vm_paddr_t gpa, size_t len, char **mapaddr) +uint32_t +vm_get_lowmem_limit(struct vmctx *ctx) +{ + + return (ctx->lowmem_limit); +} + +void +vm_set_lowmem_limit(struct vmctx *ctx, uint32_t limit) +{ + + ctx->lowmem_limit = limit; +} + +static int +setup_memory_segment(struct vmctx *ctx, vm_paddr_t gpa, size_t len, char **addr) { int error; struct vm_memory_segment seg; @@ -165,20 +188,69 @@ vm_setup_memory(struct vmctx *ctx, vm_pa seg.gpa = gpa; seg.len = len; error = ioctl(ctx->fd, VM_MAP_MEMORY, &seg); - if (error == 0 && mapaddr != NULL) { - *mapaddr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, + if (error == 0 && addr != NULL) { + *addr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, ctx->fd, gpa); } return (error); } -char * -vm_map_memory(struct vmctx *ctx, vm_paddr_t gpa, size_t len) +int +vm_setup_memory(struct vmctx *ctx, size_t memsize, enum vm_mmap_style vms) +{ + char **addr; + int error; + + /* XXX VM_MMAP_SPARSE not implemented yet */ + assert(vms == VM_MMAP_NONE || vms == VM_MMAP_ALL); + ctx->vms = vms; + + /* + * If 'memsize' cannot fit entirely in the 'lowmem' segment then + * create another 'highmem' segment above 4GB for the remainder. + */ + if (memsize > ctx->lowmem_limit) { + ctx->lowmem = ctx->lowmem_limit; + ctx->highmem = memsize - ctx->lowmem; + } else { + ctx->lowmem = memsize; + ctx->highmem = 0; + } + + if (ctx->lowmem > 0) { + addr = (vms == VM_MMAP_ALL) ? &ctx->lowmem_addr : NULL; + error = setup_memory_segment(ctx, 0, ctx->lowmem, addr); + if (error) + return (error); + } + + if (ctx->highmem > 0) { + addr = (vms == VM_MMAP_ALL) ? &ctx->highmem_addr : NULL; + error = setup_memory_segment(ctx, 4*GB, ctx->highmem, addr); + if (error) + return (error); + } + + return (0); +} + +void * +vm_map_gpa(struct vmctx *ctx, vm_paddr_t gaddr, size_t len) { - /* Map 'len' bytes of memory at guest physical address 'gpa' */ - return ((char *)mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, - ctx->fd, gpa)); + /* XXX VM_MMAP_SPARSE not implemented yet */ + assert(ctx->vms == VM_MMAP_ALL); + + if (gaddr < ctx->lowmem && gaddr + len <= ctx->lowmem) + return ((void *)(ctx->lowmem_addr + gaddr)); + + if (gaddr >= 4*GB) { + gaddr -= 4*GB; + if (gaddr < ctx->highmem && gaddr + len <= ctx->highmem) + return ((void *)(ctx->highmem_addr + gaddr)); + } + + return (NULL); } int Modified: projects/efika_mx/lib/libvmmapi/vmmapi.h ============================================================================== --- projects/efika_mx/lib/libvmmapi/vmmapi.h Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/lib/libvmmapi/vmmapi.h Tue Mar 19 14:39:19 2013 (r248513) @@ -32,24 +32,26 @@ struct vmctx; enum x2apic_state; +/* + * Different styles of mapping the memory assigned to a VM into the address + * space of the controlling process. + */ +enum vm_mmap_style { + VM_MMAP_NONE, /* no mapping */ + VM_MMAP_ALL, /* fully and statically mapped */ + VM_MMAP_SPARSE, /* mappings created on-demand */ +}; + int vm_create(const char *name); struct vmctx *vm_open(const char *name); void vm_destroy(struct vmctx *ctx); size_t vmm_get_mem_total(void); size_t vmm_get_mem_free(void); int vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len); -/* - * Create a memory segment of 'len' bytes in the guest physical address space - * at offset 'gpa'. - * - * If 'mapaddr' is not NULL then this region is mmap'ed into the address - * space of the calling process. If there is an mmap error then *mapaddr - * will be set to MAP_FAILED. - */ - -int vm_setup_memory(struct vmctx *ctx, vm_paddr_t gpa, size_t len, - char **mapaddr); -char * vm_map_memory(struct vmctx *ctx, vm_paddr_t gpa, size_t len); +int vm_setup_memory(struct vmctx *ctx, size_t len, enum vm_mmap_style s); +void *vm_map_gpa(struct vmctx *ctx, vm_paddr_t gaddr, size_t len); +uint32_t vm_get_lowmem_limit(struct vmctx *ctx); +void vm_set_lowmem_limit(struct vmctx *ctx, uint32_t limit); int vm_set_desc(struct vmctx *ctx, int vcpu, int reg, uint64_t base, uint32_t limit, uint32_t access); int vm_get_desc(struct vmctx *ctx, int vcpu, int reg, Modified: projects/efika_mx/sbin/geom/class/eli/geom_eli.c ============================================================================== --- projects/efika_mx/sbin/geom/class/eli/geom_eli.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sbin/geom/class/eli/geom_eli.c Tue Mar 19 14:39:19 2013 (r248513) @@ -259,6 +259,8 @@ struct g_command class_commands[] = { static int verbose = 0; +#define BUFSIZE 1024 + static int eli_protect(struct gctl_req *req) { @@ -344,7 +346,7 @@ static int eli_genkey_files(struct gctl_req *req, bool new, const char *type, struct hmac_ctx *ctxp, char *passbuf, size_t passbufsize) { - char *p, buf[MAXPHYS], argname[16]; + char *p, buf[BUFSIZE], argname[16]; const char *file; int error, fd, i; ssize_t done; @@ -431,7 +433,7 @@ eli_genkey_passphrase_prompt(struct gctl } if (new) { - char tmpbuf[BUFSIZ]; + char tmpbuf[BUFSIZE]; p = readpassphrase("Reenter new passphrase: ", tmpbuf, sizeof(tmpbuf), @@ -460,7 +462,7 @@ static int eli_genkey_passphrase(struct gctl_req *req, struct g_eli_metadata *md, bool new, struct hmac_ctx *ctxp) { - char passbuf[MAXPHYS]; + char passbuf[BUFSIZE]; bool nopassphrase; int nfiles; Modified: projects/efika_mx/sbin/ldconfig/ldconfig.8 ============================================================================== --- projects/efika_mx/sbin/ldconfig/ldconfig.8 Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sbin/ldconfig/ldconfig.8 Tue Mar 19 14:39:19 2013 (r248513) @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 11, 2005 +.Dd March 19, 2013 .Dt LDCONFIG 8 .Os .Sh NAME @@ -162,21 +162,6 @@ In addition to building a set of hints for quick lookup, it also serves to specify the trusted collection of directories from which shared objects can be safely loaded. -.Sh ENVIRONMENT -.Bl -tag -width OBJFORMATxxx -compact -.It Ev OBJFORMAT -Overrides -.Pa /etc/objformat -(see below) to determine whether -.Fl aout -or -.Fl elf -is the default. -If set, its value should be either -.Ql aout -or -.Ql elf . -.El .Sh FILES .Bl -tag -width /var/run/ld-elf.so.hintsxxx -compact .It Pa /var/run/ld.so.hints @@ -196,17 +181,6 @@ invocations with Conventional configuration files containing directory names for invocations with .Fl 32 . -.It Pa /etc/objformat -Determines whether -.Fl aout -or -.Fl elf -is the default. -If present, it must consist of a single line -containing either -.Ql OBJFORMAT=aout -or -.Ql OBJFORMAT=elf . .El .Sh SEE ALSO .Xr ld 1 , Modified: projects/efika_mx/share/examples/Makefile ============================================================================== --- projects/efika_mx/share/examples/Makefile Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/share/examples/Makefile Tue Mar 19 14:39:19 2013 (r248513) @@ -7,6 +7,7 @@ LDIRS= BSD_daemon \ FreeBSD_version \ IPv6 \ + bhyve \ bootforth \ csh \ cvsup \ @@ -42,6 +43,7 @@ XFILES= BSD_daemon/FreeBSD.pfa \ FreeBSD_version/Makefile \ FreeBSD_version/README \ IPv6/USAGE \ + bhyve/vmrun.sh \ bootforth/README \ bootforth/boot.4th \ bootforth/frames.4th \ Modified: projects/efika_mx/share/man/man4/iwn.4 ============================================================================== --- projects/efika_mx/share/man/man4/iwn.4 Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/share/man/man4/iwn.4 Tue Mar 19 14:39:19 2013 (r248513) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 27, 2012 +.Dd March 19, 2013 .Dt IWN 4 .Os .Sh NAME @@ -100,8 +100,7 @@ driver provides support for: .Pp .Nm supports -.Cm station , -.Cm adhoc , +.Cm station and .Cm monitor mode operation. Modified: projects/efika_mx/share/man/man4/psm.4 ============================================================================== --- projects/efika_mx/share/man/man4/psm.4 Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/share/man/man4/psm.4 Tue Mar 19 14:39:19 2013 (r248513) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 27, 2012 +.Dd March 18, 2013 .Dt PSM 4 .Os .Sh NAME @@ -339,6 +339,12 @@ at boot-time. This will enable .Nm to handle packets from guest devices (sticks) and extra buttons. +Similarly, extended support for IBM/Lenovo TrackPoint can be enabled +by setting +.Va hw.psm.trackpoint_support +to +.Em 1 +at boot-time. .Pp Tap and drag gestures can be disabled by setting .Va hw.psm.tap_enabled @@ -832,8 +838,8 @@ In contrast, some pad products, e.g.\& s and Interlink VersaPad, treat the tapping action as fourth button events. .Pp -It is reported that ALPS GlidePoint, Synaptics Touchpad, and -Interlink VersaPad require +It is reported that ALPS GlidePoint, Synaptics Touchpad, IBM/Lenovo +TrackPoint, and Interlink VersaPad require .Em INITAFTERSUSPEND flag in order to recover from suspended state. This flag is automatically set when one of these devices is detected by the Modified: projects/efika_mx/sys/amd64/amd64/pmap.c ============================================================================== --- projects/efika_mx/sys/amd64/amd64/pmap.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/amd64/amd64/pmap.c Tue Mar 19 14:39:19 2013 (r248513) @@ -4235,6 +4235,8 @@ pmap_copy_page(vm_page_t msrc, vm_page_t pagecopy((void *)src, (void *)dst); } +int unmapped_buf_allowed = 1; + void pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[], vm_offset_t b_offset, int xfersize) Modified: projects/efika_mx/sys/arm/arm/pmap-v6.c ============================================================================== --- projects/efika_mx/sys/arm/arm/pmap-v6.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/arm/arm/pmap-v6.c Tue Mar 19 14:39:19 2013 (r248513) @@ -3312,6 +3312,8 @@ pmap_copy_page_generic(vm_paddr_t src, v mtx_unlock(&cmtx); } +int unmapped_buf_allowed = 1; + void pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[], vm_offset_t b_offset, int xfersize) Modified: projects/efika_mx/sys/arm/arm/pmap.c ============================================================================== --- projects/efika_mx/sys/arm/arm/pmap.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/arm/arm/pmap.c Tue Mar 19 14:39:19 2013 (r248513) @@ -4428,6 +4428,8 @@ pmap_copy_page(vm_page_t src, vm_page_t #endif } +int unmapped_buf_allowed = 1; + void pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[], vm_offset_t b_offset, int xfersize) Modified: projects/efika_mx/sys/cam/cam_periph.c ============================================================================== --- projects/efika_mx/sys/cam/cam_periph.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/cam/cam_periph.c Tue Mar 19 14:39:19 2013 (r248513) @@ -734,6 +734,8 @@ cam_periph_mapmem(union ccb *ccb, struct case XPT_CONT_TARGET_IO: if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_NONE) return(0); + KASSERT((ccb->ccb_h.flags & CAM_DATA_MASK) == CAM_DATA_VADDR, + ("not VADDR for SCSI_IO %p %x\n", ccb, ccb->ccb_h.flags)); data_ptrs[0] = &ccb->csio.data_ptr; lengths[0] = ccb->csio.dxfer_len; @@ -743,6 +745,8 @@ cam_periph_mapmem(union ccb *ccb, struct case XPT_ATA_IO: if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_NONE) return(0); + KASSERT((ccb->ccb_h.flags & CAM_DATA_MASK) == CAM_DATA_VADDR, + ("not VADDR for ATA_IO %p %x\n", ccb, ccb->ccb_h.flags)); data_ptrs[0] = &ccb->ataio.data_ptr; lengths[0] = ccb->ataio.dxfer_len; Modified: projects/efika_mx/sys/cddl/compat/opensolaris/sys/sig.h ============================================================================== --- projects/efika_mx/sys/cddl/compat/opensolaris/sys/sig.h Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/cddl/compat/opensolaris/sys/sig.h Tue Mar 19 14:39:19 2013 (r248513) @@ -55,7 +55,7 @@ issig(int why) p = td->td_proc; PROC_LOCK(p); mtx_lock(&p->p_sigacts->ps_mtx); - sig = cursig(td, SIG_STOP_ALLOWED); + sig = cursig(td); mtx_unlock(&p->p_sigacts->ps_mtx); PROC_UNLOCK(p); if (sig != 0) Modified: projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Mar 19 14:39:19 2013 (r248513) @@ -919,7 +919,8 @@ dsl_check_snap_cb(const char *name, void char *dsname; dsname = kmem_asprintf("%s@%s", name, da->snapname); - VERIFY(nvlist_add_boolean(da->nvl, dsname) == 0); + fnvlist_add_boolean(da->nvl, dsname); + kmem_free(dsname, strlen(dsname) + 1); return (0); } Modified: projects/efika_mx/sys/dev/atkbdc/psm.c ============================================================================== --- projects/efika_mx/sys/dev/atkbdc/psm.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/dev/atkbdc/psm.c Tue Mar 19 14:39:19 2013 (r248513) @@ -260,6 +260,38 @@ typedef struct synapticsaction { int in_vscroll; } synapticsaction_t; +enum { + TRACKPOINT_SYSCTL_SENSITIVITY, + TRACKPOINT_SYSCTL_NEGATIVE_INERTIA, + TRACKPOINT_SYSCTL_UPPER_PLATEAU, + TRACKPOINT_SYSCTL_BACKUP_RANGE, + TRACKPOINT_SYSCTL_DRAG_HYSTERESIS, + TRACKPOINT_SYSCTL_MINIMUM_DRAG, + TRACKPOINT_SYSCTL_UP_THRESHOLD, + TRACKPOINT_SYSCTL_THRESHOLD, + TRACKPOINT_SYSCTL_JENKS_CURVATURE, + TRACKPOINT_SYSCTL_Z_TIME, + TRACKPOINT_SYSCTL_PRESS_TO_SELECT, + TRACKPOINT_SYSCTL_SKIP_BACKUPS +}; + +typedef struct trackpointinfo { + struct sysctl_ctx_list sysctl_ctx; + struct sysctl_oid *sysctl_tree; + int sensitivity; + int inertia; + int uplateau; + int reach; + int draghys; + int mindrag; + int upthresh; + int threshold; + int jenks; + int ztime; + int pts; + int skipback; +} trackpointinfo_t; + /* driver control block */ struct psm_softc { /* Driver status information */ int unit; @@ -274,6 +306,8 @@ struct psm_softc { /* Driver status inf synapticshw_t synhw; /* Synaptics hardware information */ synapticsinfo_t syninfo; /* Synaptics configuration */ synapticsaction_t synaction; /* Synaptics action context */ + int tphw; /* TrackPoint hardware information */ + trackpointinfo_t tpinfo; /* TrackPoint configuration */ mousemode_t mode; /* operation mode */ mousemode_t dflt_mode; /* default operation mode */ mousestatus_t status; /* accumulated mouse movement */ @@ -344,6 +378,9 @@ TUNABLE_INT("hw.psm.tap_enabled", &tap_e static int synaptics_support = 0; TUNABLE_INT("hw.psm.synaptics_support", &synaptics_support); +static int trackpoint_support = 0; +TUNABLE_INT("hw.psm.trackpoint_support", &trackpoint_support); + static int verbose = PSM_DEBUG; TUNABLE_INT("debug.psm.loglevel", &verbose); @@ -432,6 +469,7 @@ static probefunc_t enable_4dmouse; static probefunc_t enable_4dplus; static probefunc_t enable_mmanplus; static probefunc_t enable_synaptics; +static probefunc_t enable_trackpoint; static probefunc_t enable_versapad; static struct { @@ -466,6 +504,8 @@ static struct { 0x80, MOUSE_PS2_PACKETSIZE, enable_kmouse }, { MOUSE_MODEL_VERSAPAD, /* Interlink electronics VersaPad */ 0xe8, MOUSE_PS2VERSA_PACKETSIZE, enable_versapad }, + { MOUSE_MODEL_TRACKPOINT, /* IBM/Lenovo TrackPoint */ + 0xc0, MOUSE_PS2_PACKETSIZE, enable_trackpoint }, { MOUSE_MODEL_GENERIC, 0xc0, MOUSE_PS2_PACKETSIZE, NULL }, }; @@ -707,6 +747,7 @@ model_name(int model) { MOUSE_MODEL_4D, "4D Mouse" }, { MOUSE_MODEL_4DPLUS, "4D+ Mouse" }, { MOUSE_MODEL_SYNAPTICS, "Synaptics Touchpad" }, + { MOUSE_MODEL_TRACKPOINT, "IBM/Lenovo TrackPoint" }, { MOUSE_MODEL_GENERIC, "Generic PS/2 mouse" }, { MOUSE_MODEL_UNKNOWN, "Unknown" }, }; @@ -1452,7 +1493,7 @@ psmattach(device_t dev) sc->config |= PSM_CONFIG_INITAFTERSUSPEND; break; default: - if (sc->synhw.infoMajor >= 4) + if (sc->synhw.infoMajor >= 4 || sc->tphw > 0) sc->config |= PSM_CONFIG_INITAFTERSUSPEND; break; } @@ -3442,6 +3483,7 @@ psmsoftintr(void *arg) goto next; break; + case MOUSE_MODEL_TRACKPOINT: case MOUSE_MODEL_GENERIC: default: break; @@ -4474,6 +4516,233 @@ enable_synaptics(KBDC kbdc, struct psm_s return (TRUE); } +/* IBM/Lenovo TrackPoint */ +static int +trackpoint_command(KBDC kbdc, int cmd, int loc, int val) +{ + const int seq[] = { 0xe2, cmd, loc, val }; + int i; + + for (i = 0; i < nitems(seq); i++) + if (send_aux_command(kbdc, seq[i]) != PSM_ACK) + return (EIO); + return (0); +} + +#define PSM_TPINFO(x) offsetof(struct psm_softc, tpinfo.x) +#define TPMASK 0 +#define TPLOC 1 +#define TPINFO 2 + +static int +trackpoint_sysctl(SYSCTL_HANDLER_ARGS) +{ + static const int data[][3] = { + { 0x00, 0x4a, PSM_TPINFO(sensitivity) }, + { 0x00, 0x4d, PSM_TPINFO(inertia) }, + { 0x00, 0x60, PSM_TPINFO(uplateau) }, + { 0x00, 0x57, PSM_TPINFO(reach) }, + { 0x00, 0x58, PSM_TPINFO(draghys) }, + { 0x00, 0x59, PSM_TPINFO(mindrag) }, + { 0x00, 0x5a, PSM_TPINFO(upthresh) }, + { 0x00, 0x5c, PSM_TPINFO(threshold) }, + { 0x00, 0x5d, PSM_TPINFO(jenks) }, + { 0x00, 0x5e, PSM_TPINFO(ztime) }, + { 0x01, 0x2c, PSM_TPINFO(pts) }, + { 0x08, 0x2d, PSM_TPINFO(skipback) } + }; + struct psm_softc *sc; + int error, newval, *oldvalp; + const int *tp; + + if (arg1 == NULL || arg2 < 0 || arg2 >= nitems(data)) + return (EINVAL); + sc = arg1; + tp = data[arg2]; + oldvalp = (int *)((intptr_t)sc + tp[TPINFO]); + newval = *oldvalp; + error = sysctl_handle_int(oidp, &newval, 0, req); + if (error != 0) + return (error); + if (newval == *oldvalp) + return (0); + if (newval < 0 || newval > (tp[TPMASK] == 0 ? 255 : 1)) + return (EINVAL); + error = trackpoint_command(sc->kbdc, tp[TPMASK] == 0 ? 0x81 : 0x47, + tp[TPLOC], tp[TPMASK] == 0 ? newval : tp[TPMASK]); + if (error != 0) + return (error); + *oldvalp = newval; + + return (0); +} + +static void +trackpoint_sysctl_create_tree(struct psm_softc *sc) +{ + + if (sc->tpinfo.sysctl_tree != NULL) + return; + + /* Attach extra trackpoint sysctl nodes under hw.psm.trackpoint */ + sysctl_ctx_init(&sc->tpinfo.sysctl_ctx); + sc->tpinfo.sysctl_tree = SYSCTL_ADD_NODE(&sc->tpinfo.sysctl_ctx, + SYSCTL_STATIC_CHILDREN(_hw_psm), OID_AUTO, "trackpoint", CTLFLAG_RD, + 0, "IBM/Lenovo TrackPoint"); + + /* hw.psm.trackpoint.sensitivity */ + sc->tpinfo.sensitivity = 0x64; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "sensitivity", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_SENSITIVITY, + trackpoint_sysctl, "I", + "Sensitivity"); + + /* hw.psm.trackpoint.negative_inertia */ + sc->tpinfo.inertia = 0x06; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "negative_inertia", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_NEGATIVE_INERTIA, + trackpoint_sysctl, "I", + "Negative inertia factor"); + + /* hw.psm.trackpoint.upper_plateau */ + sc->tpinfo.uplateau = 0x61; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "upper_plateau", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_UPPER_PLATEAU, + trackpoint_sysctl, "I", + "Transfer function upper plateau speed"); + + /* hw.psm.trackpoint.backup_range */ + sc->tpinfo.reach = 0x0a; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "backup_range", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_BACKUP_RANGE, + trackpoint_sysctl, "I", + "Backup range"); + + /* hw.psm.trackpoint.drag_hysteresis */ + sc->tpinfo.draghys = 0xff; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "drag_hysteresis", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_DRAG_HYSTERESIS, + trackpoint_sysctl, "I", + "Drag hysteresis"); + + /* hw.psm.trackpoint.minimum_drag */ + sc->tpinfo.mindrag = 0x14; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "minimum_drag", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_MINIMUM_DRAG, + trackpoint_sysctl, "I", + "Minimum drag"); + + /* hw.psm.trackpoint.up_threshold */ + sc->tpinfo.upthresh = 0xff; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "up_threshold", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_UP_THRESHOLD, + trackpoint_sysctl, "I", + "Up threshold for release"); + + /* hw.psm.trackpoint.threshold */ + sc->tpinfo.threshold = 0x08; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "threshold", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_THRESHOLD, + trackpoint_sysctl, "I", + "Threshold"); + + /* hw.psm.trackpoint.jenks_curvature */ + sc->tpinfo.jenks = 0x87; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "jenks_curvature", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_JENKS_CURVATURE, + trackpoint_sysctl, "I", + "Jenks curvature"); + + /* hw.psm.trackpoint.z_time */ + sc->tpinfo.ztime = 0x26; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "z_time", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_Z_TIME, + trackpoint_sysctl, "I", + "Z time constant"); + + /* hw.psm.trackpoint.press_to_select */ + sc->tpinfo.pts = 0x00; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "press_to_select", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_PRESS_TO_SELECT, + trackpoint_sysctl, "I", + "Press to Select"); + + /* hw.psm.trackpoint.skip_backups */ + sc->tpinfo.skipback = 0x00; + SYSCTL_ADD_PROC(&sc->tpinfo.sysctl_ctx, + SYSCTL_CHILDREN(sc->tpinfo.sysctl_tree), OID_AUTO, + "skip_backups", CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY, + sc, TRACKPOINT_SYSCTL_SKIP_BACKUPS, + trackpoint_sysctl, "I", + "Skip backups from drags"); +} + +static int +enable_trackpoint(KBDC kbdc, struct psm_softc *sc) +{ + int id; + + kbdc = sc->kbdc; + + if (send_aux_command(kbdc, 0xe1) != PSM_ACK || + read_aux_data(kbdc) != 0x01) + return (FALSE); + id = read_aux_data(kbdc); + if (id < 0x01) + return (FALSE); + if (sc != NULL) + sc->tphw = id; + if (!trackpoint_support) + return (FALSE); + + if (sc != NULL) { + /* Create sysctl tree. */ + trackpoint_sysctl_create_tree(sc); + + trackpoint_command(kbdc, 0x81, 0x4a, sc->tpinfo.sensitivity); + trackpoint_command(kbdc, 0x81, 0x4d, sc->tpinfo.inertia); + trackpoint_command(kbdc, 0x81, 0x60, sc->tpinfo.uplateau); + trackpoint_command(kbdc, 0x81, 0x57, sc->tpinfo.reach); + trackpoint_command(kbdc, 0x81, 0x58, sc->tpinfo.draghys); + trackpoint_command(kbdc, 0x81, 0x59, sc->tpinfo.mindrag); + trackpoint_command(kbdc, 0x81, 0x5a, sc->tpinfo.upthresh); + trackpoint_command(kbdc, 0x81, 0x5c, sc->tpinfo.threshold); + trackpoint_command(kbdc, 0x81, 0x5d, sc->tpinfo.jenks); + trackpoint_command(kbdc, 0x81, 0x5e, sc->tpinfo.ztime); + if (sc->tpinfo.pts == 0x01) + trackpoint_command(kbdc, 0x47, 0x2c, 0x01); + if (sc->tpinfo.skipback == 0x01) + trackpoint_command(kbdc, 0x47, 0x2d, 0x08); + + sc->hw.hwid = id; + sc->hw.buttons = 3; + } + + return (TRUE); +} + /* Interlink electronics VersaPad */ static int enable_versapad(KBDC kbdc, struct psm_softc *sc) Modified: projects/efika_mx/sys/dev/fdt/fdt_common.c ============================================================================== --- projects/efika_mx/sys/dev/fdt/fdt_common.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/dev/fdt/fdt_common.c Tue Mar 19 14:39:19 2013 (r248513) @@ -421,12 +421,11 @@ fdt_regsize(phandle_t node, u_long *base int fdt_reg_to_rl(phandle_t node, struct resource_list *rl) { - u_long count; + u_long end, count, start; pcell_t *reg, *regptr; pcell_t addr_cells, size_cells; int tuple_size, tuples; int i, rv; - bus_space_handle_t start, end; long busaddr, bussize; if (fdt_addrsize_cells(OF_parent(node), &addr_cells, &size_cells) != 0) Modified: projects/efika_mx/sys/dev/fdt/simplebus.c ============================================================================== --- projects/efika_mx/sys/dev/fdt/simplebus.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/dev/fdt/simplebus.c Tue Mar 19 14:39:19 2013 (r248513) @@ -135,6 +135,8 @@ EARLY_DRIVER_MODULE(simplebus, fdtbus, s 0, 0, BUS_PASS_BUS); EARLY_DRIVER_MODULE(simplebus, simplebus, simplebus_driver, simplebus_devclass, 0, 0, BUS_PASS_BUS); +DRIVER_MODULE(simplebus, simplebus, simplebus_driver, simplebus_devclass, 0, + 0); static int simplebus_probe(device_t dev) @@ -145,7 +147,7 @@ simplebus_probe(device_t dev) device_set_desc(dev, "Flattened device tree simple bus"); - return (BUS_PROBE_DEFAULT); + return (BUS_PROBE_GENERIC); } static int Modified: projects/efika_mx/sys/dev/puc/pucdata.c ============================================================================== --- projects/efika_mx/sys/dev/puc/pucdata.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/dev/puc/pucdata.c Tue Mar 19 14:39:19 2013 (r248513) @@ -629,6 +629,7 @@ const struct puc_cfg puc_pci_devices[] = "Exar XR17V258IV", DEFAULT_RCLK * 8, PUC_PORT_8S, 0x10, 0, -1, + .config_function = puc_config_exar }, /* The XR17V358 uses the 125MHz PCIe clock as its reference clock. */ Modified: projects/efika_mx/sys/dev/usb/serial/u3g.c ============================================================================== --- projects/efika_mx/sys/dev/usb/serial/u3g.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/dev/usb/serial/u3g.c Tue Mar 19 14:39:19 2013 (r248513) @@ -242,6 +242,8 @@ static const STRUCT_USB_HOST_ID u3g_devs U3G_DEV(DELL, U5730_2, 0), U3G_DEV(DELL, U5730_3, 0), U3G_DEV(DELL, U740, 0), + U3G_DEV(DLINK, DWR510_CD, U3GINIT_SCSIEJECT), + U3G_DEV(DLINK, DWR510, 0), U3G_DEV(DLINK3, DWM652, 0), U3G_DEV(HP, EV2200, 0), U3G_DEV(HP, HS2300, 0), Modified: projects/efika_mx/sys/dev/usb/usbdevs ============================================================================== --- projects/efika_mx/sys/dev/usb/usbdevs Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/dev/usb/usbdevs Tue Mar 19 14:39:19 2013 (r248513) @@ -1516,6 +1516,8 @@ product DLINK DSB650TX3 0x400b 10/100 E product DLINK DSB650TX2 0x4102 10/100 Ethernet product DLINK DSB650 0xabc1 10/100 Ethernet product DLINK DUBH7 0xf103 DUB-H7 USB 2.0 7-Port Hub +product DLINK DWR510_CD 0xa805 DWR-510 CD-ROM Mode +product DLINK DWR510 0x7e12 DWR-510 product DLINK2 DWA120 0x3a0c DWA-120 product DLINK2 DWA120_NF 0x3a0d DWA-120 (no firmware) product DLINK2 DWLG122C1 0x3c03 DWL-G122 c1 Modified: projects/efika_mx/sys/fs/nfsclient/nfs_clbio.c ============================================================================== --- projects/efika_mx/sys/fs/nfsclient/nfs_clbio.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/fs/nfsclient/nfs_clbio.c Tue Mar 19 14:39:19 2013 (r248513) @@ -484,7 +484,7 @@ ncl_bioread(struct vnode *vp, struct uio case VREG: NFSINCRGLOBAL(newnfsstats.biocache_reads); lbn = uio->uio_offset / biosize; - on = uio->uio_offset & (biosize - 1); + on = uio->uio_offset - (lbn * biosize); /* * Start the read ahead(s), as required. @@ -1029,7 +1029,7 @@ flush_and_restart: do { NFSINCRGLOBAL(newnfsstats.biocache_writes); lbn = uio->uio_offset / biosize; - on = uio->uio_offset & (biosize-1); + on = uio->uio_offset - (lbn * biosize); n = MIN((unsigned)(biosize - on), uio->uio_resid); again: /* @@ -1847,7 +1847,7 @@ ncl_meta_setsize(struct vnode *vp, struc */ error = vtruncbuf(vp, cred, nsize, biosize); lbn = nsize / biosize; - bufsize = nsize & (biosize - 1); + bufsize = nsize - (lbn * biosize); bp = nfs_getcacheblk(vp, lbn, bufsize, td); if (!bp) return EINTR; Modified: projects/efika_mx/sys/geom/geom.h ============================================================================== --- projects/efika_mx/sys/geom/geom.h Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/geom/geom.h Tue Mar 19 14:39:19 2013 (r248513) @@ -205,6 +205,7 @@ struct g_provider { u_int flags; #define G_PF_WITHER 0x2 #define G_PF_ORPHAN 0x4 +#define G_PF_ACCEPT_UNMAPPED 0x8 /* Two fields for the implementing class to use */ void *private; Modified: projects/efika_mx/sys/geom/geom_io.c ============================================================================== --- projects/efika_mx/sys/geom/geom_io.c Tue Mar 19 14:36:28 2013 (r248512) +++ projects/efika_mx/sys/geom/geom_io.c Tue Mar 19 14:39:19 2013 (r248513) @@ -1,6 +1,7 @@ /*- * Copyright (c) 2002 Poul-Henning Kamp * Copyright (c) 2002 Networks Associates Technology, Inc. + * Copyright (c) 2013 The FreeBSD Foundation * All rights reserved. * * This software was developed for the FreeBSD Project by Poul-Henning Kamp @@ -8,6 +9,9 @@ * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the * DARPA CHATS research program. * + * Portions of this software were developed by Konstantin Belousov + * under sponsorship from the FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -44,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -51,6 +56,13 @@ __FBSDID("$FreeBSD$"); #include #include +#include +#include +#include +#include +#include +#include +#include static struct g_bioq g_bio_run_down; static struct g_bioq g_bio_run_up; @@ -180,12 +192,17 @@ g_clone_bio(struct bio *bp) /* * BIO_ORDERED flag may be used by disk drivers to enforce * ordering restrictions, so this flag needs to be cloned. + * BIO_UNMAPPED should be inherited, to properly indicate + * which way the buffer is passed. * Other bio flags are not suitable for cloning. */ - bp2->bio_flags = bp->bio_flags & BIO_ORDERED; + bp2->bio_flags = bp->bio_flags & (BIO_ORDERED | BIO_UNMAPPED); bp2->bio_length = bp->bio_length; bp2->bio_offset = bp->bio_offset; bp2->bio_data = bp->bio_data; + bp2->bio_ma = bp->bio_ma; + bp2->bio_ma_n = bp->bio_ma_n; + bp2->bio_ma_offset = bp->bio_ma_offset; bp2->bio_attribute = bp->bio_attribute; /* Inherit classification info from the parent */ bp2->bio_classifier1 = bp->bio_classifier1; @@ -210,11 +227,15 @@ g_duplicate_bio(struct bio *bp) struct bio *bp2; bp2 = uma_zalloc(biozone, M_WAITOK | M_ZERO); + bp2->bio_flags = bp->bio_flags & BIO_UNMAPPED; bp2->bio_parent = bp; bp2->bio_cmd = bp->bio_cmd; bp2->bio_length = bp->bio_length; bp2->bio_offset = bp->bio_offset; bp2->bio_data = bp->bio_data; + bp2->bio_ma = bp->bio_ma; + bp2->bio_ma_n = bp->bio_ma_n; + bp2->bio_ma_offset = bp->bio_ma_offset; bp2->bio_attribute = bp->bio_attribute; bp->bio_children++; #ifdef KTR @@ -575,6 +596,83 @@ g_io_deliver(struct bio *bp, int error) return; } +SYSCTL_DECL(_kern_geom); + +static long transient_maps; +SYSCTL_LONG(_kern_geom, OID_AUTO, transient_maps, CTLFLAG_RD, + &transient_maps, 0, + "Total count of the transient mapping requests"); +u_int transient_map_retries = 10; +SYSCTL_UINT(_kern_geom, OID_AUTO, transient_map_retries, CTLFLAG_RW, + &transient_map_retries, 0, + "Max count of retries used before giving up on creating transient map"); +int transient_map_hard_failures; +SYSCTL_INT(_kern_geom, OID_AUTO, transient_map_hard_failures, CTLFLAG_RD, + &transient_map_hard_failures, 0, + "Failures to establish the transient mapping due to retry attempts " + "exhausted"); +int transient_map_soft_failures; +SYSCTL_INT(_kern_geom, OID_AUTO, transient_map_soft_failures, CTLFLAG_RD, + &transient_map_soft_failures, 0, + "Count of retried failures to establish the transient mapping"); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Tue Mar 19 21:45:30 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id D63D0D86; Tue, 19 Mar 2013 21:45:30 +0000 (UTC) (envelope-from ray@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id C8DFA8EB; Tue, 19 Mar 2013 21:45:30 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2JLjUvS054954; Tue, 19 Mar 2013 21:45:30 GMT (envelope-from ray@svn.freebsd.org) Received: (from ray@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2JLjU0t054953; Tue, 19 Mar 2013 21:45:30 GMT (envelope-from ray@svn.freebsd.org) Message-Id: <201303192145.r2JLjU0t054953@svn.freebsd.org> From: Aleksandr Rybalko Date: Tue, 19 Mar 2013 21:45:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248536 - projects/efika_mx/sys/powerpc/mpc85xx X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Mar 2013 21:45:30 -0000 Author: ray Date: Tue Mar 19 21:45:30 2013 New Revision: 248536 URL: http://svnweb.freebsd.org/changeset/base/248536 Log: Revert r243507. Freescale i.MX515 I2C controller have different problems. Modified: projects/efika_mx/sys/powerpc/mpc85xx/i2c.c Modified: projects/efika_mx/sys/powerpc/mpc85xx/i2c.c ============================================================================== --- projects/efika_mx/sys/powerpc/mpc85xx/i2c.c Tue Mar 19 21:40:14 2013 (r248535) +++ projects/efika_mx/sys/powerpc/mpc85xx/i2c.c Tue Mar 19 21:45:30 2013 (r248536) @@ -83,8 +83,6 @@ struct i2c_softc { device_t iicbus; struct resource *res; struct mtx mutex; - int flags; -#define FSL_IMX_I2C (1 << 0) /* To distinguish MPC and i.MX SoCs */ int rid; bus_space_handle_t bsh; bus_space_tag_t bst; @@ -189,16 +187,10 @@ i2c_probe(device_t dev) { struct i2c_softc *sc; - sc = device_get_softc(dev); - - if (ofw_bus_is_compatible(dev, "fsl-i2c")) - /* compatible */; - else if (ofw_bus_is_compatible(dev, "fsl,imx-i2c")) - /* compatible, i.MX SoC */ - sc->flags |= FSL_IMX_I2C; - else + if (!ofw_bus_is_compatible(dev, "fsl-i2c")) return (ENXIO); + sc = device_get_softc(dev); sc->rid = 0; sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->rid, @@ -349,8 +341,7 @@ i2c_reset(device_t dev, u_char speed, u_ i2c_write_reg(sc, I2C_STATUS_REG, 0x0); DELAY(1000); i2c_write_reg(sc, I2C_FDR_REG, baud_rate); - if (!(sc->flags & FSL_IMX_I2C)) - i2c_write_reg(sc, I2C_DFSRR_REG, I2C_DFSSR_DIV); + i2c_write_reg(sc, I2C_DFSRR_REG, I2C_DFSSR_DIV); i2c_write_reg(sc, I2C_CONTROL_REG, I2C_ENABLE); DELAY(1000); mtx_unlock(&sc->mutex); From owner-svn-src-projects@FreeBSD.ORG Tue Mar 19 22:14:51 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 688A646D; Tue, 19 Mar 2013 22:14:51 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 432829F9; Tue, 19 Mar 2013 22:14:51 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2JMEpjM064290; Tue, 19 Mar 2013 22:14:51 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2JMEp3E064289; Tue, 19 Mar 2013 22:14:51 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303192214.r2JMEp3E064289@svn.freebsd.org> From: Martin Matuska Date: Tue, 19 Mar 2013 22:14:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248537 - projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Mar 2013 22:14:51 -0000 Author: mm Date: Tue Mar 19 22:14:50 2013 New Revision: 248537 URL: http://svnweb.freebsd.org/changeset/base/248537 Log: Run zvol_create_minors() on snapshot creation Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Mar 19 21:45:30 2013 (r248536) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Mar 19 22:14:50 2013 (r248537) @@ -1287,6 +1287,15 @@ dsl_dataset_snapshot(nvlist_t *snaps, nv fnvlist_free(suspended); } +#ifdef __FreeBSD__ +#ifdef _KERNEL + for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; + pair = nvlist_next_nvpair(snaps, pair)) { + char *snapname = nvpair_name(pair); + zvol_create_minors(snapname); + } +#endif +#endif return (error); } From owner-svn-src-projects@FreeBSD.ORG Tue Mar 19 22:27:17 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 68D679C5; Tue, 19 Mar 2013 22:27:17 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 5A776A81; Tue, 19 Mar 2013 22:27:16 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2JMRGgL067703; Tue, 19 Mar 2013 22:27:16 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2JMRGr0067702; Tue, 19 Mar 2013 22:27:16 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303192227.r2JMRGr0067702@svn.freebsd.org> From: Martin Matuska Date: Tue, 19 Mar 2013 22:27:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248538 - projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Mar 2013 22:27:17 -0000 Author: mm Date: Tue Mar 19 22:27:15 2013 New Revision: 248538 URL: http://svnweb.freebsd.org/changeset/base/248538 Log: Run zvol_create_minors() only if in non-error case Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Mar 19 22:14:50 2013 (r248537) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Tue Mar 19 22:27:15 2013 (r248538) @@ -1289,10 +1289,12 @@ dsl_dataset_snapshot(nvlist_t *snaps, nv #ifdef __FreeBSD__ #ifdef _KERNEL - for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; - pair = nvlist_next_nvpair(snaps, pair)) { - char *snapname = nvpair_name(pair); - zvol_create_minors(snapname); + if (error == 0) { + for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; + pair = nvlist_next_nvpair(snaps, pair)) { + char *snapname = nvpair_name(pair); + zvol_create_minors(snapname); + } } #endif #endif From owner-svn-src-projects@FreeBSD.ORG Wed Mar 20 03:34:25 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 1BB05E10; Wed, 20 Mar 2013 03:34:25 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 0EEC8968; Wed, 20 Mar 2013 03:34:25 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2K3YOwC062485; Wed, 20 Mar 2013 03:34:24 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2K3YOGd062484; Wed, 20 Mar 2013 03:34:24 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303200334.r2K3YOGd062484@svn.freebsd.org> From: "Simon J. Gerraty" Date: Wed, 20 Mar 2013 03:34:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248540 - projects/bmake/pkgs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Mar 2013 03:34:25 -0000 Author: sjg Date: Wed Mar 20 03:34:24 2013 New Revision: 248540 URL: http://svnweb.freebsd.org/changeset/base/248540 Log: Add newline before for better formatting Modified: projects/bmake/pkgs/Makefile Modified: projects/bmake/pkgs/Makefile ============================================================================== --- projects/bmake/pkgs/Makefile Wed Mar 20 02:42:52 2013 (r248539) +++ projects/bmake/pkgs/Makefile Wed Mar 20 03:34:24 2013 (r248540) @@ -102,7 +102,7 @@ $v = yes # This allows us to work out how long reading # Makefile.depend* takes. .if ${.MAKEFLAGS:M-V} == "" -.info ${TIME_STAMP} Start ${.TARGETS} +.info ${.newline}${TIME_STAMP} Start ${.TARGETS} now_utc = ${%s:L:gmtime} start_utc := ${now_utc} .endif From owner-svn-src-projects@FreeBSD.ORG Wed Mar 20 09:56:21 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 1F715BEE; Wed, 20 Mar 2013 09:56:21 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id EF0B1B05; Wed, 20 Mar 2013 09:56:20 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2K9uKfF077944; Wed, 20 Mar 2013 09:56:20 GMT (envelope-from mm@svn.freebsd.org) Received: (from mm@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2K9uKoN077943; Wed, 20 Mar 2013 09:56:20 GMT (envelope-from mm@svn.freebsd.org) Message-Id: <201303200956.r2K9uKoN077943@svn.freebsd.org> From: Martin Matuska Date: Wed, 20 Mar 2013 09:56:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248551 - projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Mar 2013 09:56:21 -0000 Author: mm Date: Wed Mar 20 09:56:20 2013 New Revision: 248551 URL: http://svnweb.freebsd.org/changeset/base/248551 Log: Release hold on pool before calling zvol_create_minor() Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c Modified: projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c ============================================================================== --- projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c Wed Mar 20 09:44:23 2013 (r248550) +++ projects/libzfs_core/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c Wed Mar 20 09:56:20 2013 (r248551) @@ -2233,13 +2233,16 @@ zvol_create_minors(const char *name) return (error); } if (dmu_objset_type(os) == DMU_OST_ZVOL) { + dsl_dataset_long_hold(os->os_dsl_dataset, FTAG); + dsl_pool_rele(dmu_objset_pool(os), FTAG); if ((error = zvol_create_minor(name)) == 0) error = zvol_create_snapshots(os, name); else { printf("ZFS WARNING: Unable to create ZVOL %s (error=%d).\n", name, error); } - dmu_objset_rele(os, FTAG); + dsl_dataset_long_rele(os->os_dsl_dataset, FTAG); + dsl_dataset_rele(os->os_dsl_dataset, FTAG); return (error); } if (dmu_objset_type(os) != DMU_OST_ZFS) { From owner-svn-src-projects@FreeBSD.ORG Wed Mar 20 14:17:01 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id B5174EDA; Wed, 20 Mar 2013 14:17:01 +0000 (UTC) (envelope-from ray@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id A431BAC2; Wed, 20 Mar 2013 14:17:01 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2KEH1Jf057484; Wed, 20 Mar 2013 14:17:01 GMT (envelope-from ray@svn.freebsd.org) Received: (from ray@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2KEGuA6057442; Wed, 20 Mar 2013 14:16:56 GMT (envelope-from ray@svn.freebsd.org) Message-Id: <201303201416.r2KEGuA6057442@svn.freebsd.org> From: Aleksandr Rybalko Date: Wed, 20 Mar 2013 14:16:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248556 - in projects/efika_mx: contrib/llvm/tools/clang/lib/Driver lib/libc/sys sbin/ipfw sbin/ldconfig sbin/shutdown share/man/man4 sys/cam sys/cam/ata sys/cam/scsi sys/dev/ahci sys/d... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Mar 2013 14:17:01 -0000 Author: ray Date: Wed Mar 20 14:16:56 2013 New Revision: 248556 URL: http://svnweb.freebsd.org/changeset/base/248556 Log: MFC @r248554. Modified: projects/efika_mx/contrib/llvm/tools/clang/lib/Driver/Tools.cpp projects/efika_mx/lib/libc/sys/recv.2 projects/efika_mx/lib/libc/sys/socket.2 projects/efika_mx/lib/libc/sys/socketpair.2 projects/efika_mx/sbin/ipfw/ipfw.8 projects/efika_mx/sbin/ipfw/ipfw2.c projects/efika_mx/sbin/ipfw/ipfw2.h projects/efika_mx/sbin/ldconfig/ldconfig.c projects/efika_mx/sbin/shutdown/shutdown.8 projects/efika_mx/share/man/man4/unix.4 projects/efika_mx/sys/cam/ata/ata_da.c projects/efika_mx/sys/cam/cam_ccb.h projects/efika_mx/sys/cam/cam_periph.c projects/efika_mx/sys/cam/scsi/scsi_all.c projects/efika_mx/sys/cam/scsi/scsi_all.h projects/efika_mx/sys/cam/scsi/scsi_cd.c projects/efika_mx/sys/cam/scsi/scsi_da.c projects/efika_mx/sys/dev/ahci/ahci.c projects/efika_mx/sys/dev/ath/if_ath.c projects/efika_mx/sys/dev/ath/if_ath_beacon.c projects/efika_mx/sys/dev/ath/if_ath_rx.c projects/efika_mx/sys/dev/ath/if_ath_rx_edma.c projects/efika_mx/sys/dev/ath/if_ath_tx.c projects/efika_mx/sys/dev/ath/if_ath_tx_edma.c projects/efika_mx/sys/dev/ath/if_athvar.h projects/efika_mx/sys/dev/md/md.c projects/efika_mx/sys/dev/mii/rgephy.c projects/efika_mx/sys/dev/mii/rgephyreg.h projects/efika_mx/sys/dev/siis/siis.c projects/efika_mx/sys/dev/usb/controller/xhci.c projects/efika_mx/sys/geom/geom_disk.c projects/efika_mx/sys/geom/geom_disk.h projects/efika_mx/sys/geom/part/g_part.c projects/efika_mx/sys/kern/kern_physio.c projects/efika_mx/sys/kern/uipc_socket.c projects/efika_mx/sys/kern/uipc_syscalls.c projects/efika_mx/sys/kern/uipc_usrreq.c projects/efika_mx/sys/kern/vfs_aio.c projects/efika_mx/sys/kern/vfs_bio.c projects/efika_mx/sys/net80211/ieee80211_freebsd.c projects/efika_mx/sys/netinet/ip_fw.h projects/efika_mx/sys/netpfil/ipfw/ip_fw2.c projects/efika_mx/sys/netpfil/ipfw/ip_fw_log.c projects/efika_mx/sys/netpfil/ipfw/ip_fw_sockopt.c projects/efika_mx/sys/sys/buf.h projects/efika_mx/sys/sys/domain.h projects/efika_mx/sys/sys/socket.h projects/efika_mx/sys/ufs/ffs/ffs_alloc.c projects/efika_mx/sys/ufs/ffs/ffs_balloc.c projects/efika_mx/sys/ufs/ffs/ffs_rawread.c projects/efika_mx/sys/ufs/ffs/ffs_vfsops.c projects/efika_mx/sys/ufs/ffs/ffs_vnops.c projects/efika_mx/sys/ufs/ufs/ufs_extern.h projects/efika_mx/sys/vm/swap_pager.c projects/efika_mx/sys/vm/swap_pager.h projects/efika_mx/sys/vm/vnode_pager.c Directory Properties: projects/efika_mx/ (props changed) projects/efika_mx/contrib/llvm/ (props changed) projects/efika_mx/contrib/llvm/tools/clang/ (props changed) projects/efika_mx/lib/libc/ (props changed) projects/efika_mx/sbin/ (props changed) projects/efika_mx/sbin/ipfw/ (props changed) projects/efika_mx/share/man/man4/ (props changed) projects/efika_mx/sys/ (props changed) Modified: projects/efika_mx/contrib/llvm/tools/clang/lib/Driver/Tools.cpp ============================================================================== --- projects/efika_mx/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Wed Mar 20 14:16:56 2013 (r248556) @@ -5438,6 +5438,7 @@ void freebsd::Assemble::ConstructJob(Com switch(getToolChain().getTriple().getEnvironment()) { case llvm::Triple::GNUEABI: case llvm::Triple::EABI: + CmdArgs.push_back("-meabi=5"); break; default: Modified: projects/efika_mx/lib/libc/sys/recv.2 ============================================================================== --- projects/efika_mx/lib/libc/sys/recv.2 Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/lib/libc/sys/recv.2 Wed Mar 20 14:16:56 2013 (r248556) @@ -28,7 +28,7 @@ .\" @(#)recv.2 8.3 (Berkeley) 2/21/94 .\" $FreeBSD$ .\" -.Dd September 12, 2012 +.Dd March 19, 2013 .Dt RECV 2 .Os .Sh NAME @@ -121,11 +121,12 @@ argument to a function is formed by .Em or Ap ing one or more of the values: -.Bl -column ".Dv MSG_DONTWAIT" -offset indent +.Bl -column ".Dv MSG_CMSG_CLOEXEC" -offset indent .It Dv MSG_OOB Ta process out-of-band data .It Dv MSG_PEEK Ta peek at incoming message .It Dv MSG_WAITALL Ta wait for full request or error .It Dv MSG_DONTWAIT Ta do not block +.It Dv MSG_CMSG_CLOEXEC Ta set received fds close-on-exec .El .Pp The @@ -227,6 +228,10 @@ and .Fa cmsg_type set to .Dv SCM_RIGHTS . +The close-on-exec flag on received descriptors is set according to the +.Dv MSG_CMSG_CLOEXEC +flag passed to +.Fn recvmsg . .Pp Process credentials can also be passed as ancillary data for .Dv AF_UNIX Modified: projects/efika_mx/lib/libc/sys/socket.2 ============================================================================== --- projects/efika_mx/lib/libc/sys/socket.2 Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/lib/libc/sys/socket.2 Wed Mar 20 14:16:56 2013 (r248556) @@ -28,7 +28,7 @@ .\" From: @(#)socket.2 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd December 7, 2012 +.Dd March 19, 2013 .Dt SOCKET 2 .Os .Sh NAME @@ -115,6 +115,15 @@ which is available only to the super-use which is planned, but not yet implemented, are not described here. .Pp +Additionally, the following flags are allowed in the +.Fa type +argument: +.Pp +.Bd -literal -offset indent -compact +SOCK_CLOEXEC Set close-on-exec on the new descriptor, +SOCK_NONBLOCK Set non-blocking mode on the new socket +.Ed +.Pp The .Fa protocol argument Modified: projects/efika_mx/lib/libc/sys/socketpair.2 ============================================================================== --- projects/efika_mx/lib/libc/sys/socketpair.2 Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/lib/libc/sys/socketpair.2 Wed Mar 20 14:16:56 2013 (r248556) @@ -28,7 +28,7 @@ .\" @(#)socketpair.2 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd June 4, 1993 +.Dd March 19, 2013 .Dt SOCKETPAIR 2 .Os .Sh NAME @@ -57,6 +57,14 @@ are returned in and .Fa sv Ns [1] . The two sockets are indistinguishable. +.Pp +The +.Dv SOCK_CLOEXEC +and +.Dv SOCK_NONBLOCK +flags in the +.Fa type +argument apply to both descriptors. .Sh RETURN VALUES .Rv -std socketpair .Sh ERRORS @@ -79,6 +87,7 @@ process address space. .Sh SEE ALSO .Xr pipe 2 , .Xr read 2 , +.Xr socket 2 , .Xr write 2 .Sh HISTORY The Modified: projects/efika_mx/sbin/ipfw/ipfw.8 ============================================================================== --- projects/efika_mx/sbin/ipfw/ipfw.8 Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sbin/ipfw/ipfw.8 Wed Mar 20 14:16:56 2013 (r248556) @@ -960,6 +960,61 @@ It is possible to use the keyword with setfib. If the tablearg value is not within the compiled range of fibs, the packet's fib is set to 0. +.It Cm setdscp Ar DSCP | number | tablearg +Set specified DiffServ codepoint for an IPv4/IPv6 packet. +Processing continues at the next rule. +Supported values are: +.Pp +.Cm CS0 +.Pq Dv 000000 , +.Cm CS1 +.Pq Dv 001000 , +.Cm CS2 +.Pq Dv 010000 , +.Cm CS3 +.Pq Dv 011000 , +.Cm CS4 +.Pq Dv 100000 , +.Cm CS5 +.Pq Dv 101000 , +.Cm CS6 +.Pq Dv 110000 , +.Cm CS7 +.Pq Dv 111000 , +.Cm AF11 +.Pq Dv 001010 , +.Cm AF12 +.Pq Dv 001100 , +.Cm AF13 +.Pq Dv 001110 , +.Cm AF21 +.Pq Dv 010010 , +.Cm AF22 +.Pq Dv 010100 , +.Cm AF23 +.Pq Dv 010110 , +.Cm AF31 +.Pq Dv 011010 , +.Cm AF32 +.Pq Dv 011100 , +.Cm AF33 +.Pq Dv 011110 , +.Cm AF41 +.Pq Dv 100010 , +.Cm AF42 +.Pq Dv 100100 , +.Cm AF43 +.Pq Dv 100110 , +.Cm EF +.Pq Dv 101110 , +.Cm BE +.Pq Dv 000000 . +Additionally, DSCP value can be specified by number (0..64). +It is also possible to use the +.Cm tablearg +keyword with setdscp. +If the tablearg value is not within the 0..64 range, lower 6 bits of supplied +value are used. .It Cm reass Queue and reassemble IP fragments. If the packet is not fragmented, counters are updated and @@ -1454,6 +1509,17 @@ The supported IP types of service are: The absence of a particular type may be denoted with a .Ql \&! . +.It Cm dscp spec Ns Op , Ns Ar spec +Matches IPv4/IPv6 packets whose +.Cm DS +field value is contained in +.Ar spec +mask. +Multiple values can be specified via +the comma separated list. +Value can be one of keywords used in +.Cm setdscp +action or exact number. .It Cm ipttl Ar ttl-list Matches IPv4 packets whose time to live is included in .Ar ttl-list , @@ -2976,6 +3042,23 @@ configured on but coming in on .Li fxp1 would be dropped. +.Pp +The +.Cm setdscp +option could be used to (re)mark user traffic, +by adding the following to the appropriate place in ruleset: +.Pp +.Dl "ipfw add setdscp be ip from any to any dscp af11,af21" +.Pp +This rule drops all incoming packets that appear to be coming from another +directly connected system but on the wrong interface. +For example, a packet with a source address of +.Li 192.168.0.0/24 , +configured on +.Li fxp0 , +but coming in on +.Li fxp1 +would be dropped. .Ss DYNAMIC RULES In order to protect a site from flood attacks involving fake TCP packets, it is safer to use dynamic rules: Modified: projects/efika_mx/sbin/ipfw/ipfw2.c ============================================================================== --- projects/efika_mx/sbin/ipfw/ipfw2.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sbin/ipfw/ipfw2.c Wed Mar 20 14:16:56 2013 (r248556) @@ -167,6 +167,32 @@ static struct _s_x f_iptos[] = { { NULL, 0 } }; +static struct _s_x f_ipdscp[] = { + { "af11", IPTOS_DSCP_AF11 >> 2 }, /* 001010 */ + { "af12", IPTOS_DSCP_AF12 >> 2 }, /* 001100 */ + { "af13", IPTOS_DSCP_AF13 >> 2 }, /* 001110 */ + { "af21", IPTOS_DSCP_AF21 >> 2 }, /* 010010 */ + { "af22", IPTOS_DSCP_AF22 >> 2 }, /* 010100 */ + { "af23", IPTOS_DSCP_AF23 >> 2 }, /* 010110 */ + { "af31", IPTOS_DSCP_AF31 >> 2 }, /* 011010 */ + { "af32", IPTOS_DSCP_AF32 >> 2 }, /* 011100 */ + { "af33", IPTOS_DSCP_AF33 >> 2 }, /* 011110 */ + { "af41", IPTOS_DSCP_AF41 >> 2 }, /* 100010 */ + { "af42", IPTOS_DSCP_AF42 >> 2 }, /* 100100 */ + { "af43", IPTOS_DSCP_AF43 >> 2 }, /* 100110 */ + { "be", IPTOS_DSCP_CS0 >> 2 }, /* 000000 */ + { "ef", IPTOS_DSCP_EF >> 2 }, /* 101110 */ + { "cs0", IPTOS_DSCP_CS0 >> 2 }, /* 000000 */ + { "cs1", IPTOS_DSCP_CS1 >> 2 }, /* 001000 */ + { "cs2", IPTOS_DSCP_CS2 >> 2 }, /* 010000 */ + { "cs3", IPTOS_DSCP_CS3 >> 2 }, /* 011000 */ + { "cs4", IPTOS_DSCP_CS4 >> 2 }, /* 100000 */ + { "cs5", IPTOS_DSCP_CS5 >> 2 }, /* 101000 */ + { "cs6", IPTOS_DSCP_CS6 >> 2 }, /* 110000 */ + { "cs7", IPTOS_DSCP_CS7 >> 2 }, /* 100000 */ + { NULL, 0 } +}; + static struct _s_x limit_masks[] = { {"all", DYN_SRC_ADDR|DYN_SRC_PORT|DYN_DST_ADDR|DYN_DST_PORT}, {"src-addr", DYN_SRC_ADDR}, @@ -237,6 +263,7 @@ static struct _s_x rule_actions[] = { { "nat", TOK_NAT }, { "reass", TOK_REASS }, { "setfib", TOK_SETFIB }, + { "setdscp", TOK_SETDSCP }, { "call", TOK_CALL }, { "return", TOK_RETURN }, { NULL, 0 } /* terminator */ @@ -714,6 +741,51 @@ fill_newports(ipfw_insn_u16 *cmd, char * return (i); } +/* + * Fill the body of the command with the list of DiffServ codepoints. + */ +static void +fill_dscp(ipfw_insn *cmd, char *av, int cblen) +{ + uint32_t *low, *high; + char *s = av, *a; + int code; + + cmd->opcode = O_DSCP; + cmd->len |= F_INSN_SIZE(ipfw_insn_u32) + 1; + + CHECK_CMDLEN; + + low = (uint32_t *)(cmd + 1); + high = low + 1; + + *low = 0; + *high = 0; + + while (s != NULL) { + a = strchr(s, ','); + + if (a != NULL) + *a++ = '\0'; + + if (isalpha(*s)) { + if ((code = match_token(f_ipdscp, s)) == -1) + errx(EX_DATAERR, "Unknown DSCP code"); + } else { + code = strtoul(s, NULL, 10); + if (code < 0 || code > 63) + errx(EX_DATAERR, "Invalid DSCP value"); + } + + if (code > 32) + *high |= 1 << (code - 32); + else + *low |= 1 << code; + + s = a; + } +} + static struct _s_x icmpcodes[] = { { "net", ICMP_UNREACH_NET }, { "host", ICMP_UNREACH_HOST }, @@ -972,6 +1044,32 @@ print_icmptypes(ipfw_insn_u32 *cmd) } } +static void +print_dscp(ipfw_insn_u32 *cmd) +{ + int i, c; + uint32_t *v; + char sep= ' '; + const char *code; + + printf(" dscp"); + i = 0; + c = 0; + v = cmd->d; + while (i < 64) { + if (*v & (1 << i)) { + if ((code = match_value(f_ipdscp, i)) != NULL) + printf("%c%s", sep, code); + else + printf("%c%d", sep, i); + sep = ','; + } + + if ((++i % 32) == 0) + v++; + } +} + /* * show_ipfw() prints the body of an ipfw rule. * Because the standard rule has at least proto src_ip dst_ip, we use @@ -1205,6 +1303,17 @@ show_ipfw(struct ip_fw *rule, int pcwidt PRINT_UINT_ARG("setfib ", cmd->arg1); break; + case O_SETDSCP: + { + const char *code; + + if ((code = match_value(f_ipdscp, cmd->arg1)) != NULL) + printf("setdscp %s", code); + else + PRINT_UINT_ARG("setdscp ", cmd->arg1); + } + break; + case O_REASS: printf("reass"); break; @@ -1500,6 +1609,10 @@ show_ipfw(struct ip_fw *rule, int pcwidt printf(" ipprecedence %u", (cmd->arg1) >> 5 ); break; + case O_DSCP: + print_dscp((ipfw_insn_u32 *)cmd); + break; + case O_IPLEN: if (F_LEN(cmd) == 1) printf(" iplen %u", cmd->arg1 ); @@ -3036,6 +3149,24 @@ chkarg: break; } + case TOK_SETDSCP: + { + int code; + + action->opcode = O_SETDSCP; + NEED1("missing DSCP code"); + if (_substrcmp(*av, "tablearg") == 0) { + action->arg1 = IP_FW_TABLEARG; + } else if (isalpha(*av[0])) { + if ((code = match_token(f_ipdscp, *av)) == -1) + errx(EX_DATAERR, "Unknown DSCP code"); + action->arg1 = code; + } else + action->arg1 = strtoul(*av, NULL, 10); + av++; + break; + } + case TOK_REASS: action->opcode = O_REASS; break; @@ -3448,6 +3579,12 @@ read_options: av++; break; + case TOK_DSCP: + NEED1("missing DSCP code"); + fill_dscp(cmd, *av, cblen); + av++; + break; + case TOK_IPOPTS: NEED1("missing argument for ipoptions"); fill_flags(cmd, O_IPOPT, f_ipopts, *av); @@ -3985,10 +4122,9 @@ ipfw_table_handler(int ac, char *av[]) int do_add; int is_all; size_t len; - uint32_t a, mask; + uint32_t a; uint32_t tables_max; - mask = 0; // XXX uninitialized ? len = sizeof(tables_max); if (sysctlbyname("net.inet.ip.fw.tables_max", &tables_max, &len, NULL, 0) == -1) { Modified: projects/efika_mx/sbin/ipfw/ipfw2.h ============================================================================== --- projects/efika_mx/sbin/ipfw/ipfw2.h Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sbin/ipfw/ipfw2.h Wed Mar 20 14:16:56 2013 (r248556) @@ -203,6 +203,7 @@ enum tokens { TOK_SETFIB, TOK_LOOKUP, TOK_SOCKARG, + TOK_SETDSCP, }; /* * the following macro returns an error message if we run out of Modified: projects/efika_mx/sbin/ldconfig/ldconfig.c ============================================================================== --- projects/efika_mx/sbin/ldconfig/ldconfig.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sbin/ldconfig/ldconfig.c Wed Mar 20 14:16:56 2013 (r248556) @@ -97,6 +97,13 @@ static void listhints(void); static int readhints(void); static void usage(void); +/* + * Note on aout/a.out support. + * To properly support shared libraries for compat2x, which are a.out, we need + * to support a.out here. As of 2013, bug reports are still coming in for this + * feature (on amd64 no less), so we know it is still in use. + */ + int main(int argc, char **argv) { Modified: projects/efika_mx/sbin/shutdown/shutdown.8 ============================================================================== --- projects/efika_mx/sbin/shutdown/shutdown.8 Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sbin/shutdown/shutdown.8 Wed Mar 20 14:16:56 2013 (r248556) @@ -28,7 +28,7 @@ .\" @(#)shutdown.8 8.2 (Berkeley) 4/27/95 .\" $FreeBSD$ .\" -.Dd July 13, 2011 +.Dd March 19, 2013 .Dt SHUTDOWN 8 .Os .Sh NAME @@ -189,6 +189,11 @@ tells .Xr login 1 not to let anyone log in .El +.Sh EXAMPLES +Reboot the system in 30 minutes and display a warning message on the terminals +of all users currently logged in: +.Pp +.Dl # shutdown -r +30 \&"System will reboot\&" .Sh COMPATIBILITY The hours and minutes in the second time format may be separated by a colon (``:'') for backward compatibility. Modified: projects/efika_mx/share/man/man4/unix.4 ============================================================================== --- projects/efika_mx/share/man/man4/unix.4 Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/share/man/man4/unix.4 Wed Mar 20 14:16:56 2013 (r248556) @@ -32,7 +32,7 @@ .\" @(#)unix.4 8.1 (Berkeley) 6/9/93 .\" $FreeBSD$ .\" -.Dd November 16, 2012 +.Dd March 19, 2013 .Dt UNIX 4 .Os .Sh NAME @@ -153,13 +153,15 @@ plus the size of the array of file descr .Pp The received descriptor is a .Em duplicate -of the sender's descriptor, as if it were created with a call to -.Xr dup 2 . -Per-process descriptor flags, set with -.Xr fcntl 2 , -are -.Em not -passed to a receiver. +of the sender's descriptor, as if it were created via +.Li dup(fd) +or +.Li fcntl(fd, F_DUPFD_CLOEXEC, 0) +depending on whether +.Dv MSG_CMSG_CLOEXEC +is passed in the +.Xr recvmsg 2 +call. Descriptors that are awaiting delivery, or that are purposely not received, are automatically closed by the system when the destination socket is closed. Modified: projects/efika_mx/sys/cam/ata/ata_da.c ============================================================================== --- projects/efika_mx/sys/cam/ata/ata_da.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/cam/ata/ata_da.c Wed Mar 20 14:16:56 2013 (r248556) @@ -1167,6 +1167,8 @@ adaregister(struct cam_periph *periph, v ((softc->flags & ADA_FLAG_CAN_CFA) && !(softc->flags & ADA_FLAG_CAN_48BIT))) softc->disk->d_flags |= DISKFLAG_CANDELETE; + if ((cpi.hba_misc & PIM_UNMAPPED) != 0) + softc->disk->d_flags |= DISKFLAG_UNMAPPED_BIO; strlcpy(softc->disk->d_descr, cgd->ident_data.model, MIN(sizeof(softc->disk->d_descr), sizeof(cgd->ident_data.model))); strlcpy(softc->disk->d_ident, cgd->ident_data.serial, @@ -1431,13 +1433,19 @@ adastart(struct cam_periph *periph, unio return; } #endif + KASSERT((bp->bio_flags & BIO_UNMAPPED) == 0 || + round_page(bp->bio_bcount + bp->bio_ma_offset) / + PAGE_SIZE == bp->bio_ma_n, + ("Short bio %p", bp)); cam_fill_ataio(ataio, ada_retry_count, adadone, - bp->bio_cmd == BIO_READ ? - CAM_DIR_IN : CAM_DIR_OUT, + (bp->bio_cmd == BIO_READ ? CAM_DIR_IN : + CAM_DIR_OUT) | ((bp->bio_flags & BIO_UNMAPPED) + != 0 ? CAM_DATA_BIO : 0), tag_code, - bp->bio_data, + ((bp->bio_flags & BIO_UNMAPPED) != 0) ? (void *)bp : + bp->bio_data, bp->bio_bcount, ada_default_timeout*1000); Modified: projects/efika_mx/sys/cam/cam_ccb.h ============================================================================== --- projects/efika_mx/sys/cam/cam_ccb.h Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/cam/cam_ccb.h Wed Mar 20 14:16:56 2013 (r248556) @@ -42,7 +42,6 @@ #include #include - /* General allocation length definitions for CCB structures */ #define IOCDBLEN CAM_MAX_CDBLEN /* Space for CDB bytes/pointer */ #define VUHBALEN 14 /* Vendor Unique HBA length */ @@ -100,7 +99,7 @@ typedef enum { CAM_MSGB_VALID = 0x10000000,/* Message buffer valid */ CAM_STATUS_VALID = 0x20000000,/* Status buffer valid */ CAM_DATAB_VALID = 0x40000000,/* Data buffer valid */ - + /* Host target Mode flags */ CAM_SEND_SENSE = 0x08000000,/* Send sense data with status */ CAM_TERM_IO = 0x10000000,/* Terminate I/O Message sup. */ @@ -572,7 +571,8 @@ typedef enum { PIM_NOINITIATOR = 0x20, /* Initiator role not supported. */ PIM_NOBUSRESET = 0x10, /* User has disabled initial BUS RESET */ PIM_NO_6_BYTE = 0x08, /* Do not send 6-byte commands */ - PIM_SEQSCAN = 0x04 /* Do bus scans sequentially, not in parallel */ + PIM_SEQSCAN = 0x04, /* Do bus scans sequentially, not in parallel */ + PIM_UNMAPPED = 0x02, } pi_miscflag; /* Path Inquiry CCB */ Modified: projects/efika_mx/sys/cam/cam_periph.c ============================================================================== --- projects/efika_mx/sys/cam/cam_periph.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/cam/cam_periph.c Wed Mar 20 14:16:56 2013 (r248556) @@ -850,7 +850,7 @@ cam_periph_mapmem(union ccb *ccb, struct * into a larger area of VM, or if userland races against * vmapbuf() after the useracc() check. */ - if (vmapbuf(mapinfo->bp[i]) < 0) { + if (vmapbuf(mapinfo->bp[i], 1) < 0) { for (j = 0; j < i; ++j) { *data_ptrs[j] = mapinfo->bp[j]->b_saveaddr; vunmapbuf(mapinfo->bp[j]); Modified: projects/efika_mx/sys/cam/scsi/scsi_all.c ============================================================================== --- projects/efika_mx/sys/cam/scsi/scsi_all.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/cam/scsi/scsi_all.c Wed Mar 20 14:16:56 2013 (r248556) @@ -5679,7 +5679,11 @@ scsi_read_write(struct ccb_scsiio *csio, u_int8_t *data_ptr, u_int32_t dxfer_len, u_int8_t sense_len, u_int32_t timeout) { + int read; u_int8_t cdb_len; + + read = (readop & SCSI_RW_DIRMASK) == SCSI_RW_READ; + /* * Use the smallest possible command to perform the operation * as some legacy hardware does not support the 10 byte commands. @@ -5696,7 +5700,7 @@ scsi_read_write(struct ccb_scsiio *csio, struct scsi_rw_6 *scsi_cmd; scsi_cmd = (struct scsi_rw_6 *)&csio->cdb_io.cdb_bytes; - scsi_cmd->opcode = readop ? READ_6 : WRITE_6; + scsi_cmd->opcode = read ? READ_6 : WRITE_6; scsi_ulto3b(lba, scsi_cmd->addr); scsi_cmd->length = block_count & 0xff; scsi_cmd->control = 0; @@ -5715,7 +5719,7 @@ scsi_read_write(struct ccb_scsiio *csio, struct scsi_rw_10 *scsi_cmd; scsi_cmd = (struct scsi_rw_10 *)&csio->cdb_io.cdb_bytes; - scsi_cmd->opcode = readop ? READ_10 : WRITE_10; + scsi_cmd->opcode = read ? READ_10 : WRITE_10; scsi_cmd->byte2 = byte2; scsi_ulto4b(lba, scsi_cmd->addr); scsi_cmd->reserved = 0; @@ -5738,7 +5742,7 @@ scsi_read_write(struct ccb_scsiio *csio, struct scsi_rw_12 *scsi_cmd; scsi_cmd = (struct scsi_rw_12 *)&csio->cdb_io.cdb_bytes; - scsi_cmd->opcode = readop ? READ_12 : WRITE_12; + scsi_cmd->opcode = read ? READ_12 : WRITE_12; scsi_cmd->byte2 = byte2; scsi_ulto4b(lba, scsi_cmd->addr); scsi_cmd->reserved = 0; @@ -5760,7 +5764,7 @@ scsi_read_write(struct ccb_scsiio *csio, struct scsi_rw_16 *scsi_cmd; scsi_cmd = (struct scsi_rw_16 *)&csio->cdb_io.cdb_bytes; - scsi_cmd->opcode = readop ? READ_16 : WRITE_16; + scsi_cmd->opcode = read ? READ_16 : WRITE_16; scsi_cmd->byte2 = byte2; scsi_u64to8b(lba, scsi_cmd->addr); scsi_cmd->reserved = 0; @@ -5771,7 +5775,8 @@ scsi_read_write(struct ccb_scsiio *csio, cam_fill_csio(csio, retries, cbfcnp, - /*flags*/readop ? CAM_DIR_IN : CAM_DIR_OUT, + (read ? CAM_DIR_IN : CAM_DIR_OUT) | + ((readop & SCSI_RW_BIO) != 0 ? CAM_DATA_BIO : 0), tag_action, data_ptr, dxfer_len, Modified: projects/efika_mx/sys/cam/scsi/scsi_all.h ============================================================================== --- projects/efika_mx/sys/cam/scsi/scsi_all.h Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/cam/scsi/scsi_all.h Wed Mar 20 14:16:56 2013 (r248556) @@ -2354,6 +2354,10 @@ void scsi_write_buffer(struct ccb_scsiio uint8_t *data_ptr, uint32_t param_list_length, uint8_t sense_len, uint32_t timeout); +#define SCSI_RW_READ 0x0001 +#define SCSI_RW_WRITE 0x0002 +#define SCSI_RW_DIRMASK 0x0003 +#define SCSI_RW_BIO 0x1000 void scsi_read_write(struct ccb_scsiio *csio, u_int32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb *), u_int8_t tag_action, int readop, u_int8_t byte2, Modified: projects/efika_mx/sys/cam/scsi/scsi_cd.c ============================================================================== --- projects/efika_mx/sys/cam/scsi/scsi_cd.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/cam/scsi/scsi_cd.c Wed Mar 20 14:16:56 2013 (r248556) @@ -1575,7 +1575,8 @@ cdstart(struct cam_periph *periph, union /*retries*/ cd_retry_count, /* cbfcnp */ cddone, MSG_SIMPLE_Q_TAG, - /* read */bp->bio_cmd == BIO_READ, + /* read */bp->bio_cmd == BIO_READ ? + SCSI_RW_READ : SCSI_RW_WRITE, /* byte2 */ 0, /* minimum_cmd_size */ 10, /* lba */ bp->bio_offset / Modified: projects/efika_mx/sys/cam/scsi/scsi_da.c ============================================================================== --- projects/efika_mx/sys/cam/scsi/scsi_da.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/cam/scsi/scsi_da.c Wed Mar 20 14:16:56 2013 (r248556) @@ -1184,7 +1184,7 @@ dadump(void *arg, void *virtual, vm_offs /*retries*/0, dadone, MSG_ORDERED_Q_TAG, - /*read*/FALSE, + /*read*/SCSI_RW_WRITE, /*byte2*/0, /*minimum_cmd_size*/ softc->minimum_cmd_size, offset / secsize, @@ -1757,6 +1757,8 @@ daregister(struct cam_periph *periph, vo softc->disk->d_flags = 0; if ((softc->quirks & DA_Q_NO_SYNC_CACHE) == 0) softc->disk->d_flags |= DISKFLAG_CANFLUSHCACHE; + if ((cpi.hba_misc & PIM_UNMAPPED) != 0) + softc->disk->d_flags |= DISKFLAG_UNMAPPED_BIO; cam_strvis(softc->disk->d_descr, cgd->inq_data.vendor, sizeof(cgd->inq_data.vendor), sizeof(softc->disk->d_descr)); strlcat(softc->disk->d_descr, " ", sizeof(softc->disk->d_descr)); @@ -1985,14 +1987,18 @@ dastart(struct cam_periph *periph, union /*retries*/da_retry_count, /*cbfcnp*/dadone, /*tag_action*/tag_code, - /*read_op*/bp->bio_cmd - == BIO_READ, + /*read_op*/(bp->bio_cmd == BIO_READ ? + SCSI_RW_READ : SCSI_RW_WRITE) | + ((bp->bio_flags & BIO_UNMAPPED) != 0 ? + SCSI_RW_BIO : 0), /*byte2*/0, softc->minimum_cmd_size, /*lba*/bp->bio_pblkno, /*block_count*/bp->bio_bcount / softc->params.secsize, - /*data_ptr*/ bp->bio_data, + /*data_ptr*/ (bp->bio_flags & + BIO_UNMAPPED) != 0 ? (void *)bp : + bp->bio_data, /*dxfer_len*/ bp->bio_bcount, /*sense_len*/SSD_FULL_SIZE, da_default_timeout * 1000); Modified: projects/efika_mx/sys/dev/ahci/ahci.c ============================================================================== --- projects/efika_mx/sys/dev/ahci/ahci.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/dev/ahci/ahci.c Wed Mar 20 14:16:56 2013 (r248556) @@ -2903,7 +2903,7 @@ ahciaction(struct cam_sim *sim, union cc if (ch->caps & AHCI_CAP_SPM) cpi->hba_inquiry |= PI_SATAPM; cpi->target_sprt = 0; - cpi->hba_misc = PIM_SEQSCAN; + cpi->hba_misc = PIM_SEQSCAN | PIM_UNMAPPED; cpi->hba_eng_cnt = 0; if (ch->caps & AHCI_CAP_SPM) cpi->max_target = 15; Modified: projects/efika_mx/sys/dev/ath/if_ath.c ============================================================================== --- projects/efika_mx/sys/dev/ath/if_ath.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/dev/ath/if_ath.c Wed Mar 20 14:16:56 2013 (r248556) @@ -837,6 +837,11 @@ ath_attach(u_int16_t devid, struct ath_s } /* + * Initialise the deferred completed RX buffer list. + */ + TAILQ_INIT(&sc->sc_rx_rxlist); + + /* * Indicate we need the 802.11 header padded to a * 32-bit boundary for 4-address and QoS frames. */ @@ -1711,7 +1716,7 @@ ath_intr(void *arg) * traffic so any frames held on the staging * queue are aged and potentially flushed. */ - taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask); + sc->sc_rx.recv_sched(sc, 1); #endif } } @@ -1751,13 +1756,13 @@ ath_intr(void *arg) if (! sc->sc_kickpcu) sc->sc_rxlink = NULL; sc->sc_kickpcu = 1; + ATH_PCU_UNLOCK(sc); /* * Enqueue an RX proc, to handled whatever * is in the RX queue. * This will then kick the PCU. */ - taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask); - ATH_PCU_UNLOCK(sc); + sc->sc_rx.recv_sched(sc, 1); } if (status & HAL_INT_TXURN) { sc->sc_stats.ast_txurn++; @@ -1770,7 +1775,7 @@ ath_intr(void *arg) */ if (status & (HAL_INT_RX | HAL_INT_RXHP | HAL_INT_RXLP)) { sc->sc_stats.ast_rx_intr++; - taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask); + sc->sc_rx.recv_sched(sc, 1); } if (status & HAL_INT_TX) { sc->sc_stats.ast_tx_intr++; Modified: projects/efika_mx/sys/dev/ath/if_ath_beacon.c ============================================================================== --- projects/efika_mx/sys/dev/ath/if_ath_beacon.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/dev/ath/if_ath_beacon.c Wed Mar 20 14:16:56 2013 (r248556) @@ -570,7 +570,14 @@ ath_beacon_generate(struct ath_softc *sc /* * Move frames from the s/w mcast q to the h/w cab q. - * XXX MORE_DATA bit + * XXX TODO: walk the list, update MORE_DATA bit + * XXX TODO: or maybe, set the MORE data bit in the + * TX descriptor(s) here? + * + * XXX TODO: we're still pushing a CABQ frame list to + * AR9380 hosts; but we don't (yet) populate + * the ATH_BUF_BUSY flag in the EDMA + * completion task (for CABQ, though!) */ bfm = TAILQ_FIRST(&avp->av_mcastq.axq_q); if (cabq->axq_link != NULL) { Modified: projects/efika_mx/sys/dev/ath/if_ath_rx.c ============================================================================== --- projects/efika_mx/sys/dev/ath/if_ath_rx.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/dev/ath/if_ath_rx.c Wed Mar 20 14:16:56 2013 (r248556) @@ -1030,7 +1030,7 @@ rx_proc_next: * will reduce latency. */ if (npkts >= ATH_RX_MAX) - taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask); + sc->sc_rx.recv_sched(sc, resched); ATH_PCU_LOCK(sc); sc->sc_rxproc_cnt--; @@ -1181,6 +1181,21 @@ ath_legacy_dma_rxteardown(struct ath_sof return (0); } +static void +ath_legacy_recv_sched(struct ath_softc *sc, int dosched) +{ + + taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask); +} + +static void +ath_legacy_recv_sched_queue(struct ath_softc *sc, HAL_RX_QUEUE q, + int dosched) +{ + + taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask); +} + void ath_recv_setup_legacy(struct ath_softc *sc) { @@ -1200,4 +1215,6 @@ ath_recv_setup_legacy(struct ath_softc * sc->sc_rx.recv_setup = ath_legacy_dma_rxsetup; sc->sc_rx.recv_teardown = ath_legacy_dma_rxteardown; + sc->sc_rx.recv_sched = ath_legacy_recv_sched; + sc->sc_rx.recv_sched_queue = ath_legacy_recv_sched_queue; } Modified: projects/efika_mx/sys/dev/ath/if_ath_rx_edma.c ============================================================================== --- projects/efika_mx/sys/dev/ath/if_ath_rx_edma.c Wed Mar 20 13:45:15 2013 (r248555) +++ projects/efika_mx/sys/dev/ath/if_ath_rx_edma.c Wed Mar 20 14:16:56 2013 (r248556) @@ -132,12 +132,8 @@ MALLOC_DECLARE(M_ATHDEV); /* * XXX TODO: * - * + Add an RX lock, just to ensure we don't have things clash; * + Make sure the FIFO is correctly flushed and reinitialised * through a reset; - * + Handle the "kickpcu" state where the FIFO overflows. - * + Implement a "flush" routine, which doesn't push any - * new frames into the FIFO. * + Verify multi-descriptor frames work! * + There's a "memory use after free" which needs to be tracked down * and fixed ASAP. I've seen this in the legacy path too, so it @@ -152,7 +148,9 @@ static int ath_edma_rxfifo_alloc(struct int nbufs); static int ath_edma_rxfifo_flush(struct ath_softc *sc, HAL_RX_QUEUE qtype); static void ath_edma_rxbuf_free(struct ath_softc *sc, struct ath_buf *bf); -static int ath_edma_recv_proc_queue(struct ath_softc *sc, +static void ath_edma_recv_proc_queue(struct ath_softc *sc, + HAL_RX_QUEUE qtype, int dosched); +static int ath_edma_recv_proc_deferred_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype, int dosched); static void @@ -283,6 +281,24 @@ ath_edma_startrecv(struct ath_softc *sc) } static void +ath_edma_recv_sched_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype, + int dosched) +{ + + ath_edma_recv_proc_queue(sc, qtype, dosched); + taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask); +} + +static void +ath_edma_recv_sched(struct ath_softc *sc, int dosched) +{ + + ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_HP, dosched); + ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_LP, dosched); + taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask); +} + +static void ath_edma_recv_flush(struct ath_softc *sc) { @@ -292,27 +308,27 @@ ath_edma_recv_flush(struct ath_softc *sc sc->sc_rxproc_cnt++; ATH_PCU_UNLOCK(sc); + /* + * Flush any active frames from FIFO -> deferred list + */ ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_HP, 0); ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_LP, 0); + /* + * Process what's in the deferred queue + */ + ath_edma_recv_proc_deferred_queue(sc, HAL_RX_QUEUE_HP, 0); + ath_edma_recv_proc_deferred_queue(sc, HAL_RX_QUEUE_LP, 0); + ATH_PCU_LOCK(sc); sc->sc_rxproc_cnt--; ATH_PCU_UNLOCK(sc); } /* - * Process frames from the current queue. - * - * TODO: - * - * + Add a "dosched" flag, so we don't reschedule any FIFO frames - * to the hardware or re-kick the PCU after 'kickpcu' is set. - * - * + Perhaps split "check FIFO contents" and "handle frames", so - * we can run the "check FIFO contents" in ath_intr(), but - * "handle frames" in the RX tasklet. + * Process frames from the current queue into the deferred queue. */ -static int +static void ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype, int dosched) { @@ -323,12 +339,8 @@ ath_edma_recv_proc_queue(struct ath_soft struct mbuf *m; struct ath_hal *ah = sc->sc_ah; uint64_t tsf; - int16_t nf; - int ngood = 0, npkts = 0; - ath_bufhead rxlist; - struct ath_buf *next; - - TAILQ_INIT(&rxlist); + uint16_t nf; + int npkts = 0; tsf = ath_hal_gettsf64(ah); nf = ath_hal_getchannoise(ah, sc->sc_curchan); @@ -386,7 +398,7 @@ ath_edma_recv_proc_queue(struct ath_soft * queue. */ re->m_fifo[re->m_fifo_head] = NULL; - TAILQ_INSERT_TAIL(&rxlist, bf, bf_list); + TAILQ_INSERT_TAIL(&sc->sc_rx_rxlist, bf, bf_list); /* Bump the descriptor FIFO stats */ INCR(re->m_fifo_head, re->m_fifolen); @@ -400,6 +412,78 @@ ath_edma_recv_proc_queue(struct ath_soft ATH_RX_UNLOCK(sc); + /* rx signal state monitoring */ + ath_hal_rxmonitor(ah, &sc->sc_halstats, sc->sc_curchan); + + ATH_KTR(sc, ATH_KTR_INTERRUPTS, 1, + "ath edma rx proc: npkts=%d\n", + npkts); + + /* Handle resched and kickpcu appropriately */ + ATH_PCU_LOCK(sc); + if (dosched && sc->sc_kickpcu) { + ATH_KTR(sc, ATH_KTR_ERROR, 0, + "ath_edma_recv_proc_queue(): kickpcu"); + device_printf(sc->sc_dev, + "%s: handled npkts %d\n", + __func__, npkts); + + /* + * XXX TODO: what should occur here? Just re-poke and + * re-enable the RX FIFO? + */ + sc->sc_kickpcu = 0; + } + ATH_PCU_UNLOCK(sc); + + return; +} + +/* + * Flush the deferred queue. + * + * This destructively flushes the deferred queue - it doesn't + * call the wireless stack on each mbuf. + */ +static void +ath_edma_flush_deferred_queue(struct ath_softc *sc) +{ + struct ath_buf *bf, *next; + + ATH_RX_LOCK_ASSERT(sc); + /* Free in one set, inside the lock */ + TAILQ_FOREACH_SAFE(bf, &sc->sc_rx_rxlist, bf_list, next) { + /* Free the buffer/mbuf */ + ath_edma_rxbuf_free(sc, bf); + } +} + +static int +ath_edma_recv_proc_deferred_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype, + int dosched) +{ + int ngood = 0; + uint64_t tsf; + struct ath_buf *bf, *next; + struct ath_rx_status *rs; + int16_t nf; + ath_bufhead rxlist; + + TAILQ_INIT(&rxlist); + + nf = ath_hal_getchannoise(sc->sc_ah, sc->sc_curchan); + /* *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Thu Mar 21 16:29:10 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id B0D15D0; Thu, 21 Mar 2013 16:29:10 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id A0ABB92C; Thu, 21 Mar 2013 16:29:10 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2LGTA76041751; Thu, 21 Mar 2013 16:29:10 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2LGT9Yd041742; Thu, 21 Mar 2013 16:29:09 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201303211629.r2LGT9Yd041742@svn.freebsd.org> From: Gleb Smirnoff Date: Thu, 21 Mar 2013 16:29:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248589 - in projects/counters: . cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensolaris/cmd/zhack cddl/contrib/opensolaris/cmd/zpool cddl/contrib/op... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Mar 2013 16:29:10 -0000 Author: glebius Date: Thu Mar 21 16:29:08 2013 New Revision: 248589 URL: http://svnweb.freebsd.org/changeset/base/248589 Log: Merge head r243428 through r248588. Added: projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c - copied unchanged from r248588, head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h - copied unchanged from r248588, head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.h projects/counters/cddl/contrib/opensolaris/lib/libzfs_core/ - copied from r248588, head/cddl/contrib/opensolaris/lib/libzfs_core/ projects/counters/cddl/lib/libzfs_core/ - copied from r248588, head/cddl/lib/libzfs_core/ projects/counters/share/examples/bhyve/ - copied from r248588, head/share/examples/bhyve/ projects/counters/sys/arm/conf/EFIKA_MX - copied unchanged from r248588, head/sys/arm/conf/EFIKA_MX projects/counters/sys/arm/freescale/ - copied from r248588, head/sys/arm/freescale/ projects/counters/sys/boot/fdt/dts/efikamx.dts - copied unchanged from r248588, head/sys/boot/fdt/dts/efikamx.dts projects/counters/sys/boot/fdt/dts/imx51x.dtsi - copied unchanged from r248588, head/sys/boot/fdt/dts/imx51x.dtsi projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c - copied unchanged from r248588, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c - copied unchanged from r248588, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h - copied unchanged from r248588, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_destroy.h - copied unchanged from r248588, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_destroy.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_userhold.h - copied unchanged from r248588, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_userhold.h projects/counters/sys/cddl/dev/fbt/fbt_powerpc.c - copied unchanged from r248588, head/sys/cddl/dev/fbt/fbt_powerpc.c projects/counters/sys/dev/ata/chipsets/ata-fsl.c - copied unchanged from r248588, head/sys/dev/ata/chipsets/ata-fsl.c projects/counters/sys/dev/uart/uart_dev_imx.c - copied unchanged from r248588, head/sys/dev/uart/uart_dev_imx.c projects/counters/sys/dev/uart/uart_dev_imx5xx.h - copied unchanged from r248588, head/sys/dev/uart/uart_dev_imx5xx.h projects/counters/sys/dev/usb/controller/ehci_imx.c - copied unchanged from r248588, head/sys/dev/usb/controller/ehci_imx.c projects/counters/sys/libkern/arm/memset.S - copied unchanged from r248588, head/sys/libkern/arm/memset.S projects/counters/sys/vm/_vm_radix.h - copied unchanged from r248588, head/sys/vm/_vm_radix.h projects/counters/sys/vm/vm_radix.c - copied unchanged from r248588, head/sys/vm/vm_radix.c projects/counters/sys/vm/vm_radix.h - copied unchanged from r248588, head/sys/vm/vm_radix.h Modified: projects/counters/Makefile.inc1 projects/counters/cddl/contrib/opensolaris/cmd/zdb/zdb.c projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs.8 projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c projects/counters/cddl/contrib/opensolaris/cmd/zhack/zhack.c projects/counters/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c projects/counters/cddl/contrib/opensolaris/cmd/ztest/ztest.c projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_impl.h projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_iter.c projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c projects/counters/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_util.c projects/counters/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c projects/counters/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h projects/counters/cddl/lib/Makefile projects/counters/cddl/lib/libzfs/Makefile projects/counters/cddl/sbin/zfs/Makefile projects/counters/cddl/sbin/zpool/Makefile projects/counters/cddl/usr.bin/zinject/Makefile projects/counters/cddl/usr.bin/ztest/Makefile projects/counters/cddl/usr.sbin/zdb/Makefile projects/counters/cddl/usr.sbin/zhack/Makefile projects/counters/contrib/binutils/gas/config/tc-arm.c projects/counters/contrib/llvm/tools/clang/lib/Driver/Tools.cpp projects/counters/crypto/openssh/sshd_config projects/counters/etc/mtree/BSD.usr.dist projects/counters/etc/rc.d/savecore projects/counters/games/fortune/datfiles/freebsd-tips projects/counters/gnu/lib/libgcc/Makefile projects/counters/lib/libc/stdlib/realpath.3 projects/counters/lib/libc/sys/chflags.2 projects/counters/lib/libc/sys/mlock.2 projects/counters/lib/libc/sys/recv.2 projects/counters/lib/libc/sys/socket.2 projects/counters/lib/libc/sys/socketpair.2 projects/counters/lib/libvmmapi/vmmapi.c projects/counters/lib/libvmmapi/vmmapi.h projects/counters/rescue/rescue/Makefile projects/counters/sbin/ccdconfig/ccdconfig.8 projects/counters/sbin/ffsinfo/ffsinfo.8 projects/counters/sbin/geom/class/concat/gconcat.8 projects/counters/sbin/geom/class/eli/geom_eli.c projects/counters/sbin/geom/class/mirror/gmirror.8 projects/counters/sbin/geom/class/raid/graid.8 projects/counters/sbin/geom/class/stripe/gstripe.8 projects/counters/sbin/gvinum/gvinum.8 projects/counters/sbin/ipfw/ipfw.8 projects/counters/sbin/ipfw/ipfw2.c projects/counters/sbin/ipfw/ipfw2.h projects/counters/sbin/ldconfig/ldconfig.8 projects/counters/sbin/ldconfig/ldconfig.c projects/counters/sbin/shutdown/shutdown.8 projects/counters/share/examples/Makefile projects/counters/share/man/man4/ccd.4 projects/counters/share/man/man4/iwn.4 projects/counters/share/man/man4/ng_nat.4 projects/counters/share/man/man4/psm.4 projects/counters/share/man/man4/unix.4 projects/counters/share/man/man9/zone.9 projects/counters/share/mk/bsd.libnames.mk projects/counters/sys/amd64/amd64/pmap.c projects/counters/sys/amd64/include/pmap.h projects/counters/sys/amd64/vmm/intel/vmx.c projects/counters/sys/amd64/vmm/vmm.c projects/counters/sys/amd64/vmm/vmm_stat.c projects/counters/sys/amd64/vmm/vmm_stat.h projects/counters/sys/arm/arm/pmap-v6.c projects/counters/sys/arm/arm/pmap.c projects/counters/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c projects/counters/sys/arm/broadcom/bcm2835/bcm2835_systimer.c projects/counters/sys/arm/include/bus.h projects/counters/sys/arm/ti/cpsw/if_cpsw.c projects/counters/sys/arm/ti/ti_mmchs.c projects/counters/sys/cam/ata/ata_da.c projects/counters/sys/cam/cam_ccb.h projects/counters/sys/cam/cam_periph.c projects/counters/sys/cam/scsi/scsi_all.c projects/counters/sys/cam/scsi/scsi_all.h projects/counters/sys/cam/scsi/scsi_cd.c projects/counters/sys/cam/scsi/scsi_da.c projects/counters/sys/cddl/compat/opensolaris/sys/cred.h projects/counters/sys/cddl/compat/opensolaris/sys/sig.h projects/counters/sys/cddl/compat/opensolaris/sys/time.h projects/counters/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c projects/counters/sys/cddl/contrib/opensolaris/common/zfs/zfs_comutil.c projects/counters/sys/cddl/contrib/opensolaris/common/zfs/zfs_comutil.h projects/counters/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c projects/counters/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h projects/counters/sys/cddl/contrib/opensolaris/common/zfs/zprop_common.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/Makefile.files projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bplist.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/refcount.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/rrwlock.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_tx.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deleg.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_prop.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/trim_map.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_debug.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/trim_map.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/txg.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c projects/counters/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/sys/feature_tests.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h projects/counters/sys/cddl/contrib/opensolaris/uts/common/sys/nvpair.h projects/counters/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S projects/counters/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c projects/counters/sys/cddl/dev/dtrace/powerpc/dtrace_subr.c projects/counters/sys/conf/Makefile.arm projects/counters/sys/conf/files projects/counters/sys/conf/files.arm projects/counters/sys/dev/acpica/acpi_powerres.c projects/counters/sys/dev/ahci/ahci.c projects/counters/sys/dev/ath/if_ath.c projects/counters/sys/dev/ath/if_ath_beacon.c projects/counters/sys/dev/ath/if_ath_rx.c projects/counters/sys/dev/ath/if_ath_rx_edma.c projects/counters/sys/dev/ath/if_ath_sysctl.c projects/counters/sys/dev/ath/if_ath_tx.c projects/counters/sys/dev/ath/if_ath_tx_edma.c projects/counters/sys/dev/ath/if_athvar.h projects/counters/sys/dev/atkbdc/psm.c projects/counters/sys/dev/fdt/fdt_common.c projects/counters/sys/dev/fdt/fdtbus.c projects/counters/sys/dev/fdt/simplebus.c projects/counters/sys/dev/md/md.c projects/counters/sys/dev/mii/rgephy.c projects/counters/sys/dev/mii/rgephyreg.h projects/counters/sys/dev/puc/pucdata.c projects/counters/sys/dev/siis/siis.c projects/counters/sys/dev/sis/if_sis.c projects/counters/sys/dev/sis/if_sisreg.h projects/counters/sys/dev/sound/pcm/sndstat.c projects/counters/sys/dev/twa/tw_osl_cam.c projects/counters/sys/dev/twa/tw_osl_freebsd.c projects/counters/sys/dev/uart/uart.h projects/counters/sys/dev/uart/uart_bus_fdt.c projects/counters/sys/dev/usb/controller/xhci.c projects/counters/sys/dev/usb/serial/u3g.c projects/counters/sys/dev/usb/usbdevs projects/counters/sys/dev/usb/wlan/if_rum.c projects/counters/sys/dev/usb/wlan/if_run.c projects/counters/sys/fs/nfsclient/nfs_clbio.c projects/counters/sys/fs/nfsclient/nfs_clport.c projects/counters/sys/fs/tmpfs/tmpfs_vnops.c projects/counters/sys/geom/geom.h projects/counters/sys/geom/geom_disk.c projects/counters/sys/geom/geom_disk.h projects/counters/sys/geom/geom_io.c projects/counters/sys/geom/geom_vfs.c projects/counters/sys/geom/part/g_part.c projects/counters/sys/i386/i386/pmap.c projects/counters/sys/i386/include/pmap.h projects/counters/sys/i386/xen/pmap.c projects/counters/sys/ia64/ia64/pmap.c projects/counters/sys/kern/kern_physio.c projects/counters/sys/kern/kern_sig.c projects/counters/sys/kern/kern_synch.c projects/counters/sys/kern/kern_thread.c projects/counters/sys/kern/subr_bus_dma.c projects/counters/sys/kern/subr_param.c projects/counters/sys/kern/subr_sleepqueue.c projects/counters/sys/kern/subr_trap.c projects/counters/sys/kern/uipc_mbuf.c projects/counters/sys/kern/uipc_socket.c projects/counters/sys/kern/uipc_syscalls.c projects/counters/sys/kern/uipc_usrreq.c projects/counters/sys/kern/vfs_aio.c projects/counters/sys/kern/vfs_bio.c projects/counters/sys/kern/vfs_cache.c projects/counters/sys/kern/vfs_cluster.c projects/counters/sys/kern/vfs_mount.c projects/counters/sys/kern/vfs_syscalls.c projects/counters/sys/mips/mips/pmap.c projects/counters/sys/modules/dtrace/Makefile projects/counters/sys/modules/dtrace/dtraceall/dtraceall.c projects/counters/sys/modules/dtrace/fbt/Makefile projects/counters/sys/modules/uart/Makefile projects/counters/sys/net/pfil.c projects/counters/sys/net/pfil.h projects/counters/sys/net80211/ieee80211_freebsd.c projects/counters/sys/netgraph/ng_nat.c projects/counters/sys/netgraph/ng_nat.h projects/counters/sys/netinet/ip_fw.h projects/counters/sys/netinet/libalias/alias.c projects/counters/sys/netpfil/ipfw/ip_fw2.c projects/counters/sys/netpfil/ipfw/ip_fw_log.c projects/counters/sys/netpfil/ipfw/ip_fw_private.h projects/counters/sys/netpfil/ipfw/ip_fw_sockopt.c projects/counters/sys/nfsclient/nfs_bio.c projects/counters/sys/powerpc/aim/mmu_oea64.c projects/counters/sys/powerpc/aim/trap.c projects/counters/sys/powerpc/aim/trap_subr32.S projects/counters/sys/powerpc/aim/trap_subr64.S projects/counters/sys/powerpc/powerpc/pmap_dispatch.c projects/counters/sys/sparc64/sparc64/pmap.c projects/counters/sys/sys/bio.h projects/counters/sys/sys/buf.h projects/counters/sys/sys/domain.h projects/counters/sys/sys/mbuf.h projects/counters/sys/sys/mount.h projects/counters/sys/sys/mouse.h projects/counters/sys/sys/param.h projects/counters/sys/sys/signalvar.h projects/counters/sys/sys/sleepqueue.h projects/counters/sys/sys/socket.h projects/counters/sys/sys/systm.h projects/counters/sys/sys/vnode.h projects/counters/sys/ufs/ffs/ffs_alloc.c projects/counters/sys/ufs/ffs/ffs_balloc.c projects/counters/sys/ufs/ffs/ffs_rawread.c projects/counters/sys/ufs/ffs/ffs_vfsops.c projects/counters/sys/ufs/ffs/ffs_vnops.c projects/counters/sys/ufs/ufs/ufs_extern.h projects/counters/sys/ufs/ufs/ufs_lookup.c projects/counters/sys/ufs/ufs/ufs_vnops.c projects/counters/sys/vm/swap_pager.c projects/counters/sys/vm/swap_pager.h projects/counters/sys/vm/vm.h projects/counters/sys/vm/vm_init.c projects/counters/sys/vm/vm_kern.c projects/counters/sys/vm/vm_object.c projects/counters/sys/vm/vm_object.h projects/counters/sys/vm/vm_page.c projects/counters/sys/vm/vm_page.h projects/counters/sys/vm/vm_reserv.c projects/counters/sys/vm/vnode_pager.c projects/counters/tools/regression/security/cap_test/cap_test_capabilities.c projects/counters/tools/tools/netrate/netreceive/Makefile projects/counters/usr.bin/find/find.h projects/counters/usr.bin/find/function.c projects/counters/usr.bin/head/head.1 projects/counters/usr.bin/renice/renice.8 projects/counters/usr.bin/script/script.1 projects/counters/usr.bin/tail/tail.1 projects/counters/usr.sbin/ac/ac.8 projects/counters/usr.sbin/bhyve/acpi.c projects/counters/usr.sbin/bhyve/bhyverun.c projects/counters/usr.sbin/bhyve/bhyverun.h projects/counters/usr.sbin/bhyve/mptbl.c projects/counters/usr.sbin/bhyve/pci_emul.c projects/counters/usr.sbin/bhyve/pci_virtio_block.c projects/counters/usr.sbin/bhyve/pci_virtio_net.c projects/counters/usr.sbin/bhyvectl/bhyvectl.c projects/counters/usr.sbin/bhyveload/bhyveload.8 projects/counters/usr.sbin/bhyveload/bhyveload.c projects/counters/usr.sbin/moused/moused.c Directory Properties: projects/counters/ (props changed) projects/counters/cddl/ (props changed) projects/counters/cddl/contrib/opensolaris/ (props changed) projects/counters/cddl/contrib/opensolaris/cmd/zfs/ (props changed) projects/counters/cddl/contrib/opensolaris/lib/libzfs/ (props changed) projects/counters/contrib/binutils/ (props changed) projects/counters/contrib/llvm/ (props changed) projects/counters/contrib/llvm/tools/clang/ (props changed) projects/counters/crypto/openssh/ (props changed) projects/counters/gnu/lib/ (props changed) projects/counters/lib/libc/ (props changed) projects/counters/lib/libvmmapi/ (props changed) projects/counters/sbin/ (props changed) projects/counters/sbin/ipfw/ (props changed) projects/counters/share/man/man4/ (props changed) projects/counters/sys/ (props changed) projects/counters/sys/amd64/vmm/ (props changed) projects/counters/sys/boot/ (props changed) projects/counters/sys/cddl/contrib/opensolaris/ (props changed) projects/counters/sys/conf/ (props changed) projects/counters/usr.sbin/bhyve/ (props changed) projects/counters/usr.sbin/bhyvectl/ (props changed) projects/counters/usr.sbin/bhyveload/ (props changed) Modified: projects/counters/Makefile.inc1 ============================================================================== --- projects/counters/Makefile.inc1 Thu Mar 21 16:19:46 2013 (r248588) +++ projects/counters/Makefile.inc1 Thu Mar 21 16:29:08 2013 (r248589) @@ -1389,6 +1389,7 @@ _prebuild_libs= ${_kerberos5_lib_libasn1 lib/libopie lib/libpam ${_lib_libthr} \ lib/libradius lib/libsbuf lib/libtacplus \ ${_cddl_lib_libumem} ${_cddl_lib_libnvpair} \ + ${_cddl_lib_libzfs_core} \ lib/libutil ${_lib_libypclnt} lib/libz lib/msun \ ${_secure_lib_libcrypto} ${_secure_lib_libssh} \ ${_secure_lib_libssl} @@ -1417,7 +1418,9 @@ lib/libopie__L lib/libtacplus__L: lib/li .if ${MK_CDDL} != "no" _cddl_lib_libumem= cddl/lib/libumem _cddl_lib_libnvpair= cddl/lib/libnvpair +_cddl_lib_libzfs_core= cddl/lib/libzfs_core _cddl_lib= cddl/lib +cddl/lib/libzfs_core__L: cddl/lib/libnvpair__L .endif .if ${MK_CRYPT} != "no" Modified: projects/counters/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- projects/counters/cddl/contrib/opensolaris/cmd/zdb/zdb.c Thu Mar 21 16:19:46 2013 (r248588) +++ projects/counters/cddl/contrib/opensolaris/cmd/zdb/zdb.c Thu Mar 21 16:29:08 2013 (r248589) @@ -57,6 +57,7 @@ #include #include #include +#include #undef ZFS_MAXNAMELEN #undef verify #include @@ -206,6 +207,27 @@ dump_packed_nvlist(objset_t *os, uint64_ nvlist_free(nv); } +/* ARGSUSED */ +static void +dump_history_offsets(objset_t *os, uint64_t object, void *data, size_t size) +{ + spa_history_phys_t *shp = data; + + if (shp == NULL) + return; + + (void) printf("\t\tpool_create_len = %llu\n", + (u_longlong_t)shp->sh_pool_create_len); + (void) printf("\t\tphys_max_off = %llu\n", + (u_longlong_t)shp->sh_phys_max_off); + (void) printf("\t\tbof = %llu\n", + (u_longlong_t)shp->sh_bof); + (void) printf("\t\teof = %llu\n", + (u_longlong_t)shp->sh_eof); + (void) printf("\t\trecords_lost = %llu\n", + (u_longlong_t)shp->sh_records_lost); +} + static void zdb_nicenum(uint64_t num, char *buf) { @@ -857,21 +879,22 @@ dump_history(spa_t *spa) for (int i = 0; i < num; i++) { uint64_t time, txg, ievent; char *cmd, *intstr; + boolean_t printed = B_FALSE; if (nvlist_lookup_uint64(events[i], ZPOOL_HIST_TIME, &time) != 0) - continue; + goto next; if (nvlist_lookup_string(events[i], ZPOOL_HIST_CMD, &cmd) != 0) { if (nvlist_lookup_uint64(events[i], ZPOOL_HIST_INT_EVENT, &ievent) != 0) - continue; + goto next; verify(nvlist_lookup_uint64(events[i], ZPOOL_HIST_TXG, &txg) == 0); verify(nvlist_lookup_string(events[i], ZPOOL_HIST_INT_STR, &intstr) == 0); - if (ievent >= LOG_END) - continue; + if (ievent >= ZFS_NUM_LEGACY_HISTORY_EVENTS) + goto next; (void) snprintf(internalstr, sizeof (internalstr), @@ -884,6 +907,14 @@ dump_history(spa_t *spa) (void) localtime_r(&tsec, &t); (void) strftime(tbuf, sizeof (tbuf), "%F.%T", &t); (void) printf("%s %s\n", tbuf, cmd); + printed = B_TRUE; + +next: + if (dump_opt['h'] > 1) { + if (!printed) + (void) printf("unrecognized record:\n"); + dump_nvlist(events[i], 2); + } } } @@ -1496,7 +1527,7 @@ static object_viewer_t *object_viewer[DM dump_zap, /* other ZAP */ dump_zap, /* persistent error log */ dump_uint8, /* SPA history */ - dump_uint64, /* SPA history offsets */ + dump_history_offsets, /* SPA history offsets */ dump_zap, /* Pool properties */ dump_zap, /* DSL permissions */ dump_acl, /* ZFS ACL */ @@ -1661,7 +1692,9 @@ dump_dir(objset_t *os) int print_header = 1; int i, error; + dsl_pool_config_enter(dmu_objset_pool(os), FTAG); dmu_objset_fast_stat(os, &dds); + dsl_pool_config_exit(dmu_objset_pool(os), FTAG); if (dds.dds_type < DMU_OST_NUMTYPES) type = objset_types[dds.dds_type]; @@ -2070,7 +2103,6 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog NULL, NULL, ZIO_PRIORITY_ASYNC_READ, flags, zb)); free(data); - if (ioerr && !(flags & ZIO_FLAG_SPECULATIVE)) { zcb->zcb_haderrors = 1; zcb->zcb_errors[ioerr]++; Modified: projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Thu Mar 21 16:19:46 2013 (r248588) +++ projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Thu Mar 21 16:29:08 2013 (r248589) @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 1, 2013 +.Dd March 21, 2013 .Dt ZFS 8 .Os .Sh NAME @@ -65,6 +65,7 @@ .Op Fl r .Oo Fl o Ar property Ns = Ns Ar value Oc Ns ... .Ar filesystem@snapname Ns | Ns Ar volume@snapname +.Ar filesystem@snapname Ns | Ns Ar volume@snapname Ns ... .Nm .Cm rollback .Op Fl rRf @@ -1617,7 +1618,11 @@ multiple snapshots. Destroy (or mark for deferred deletion) all snapshots with this name in descendent file systems. .It Fl R -Recursively destroy all dependents. +Recursively destroy all clones of these snapshots, including the clones, +snapshots, and children. +If this flag is specified, the +.Op fl d +flag will have no effect. .It Fl n Do a dry-run ("No-op") deletion. No data will be deleted. This is useful in conjunction with the @@ -1645,17 +1650,18 @@ behavior for mounted file systems in use .Op Fl r .Oo Fl o Ar property Ns = Ns Ar value Oc Ns ... .Ar filesystem@snapname Ns | Ns volume@snapname +.Ar filesystem@snapname Ns | Ns volume@snapname Ns ... .Xc .Pp -Creates a snapshot with the given name. All previous modifications by -successful system calls to the file system are part of the snapshot. See the +Creates snapshots with the given names. All previous modifications by +successful system calls to the file system are part of the snapshots. +Snapshots are taken atomically, so that all snapshots correspond to the same +moment in time. See the .Qq Sx Snapshots section for details. .Bl -tag -width indent .It Fl r -Recursively create snapshots of all descendent datasets. Snapshots are taken -atomically, so that all recursive snapshots correspond to the same moment in -time. +Recursively create snapshots of all descendent datasets .It Fl o Ar property Ns = Ns Ar value Sets the specified property; see .Qq Nm Cm create Modified: projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c ============================================================================== --- projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Thu Mar 21 16:19:46 2013 (r248588) +++ projects/counters/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Thu Mar 21 16:29:08 2013 (r248589) @@ -58,6 +58,7 @@ #include #include +#include #include #include #include @@ -74,6 +75,7 @@ libzfs_handle_t *g_zfs; static FILE *mnttab_file; static char history_str[HIS_MAX_RECORD_LEN]; +static boolean_t log_history = B_TRUE; static int zfs_do_clone(int argc, char **argv); static int zfs_do_create(int argc, char **argv); @@ -276,7 +278,7 @@ get_usage(zfs_help_t idx) return (gettext("\tshare <-a | filesystem>\n")); case HELP_SNAPSHOT: return (gettext("\tsnapshot [-r] [-o property=value] ... " - "\n")); + " ...\n")); case HELP_UNMOUNT: return (gettext("\tunmount [-f] " "<-a | filesystem|mountpoint>\n")); @@ -914,11 +916,12 @@ typedef struct destroy_cbdata { boolean_t cb_parsable; boolean_t cb_dryrun; nvlist_t *cb_nvl; + nvlist_t *cb_batchedsnaps; /* first snap in contiguous run */ - zfs_handle_t *cb_firstsnap; + char *cb_firstsnap; /* previous snap in contiguous run */ - zfs_handle_t *cb_prevsnap; + char *cb_prevsnap; int64_t cb_snapused; char *cb_snapspec; } destroy_cbdata_t; @@ -1010,9 +1013,27 @@ destroy_callback(zfs_handle_t *zhp, void zfs_close(zhp); return (0); } + if (cb->cb_dryrun) { + zfs_close(zhp); + return (0); + } + + /* + * We batch up all contiguous snapshots (even of different + * filesystems) and destroy them with one ioctl. We can't + * simply do all snap deletions and then all fs deletions, + * because we must delete a clone before its origin. + */ + if (zfs_get_type(zhp) == ZFS_TYPE_SNAPSHOT) { + fnvlist_add_boolean(cb->cb_batchedsnaps, name); + } else { + int error = zfs_destroy_snaps_nvl(g_zfs, + cb->cb_batchedsnaps, B_FALSE); + fnvlist_free(cb->cb_batchedsnaps); + cb->cb_batchedsnaps = fnvlist_alloc(); - if (!cb->cb_dryrun) { - if (zfs_unmount(zhp, NULL, cb->cb_force ? MS_FORCE : 0) != 0 || + if (error != 0 || + zfs_unmount(zhp, NULL, cb->cb_force ? MS_FORCE : 0) != 0 || zfs_destroy(zhp, cb->cb_defer_destroy) != 0) { zfs_close(zhp); return (-1); @@ -1032,11 +1053,13 @@ destroy_print_cb(zfs_handle_t *zhp, void if (nvlist_exists(cb->cb_nvl, name)) { if (cb->cb_firstsnap == NULL) - cb->cb_firstsnap = zfs_handle_dup(zhp); + cb->cb_firstsnap = strdup(name); if (cb->cb_prevsnap != NULL) - zfs_close(cb->cb_prevsnap); + free(cb->cb_prevsnap); /* this snap continues the current range */ - cb->cb_prevsnap = zfs_handle_dup(zhp); + cb->cb_prevsnap = strdup(name); + if (cb->cb_firstsnap == NULL || cb->cb_prevsnap == NULL) + nomem(); if (cb->cb_verbose) { if (cb->cb_parsable) { (void) printf("destroy\t%s\n", name); @@ -1051,12 +1074,12 @@ destroy_print_cb(zfs_handle_t *zhp, void } else if (cb->cb_firstsnap != NULL) { /* end of this range */ uint64_t used = 0; - err = zfs_get_snapused_int(cb->cb_firstsnap, + err = lzc_snaprange_space(cb->cb_firstsnap, cb->cb_prevsnap, &used); cb->cb_snapused += used; - zfs_close(cb->cb_firstsnap); + free(cb->cb_firstsnap); cb->cb_firstsnap = NULL; - zfs_close(cb->cb_prevsnap); + free(cb->cb_prevsnap); cb->cb_prevsnap = NULL; } zfs_close(zhp); @@ -1073,13 +1096,13 @@ destroy_print_snapshots(zfs_handle_t *fs if (cb->cb_firstsnap != NULL) { uint64_t used = 0; if (err == 0) { - err = zfs_get_snapused_int(cb->cb_firstsnap, + err = lzc_snaprange_space(cb->cb_firstsnap, cb->cb_prevsnap, &used); } cb->cb_snapused += used; - zfs_close(cb->cb_firstsnap); + free(cb->cb_firstsnap); cb->cb_firstsnap = NULL; - zfs_close(cb->cb_prevsnap); + free(cb->cb_prevsnap); cb->cb_prevsnap = NULL; } return (err); @@ -1166,8 +1189,10 @@ static int zfs_do_destroy(int argc, char **argv) { destroy_cbdata_t cb = { 0 }; + int rv = 0; + int err = 0; int c; - zfs_handle_t *zhp; + zfs_handle_t *zhp = NULL; char *at; zfs_type_t type = ZFS_TYPE_DATASET; @@ -1221,11 +1246,9 @@ zfs_do_destroy(int argc, char **argv) at = strchr(argv[0], '@'); if (at != NULL) { - int err = 0; /* Build the list of snaps to destroy in cb_nvl. */ - if (nvlist_alloc(&cb.cb_nvl, NV_UNIQUE_NAME, 0) != 0) - nomem(); + cb.cb_nvl = fnvlist_alloc(); *at = '\0'; zhp = zfs_open(g_zfs, argv[0], @@ -1236,17 +1259,15 @@ zfs_do_destroy(int argc, char **argv) cb.cb_snapspec = at + 1; if (gather_snapshots(zfs_handle_dup(zhp), &cb) != 0 || cb.cb_error) { - zfs_close(zhp); - nvlist_free(cb.cb_nvl); - return (1); + rv = 1; + goto out; } if (nvlist_empty(cb.cb_nvl)) { (void) fprintf(stderr, gettext("could not find any " "snapshots to destroy; check snapshot names.\n")); - zfs_close(zhp); - nvlist_free(cb.cb_nvl); - return (1); + rv = 1; + goto out; } if (cb.cb_verbose) { @@ -1265,18 +1286,26 @@ zfs_do_destroy(int argc, char **argv) } if (!cb.cb_dryrun) { - if (cb.cb_doclones) + if (cb.cb_doclones) { + cb.cb_batchedsnaps = fnvlist_alloc(); err = destroy_clones(&cb); + if (err == 0) { + err = zfs_destroy_snaps_nvl(g_zfs, + cb.cb_batchedsnaps, B_FALSE); + } + if (err != 0) { + rv = 1; + goto out; + } + } if (err == 0) { - err = zfs_destroy_snaps_nvl(zhp, cb.cb_nvl, + err = zfs_destroy_snaps_nvl(g_zfs, cb.cb_nvl, cb.cb_defer_destroy); } } - zfs_close(zhp); - nvlist_free(cb.cb_nvl); if (err != 0) - return (1); + rv = 1; } else { /* Open the given dataset */ if ((zhp = zfs_open(g_zfs, argv[0], type)) == NULL) @@ -1297,8 +1326,8 @@ zfs_do_destroy(int argc, char **argv) zfs_get_name(zhp)); (void) fprintf(stderr, gettext("use 'zpool destroy %s' " "to destroy the pool itself\n"), zfs_get_name(zhp)); - zfs_close(zhp); - return (1); + rv = 1; + goto out; } /* @@ -1308,30 +1337,42 @@ zfs_do_destroy(int argc, char **argv) if (!cb.cb_doclones && zfs_iter_dependents(zhp, B_TRUE, destroy_check_dependent, &cb) != 0) { - zfs_close(zhp); - return (1); + rv = 1; + goto out; } if (cb.cb_error) { - zfs_close(zhp); - return (1); + rv = 1; + goto out; } + cb.cb_batchedsnaps = fnvlist_alloc(); if (zfs_iter_dependents(zhp, B_FALSE, destroy_callback, &cb) != 0) { - zfs_close(zhp); - return (1); + rv = 1; + goto out; } /* * Do the real thing. The callback will close the * handle regardless of whether it succeeds or not. */ - if (destroy_callback(zhp, &cb) != 0) - return (1); + err = destroy_callback(zhp, &cb); + zhp = NULL; + if (err == 0) { + err = zfs_destroy_snaps_nvl(g_zfs, + cb.cb_batchedsnaps, cb.cb_defer_destroy); + } + if (err != 0) + rv = 1; } - return (0); +out: + fnvlist_free(cb.cb_batchedsnaps); + fnvlist_free(cb.cb_nvl); + if (zhp != NULL) + zfs_close(zhp); + return (rv); } static boolean_t @@ -1932,9 +1973,11 @@ upgrade_set_callback(zfs_handle_t *zhp, /* * If they did "zfs upgrade -a", then we could * be doing ioctls to different pools. We need - * to log this history once to each pool. + * to log this history once to each pool, and bypass + * the normal history logging that happens in main(). */ - verify(zpool_stage_history(g_zfs, history_str) == 0); + (void) zpool_log_history(g_zfs, history_str); + log_history = B_FALSE; } if (zfs_prop_set(zhp, "version", verstr) == 0) cb->cb_numupgraded++; @@ -3472,6 +3515,32 @@ zfs_do_set(int argc, char **argv) return (ret); } +typedef struct snap_cbdata { + nvlist_t *sd_nvl; + boolean_t sd_recursive; + const char *sd_snapname; +} snap_cbdata_t; + +static int +zfs_snapshot_cb(zfs_handle_t *zhp, void *arg) +{ + snap_cbdata_t *sd = arg; + char *name; + int rv = 0; + int error; + + error = asprintf(&name, "%s@%s", zfs_get_name(zhp), sd->sd_snapname); + if (error == -1) + nomem(); + fnvlist_add_boolean(sd->sd_nvl, name); + free(name); + + if (sd->sd_recursive) + rv = zfs_iter_filesystems(zhp, zfs_snapshot_cb, sd); + zfs_close(zhp); + return (rv); +} + /* * zfs snapshot [-r] [-o prop=value] ... * @@ -3481,13 +3550,16 @@ zfs_do_set(int argc, char **argv) static int zfs_do_snapshot(int argc, char **argv) { - boolean_t recursive = B_FALSE; int ret = 0; char c; nvlist_t *props; + snap_cbdata_t sd = { 0 }; + boolean_t multiple_snaps = B_FALSE; if (nvlist_alloc(&props, NV_UNIQUE_NAME, 0) != 0) nomem(); + if (nvlist_alloc(&sd.sd_nvl, NV_UNIQUE_NAME, 0) != 0) + nomem(); /* check options */ while ((c = getopt(argc, argv, "ro:")) != -1) { @@ -3497,7 +3569,8 @@ zfs_do_snapshot(int argc, char **argv) return (1); break; case 'r': - recursive = B_TRUE; + sd.sd_recursive = B_TRUE; + multiple_snaps = B_TRUE; break; case '?': (void) fprintf(stderr, gettext("invalid option '%c'\n"), @@ -3514,18 +3587,35 @@ zfs_do_snapshot(int argc, char **argv) (void) fprintf(stderr, gettext("missing snapshot argument\n")); goto usage; } - if (argc > 1) { - (void) fprintf(stderr, gettext("too many arguments\n")); - goto usage; + + if (argc > 1) + multiple_snaps = B_TRUE; + for (; argc > 0; argc--, argv++) { + char *atp; + zfs_handle_t *zhp; + + atp = strchr(argv[0], '@'); + if (atp == NULL) + goto usage; + *atp = '\0'; + sd.sd_snapname = atp + 1; + zhp = zfs_open(g_zfs, argv[0], + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME); + if (zhp == NULL) + goto usage; + if (zfs_snapshot_cb(zhp, &sd) != 0) + goto usage; } - ret = zfs_snapshot(g_zfs, argv[0], recursive, props); + ret = zfs_snapshot_nvl(g_zfs, sd.sd_nvl, props); + nvlist_free(sd.sd_nvl); nvlist_free(props); - if (ret && recursive) + if (ret != 0 && multiple_snaps) (void) fprintf(stderr, gettext("no snapshots were created\n")); return (ret != 0); usage: + nvlist_free(sd.sd_nvl); nvlist_free(props); usage(B_FALSE); return (-1); @@ -5068,28 +5158,12 @@ cleanup2: return (error); } -/* - * zfs allow [-r] [-t] ... - * - * -r Recursively hold - * -t Temporary hold (hidden option) - * - * Apply a user-hold with the given tag to the list of snapshots. - */ static int zfs_do_allow(int argc, char **argv) { return (zfs_do_allow_unallow_impl(argc, argv, B_FALSE)); } -/* - * zfs unallow [-r] [-t] ... - * - * -r Recursively hold - * -t Temporary hold (hidden option) - * - * Apply a user-hold with the given tag to the list of snapshots. - */ static int zfs_do_unallow(int argc, char **argv) { @@ -5103,7 +5177,6 @@ zfs_do_hold_rele_impl(int argc, char **a int i; const char *tag; boolean_t recursive = B_FALSE; - boolean_t temphold = B_FALSE; const char *opts = holding ? "rt" : "r"; int c; @@ -5113,9 +5186,6 @@ zfs_do_hold_rele_impl(int argc, char **a case 'r': recursive = B_TRUE; break; - case 't': - temphold = B_TRUE; - break; case '?': (void) fprintf(stderr, gettext("invalid option '%c'\n"), optopt); @@ -5164,7 +5234,7 @@ zfs_do_hold_rele_impl(int argc, char **a } if (holding) { if (zfs_hold(zhp, delim+1, tag, recursive, - temphold, B_FALSE, -1, 0, 0) != 0) + B_FALSE, -1) != 0) ++errors; } else { if (zfs_release(zhp, delim+1, tag, recursive) != 0) @@ -5180,7 +5250,6 @@ zfs_do_hold_rele_impl(int argc, char **a * zfs hold [-r] [-t] ... * * -r Recursively hold - * -t Temporary hold (hidden option) * * Apply a user-hold with the given tag to the list of snapshots. */ @@ -6602,8 +6671,7 @@ main(int argc, char **argv) return (1); } - zpool_set_history_str("zfs", argc, argv, history_str); - verify(zpool_stage_history(g_zfs, history_str) == 0); + zfs_save_arguments(argc, argv, history_str, sizeof (history_str)); libzfs_print_on_error(g_zfs, B_TRUE); @@ -6672,6 +6740,9 @@ main(int argc, char **argv) (void) fclose(mnttab_file); + if (ret == 0 && log_history) + (void) zpool_log_history(g_zfs, history_str); + libzfs_fini(g_zfs); /* Modified: projects/counters/cddl/contrib/opensolaris/cmd/zhack/zhack.c ============================================================================== --- projects/counters/cddl/contrib/opensolaris/cmd/zhack/zhack.c Thu Mar 21 16:19:46 2013 (r248588) +++ projects/counters/cddl/contrib/opensolaris/cmd/zhack/zhack.c Thu Mar 21 16:29:08 2013 (r248589) @@ -46,6 +46,7 @@ #include #include #include +#include #undef ZFS_MAXNAMELEN #undef verify #include @@ -273,12 +274,15 @@ zhack_do_feature_stat(int argc, char **a } static void -feature_enable_sync(void *arg1, void *arg2, dmu_tx_t *tx) +feature_enable_sync(void *arg, dmu_tx_t *tx) { - spa_t *spa = arg1; - zfeature_info_t *feature = arg2; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + zfeature_info_t *feature = arg; spa_feature_enable(spa, feature, tx); + spa_history_log_internal(spa, "zhack enable feature", tx, + "name=%s can_readonly=%u", + feature->fi_guid, feature->fi_can_readonly); } static void @@ -341,8 +345,8 @@ zhack_do_feature_enable(int argc, char * if (0 == zap_contains(mos, spa->spa_feat_desc_obj, feature.fi_guid)) fatal("feature already enabled: %s", feature.fi_guid); - VERIFY3U(0, ==, dsl_sync_task_do(spa->spa_dsl_pool, NULL, - feature_enable_sync, spa, &feature, 5)); + VERIFY0(dsl_sync_task(spa_name(spa), NULL, + feature_enable_sync, &feature, 5)); spa_close(spa, FTAG); @@ -350,21 +354,25 @@ zhack_do_feature_enable(int argc, char * } static void -feature_incr_sync(void *arg1, void *arg2, dmu_tx_t *tx) +feature_incr_sync(void *arg, dmu_tx_t *tx) { - spa_t *spa = arg1; - zfeature_info_t *feature = arg2; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + zfeature_info_t *feature = arg; spa_feature_incr(spa, feature, tx); + spa_history_log_internal(spa, "zhack feature incr", tx, + "name=%s", feature->fi_guid); } static void -feature_decr_sync(void *arg1, void *arg2, dmu_tx_t *tx) +feature_decr_sync(void *arg, dmu_tx_t *tx) { - spa_t *spa = arg1; - zfeature_info_t *feature = arg2; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + zfeature_info_t *feature = arg; spa_feature_decr(spa, feature, tx); + spa_history_log_internal(spa, "zhack feature decr", tx, + "name=%s", feature->fi_guid); } static void @@ -435,8 +443,8 @@ zhack_do_feature_ref(int argc, char **ar if (decr && !spa_feature_is_active(spa, &feature)) fatal("feature refcount already 0: %s", feature.fi_guid); - VERIFY3U(0, ==, dsl_sync_task_do(spa->spa_dsl_pool, NULL, - decr ? feature_decr_sync : feature_incr_sync, spa, &feature, 5)); + VERIFY0(dsl_sync_task(spa_name(spa), NULL, + decr ? feature_decr_sync : feature_incr_sync, &feature, 5)); spa_close(spa, FTAG); } Modified: projects/counters/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c ============================================================================== --- projects/counters/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Thu Mar 21 16:19:46 2013 (r248588) +++ projects/counters/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Thu Mar 21 16:29:08 2013 (r248589) @@ -192,9 +192,9 @@ static zpool_command_t command_table[] = #define NCOMMAND (sizeof (command_table) / sizeof (command_table[0])) -zpool_command_t *current_command; +static zpool_command_t *current_command; static char history_str[HIS_MAX_RECORD_LEN]; - +static boolean_t log_history = B_TRUE; static uint_t timestamp_fmt = NODATE; static const char * @@ -1093,7 +1093,10 @@ zpool_do_destroy(int argc, char **argv) return (1); } - ret = (zpool_destroy(zhp) != 0); + /* The history must be logged as part of the export */ + log_history = B_FALSE; + + ret = (zpool_destroy(zhp, history_str) != 0); zpool_close(zhp); @@ -1157,10 +1160,13 @@ zpool_do_export(int argc, char **argv) continue; } + /* The history must be logged as part of the export */ + log_history = B_FALSE; + if (hardforce) { - if (zpool_export_force(zhp) != 0) + if (zpool_export_force(zhp, history_str) != 0) ret = 1; - } else if (zpool_export(zhp, force) != 0) { + } else if (zpool_export(zhp, force, history_str) != 0) { ret = 1; } @@ -4563,6 +4569,14 @@ upgrade_cb(zpool_handle_t *zhp, void *ar if (count > 0) { cbp->cb_first = B_FALSE; printnl = B_TRUE; + /* + * If they did "zpool upgrade -a", then we could + * be doing ioctls to different pools. We need + * to log this history once to each pool, and bypass + * the normal history logging that happens in main(). + */ + (void) zpool_log_history(g_zfs, history_str); + log_history = B_FALSE; } } @@ -4924,8 +4938,8 @@ zpool_do_upgrade(int argc, char **argv) typedef struct hist_cbdata { boolean_t first; - int longfmt; - int internal; + boolean_t longfmt; + boolean_t internal; } hist_cbdata_t; /* @@ -4937,21 +4951,8 @@ get_history_one(zpool_handle_t *zhp, voi nvlist_t *nvhis; nvlist_t **records; uint_t numrecords; - char *cmdstr; - char *pathstr; - uint64_t dst_time; - time_t tsec; - struct tm t; - char tbuf[30]; int ret, i; - uint64_t who; - struct passwd *pwd; - char *hostname; - char *zonename; - char internalstr[MAXPATHLEN]; hist_cbdata_t *cb = (hist_cbdata_t *)data; - uint64_t txg; - uint64_t ievent; cb->first = B_FALSE; @@ -4963,64 +4964,94 @@ get_history_one(zpool_handle_t *zhp, voi verify(nvlist_lookup_nvlist_array(nvhis, ZPOOL_HIST_RECORD, &records, &numrecords) == 0); for (i = 0; i < numrecords; i++) { - if (nvlist_lookup_uint64(records[i], ZPOOL_HIST_TIME, - &dst_time) != 0) - continue; + nvlist_t *rec = records[i]; + char tbuf[30] = ""; - /* is it an internal event or a standard event? */ - if (nvlist_lookup_string(records[i], ZPOOL_HIST_CMD, - &cmdstr) != 0) { - if (cb->internal == 0) + if (nvlist_exists(rec, ZPOOL_HIST_TIME)) { + time_t tsec; + struct tm t; + + tsec = fnvlist_lookup_uint64(records[i], + ZPOOL_HIST_TIME); + (void) localtime_r(&tsec, &t); + (void) strftime(tbuf, sizeof (tbuf), "%F.%T", &t); + } + + if (nvlist_exists(rec, ZPOOL_HIST_CMD)) { + (void) printf("%s %s", tbuf, + fnvlist_lookup_string(rec, ZPOOL_HIST_CMD)); + } else if (nvlist_exists(rec, ZPOOL_HIST_INT_EVENT)) { + int ievent = + fnvlist_lookup_uint64(rec, ZPOOL_HIST_INT_EVENT); + if (!cb->internal) continue; - - if (nvlist_lookup_uint64(records[i], - ZPOOL_HIST_INT_EVENT, &ievent) != 0) + if (ievent >= ZFS_NUM_LEGACY_HISTORY_EVENTS) { + (void) printf("%s unrecognized record:\n", + tbuf); + dump_nvlist(rec, 4); + continue; + } + (void) printf("%s [internal %s txg:%lld] %s", tbuf, + zfs_history_event_names[ievent], + fnvlist_lookup_uint64(rec, ZPOOL_HIST_TXG), + fnvlist_lookup_string(rec, ZPOOL_HIST_INT_STR)); + } else if (nvlist_exists(rec, ZPOOL_HIST_INT_NAME)) { + if (!cb->internal) continue; - verify(nvlist_lookup_uint64(records[i], - ZPOOL_HIST_TXG, &txg) == 0); - verify(nvlist_lookup_string(records[i], - ZPOOL_HIST_INT_STR, &pathstr) == 0); - if (ievent >= LOG_END) + (void) printf("%s [txg:%lld] %s", tbuf, + fnvlist_lookup_uint64(rec, ZPOOL_HIST_TXG), + fnvlist_lookup_string(rec, ZPOOL_HIST_INT_NAME)); + if (nvlist_exists(rec, ZPOOL_HIST_DSNAME)) { + (void) printf(" %s (%llu)", + fnvlist_lookup_string(rec, + ZPOOL_HIST_DSNAME), + fnvlist_lookup_uint64(rec, + ZPOOL_HIST_DSID)); + } + (void) printf(" %s", fnvlist_lookup_string(rec, + ZPOOL_HIST_INT_STR)); + } else if (nvlist_exists(rec, ZPOOL_HIST_IOCTL)) { + if (!cb->internal) continue; - (void) snprintf(internalstr, - sizeof (internalstr), - "[internal %s txg:%lld] %s", - zfs_history_event_names[ievent], txg, - pathstr); - cmdstr = internalstr; - } - tsec = dst_time; - (void) localtime_r(&tsec, &t); - (void) strftime(tbuf, sizeof (tbuf), "%F.%T", &t); - (void) printf("%s %s", tbuf, cmdstr); + (void) printf("%s ioctl %s\n", tbuf, + fnvlist_lookup_string(rec, ZPOOL_HIST_IOCTL)); + if (nvlist_exists(rec, ZPOOL_HIST_INPUT_NVL)) { + (void) printf(" input:\n"); + dump_nvlist(fnvlist_lookup_nvlist(rec, + ZPOOL_HIST_INPUT_NVL), 8); + } + if (nvlist_exists(rec, ZPOOL_HIST_OUTPUT_NVL)) { + (void) printf(" output:\n"); + dump_nvlist(fnvlist_lookup_nvlist(rec, + ZPOOL_HIST_OUTPUT_NVL), 8); + } + } else { + if (!cb->internal) + continue; + (void) printf("%s unrecognized record:\n", tbuf); + dump_nvlist(rec, 4); + } if (!cb->longfmt) { (void) printf("\n"); continue; } (void) printf(" ["); - if (nvlist_lookup_uint64(records[i], - ZPOOL_HIST_WHO, &who) == 0) { - pwd = getpwuid((uid_t)who); - if (pwd) - (void) printf("user %s on", - pwd->pw_name); - else - (void) printf("user %d on", - (int)who); - } else { - (void) printf(gettext("no info]\n")); - continue; + if (nvlist_exists(rec, ZPOOL_HIST_WHO)) { + uid_t who = fnvlist_lookup_uint64(rec, ZPOOL_HIST_WHO); + struct passwd *pwd = getpwuid(who); + (void) printf("user %d ", (int)who); + if (pwd != NULL) + (void) printf("(%s) ", pwd->pw_name); + } + if (nvlist_exists(rec, ZPOOL_HIST_HOST)) { + (void) printf("on %s", + fnvlist_lookup_string(rec, ZPOOL_HIST_HOST)); + } + if (nvlist_exists(rec, ZPOOL_HIST_ZONE)) { + (void) printf(":%s", + fnvlist_lookup_string(rec, ZPOOL_HIST_ZONE)); } - if (nvlist_lookup_string(records[i], - ZPOOL_HIST_HOST, &hostname) == 0) { - (void) printf(" %s", hostname); - } - if (nvlist_lookup_string(records[i], - ZPOOL_HIST_ZONE, &zonename) == 0) { - (void) printf(":%s", zonename); - } - (void) printf("]"); (void) printf("\n"); } @@ -5035,8 +5066,6 @@ get_history_one(zpool_handle_t *zhp, voi * * Displays the history of commands that modified pools. */ - - int zpool_do_history(int argc, char **argv) { @@ -5049,10 +5078,10 @@ zpool_do_history(int argc, char **argv) while ((c = getopt(argc, argv, "li")) != -1) { switch (c) { case 'l': - cbdata.longfmt = 1; + cbdata.longfmt = B_TRUE; break; case 'i': - cbdata.internal = 1; + cbdata.internal = B_TRUE; break; case '?': (void) fprintf(stderr, gettext("invalid option '%c'\n"), @@ -5277,8 +5306,7 @@ main(int argc, char **argv) if (strcmp(cmdname, "-?") == 0) usage(B_TRUE); - zpool_set_history_str("zpool", argc, argv, history_str); - verify(zpool_stage_history(g_zfs, history_str) == 0); + zfs_save_arguments(argc, argv, history_str, sizeof (history_str)); /* * Run the appropriate command. @@ -5305,6 +5333,9 @@ main(int argc, char **argv) usage(B_FALSE); } + if (ret == 0 && log_history) + (void) zpool_log_history(g_zfs, history_str); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Thu Mar 21 20:14:51 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id A6B9D9AC; Thu, 21 Mar 2013 20:14:51 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 99EEB89F; Thu, 21 Mar 2013 20:14:51 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2LKEpww011664; Thu, 21 Mar 2013 20:14:51 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2LKEphU011663; Thu, 21 Mar 2013 20:14:51 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201303212014.r2LKEphU011663@svn.freebsd.org> From: Gleb Smirnoff Date: Thu, 21 Mar 2013 20:14:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248592 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Mar 2013 20:14:51 -0000 Author: glebius Date: Thu Mar 21 20:14:51 2013 New Revision: 248592 URL: http://svnweb.freebsd.org/changeset/base/248592 Log: Document UMA_ZONE_PCPU. Modified: projects/counters/share/man/man9/zone.9 Modified: projects/counters/share/man/man9/zone.9 ============================================================================== --- projects/counters/share/man/man9/zone.9 Thu Mar 21 19:58:25 2013 (r248591) +++ projects/counters/share/man/man9/zone.9 Thu Mar 21 20:14:51 2013 (r248592) @@ -153,6 +153,19 @@ See .Fn uma_find_refcnt . .It Dv UMA_ZONE_NODUMP Pages belonging to the zone will not be included into mini-dumps. +.It Dv UMA_ZONE_PCPU +An allocation from zone would have +.Va mp_ncpu +shadow copies, that are privately assigned to CPUs. +A CPU can address its private copy using base allocation address plus +multiple of current CPU id and +.Fn sizeof "struct pcpu" : +.Bd -literal -offset indent +critical_enter(); +foo_pcpu = (foo *)((char *)foo_base + sizeof(struct pcpu) * curcpu); +/* do something with foo_pcpu */ +critical_exit(); +.Ed .It Dv UMA_ZONE_OFFPAGE By default book-keeping of items within a slab is done in the slab page itself. This flag explicitly tells subsystem that book-keeping structure should be From owner-svn-src-projects@FreeBSD.ORG Fri Mar 22 01:34:28 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id C7005A0B; Fri, 22 Mar 2013 01:34:28 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id B858D802; Fri, 22 Mar 2013 01:34:28 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2M1YSPS010061; Fri, 22 Mar 2013 01:34:28 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2M1YSTq010060; Fri, 22 Mar 2013 01:34:28 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303220134.r2M1YSTq010060@svn.freebsd.org> From: "Simon J. Gerraty" Date: Fri, 22 Mar 2013 01:34:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248605 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Mar 2013 01:34:28 -0000 Author: sjg Date: Fri Mar 22 01:34:27 2013 New Revision: 248605 URL: http://svnweb.freebsd.org/changeset/base/248605 Log: When processing DPADD, defer application of :tA (realpath) so we do not lose /. Modified: projects/bmake/share/mk/gendirdeps.mk Modified: projects/bmake/share/mk/gendirdeps.mk ============================================================================== --- projects/bmake/share/mk/gendirdeps.mk Thu Mar 21 23:37:35 2013 (r248604) +++ projects/bmake/share/mk/gendirdeps.mk Fri Mar 22 01:34:27 2013 (r248605) @@ -163,13 +163,13 @@ dir_list != cd ${_OBJDIR} && \ _nonlibs := ${DPADD:T:Nlib*:N*include} .if !empty(_nonlibs) ddep_list = -.for f in ${_nonlibs:@x@${DPADD:M*/$x}@:tA} +.for f in ${_nonlibs:@x@${DPADD:M*/$x}@} .if exists($f.dirdep) ddep_list += $f.dirdep .elif exists(${f:H}.dirdep) ddep_list += ${f:H}.dirdep .else -dir_list += ${f:H} +dir_list += ${f:H:tA} .endif .endfor .if !empty(ddep_list) From owner-svn-src-projects@FreeBSD.ORG Fri Mar 22 01:35:08 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 92FFBB2D; Fri, 22 Mar 2013 01:35:08 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 85F41807; Fri, 22 Mar 2013 01:35:08 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2M1Z84A010192; Fri, 22 Mar 2013 01:35:08 GMT (envelope-from sjg@svn.freebsd.org) Received: (from sjg@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2M1Z84G010190; Fri, 22 Mar 2013 01:35:08 GMT (envelope-from sjg@svn.freebsd.org) Message-Id: <201303220135.r2M1Z84G010190@svn.freebsd.org> From: "Simon J. Gerraty" Date: Fri, 22 Mar 2013 01:35:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248606 - projects/bmake/share/mk X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Mar 2013 01:35:08 -0000 Author: sjg Date: Fri Mar 22 01:35:08 2013 New Revision: 248606 URL: http://svnweb.freebsd.org/changeset/base/248606 Log: sync latest meta2deps Modified: projects/bmake/share/mk/meta2deps.py Modified: projects/bmake/share/mk/meta2deps.py ============================================================================== --- projects/bmake/share/mk/meta2deps.py Fri Mar 22 01:34:27 2013 (r248605) +++ projects/bmake/share/mk/meta2deps.py Fri Mar 22 01:35:08 2013 (r248606) @@ -35,7 +35,7 @@ We only pay attention to a subset of the """ RCSid: - $Id: meta2deps.py,v 1.8 2013/02/10 19:21:46 sjg Exp $ + $Id: meta2deps.py,v 1.10 2013/03/17 03:10:09 sjg Exp $ Copyright (c) 2011-2013, Juniper Networks, Inc. All rights reserved. @@ -150,6 +150,7 @@ class MetaFile: MACHINE the machine we built for. set to 'none' if we are not cross-building. + More specifically if machine cannot be deduced from objdirs. HOST_TARGET when we build for the psuedo machine 'host' @@ -176,6 +177,9 @@ class MetaFile: self.debug_out = getv(conf, 'debug_out', sys.stderr) self.machine = getv(conf, 'MACHINE', '') + self.curdir = getv(conf, 'CURDIR') + self.reldir = getv(conf, 'RELDIR') + self.dpdeps = getv(conf, 'DPDEPS') if not self.conf: # some of the steps below we want to do only once @@ -221,9 +225,6 @@ class MetaFile: self.dirdep_re = re.compile(r'([^/]+)/(.+)') - self.curdir = getv(conf, 'CURDIR') - self.reldir = getv(conf, 'RELDIR') - self.dpdeps = getv(conf, 'DPDEPS') if self.dpdeps and not self.reldir: if self.debug: print >> self.debug_out, "need reldir:", From owner-svn-src-projects@FreeBSD.ORG Fri Mar 22 21:11:21 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id B8A6B144; Fri, 22 Mar 2013 21:11:21 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 9A8FE9A0; Fri, 22 Mar 2013 21:11:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2MLBJaW030491; Fri, 22 Mar 2013 21:11:19 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2MLBIt5030483; Fri, 22 Mar 2013 21:11:18 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201303222111.r2MLBIt5030483@svn.freebsd.org> From: Gleb Smirnoff Date: Fri, 22 Mar 2013 21:11:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248622 - in projects/counters: share/man/man9 sys/arm/include sys/i386/include sys/ia64/include sys/mips/include sys/powerpc/include sys/sparc64/include sys/sys X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Mar 2013 21:11:21 -0000 Author: glebius Date: Fri Mar 22 21:11:17 2013 New Revision: 248622 URL: http://svnweb.freebsd.org/changeset/base/248622 Log: Provide zpcpu_get() inline to access curcpu member of an allocation taken from UMA_ZONE_PCPU zone. Reviewed by: kib Modified: projects/counters/share/man/man9/zone.9 projects/counters/sys/arm/include/counter.h projects/counters/sys/i386/include/counter.h projects/counters/sys/ia64/include/counter.h projects/counters/sys/mips/include/counter.h projects/counters/sys/powerpc/include/counter.h projects/counters/sys/sparc64/include/counter.h projects/counters/sys/sys/pcpu.h Modified: projects/counters/share/man/man9/zone.9 ============================================================================== --- projects/counters/share/man/man9/zone.9 Fri Mar 22 20:44:16 2013 (r248621) +++ projects/counters/share/man/man9/zone.9 Fri Mar 22 21:11:17 2013 (r248622) @@ -161,8 +161,12 @@ A CPU can address its private copy using multiple of current CPU id and .Fn sizeof "struct pcpu" : .Bd -literal -offset indent +foo_zone = uma_zcreate(..., UMA_ZONE_PCPU); + ... +foo_base = uma_zalloc(foo_zone, ...); + ... critical_enter(); -foo_pcpu = (foo *)((char *)foo_base + sizeof(struct pcpu) * curcpu); +foo_pcpu = (foo_t *)zpcpu_get(foo_base); /* do something with foo_pcpu */ critical_exit(); .Ed Modified: projects/counters/sys/arm/include/counter.h ============================================================================== --- projects/counters/sys/arm/include/counter.h Fri Mar 22 20:44:16 2013 (r248621) +++ projects/counters/sys/arm/include/counter.h Fri Mar 22 21:11:17 2013 (r248622) @@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc; + *(uint64_t *)zpcpu_get(c) += inc; critical_exit(); } @@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec; + *(uint64_t *)zpcpu_get(c) -= dec; critical_exit(); } Modified: projects/counters/sys/i386/include/counter.h ============================================================================== --- projects/counters/sys/i386/include/counter.h Fri Mar 22 20:44:16 2013 (r248621) +++ projects/counters/sys/i386/include/counter.h Fri Mar 22 21:11:17 2013 (r248622) @@ -58,7 +58,7 @@ counter_u64_inc(counter_u64_t c, uint64_ if ((cpu_feature & CPUID_CX8) == 0) { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc; + *(uint64_t *)zpcpu_get(c) += inc; critical_exit(); } else { counter_64_inc_8b(c, inc); Modified: projects/counters/sys/ia64/include/counter.h ============================================================================== --- projects/counters/sys/ia64/include/counter.h Fri Mar 22 20:44:16 2013 (r248621) +++ projects/counters/sys/ia64/include/counter.h Fri Mar 22 21:11:17 2013 (r248622) @@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc; + *(uint64_t *)zpcpu_get(c) += inc; critical_exit(); } @@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec; + *(uint64_t *)zpcpu_get(c) -= dec; critical_exit(); } Modified: projects/counters/sys/mips/include/counter.h ============================================================================== --- projects/counters/sys/mips/include/counter.h Fri Mar 22 20:44:16 2013 (r248621) +++ projects/counters/sys/mips/include/counter.h Fri Mar 22 21:11:17 2013 (r248622) @@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc; + *(uint64_t *)zpcpu_get(c) += inc; critical_exit(); } @@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec; + *(uint64_t *)zpcpu_get(c) -= dec; critical_exit(); } Modified: projects/counters/sys/powerpc/include/counter.h ============================================================================== --- projects/counters/sys/powerpc/include/counter.h Fri Mar 22 20:44:16 2013 (r248621) +++ projects/counters/sys/powerpc/include/counter.h Fri Mar 22 21:11:17 2013 (r248622) @@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc; + *(uint64_t *)zpcpu_get(c) += inc; critical_exit(); } @@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec; + *(uint64_t *)zpcpu_get(c) -= dec; critical_exit(); } Modified: projects/counters/sys/sparc64/include/counter.h ============================================================================== --- projects/counters/sys/sparc64/include/counter.h Fri Mar 22 20:44:16 2013 (r248621) +++ projects/counters/sys/sparc64/include/counter.h Fri Mar 22 21:11:17 2013 (r248622) @@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc; + *(uint64_t *)zpcpu_get(c) += inc; critical_exit(); } @@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_ { critical_enter(); - *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec; + *(uint64_t *)zpcpu_get(c) -= dec; critical_exit(); } Modified: projects/counters/sys/sys/pcpu.h ============================================================================== --- projects/counters/sys/sys/pcpu.h Fri Mar 22 20:44:16 2013 (r248621) +++ projects/counters/sys/sys/pcpu.h Fri Mar 22 21:11:17 2013 (r248622) @@ -202,6 +202,14 @@ extern struct pcpu *cpuid_to_pcpu[]; #endif #define curvidata PCPU_GET(vidata) +/* Accessor to elements allocated via UMA_ZONE_PCPU zone. */ +static inline void * +zpcpu_get(void *base) +{ + + return ((char *)(base) + sizeof(struct pcpu) * curcpu); +} + /* * Machine dependent callouts. cpu_pcpu_init() is responsible for * initializing machine dependent fields of struct pcpu, and From owner-svn-src-projects@FreeBSD.ORG Sat Mar 23 06:45:13 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 9CBCE342; Sat, 23 Mar 2013 06:45:13 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 905883C5; Sat, 23 Mar 2013 06:45:13 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2N6jDul018330; Sat, 23 Mar 2013 06:45:13 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2N6jDEX018329; Sat, 23 Mar 2013 06:45:13 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201303230645.r2N6jDEX018329@svn.freebsd.org> From: Konstantin Belousov Date: Sat, 23 Mar 2013 06:45:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248635 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Mar 2013 06:45:13 -0000 Author: kib Date: Sat Mar 23 06:45:13 2013 New Revision: 248635 URL: http://svnweb.freebsd.org/changeset/base/248635 Log: Fix markup Modified: projects/counters/share/man/man9/counter.9 Modified: projects/counters/share/man/man9/counter.9 ============================================================================== --- projects/counters/share/man/man9/counter.9 Sat Mar 23 04:26:13 2013 (r248634) +++ projects/counters/share/man/man9/counter.9 Sat Mar 23 06:45:13 2013 (r248635) @@ -41,7 +41,7 @@ .Ft void .Fn counter_u64_inc "counter_u64_t cnt" "uint64_t inc" .Ft void -.Fn counter_u64_dec "counter_u64_t cnt "uint64_t dec" +.Fn counter_u64_dec "counter_u64_t cnt" "uint64_t dec" .Ft uint64_t .Fn counter_u64_fetch "counter_u64_t cnt" .Ft void From owner-svn-src-projects@FreeBSD.ORG Sat Mar 23 06:49:19 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id F157C615; Sat, 23 Mar 2013 06:49:19 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id E467E3FB; Sat, 23 Mar 2013 06:49:19 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2N6nJTQ018899; Sat, 23 Mar 2013 06:49:19 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2N6nJkj018898; Sat, 23 Mar 2013 06:49:19 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201303230649.r2N6nJkj018898@svn.freebsd.org> From: Konstantin Belousov Date: Sat, 23 Mar 2013 06:49:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248636 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Mar 2013 06:49:20 -0000 Author: kib Date: Sat Mar 23 06:49:19 2013 New Revision: 248636 URL: http://svnweb.freebsd.org/changeset/base/248636 Log: More markup fixes Modified: projects/counters/share/man/man9/counter.9 Modified: projects/counters/share/man/man9/counter.9 ============================================================================== --- projects/counters/share/man/man9/counter.9 Sat Mar 23 06:45:13 2013 (r248635) +++ projects/counters/share/man/man9/counter.9 Sat Mar 23 06:49:19 2013 (r248636) @@ -82,7 +82,8 @@ wait flag, should be either or .Va M_WAITOK . If -.Va M_WAITOK is specified the operation may fail. +.Va M_WAITOK +is specified the operation may fail. .It Fn counter_u64_free cnt Free previously allocated .Nm From owner-svn-src-projects@FreeBSD.ORG Sat Mar 23 07:24:07 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 2F65AF96; Sat, 23 Mar 2013 07:24:07 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 0A31C909; Sat, 23 Mar 2013 07:24:07 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2N7O6FU030552; Sat, 23 Mar 2013 07:24:06 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2N7O6Pu030551; Sat, 23 Mar 2013 07:24:06 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201303230724.r2N7O6Pu030551@svn.freebsd.org> From: Konstantin Belousov Date: Sat, 23 Mar 2013 07:24:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248637 - projects/counters/share/man/man9 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Mar 2013 07:24:07 -0000 Author: kib Date: Sat Mar 23 07:24:06 2013 New Revision: 248637 URL: http://svnweb.freebsd.org/changeset/base/248637 Log: Small updates to the content, making the description more precise. Reviewed by: glebius Modified: projects/counters/share/man/man9/counter.9 Modified: projects/counters/share/man/man9/counter.9 ============================================================================== --- projects/counters/share/man/man9/counter.9 Sat Mar 23 06:49:19 2013 (r248636) +++ projects/counters/share/man/man9/counter.9 Sat Mar 23 07:24:06 2013 (r248637) @@ -30,7 +30,7 @@ .Os .Sh NAME .Nm counter -.Nd "generic kernel counter implementation" +.Nd "SMP-friendly kernel counter implementation" .Sh SYNOPSIS .In sys/types.h .In sys/counter.h @@ -60,16 +60,20 @@ is guaranteed to be lossless when severa updates. However, .Nm -does not imply any -.Xr locking 9 -or +does not block the calling thread, +also no .Xr atomic 9 -operations and is therefore expected to be fast. +operations are used for the update, therefore the counters +can be used in any non-interrupt context. Moreover, .Nm -has special optimisations for SMP environments making +has special optimisations for SMP environments, making +.Nm +update faster than simple arithmetic on the global variable. +Thus .Nm -update faster than simple addition operations. +is considered suitable for accounting in the performance-critical +code pathes. .Bl -tag -width indent .It Fn counter_u64_alloc how Allocate a new 64-bit unsigned counter. @@ -123,9 +127,9 @@ The .Fa ptr argument should be a pointer to allocated .Vt counter_u64_t . -Any read of oid returns value obtained through +A read of the oid returns value obtained through .Fn counter_u64_fetch . -Any write to oid zeroes it. +Any write to the oid zeroes it. .It Fn SYSCTL_ADD_COUNTER_U64 ctx parent nbr name access ptr descr Create a .Xr sysctl @@ -135,9 +139,9 @@ The .Fa ptr argument should be a pointer to allocated .Vt counter_u64_t . -Any read of oid returns value obtained through +A read of the oid returns value obtained through .Fn counter_u64_fetch . -Any write to oid zeroes it. +Any write to the oid zeroes it. .El .Sh IMPLEMENTATION DETAILS On all architectures @@ -155,9 +159,14 @@ sum of all fields. .Pp On amd64 a .Nm counter -update is implemented as a single instruction without lock semantics. +update is implemented as a single instruction without lock semantics, +operating on the private data for the current CPU, +which is safe against preemption and interrupts. .Pp -On i386 with cmpxchg8 instruction available, this instruction is used. +On i386 architecture, when machine supports the cmpxchg8 instruction, +this instruction is used. +The multi-instruction sequence provides the same guarantees as the +amd64 single-instruction implementation. .Pp On some architectures updating a counter require a .Xr critical 9 @@ -167,7 +176,7 @@ section. .Xr critical 9 , .Xr locking 9 , .Xr malloc 9 , -.Xr sysctl , +.Xr sysctl 9, .Xr uma 9 .Sh HISTORY The From owner-svn-src-projects@FreeBSD.ORG Sat Mar 23 20:43:28 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id B12D1C67; Sat, 23 Mar 2013 20:43:28 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id A3B466F9; Sat, 23 Mar 2013 20:43:28 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2NKhSCo077262; Sat, 23 Mar 2013 20:43:28 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2NKhS2x077261; Sat, 23 Mar 2013 20:43:28 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201303232043.r2NKhS2x077261@svn.freebsd.org> From: Konstantin Belousov Date: Sat, 23 Mar 2013 20:43:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248662 - projects/counters/sys/powerpc/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Mar 2013 20:43:28 -0000 Author: kib Date: Sat Mar 23 20:43:28 2013 New Revision: 248662 URL: http://svnweb.freebsd.org/changeset/base/248662 Log: Implement counter_u64_inc() on powerpc64 AIM using ll/sc. Modified: projects/counters/sys/powerpc/include/counter.h Modified: projects/counters/sys/powerpc/include/counter.h ============================================================================== --- projects/counters/sys/powerpc/include/counter.h Sat Mar 23 20:43:26 2013 (r248661) +++ projects/counters/sys/powerpc/include/counter.h Sat Mar 23 20:43:28 2013 (r248662) @@ -31,6 +31,34 @@ #include +#if defined(AIM) && defined(__powerpc64__) + +static inline void +counter_u64_inc(counter_u64_t c, uint64_t inc) +{ + uint64_t ccpu, old; + + __asm __volatile("\n" + "1:\n\t" + "mfsprg %0, 0\n\t" + "ldarx %1, %0, %2\n\t" + "add %1, %1, %3\n\t" + "stdcx. %1, %0, %2\n\t" + "bne- 1b" + : "=&b" (ccpu), "=&r" (old) + : "r" ((char *)c - (char *)&__pcpu[0]), "r" (inc) + : "cc", "memory"); +} + +static inline void +counter_u64_dec(counter_u64_t c, uint64_t dec) +{ + + counter_u64_inc(c, -dec); +} + +#else /* !AIM || !64bit */ + static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -49,4 +77,6 @@ counter_u64_dec(counter_u64_t c, uint64_ critical_exit(); } +#endif /* AIM 64bit */ + #endif /* ! __MACHINE_COUNTER_H__ */