From owner-svn-src-projects@freebsd.org Sun Feb 16 13:22:37 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2760E25E5B0 for ; Sun, 16 Feb 2020 13:22:37 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48L78F0CWZz4Mfx; Sun, 16 Feb 2020 13:22:37 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EC9AC2660C; Sun, 16 Feb 2020 13:22:36 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01GDMap1040157; Sun, 16 Feb 2020 13:22:36 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01GDMarQ040155; Sun, 16 Feb 2020 13:22:36 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002161322.01GDMarQ040155@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sun, 16 Feb 2020 13:22:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r357999 - projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains X-SVN-Commit-Revision: 357999 X-SVN-Commit-Repository: base 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.29 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, 16 Feb 2020 13:22:37 -0000 Author: dim Date: Sun Feb 16 13:22:36 2020 New Revision: 357999 URL: https://svnweb.freebsd.org/changeset/base/357999 Log: Merge commit 62654cab7 from llvm git (by me): Restore functionality of --sysroot on FreeBSD after b18cb9c47 After b18cb9c47, clang would sometimes prefer the host C++ includes (e.g. in /usr/include/c++/v1) before those specified via --sysroot. While this behavior may be desirable on Linux, it is not so on FreeBSD, where we make extensive use of --sysroot during the build of the base system. In that case, clang must *not* search outside the sysroot, except for its own internal headers. Add an override addLibCxxIncludePaths() to restore the old behavior, which is to simply append /usr/include/c++/v1 to the specified sysroot. While here, apply clang-format to the FreeBSD specific toolchain files. Fixes PR44923. Modified: projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.cpp projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.h Modified: projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.cpp ============================================================================== --- projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.cpp Sun Feb 16 13:16:40 2020 (r357998) +++ projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.cpp Sun Feb 16 13:22:36 2020 (r357999) @@ -99,7 +99,8 @@ void freebsd::Assembler::ConstructJob(Compilation &C, case llvm::Triple::sparcel: case llvm::Triple::sparcv9: { std::string CPU = getCPUName(Args, getToolChain().getTriple()); - CmdArgs.push_back(sparc::getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); + CmdArgs.push_back( + sparc::getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); AddAssemblerKPIC(getToolChain(), Args, CmdArgs); break; } @@ -386,6 +387,12 @@ unsigned FreeBSD::GetDefaultDwarfVersion() const { if (getTriple().getOSMajorVersion() < 12) return 2; return 4; +} + +void FreeBSD::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const { + addSystemInclude(DriverArgs, CC1Args, + getDriver().SysRoot + "/usr/include/c++/v1"); } void FreeBSD::addLibStdCxxIncludePaths( Modified: projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.h ============================================================================== --- projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.h Sun Feb 16 13:16:40 2020 (r357998) +++ projects/clang1000-import/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.h Sun Feb 16 13:22:36 2020 (r357999) @@ -59,16 +59,18 @@ class LLVM_LIBRARY_VISIBILITY FreeBSD : public Generic bool IsObjCNonFragileABIDefault() const override { return true; } CXXStdlibType GetDefaultCXXStdlibType() const override; - void addLibStdCxxIncludePaths( - const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; + void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; + void + addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const override; void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - llvm::ExceptionHandling GetExceptionModel( - const llvm::opt::ArgList &Args) const override; + llvm::ExceptionHandling + GetExceptionModel(const llvm::opt::ArgList &Args) const override; bool IsUnwindTablesDefault(const llvm::opt::ArgList &Args) const override; bool isPIEDefault() const override; SanitizerMask getSupportedSanitizers() const override; From owner-svn-src-projects@freebsd.org Sun Feb 16 13:23:59 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7C13025E5D2 for ; Sun, 16 Feb 2020 13:23:59 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48L79q3J0wz4NQm; Sun, 16 Feb 2020 13:23:59 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 660942660E; Sun, 16 Feb 2020 13:23:59 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01GDNxoE040303; Sun, 16 Feb 2020 13:23:59 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01GDNscJ040273; Sun, 16 Feb 2020 13:23:54 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002161323.01GDNscJ040273@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sun, 16 Feb 2020 13:23:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358000 - in projects/clang1000-import: include lib/libfetch lib/libthr lib/libthr/thread sbin/ping6 share/man/man3 share/man/man9 share/misc sys/amd64/vmm sys/amd64/vmm/amd sys/amd64/v... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang1000-import: include lib/libfetch lib/libthr lib/libthr/thread sbin/ping6 share/man/man3 share/man/man9 share/misc sys/amd64/vmm sys/amd64/vmm/amd sys/amd64/vmm/intel sys/amd64/vmm/io... X-SVN-Commit-Revision: 358000 X-SVN-Commit-Repository: base 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.29 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, 16 Feb 2020 13:23:59 -0000 Author: dim Date: Sun Feb 16 13:23:54 2020 New Revision: 358000 URL: https://svnweb.freebsd.org/changeset/base/358000 Log: Merge ^/head r357966 through r357999. Added: projects/clang1000-import/tests/sys/net/if_bridge_test.sh - copied unchanged from r357999, head/tests/sys/net/if_bridge_test.sh Modified: projects/clang1000-import/include/pthread_np.h projects/clang1000-import/lib/libfetch/common.c projects/clang1000-import/lib/libfetch/common.h projects/clang1000-import/lib/libfetch/fetch.3 projects/clang1000-import/lib/libthr/pthread.map projects/clang1000-import/lib/libthr/thread/thr_join.c projects/clang1000-import/sbin/ping6/ping6.c projects/clang1000-import/share/man/man3/Makefile projects/clang1000-import/share/man/man3/pthread_join.3 projects/clang1000-import/share/man/man9/malloc.9 projects/clang1000-import/share/misc/committers-ports.dot projects/clang1000-import/sys/amd64/vmm/amd/amdvi_hw.c projects/clang1000-import/sys/amd64/vmm/amd/npt.c projects/clang1000-import/sys/amd64/vmm/amd/svm.c projects/clang1000-import/sys/amd64/vmm/intel/ept.c projects/clang1000-import/sys/amd64/vmm/intel/vmx.c projects/clang1000-import/sys/amd64/vmm/io/iommu.c projects/clang1000-import/sys/amd64/vmm/io/ppt.c projects/clang1000-import/sys/amd64/vmm/io/vrtc.c projects/clang1000-import/sys/amd64/vmm/vmm.c projects/clang1000-import/sys/amd64/vmm/vmm_dev.c projects/clang1000-import/sys/amd64/vmm/x86.c projects/clang1000-import/sys/cam/cam_periph.c projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_compat.c projects/clang1000-import/sys/conf/files projects/clang1000-import/sys/contrib/libsodium/src/libsodium/include/sodium/core.h projects/clang1000-import/sys/contrib/libsodium/src/libsodium/include/sodium/export.h projects/clang1000-import/sys/dev/iscsi/icl.c projects/clang1000-import/sys/dev/iscsi/iscsi.c projects/clang1000-import/sys/dev/sound/usb/uaudio.c projects/clang1000-import/sys/dev/usb/controller/atmegadci.c projects/clang1000-import/sys/dev/usb/controller/avr32dci.c projects/clang1000-import/sys/dev/usb/controller/dwc_otg.c projects/clang1000-import/sys/dev/usb/controller/ehci.c projects/clang1000-import/sys/dev/usb/controller/musb_otg.c projects/clang1000-import/sys/dev/usb/controller/ohci.c projects/clang1000-import/sys/dev/usb/controller/saf1761_otg.c projects/clang1000-import/sys/dev/usb/controller/uhci.c projects/clang1000-import/sys/dev/usb/controller/usb_controller.c projects/clang1000-import/sys/dev/usb/controller/uss820dci.c projects/clang1000-import/sys/dev/usb/controller/xhci.c projects/clang1000-import/sys/dev/usb/gadget/g_audio.c projects/clang1000-import/sys/dev/usb/gadget/g_keyboard.c projects/clang1000-import/sys/dev/usb/gadget/g_modem.c projects/clang1000-import/sys/dev/usb/gadget/g_mouse.c projects/clang1000-import/sys/dev/usb/input/atp.c projects/clang1000-import/sys/dev/usb/input/uep.c projects/clang1000-import/sys/dev/usb/input/uhid.c projects/clang1000-import/sys/dev/usb/input/ukbd.c projects/clang1000-import/sys/dev/usb/input/ums.c projects/clang1000-import/sys/dev/usb/input/wmt.c projects/clang1000-import/sys/dev/usb/input/wsp.c projects/clang1000-import/sys/dev/usb/misc/udbp.c projects/clang1000-import/sys/dev/usb/misc/ugold.c projects/clang1000-import/sys/dev/usb/net/if_aue.c projects/clang1000-import/sys/dev/usb/net/if_axe.c projects/clang1000-import/sys/dev/usb/net/if_axge.c projects/clang1000-import/sys/dev/usb/net/if_cdce.c projects/clang1000-import/sys/dev/usb/net/if_cdceem.c projects/clang1000-import/sys/dev/usb/net/if_cue.c projects/clang1000-import/sys/dev/usb/net/if_ipheth.c projects/clang1000-import/sys/dev/usb/net/if_kue.c projects/clang1000-import/sys/dev/usb/net/if_mos.c projects/clang1000-import/sys/dev/usb/net/if_muge.c projects/clang1000-import/sys/dev/usb/net/if_rue.c projects/clang1000-import/sys/dev/usb/net/if_smsc.c projects/clang1000-import/sys/dev/usb/net/if_udav.c projects/clang1000-import/sys/dev/usb/net/if_ure.c projects/clang1000-import/sys/dev/usb/net/if_urndis.c projects/clang1000-import/sys/dev/usb/net/if_usie.c projects/clang1000-import/sys/dev/usb/net/uhso.c projects/clang1000-import/sys/dev/usb/net/usb_ethernet.c projects/clang1000-import/sys/dev/usb/serial/u3g.c projects/clang1000-import/sys/dev/usb/serial/ubsa.c projects/clang1000-import/sys/dev/usb/serial/ubser.c projects/clang1000-import/sys/dev/usb/serial/uchcom.c projects/clang1000-import/sys/dev/usb/serial/ufoma.c projects/clang1000-import/sys/dev/usb/serial/uftdi.c projects/clang1000-import/sys/dev/usb/serial/ulpt.c projects/clang1000-import/sys/dev/usb/serial/umcs.c projects/clang1000-import/sys/dev/usb/serial/umodem.c projects/clang1000-import/sys/dev/usb/serial/umoscom.c projects/clang1000-import/sys/dev/usb/serial/uplcom.c projects/clang1000-import/sys/dev/usb/serial/usb_serial.c projects/clang1000-import/sys/dev/usb/serial/uslcom.c projects/clang1000-import/sys/dev/usb/serial/uvisor.c projects/clang1000-import/sys/dev/usb/serial/uvscom.c projects/clang1000-import/sys/dev/usb/storage/cfumass.c projects/clang1000-import/sys/dev/usb/storage/umass.c projects/clang1000-import/sys/dev/usb/storage/urio.c projects/clang1000-import/sys/dev/usb/storage/ustorage_fs.c projects/clang1000-import/sys/dev/usb/template/usb_template.c projects/clang1000-import/sys/dev/usb/template/usb_template_audio.c projects/clang1000-import/sys/dev/usb/template/usb_template_cdce.c projects/clang1000-import/sys/dev/usb/template/usb_template_cdceem.c projects/clang1000-import/sys/dev/usb/template/usb_template_kbd.c projects/clang1000-import/sys/dev/usb/template/usb_template_midi.c projects/clang1000-import/sys/dev/usb/template/usb_template_modem.c projects/clang1000-import/sys/dev/usb/template/usb_template_mouse.c projects/clang1000-import/sys/dev/usb/template/usb_template_msc.c projects/clang1000-import/sys/dev/usb/template/usb_template_mtp.c projects/clang1000-import/sys/dev/usb/template/usb_template_multi.c projects/clang1000-import/sys/dev/usb/template/usb_template_phone.c projects/clang1000-import/sys/dev/usb/template/usb_template_serialnet.c projects/clang1000-import/sys/dev/usb/usb_debug.c projects/clang1000-import/sys/dev/usb/usb_dev.c projects/clang1000-import/sys/dev/usb/usb_generic.c projects/clang1000-import/sys/dev/usb/usb_hub.c projects/clang1000-import/sys/dev/usb/usb_hub_acpi.c projects/clang1000-import/sys/dev/usb/usb_process.c projects/clang1000-import/sys/dev/usb/video/udl.c projects/clang1000-import/sys/dev/usb/wlan/if_rsu.c projects/clang1000-import/sys/dev/usb/wlan/if_rum.c projects/clang1000-import/sys/dev/usb/wlan/if_run.c projects/clang1000-import/sys/dev/usb/wlan/if_uath.c projects/clang1000-import/sys/dev/usb/wlan/if_upgt.c projects/clang1000-import/sys/dev/usb/wlan/if_ural.c projects/clang1000-import/sys/dev/usb/wlan/if_urtw.c projects/clang1000-import/sys/dev/usb/wlan/if_zyd.c projects/clang1000-import/sys/fs/autofs/autofs.c projects/clang1000-import/sys/kern/kern_malloc.c projects/clang1000-import/sys/kern/kern_rctl.c projects/clang1000-import/sys/kern/sysv_sem.c projects/clang1000-import/sys/kern/vfs_subr.c projects/clang1000-import/sys/sys/malloc.h projects/clang1000-import/sys/sys/refcount.h projects/clang1000-import/sys/ufs/ffs/ffs_vnops.c projects/clang1000-import/sys/vm/uma_core.c projects/clang1000-import/tests/sys/common/vnet.subr projects/clang1000-import/tests/sys/net/Makefile projects/clang1000-import/tests/sys/net/if_clone_test.sh projects/clang1000-import/tests/sys/net/if_lagg_test.sh projects/clang1000-import/tests/sys/net/routing/rtsock_common.h projects/clang1000-import/tests/sys/net/routing/rtsock_print.h projects/clang1000-import/tests/sys/net/routing/test_rtsock_l3.c projects/clang1000-import/usr.bin/random/random.6 projects/clang1000-import/usr.bin/random/random.c projects/clang1000-import/usr.bin/random/randomize_fd.c projects/clang1000-import/usr.bin/random/randomize_fd.h Directory Properties: projects/clang1000-import/ (props changed) Modified: projects/clang1000-import/include/pthread_np.h ============================================================================== --- projects/clang1000-import/include/pthread_np.h Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/include/pthread_np.h Sun Feb 16 13:23:54 2020 (r358000) @@ -63,6 +63,7 @@ int pthread_mutex_setyieldloops_np(pthread_mutex_t *mu int pthread_mutex_isowned_np(pthread_mutex_t *mutex); void pthread_resume_all_np(void); int pthread_resume_np(pthread_t); +int pthread_peekjoin_np(pthread_t, void **); void pthread_set_name_np(pthread_t, const char *); int pthread_setaffinity_np(pthread_t, size_t, const cpuset_t *); int pthread_single_np(void); Modified: projects/clang1000-import/lib/libfetch/common.c ============================================================================== --- projects/clang1000-import/lib/libfetch/common.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/lib/libfetch/common.c Sun Feb 16 13:23:54 2020 (r358000) @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -74,6 +75,64 @@ static struct fetcherr netdb_errlist[] = { { -1, FETCH_UNKNOWN, "Unknown resolver error" } }; +/* + * SOCKS5 error enumerations + */ +enum SOCKS5_ERR { +/* Protocol errors */ + SOCKS5_ERR_SELECTION, + SOCKS5_ERR_READ_METHOD, + SOCKS5_ERR_VER5_ONLY, + SOCKS5_ERR_NOMETHODS, + SOCKS5_ERR_NOTIMPLEMENTED, + SOCKS5_ERR_HOSTNAME_SIZE, + SOCKS5_ERR_REQUEST, + SOCKS5_ERR_REPLY, + SOCKS5_ERR_NON_VER5_RESP, + SOCKS5_ERR_GENERAL, + SOCKS5_ERR_NOT_ALLOWED, + SOCKS5_ERR_NET_UNREACHABLE, + SOCKS5_ERR_HOST_UNREACHABLE, + SOCKS5_ERR_CONN_REFUSED, + SOCKS5_ERR_TTL_EXPIRED, + SOCKS5_ERR_COM_UNSUPPORTED, + SOCKS5_ERR_ADDR_UNSUPPORTED, + SOCKS5_ERR_UNSPECIFIED, +/* Configuration errors */ + SOCKS5_ERR_BAD_HOST, + SOCKS5_ERR_BAD_PROXY_FORMAT, + SOCKS5_ERR_BAD_PORT +}; + +/* + * Error messages for SOCKS5 errors + */ +static struct fetcherr socks5_errlist[] = { +/* SOCKS5 protocol errors */ + { SOCKS5_ERR_SELECTION, FETCH_ABORT, "SOCKS5: Failed to send selection method" }, + { SOCKS5_ERR_READ_METHOD, FETCH_ABORT, "SOCKS5: Failed to read method" }, + { SOCKS5_ERR_VER5_ONLY, FETCH_PROTO, "SOCKS5: Only version 5 is implemented" }, + { SOCKS5_ERR_NOMETHODS, FETCH_PROTO, "SOCKS5: No acceptable methods" }, + { SOCKS5_ERR_NOTIMPLEMENTED, FETCH_PROTO, "SOCKS5: Method currently not implemented" }, + { SOCKS5_ERR_HOSTNAME_SIZE, FETCH_PROTO, "SOCKS5: Hostname size is above 256 bytes" }, + { SOCKS5_ERR_REQUEST, FETCH_PROTO, "SOCKS5: Failed to request" }, + { SOCKS5_ERR_REPLY, FETCH_PROTO, "SOCKS5: Failed to receive reply" }, + { SOCKS5_ERR_NON_VER5_RESP, FETCH_PROTO, "SOCKS5: Server responded with a non-version 5 response" }, + { SOCKS5_ERR_GENERAL, FETCH_ABORT, "SOCKS5: General server failure" }, + { SOCKS5_ERR_NOT_ALLOWED, FETCH_AUTH, "SOCKS5: Connection not allowed by ruleset" }, + { SOCKS5_ERR_NET_UNREACHABLE, FETCH_NETWORK, "SOCKS5: Network unreachable" }, + { SOCKS5_ERR_HOST_UNREACHABLE, FETCH_ABORT, "SOCKS5: Host unreachable" }, + { SOCKS5_ERR_CONN_REFUSED, FETCH_ABORT, "SOCKS5: Connection refused" }, + { SOCKS5_ERR_TTL_EXPIRED, FETCH_TIMEOUT, "SOCKS5: TTL expired" }, + { SOCKS5_ERR_COM_UNSUPPORTED, FETCH_PROTO, "SOCKS5: Command not supported" }, + { SOCKS5_ERR_ADDR_UNSUPPORTED, FETCH_ABORT, "SOCKS5: Address type not supported" }, + { SOCKS5_ERR_UNSPECIFIED, FETCH_UNKNOWN, "SOCKS5: Unspecified error" }, +/* Configuration error */ + { SOCKS5_ERR_BAD_HOST, FETCH_ABORT, "SOCKS5: Bad proxy host" }, + { SOCKS5_ERR_BAD_PROXY_FORMAT, FETCH_ABORT, "SOCKS5: Bad proxy format" }, + { SOCKS5_ERR_BAD_PORT, FETCH_ABORT, "SOCKS5: Bad port" } +}; + /* End-of-Line */ static const char ENDL[2] = "\r\n"; @@ -314,7 +373,6 @@ syserr: } - /* * Bind a socket to a specific local address */ @@ -337,6 +395,192 @@ fetch_bind(int sd, int af, const char *addr) /* + * SOCKS5 connection initiation, based on RFC 1928 + * Default DNS resolution over SOCKS5 + */ +int +fetch_socks5_init(conn_t *conn, const char *host, int port, int verbose) +{ + /* + * Size is based on largest packet prefix (4 bytes) + + * Largest FQDN (256) + one byte size (1) + + * Port (2) + */ + unsigned char buf[BUFF_SIZE]; + unsigned char *ptr; + int ret = 1; + + if (verbose) + fetch_info("Initializing SOCKS5 connection: %s:%d", host, port); + + /* Connection initialization */ + ptr = buf; + *ptr++ = SOCKS_VERSION_5; + *ptr++ = SOCKS_CONNECTION; + *ptr++ = SOCKS_RSV; + + if (fetch_write(conn, buf, 3) != 3) { + ret = SOCKS5_ERR_SELECTION; + goto fail; + } + + /* Verify response from SOCKS5 server */ + if (fetch_read(conn, buf, 2) != 2) { + ret = SOCKS5_ERR_READ_METHOD; + goto fail; + } + + ptr = buf; + if (ptr[0] != SOCKS_VERSION_5) { + ret = SOCKS5_ERR_VER5_ONLY; + goto fail; + } + if (ptr[1] == SOCKS_NOMETHODS) { + ret = SOCKS5_ERR_NOMETHODS; + goto fail; + } + else if (ptr[1] != SOCKS5_NOTIMPLEMENTED) { + ret = SOCKS5_ERR_NOTIMPLEMENTED; + goto fail; + } + + /* Send Request */ + *ptr++ = SOCKS_VERSION_5; + *ptr++ = SOCKS_CONNECTION; + *ptr++ = SOCKS_RSV; + /* Encode all targets as a hostname to avoid DNS leaks */ + *ptr++ = SOCKS_ATYP_DOMAINNAME; + if (strlen(host) > FQDN_SIZE) { + ret = SOCKS5_ERR_HOSTNAME_SIZE; + goto fail; + } + *ptr++ = strlen(host); + strncpy(ptr, host, strlen(host)); + ptr = ptr + strlen(host); + + port = htons(port); + *ptr++ = port & 0x00ff; + *ptr++ = (port & 0xff00) >> 8; + + if (fetch_write(conn, buf, ptr - buf) != ptr - buf) { + ret = SOCKS5_ERR_REQUEST; + goto fail; + } + + /* BND.ADDR is variable length, read the largest on non-blocking socket */ + if (!fetch_read(conn, buf, BUFF_SIZE)) { + ret = SOCKS5_ERR_REPLY; + goto fail; + } + + ptr = buf; + if (*ptr++ != SOCKS_VERSION_5) { + ret = SOCKS5_ERR_NON_VER5_RESP; + goto fail; + } + + switch(*ptr++) { + case SOCKS_SUCCESS: + break; + case SOCKS_GENERAL_FAILURE: + ret = SOCKS5_ERR_GENERAL; + goto fail; + case SOCKS_CONNECTION_NOT_ALLOWED: + ret = SOCKS5_ERR_NOT_ALLOWED; + goto fail; + case SOCKS_NETWORK_UNREACHABLE: + ret = SOCKS5_ERR_NET_UNREACHABLE; + goto fail; + case SOCKS_HOST_UNREACHABLE: + ret = SOCKS5_ERR_HOST_UNREACHABLE; + goto fail; + case SOCKS_CONNECTION_REFUSED: + ret = SOCKS5_ERR_CONN_REFUSED; + goto fail; + case SOCKS_TTL_EXPIRED: + ret = SOCKS5_ERR_TTL_EXPIRED; + goto fail; + case SOCKS_COMMAND_NOT_SUPPORTED: + ret = SOCKS5_ERR_COM_UNSUPPORTED; + goto fail; + case SOCKS_ADDRESS_NOT_SUPPORTED: + ret = SOCKS5_ERR_ADDR_UNSUPPORTED; + goto fail; + default: + ret = SOCKS5_ERR_UNSPECIFIED; + goto fail; + } + + return (ret); + +fail: + socks5_seterr(ret); + return (0); +} + +/* + * Perform SOCKS5 initialization + */ +int +fetch_socks5_getenv(char **host, int *port) +{ + char *socks5env, *endptr, *ext; + const char *portDelim; + size_t slen; + + portDelim = ":"; + if ((socks5env = getenv("SOCKS5_PROXY")) == NULL || *socks5env == '\0') { + *host = NULL; + *port = -1; + return (-1); + } + + /* + * IPv6 addresses begin and end in brackets. Set the port delimiter + * accordingly and search for it so we can do appropriate validation. + */ + if (socks5env[0] == '[') + portDelim = "]:"; + + slen = strlen(socks5env); + ext = strstr(socks5env, portDelim); + if (socks5env[0] == '[') { + if (socks5env[slen - 1] == ']') { + *host = strndup(socks5env, slen); + } else if (ext != NULL) { + *host = strndup(socks5env, ext - socks5env + 1); + } else { + socks5_seterr(SOCKS5_ERR_BAD_PROXY_FORMAT); + return (0); + } + } else { + *host = strndup(socks5env, ext - socks5env); + } + + if (*host == NULL) { + fprintf(stderr, "Failure to allocate memory, exiting.\n"); + return (-1); + } + if (ext == NULL) { + *port = 1080; /* Default port as defined in RFC1928 */ + } else { + ext += strlen(portDelim); + errno = 0; + *port = strtoimax(ext, (char **)&endptr, 10); + if (*endptr != '\0' || errno != 0 || *port < 0 || + *port > 65535) { + free(*host); + *host = NULL; + socks5_seterr(SOCKS5_ERR_BAD_PORT); + return (0); + } + } + + return (2); +} + + +/* * Establish a TCP connection to the specified port on the specified host. */ conn_t * @@ -346,22 +590,46 @@ fetch_connect(const char *host, int port, int af, int const char *bindaddr; conn_t *conn = NULL; int err = 0, sd = -1; + char *sockshost; + int socksport; DEBUGF("---> %s:%d\n", host, port); - /* resolve server address */ - if (verbose) - fetch_info("resolving server address: %s:%d", host, port); - if ((sais = fetch_resolve(host, port, af)) == NULL) + /* + * Check if SOCKS5_PROXY env variable is set. fetch_socks5_getenv + * will either set sockshost = NULL or allocate memory in all cases. + */ + sockshost = NULL; + if (!fetch_socks5_getenv(&sockshost, &socksport)) goto fail; - /* resolve client address */ - bindaddr = getenv("FETCH_BIND_ADDRESS"); - if (bindaddr != NULL && *bindaddr != '\0') { + /* Not using SOCKS5 proxy */ + if (sockshost == NULL) { + /* resolve server address */ if (verbose) - fetch_info("resolving client address: %s", bindaddr); - if ((cais = fetch_resolve(bindaddr, 0, af)) == NULL) + fetch_info("resolving server address: %s:%d", host, + port); + if ((sais = fetch_resolve(host, port, af)) == NULL) goto fail; + + /* resolve client address */ + bindaddr = getenv("FETCH_BIND_ADDRESS"); + if (bindaddr != NULL && *bindaddr != '\0') { + if (verbose) + fetch_info("resolving client address: %s", + bindaddr); + if ((cais = fetch_resolve(bindaddr, 0, af)) == NULL) + goto fail; + } + } else { + /* resolve socks5 proxy address */ + if (verbose) + fetch_info("resolving SOCKS5 server address: %s:%d", + sockshost, socksport); + if ((sais = fetch_resolve(sockshost, socksport, af)) == NULL) { + socks5_seterr(SOCKS5_ERR_BAD_HOST); + goto fail; + } } /* try each server address in turn */ @@ -389,13 +657,26 @@ fetch_connect(const char *host, int port, int af, int sd = -1; } if (err != 0) { - if (verbose) + if (verbose && sockshost == NULL) { fetch_info("failed to connect to %s:%d", host, port); + goto syserr; + } else if (sockshost != NULL) { + if (verbose) + fetch_info( + "failed to connect to SOCKS5 server %s:%d", + sockshost, socksport); + socks5_seterr(SOCKS5_ERR_CONN_REFUSED); + goto fail; + } goto syserr; } if ((conn = fetch_reopen(sd)) == NULL) goto syserr; + + if (sockshost) + if (!fetch_socks5_init(conn, host, port, verbose)) + goto fail; if (cais != NULL) freeaddrinfo(cais); if (sais != NULL) @@ -403,8 +684,8 @@ fetch_connect(const char *host, int port, int af, int return (conn); syserr: fetch_syserr(); - goto fail; fail: + free(sockshost); if (sd >= 0) close(sd); if (cais != NULL) Modified: projects/clang1000-import/lib/libfetch/common.h ============================================================================== --- projects/clang1000-import/lib/libfetch/common.h Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/lib/libfetch/common.h Sun Feb 16 13:23:54 2020 (r358000) @@ -70,12 +70,47 @@ struct fetcherr { const char *string; }; +/* For SOCKS header size */ +#define HEAD_SIZE 4 +#define FQDN_SIZE 256 +#define PACK_SIZE 1 +#define PORT_SIZE 2 +#define BUFF_SIZE HEAD_SIZE + FQDN_SIZE + PACK_SIZE + PORT_SIZE + +/* SOCKS5 Request Header */ +#define SOCKS_VERSION_5 0x05 +/* SOCKS5 CMD */ +#define SOCKS_CONNECTION 0x01 +#define SOCKS_BIND 0x02 +#define SOCKS_UDP 0x03 +#define SOCKS_NOMETHODS 0xFF +#define SOCKS5_NOTIMPLEMENTED 0x00 +/* SOCKS5 Reserved */ +#define SOCKS_RSV 0x00 +/* SOCKS5 Address Type */ +#define SOCKS_ATYP_IPV4 0x01 +#define SOCKS_ATYP_DOMAINNAME 0x03 +#define SOCKS_ATYP_IPV6 0x04 +/* SOCKS5 Reply Field */ +#define SOCKS_SUCCESS 0x00 +#define SOCKS_GENERAL_FAILURE 0x01 +#define SOCKS_CONNECTION_NOT_ALLOWED 0x02 +#define SOCKS_NETWORK_UNREACHABLE 0x03 +#define SOCKS_HOST_UNREACHABLE 0x04 +#define SOCKS_CONNECTION_REFUSED 0x05 +#define SOCKS_TTL_EXPIRED 0x06 +#define SOCKS_COMMAND_NOT_SUPPORTED 0x07 +#define SOCKS_ADDRESS_NOT_SUPPORTED 0x08 + /* for fetch_writev */ struct iovec; void fetch_seterr(struct fetcherr *, int); void fetch_syserr(void); void fetch_info(const char *, ...) __printflike(1, 2); +int fetch_socks5_getenv(char **host, int *port); +int fetch_socks5_init(conn_t *conn, const char *host, + int port, int verbose); int fetch_default_port(const char *); int fetch_default_proxy_port(const char *); struct addrinfo *fetch_resolve(const char *, int, int); @@ -102,6 +137,7 @@ int fetch_no_proxy_match(const char *); #define http_seterr(n) fetch_seterr(http_errlist, n) #define netdb_seterr(n) fetch_seterr(netdb_errlist, n) #define url_seterr(n) fetch_seterr(url_errlist, n) +#define socks5_seterr(n) fetch_seterr(socks5_errlist, n) #ifndef NDEBUG #define DEBUGF(...) \ Modified: projects/clang1000-import/lib/libfetch/fetch.3 ============================================================================== --- projects/clang1000-import/lib/libfetch/fetch.3 Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/lib/libfetch/fetch.3 Sun Feb 16 13:23:54 2020 (r358000) @@ -668,6 +668,13 @@ which proxies should not be used. Same as .Ev NO_PROXY , for compatibility. +.It Ev SOCKS5_PROXY +Uses SOCKS version 5 to make connection. +The format must be the IP or hostname followed by a colon for the port. +IPv6 addresses must enclose the address in brackets. +If no port is specified, the default is 1080. +This setting will supercede a connection to an +.Ev HTTP_PROXY . .It Ev SSL_ALLOW_SSL3 Allow SSL version 3 when negotiating the connection (not recommended). .It Ev SSL_CA_CERT_FILE @@ -724,6 +731,21 @@ host, define as follows: .Bd -literal -offset indent NO_PROXY=localhost,127.0.0.1 +.Ed +.Pp +To use a SOCKS5 proxy, set the +.Ev SOCKS5_PROXY +environment variable to a +valid host or IP followed by an optional colon and the port. +IPv6 addresses must be enclosed in brackets. +The following are examples of valid settings: +.Bd -literal -offset indent +SOCKS5_PROXY=proxy.example.com +SOCKS5_PROXY=proxy.example.com:1080 +SOCKS5_PROXY=192.0.2.0 +SOCKS5_PROXY=198.51.100.0:1080 +SOCKS5_PROXY=[2001:db8::1] +SOCKS5_PROXY=[2001:db8::2]:1080 .Ed .Pp Access HTTPS website without any certificate verification whatsoever: Modified: projects/clang1000-import/lib/libthr/pthread.map ============================================================================== --- projects/clang1000-import/lib/libthr/pthread.map Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/lib/libthr/pthread.map Sun Feb 16 13:23:54 2020 (r358000) @@ -326,3 +326,7 @@ FBSD_1.4 { FBSD_1.5 { pthread_get_name_np; }; + +FBSD_1.6 { + pthread_peekjoin_np; +}; Modified: projects/clang1000-import/lib/libthr/thread/thr_join.c ============================================================================== --- projects/clang1000-import/lib/libthr/thread/thr_join.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/lib/libthr/thread/thr_join.c Sun Feb 16 13:23:54 2020 (r358000) @@ -36,13 +36,15 @@ __FBSDID("$FreeBSD$"); #include "thr_private.h" +int _pthread_peekjoin_np(pthread_t pthread, void **thread_return); int _pthread_timedjoin_np(pthread_t pthread, void **thread_return, - const struct timespec *abstime); -static int join_common(pthread_t, void **, const struct timespec *); + const struct timespec *abstime); +static int join_common(pthread_t, void **, const struct timespec *, bool peek); __weak_reference(_thr_join, pthread_join); __weak_reference(_thr_join, _pthread_join); __weak_reference(_pthread_timedjoin_np, pthread_timedjoin_np); +__weak_reference(_pthread_peekjoin_np, pthread_peekjoin_np); static void backout_join(void *arg) { @@ -57,7 +59,7 @@ static void backout_join(void *arg) int _thr_join(pthread_t pthread, void **thread_return) { - return (join_common(pthread, thread_return, NULL)); + return (join_common(pthread, thread_return, NULL, false)); } int @@ -68,22 +70,28 @@ _pthread_timedjoin_np(pthread_t pthread, void **thread abstime->tv_nsec >= 1000000000) return (EINVAL); - return (join_common(pthread, thread_return, abstime)); + return (join_common(pthread, thread_return, abstime, false)); } +int +_pthread_peekjoin_np(pthread_t pthread, void **thread_return) +{ + return (join_common(pthread, thread_return, NULL, true)); +} + /* * Cancellation behavior: * if the thread is canceled, joinee is not recycled. */ static int join_common(pthread_t pthread, void **thread_return, - const struct timespec *abstime) + const struct timespec *abstime, bool peek) { struct pthread *curthread = _get_curthread(); struct timespec ts, ts2, *tsp; void *tmp; long tid; - int ret = 0; + int ret; if (pthread == NULL) return (EINVAL); @@ -100,10 +108,21 @@ join_common(pthread_t pthread, void **thread_return, /* Multiple joiners are not supported. */ ret = ENOTSUP; } - if (ret) { + if (ret != 0) { THR_THREAD_UNLOCK(curthread, pthread); return (ret); } + + /* Only peek into status, do not gc the thread. */ + if (peek) { + if (pthread->tid != TID_TERMINATED) + ret = EBUSY; + else if (thread_return != NULL) + *thread_return = pthread->ret; + THR_THREAD_UNLOCK(curthread, pthread); + return (ret); + } + /* Set the running thread to be the joiner: */ pthread->joiner = curthread; Modified: projects/clang1000-import/sbin/ping6/ping6.c ============================================================================== --- projects/clang1000-import/sbin/ping6/ping6.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sbin/ping6/ping6.c Sun Feb 16 13:23:54 2020 (r358000) @@ -238,6 +238,7 @@ static long npackets; /* max packets to transmit */ static long nreceived; /* # of packets we got back */ static long nrepeats; /* number of duplicates */ static long ntransmitted; /* sequence # for outbound packets = #sent */ +static long ntransmitfailures; /* number of transmit failures */ static int interval = 1000; /* interval between packets in ms */ static int waittime = MAXWAIT; /* timeout for each packet */ static long nrcvtimeout = 0; /* # of packets we got back after waittime */ @@ -1256,7 +1257,12 @@ main(int argc, char *argv[]) if(packet != NULL) free(packet); - exit(nreceived == 0 ? 2 : 0); + if (nreceived > 0) + exit(0); + else if (ntransmitted > ntransmitfailures) + exit(2); + else + exit(EX_OSERR); } static void @@ -1423,8 +1429,10 @@ pinger(void) i = sendmsg(ssend, &smsghdr, 0); if (i < 0 || i != cc) { - if (i < 0) + if (i < 0) { + ntransmitfailures++; warn("sendmsg"); + } (void)printf("ping6: wrote %s %d chars, ret=%d\n", hostname, cc, i); } Modified: projects/clang1000-import/share/man/man3/Makefile ============================================================================== --- projects/clang1000-import/share/man/man3/Makefile Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/share/man/man3/Makefile Sun Feb 16 13:23:54 2020 (r358000) @@ -500,7 +500,8 @@ PTHREAD_MLINKS+=pthread_spin_init.3 pthread_spin_destr PTHREAD_MLINKS+=pthread_switch_add_np.3 pthread_switch_delete_np.3 PTHREAD_MLINKS+=pthread_testcancel.3 pthread_setcancelstate.3 \ pthread_testcancel.3 pthread_setcanceltype.3 -PTHREAD_MLINKS+=pthread_join.3 pthread_timedjoin_np.3 +PTHREAD_MLINKS+=pthread_join.3 pthread_peekjoin_np.3 \ + pthread_join.3 pthread_timedjoin_np.3 .endif .include Modified: projects/clang1000-import/share/man/man3/pthread_join.3 ============================================================================== --- projects/clang1000-import/share/man/man3/pthread_join.3 Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/share/man/man3/pthread_join.3 Sun Feb 16 13:23:54 2020 (r358000) @@ -30,13 +30,14 @@ .\" .\" $FreeBSD$ .\" -.Dd February 3, 2018 +.Dd February 13, 2019 .Dt PTHREAD_JOIN 3 .Os .Sh NAME .Nm pthread_join , +.Nm pthread_peekjoin_np , .Nm pthread_timedjoin_np -.Nd wait for thread termination +.Nd inspect thread termination state .Sh LIBRARY .Lb libpthread .Sh SYNOPSIS @@ -45,7 +46,16 @@ .Fn pthread_join "pthread_t thread" "void **value_ptr" .In pthread_np.h .Ft int -.Fn pthread_timedjoin_np "pthread_t thread" "void **value_ptr" "const struct timespec *abstime" +.Fo pthread_peekjoin_np +.Fa "pthread_t thread" +.Fa "void **value_ptr" +.Fc +.Ft int +.Fo pthread_timedjoin_np +.Fa "pthread_t thread" +.Fa "void **value_ptr" +.Fa "const struct timespec *abstime" +.Fc .Sh DESCRIPTION The .Fn pthread_join @@ -82,19 +92,30 @@ function except it will return .Er ETIMEDOUT if target thread does not exit before specified absolute time passes. .Pp +The +.Fn pthread_peekjoin_np +only peeks into the exit status of the specified thread. +If the thread has not exited, the +.Er EBUSY +error is returned. +Otherwise, zero is returned and the thread exit value is optionally stored +into the location of +.Fa *value_ptr . +The target thread is left unjoined and can be used as an argument for +the +.Fn pthread_join +family of functions again. +.Pp A thread that has exited but remains unjoined counts against [_POSIX_THREAD_THREADS_MAX]. .Sh RETURN VALUES -If successful, the -.Fn pthread_join -and -.Fn pthread_timedjoin_np -functions will return zero. -Otherwise an error number will be returned to -indicate the error. +If successful, the described functions return zero. +Otherwise an error number is returned to indicate the error or +special condition. .Sh ERRORS The -.Fn pthread_join +.Fn pthread_join , +.Fn pthread_peekjoin_np , and .Fn pthread_timedjoin_np functions will fail if: @@ -125,6 +146,14 @@ The specified absolute time passed while .Fn pthread_timedjoin_np waited for thread exit. .El +.Pp +The +.Fn pthread_peekjoin_np +function will also fail if: +.Bl -tag -width Er +.It Bq Er EBUSY +The specified thread has not yet exited. +.El .Sh SEE ALSO .Xr wait 2 , .Xr pthread_create 3 @@ -139,3 +168,7 @@ function is a .Fx extension which first appeared in .Fx 6.1 . +Another extension, the +.Fn pthread_peekjoin_np +function, first appearead in +.Fx 13.0 . Modified: projects/clang1000-import/share/man/man9/malloc.9 ============================================================================== --- projects/clang1000-import/share/man/man9/malloc.9 Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/share/man/man9/malloc.9 Sun Feb 16 13:23:54 2020 (r358000) @@ -49,6 +49,8 @@ .Fn mallocarray "size_t nmemb" "size_t size" "struct malloc_type *type" "int flags" .Ft void .Fn free "void *addr" "struct malloc_type *type" +.Ft void +.Fn zfree "void *addr" "struct malloc_type *type" .Ft void * .Fn realloc "void *addr" "size_t size" "struct malloc_type *type" "int flags" .Ft void * @@ -105,6 +107,19 @@ is then .Fn free does nothing. +.Pp +Like +.Fn free , +the +.Fn zfree +function releases memory at address +.Fa addr +that was previously allocated by +.Fn malloc +for re-use. +However, +.Fn zfree +will zero the memory before it is released. .Pp The .Fn realloc Modified: projects/clang1000-import/share/misc/committers-ports.dot ============================================================================== --- projects/clang1000-import/share/misc/committers-ports.dot Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/share/misc/committers-ports.dot Sun Feb 16 13:23:54 2020 (r358000) @@ -155,6 +155,7 @@ jylefort [label="Jean-Yves Lefort\njylefort@FreeBSD.or kai [label="Kai Knoblich\nkai@FreeBSD.org\n2019/02/01"] kami [label="Dominic Fandrey\nkami@FreeBSD.org\n2014/09/09"] kbowling [label="Kevin Bowling\nkbowling@FreeBSD.org\n2018/09/02"] +kevans [label="Kyle Evans\nkevans@FreeBSD.org\n2020/02/14"] kevlo [label="Kevin Lo\nkevlo@FreeBSD.org\n2003/02/21"] kmoore [label="Kris Moore\nkmoore@FreeBSD.org\n2009/04/14"] knu [label="Akinori Musha\nknu@FreeBSD.org\n2000/03/22"] @@ -339,6 +340,7 @@ bapt -> ericbsd bapt -> grembo bapt -> jbeich bapt -> jlaffaye +bapt -> kevans bapt -> manu bapt -> marius bapt -> marino @@ -503,6 +505,7 @@ knu -> nork koobs -> brnrd koobs -> kami +koobs -> kevans koobs -> woodsb02 koobs -> xmj Modified: projects/clang1000-import/sys/amd64/vmm/amd/amdvi_hw.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/amd/amdvi_hw.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/amd/amdvi_hw.c Sun Feb 16 13:23:54 2020 (r358000) @@ -58,7 +58,8 @@ __FBSDID("$FreeBSD$"); #include "amdvi_priv.h" SYSCTL_DECL(_hw_vmm); -SYSCTL_NODE(_hw_vmm, OID_AUTO, amdvi, CTLFLAG_RW, NULL, NULL); +SYSCTL_NODE(_hw_vmm, OID_AUTO, amdvi, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + NULL); #define MOD_INC(a, s, m) (((a) + (s)) % ((m) * (s))) #define MOD_DEC(a, s, m) (((a) - (s)) % ((m) * (s))) @@ -947,16 +948,16 @@ amdvi_add_sysctl(struct amdvi_softc *softc) SYSCTL_ADD_U16(ctx, child, OID_AUTO, "end_dev_rid", CTLFLAG_RD, &softc->end_dev_rid, 0, "End of device under this IOMMU"); SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "command_head", - CTLTYPE_UINT | CTLFLAG_RD, softc, 0, + CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, softc, 0, amdvi_handle_sysctl, "IU", "Command head"); SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "command_tail", - CTLTYPE_UINT | CTLFLAG_RD, softc, 1, + CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, softc, 1, amdvi_handle_sysctl, "IU", "Command tail"); SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "event_head", - CTLTYPE_UINT | CTLFLAG_RD, softc, 2, + CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, softc, 2, amdvi_handle_sysctl, "IU", "Command head"); SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "event_tail", - CTLTYPE_UINT | CTLFLAG_RD, softc, 3, + CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, softc, 3, amdvi_handle_sysctl, "IU", "Command tail"); } Modified: projects/clang1000-import/sys/amd64/vmm/amd/npt.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/amd/npt.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/amd/npt.c Sun Feb 16 13:23:54 2020 (r358000) @@ -41,7 +41,8 @@ __FBSDID("$FreeBSD$"); #include "npt.h" SYSCTL_DECL(_hw_vmm); -SYSCTL_NODE(_hw_vmm, OID_AUTO, npt, CTLFLAG_RW, NULL, NULL); +SYSCTL_NODE(_hw_vmm, OID_AUTO, npt, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + NULL); static int npt_flags; SYSCTL_INT(_hw_vmm_npt, OID_AUTO, pmap_flags, CTLFLAG_RD, Modified: projects/clang1000-import/sys/amd64/vmm/amd/svm.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/amd/svm.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/amd/svm.c Sun Feb 16 13:23:54 2020 (r358000) @@ -67,7 +67,8 @@ __FBSDID("$FreeBSD$"); #include "npt.h" SYSCTL_DECL(_hw_vmm); -SYSCTL_NODE(_hw_vmm, OID_AUTO, svm, CTLFLAG_RW, NULL, NULL); +SYSCTL_NODE(_hw_vmm, OID_AUTO, svm, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + NULL); /* * SVM CPUID function 0x8000_000A, edx bit decoding. Modified: projects/clang1000-import/sys/amd64/vmm/intel/ept.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/intel/ept.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/intel/ept.c Sun Feb 16 13:23:54 2020 (r358000) @@ -68,7 +68,8 @@ __FBSDID("$FreeBSD$"); #define EPT_ENABLE_AD_BITS (1 << 6) SYSCTL_DECL(_hw_vmm); -SYSCTL_NODE(_hw_vmm, OID_AUTO, ept, CTLFLAG_RW, NULL, NULL); +SYSCTL_NODE(_hw_vmm, OID_AUTO, ept, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + NULL); static int ept_enable_ad_bits; Modified: projects/clang1000-import/sys/amd64/vmm/intel/vmx.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/intel/vmx.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/intel/vmx.c Sun Feb 16 13:23:54 2020 (r358000) @@ -123,7 +123,8 @@ static MALLOC_DEFINE(M_VMX, "vmx", "vmx"); static MALLOC_DEFINE(M_VLAPIC, "vlapic", "vlapic"); SYSCTL_DECL(_hw_vmm); -SYSCTL_NODE(_hw_vmm, OID_AUTO, vmx, CTLFLAG_RW, NULL, NULL); +SYSCTL_NODE(_hw_vmm, OID_AUTO, vmx, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + NULL); int vmxon_enabled[MAXCPU]; static char vmxon_region[MAXCPU][PAGE_SIZE] __aligned(PAGE_SIZE); @@ -150,7 +151,9 @@ SYSCTL_INT(_hw_vmm_vmx, OID_AUTO, initialized, CTLFLAG /* * Optional capabilities */ -static SYSCTL_NODE(_hw_vmm_vmx, OID_AUTO, cap, CTLFLAG_RW, NULL, NULL); +static SYSCTL_NODE(_hw_vmm_vmx, OID_AUTO, cap, + CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + NULL); static int cap_halt_exit; SYSCTL_INT(_hw_vmm_vmx_cap, OID_AUTO, halt_exit, CTLFLAG_RD, &cap_halt_exit, 0, Modified: projects/clang1000-import/sys/amd64/vmm/io/iommu.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/io/iommu.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/io/iommu.c Sun Feb 16 13:23:54 2020 (r358000) @@ -48,7 +48,8 @@ __FBSDID("$FreeBSD$"); #include "iommu.h" SYSCTL_DECL(_hw_vmm); -SYSCTL_NODE(_hw_vmm, OID_AUTO, iommu, CTLFLAG_RW, 0, "bhyve iommu parameters"); +SYSCTL_NODE(_hw_vmm, OID_AUTO, iommu, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, + "bhyve iommu parameters"); static int iommu_avail; SYSCTL_INT(_hw_vmm_iommu, OID_AUTO, initialized, CTLFLAG_RD, &iommu_avail, Modified: projects/clang1000-import/sys/amd64/vmm/io/ppt.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/io/ppt.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/io/ppt.c Sun Feb 16 13:23:54 2020 (r358000) @@ -112,7 +112,8 @@ struct pptdev { }; SYSCTL_DECL(_hw_vmm); -SYSCTL_NODE(_hw_vmm, OID_AUTO, ppt, CTLFLAG_RW, 0, "bhyve passthru devices"); +SYSCTL_NODE(_hw_vmm, OID_AUTO, ppt, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, + "bhyve passthru devices"); static int num_pptdevs; SYSCTL_INT(_hw_vmm_ppt, OID_AUTO, devices, CTLFLAG_RD, &num_pptdevs, 0, Modified: projects/clang1000-import/sys/amd64/vmm/io/vrtc.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/io/vrtc.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/io/vrtc.c Sun Feb 16 13:23:54 2020 (r358000) @@ -106,7 +106,8 @@ static void vrtc_set_reg_c(struct vrtc *vrtc, uint8_t static MALLOC_DEFINE(M_VRTC, "vrtc", "bhyve virtual rtc"); SYSCTL_DECL(_hw_vmm); -SYSCTL_NODE(_hw_vmm, OID_AUTO, vrtc, CTLFLAG_RW, NULL, NULL); +SYSCTL_NODE(_hw_vmm, OID_AUTO, vrtc, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + NULL); static int rtc_flag_broken_time = 1; SYSCTL_INT(_hw_vmm_vrtc, OID_AUTO, flag_broken_time, CTLFLAG_RDTUN, Modified: projects/clang1000-import/sys/amd64/vmm/vmm.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/vmm.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/vmm.c Sun Feb 16 13:23:54 2020 (r358000) @@ -215,7 +215,8 @@ static MALLOC_DEFINE(M_VM, "vm", "vm"); /* statistics */ static VMM_STAT(VCPU_TOTAL_RUNTIME, "vcpu total runtime"); -SYSCTL_NODE(_hw, OID_AUTO, vmm, CTLFLAG_RW, NULL, NULL); +SYSCTL_NODE(_hw, OID_AUTO, vmm, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + NULL); /* * Halt the guest if all vcpus are executing a HLT instruction with Modified: projects/clang1000-import/sys/amd64/vmm/vmm_dev.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/vmm_dev.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/vmm_dev.c Sun Feb 16 13:23:54 2020 (r358000) @@ -962,8 +962,9 @@ out: return (error); } SYSCTL_PROC(_hw_vmm, OID_AUTO, destroy, - CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON, - NULL, 0, sysctl_vmm_destroy, "A", NULL); + CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE, + NULL, 0, sysctl_vmm_destroy, "A", + NULL); static struct cdevsw vmmdevsw = { .d_name = "vmmdev", @@ -1045,8 +1046,9 @@ out: return (error); } SYSCTL_PROC(_hw_vmm, OID_AUTO, create, - CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON, - NULL, 0, sysctl_vmm_create, "A", NULL); + CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_PRISON | CTLFLAG_MPSAFE, + NULL, 0, sysctl_vmm_create, "A", + NULL); void vmmdev_init(void) Modified: projects/clang1000-import/sys/amd64/vmm/x86.c ============================================================================== --- projects/clang1000-import/sys/amd64/vmm/x86.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/amd64/vmm/x86.c Sun Feb 16 13:23:54 2020 (r358000) @@ -50,7 +50,8 @@ __FBSDID("$FreeBSD$"); #include "x86.h" SYSCTL_DECL(_hw_vmm); -static SYSCTL_NODE(_hw_vmm, OID_AUTO, topology, CTLFLAG_RD, 0, NULL); +static SYSCTL_NODE(_hw_vmm, OID_AUTO, topology, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, + NULL); #define CPUID_VM_HIGH 0x40000000 Modified: projects/clang1000-import/sys/cam/cam_periph.c ============================================================================== --- projects/clang1000-import/sys/cam/cam_periph.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/cam/cam_periph.c Sun Feb 16 13:23:54 2020 (r358000) @@ -57,7 +57,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include /* For KASSERTs only */ #include #include @@ -682,10 +681,6 @@ camperiphfree(struct cam_periph *periph) cam_periph_assert(periph, MA_OWNED); KASSERT(periph->periph_allocating == 0, ("%s%d: freed while allocating", periph->periph_name, periph->unit_number)); - KASSERT(periph->path->device->ccbq.dev_active == 0, - ("%s%d: freed with %d active CCBs\n", - periph->periph_name, periph->unit_number, - periph->path->device->ccbq.dev_active)); for (p_drv = periph_drivers; *p_drv != NULL; p_drv++) { if (strcmp((*p_drv)->driver_name, periph->periph_name) == 0) break; Modified: projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_compat.c ============================================================================== --- projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_compat.c Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_compat.c Sun Feb 16 13:23:54 2020 (r358000) @@ -91,7 +91,8 @@ __FBSDID("$FreeBSD$"); #include #endif -SYSCTL_NODE(_compat, OID_AUTO, linuxkpi, CTLFLAG_RW, 0, "LinuxKPI parameters"); +SYSCTL_NODE(_compat, OID_AUTO, linuxkpi, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, + "LinuxKPI parameters"); int linuxkpi_debug; SYSCTL_INT(_compat_linuxkpi, OID_AUTO, debug, CTLFLAG_RWTUN, @@ -2441,8 +2442,8 @@ linux_compat_init(void *arg) kobject_init(&linux_root_device.kobj, &linux_dev_ktype); kobject_set_name(&linux_root_device.kobj, "device"); linux_root_device.kobj.oidp = SYSCTL_ADD_NODE(NULL, - SYSCTL_CHILDREN(rootoid), OID_AUTO, "device", CTLFLAG_RD, NULL, - "device"); + SYSCTL_CHILDREN(rootoid), OID_AUTO, "device", + CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "device"); linux_root_device.bsddev = root_bus; linux_class_misc.name = "misc"; class_register(&linux_class_misc); Modified: projects/clang1000-import/sys/conf/files ============================================================================== --- projects/clang1000-import/sys/conf/files Sun Feb 16 13:22:36 2020 (r357999) +++ projects/clang1000-import/sys/conf/files Sun Feb 16 13:23:54 2020 (r358000) @@ -4824,6 +4824,23 @@ crypto/libsodium/randombytes.c optional crypto \ compile-with "${NORMAL_C} -I$S/contrib/libsodium/src/libsodium/include -I$S/crypto/libsodium" *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Mon Feb 17 18:31:33 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4FAF2241FF2 for ; Mon, 17 Feb 2020 18:31:33 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LsyF0pfzz4ZxL; Mon, 17 Feb 2020 18:31:33 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 13FEEB216; Mon, 17 Feb 2020 18:31:33 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HIVWTI000944; Mon, 17 Feb 2020 18:31:32 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HIVWvJ000943; Mon, 17 Feb 2020 18:31:32 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002171831.01HIVWvJ000943@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 17 Feb 2020 18:31:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358029 - projects/clang1000-import/sys/dev/altera/sdcard X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: projects/clang1000-import/sys/dev/altera/sdcard X-SVN-Commit-Revision: 358029 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 18:31:33 -0000 Author: dim Date: Mon Feb 17 18:31:32 2020 New Revision: 358029 URL: https://svnweb.freebsd.org/changeset/base/358029 Log: Tentatively apply D23730: Fix compile errors in altera_sdcard_io.c after r357647 Summary: After rS357647, building universe results in compilation errors for _.mips.BERI_DE4_SDROOT: ``` sys/dev/altera/sdcard/altera_sdcard_io.c: In function 'altera_sdcard_io_start_internal': sys/dev/altera/sdcard/altera_sdcard_io.c:299:13: error: '*bp' is a pointer; did you mean to use '->'? switch (*bp->bio_cmd) { ^~ -> sys/dev/altera/sdcard/altera_sdcard_io.c:301:38: error: '*bp' is a pointer; did you mean to use '->'? altera_sdcard_write_cmd_arg(sc, *bp->bio_pblkno * ^~ -> sys/dev/altera/sdcard/altera_sdcard_io.c:307:42: error: '*bp' is a pointer; did you mean to use '->'? altera_sdcard_write_rxtx_buffer(sc, *bp->bio_data, ^~ -> sys/dev/altera/sdcard/altera_sdcard_io.c:308:10: error: '*bp' is a pointer; did you mean to use '->'? *bp->bio_bcount); ^~ -> sys/dev/altera/sdcard/altera_sdcard_io.c:309:38: error: '*bp' is a pointer; did you mean to use '->'? altera_sdcard_write_cmd_arg(sc, *bp->bio_pblkno * ^~ -> sys/dev/altera/sdcard/altera_sdcard_io.c: In function 'altera_sdcard_io_start': sys/dev/altera/sdcard/altera_sdcard_io.c:336:20: error: incompatible types when assigning to type 'struct bio *' from type 'struct bio' sc->as_currentbio = *bp; ^ ``` The first few are because `->` has a higher precedence than `*`, so the expressions should use `(*bp)->foo` instead. I also renamed the variable to `bpp` to make it clearer that it is a pointer-to-pointer. The last one is because `sc->as_currentbio` is already a `struct bio *`, there is no need to dereference `bp` there. Last but not least, I would really suggest rewriting the `altera_sdcard_io_start_internal()` function to just return success or failure, so the caller can decide to set `bp` to NULL. Modified: projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c Modified: projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c ============================================================================== --- projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c Mon Feb 17 18:05:03 2020 (r358028) +++ projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c Mon Feb 17 18:31:32 2020 (r358029) @@ -293,27 +293,27 @@ recheck: } static void -altera_sdcard_io_start_internal(struct altera_sdcard_softc *sc, struct bio **bp) +altera_sdcard_io_start_internal(struct altera_sdcard_softc *sc, struct bio **bpp) { - switch (*bp->bio_cmd) { + switch ((*bpp)->bio_cmd) { case BIO_READ: - altera_sdcard_write_cmd_arg(sc, *bp->bio_pblkno * + altera_sdcard_write_cmd_arg(sc, (*bpp)->bio_pblkno * ALTERA_SDCARD_SECTORSIZE); altera_sdcard_write_cmd(sc, ALTERA_SDCARD_CMD_READ_BLOCK); break; case BIO_WRITE: - altera_sdcard_write_rxtx_buffer(sc, *bp->bio_data, - *bp->bio_bcount); - altera_sdcard_write_cmd_arg(sc, *bp->bio_pblkno * + altera_sdcard_write_rxtx_buffer(sc, (*bpp)->bio_data, + (*bpp)->bio_bcount); + altera_sdcard_write_cmd_arg(sc, (*bpp)->bio_pblkno * ALTERA_SDCARD_SECTORSIZE); altera_sdcard_write_cmd(sc, ALTERA_SDCARD_CMD_WRITE_BLOCK); break; default: - biofinish(*bp, NULL, EOPNOTSUPP); - *bp = NULL; + biofinish(*bpp, NULL, EOPNOTSUPP); + *bpp = NULL; } } @@ -333,7 +333,7 @@ altera_sdcard_io_start(struct altera_sdcard_softc *sc, KASSERT(bp->bio_bcount == ALTERA_SDCARD_SECTORSIZE, ("%s: I/O size not %d", __func__, ALTERA_SDCARD_SECTORSIZE)); altera_sdcard_io_start_internal(sc, &bp); - sc->as_currentbio = *bp; + sc->as_currentbio = bp; sc->as_retriesleft = ALTERA_SDCARD_RETRY_LIMIT; } From owner-svn-src-projects@freebsd.org Mon Feb 17 18:37:16 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 45764242431 for ; Mon, 17 Feb 2020 18:37:16 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48Lt4q50vlz4gKs; Mon, 17 Feb 2020 18:37:15 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A6F64B394; Mon, 17 Feb 2020 18:37:15 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HIbF9v005198; Mon, 17 Feb 2020 18:37:15 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HIbFRh005197; Mon, 17 Feb 2020 18:37:15 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002171837.01HIbFRh005197@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 17 Feb 2020 18:37:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358030 - projects/clang1000-import/sys/arm/allwinner X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: projects/clang1000-import/sys/arm/allwinner X-SVN-Commit-Revision: 358030 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 18:37:16 -0000 Author: dim Date: Mon Feb 17 18:37:15 2020 New Revision: 358030 URL: https://svnweb.freebsd.org/changeset/base/358030 Log: Work around new clang 10.0.0 -Werror warning: sys/arm/allwinner/aw_cir.c:208:41: error: converting the result of '<<' to a boolean; did you mean '((1 & 255) << 23) != 0'? [-Werror,-Wint-in-bool-context] active_delay = (AW_IR_ACTIVE_T + 1) * (AW_IR_ACTIVE_T_C ? 128 : 1); ^ sys/arm/allwinner/aw_cir.c:130:39: note: expanded from macro 'AW_IR_ACTIVE_T_C' #define AW_IR_ACTIVE_T_C ((1 & 0xff) << 23) ^ Add the != 0 part to indicate that we indeed want to compare against zero. Modified: projects/clang1000-import/sys/arm/allwinner/aw_cir.c Modified: projects/clang1000-import/sys/arm/allwinner/aw_cir.c ============================================================================== --- projects/clang1000-import/sys/arm/allwinner/aw_cir.c Mon Feb 17 18:31:32 2020 (r358029) +++ projects/clang1000-import/sys/arm/allwinner/aw_cir.c Mon Feb 17 18:37:15 2020 (r358030) @@ -205,7 +205,7 @@ aw_ir_decode_packets(struct aw_ir_softc *sc) device_printf(sc->dev, "sc->dcnt = %d\n", sc->dcnt); /* Find Lead 1 (bit separator) */ - active_delay = (AW_IR_ACTIVE_T + 1) * (AW_IR_ACTIVE_T_C ? 128 : 1); + active_delay = (AW_IR_ACTIVE_T + 1) * (AW_IR_ACTIVE_T_C != 0 ? 128 : 1); len = 0; len += (active_delay >> 1); if (bootverbose) From owner-svn-src-projects@freebsd.org Mon Feb 17 18:51:53 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D0EAF242CF6 for ; Mon, 17 Feb 2020 18:51:53 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LtPj09d8z40Sj; Mon, 17 Feb 2020 18:51:52 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C5BE0B644; Mon, 17 Feb 2020 18:51:52 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HIpqIM014139; Mon, 17 Feb 2020 18:51:52 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HIpqh5014138; Mon, 17 Feb 2020 18:51:52 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002171851.01HIpqh5014138@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 17 Feb 2020 18:51:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358033 - projects/clang1000-import/lib/clang/libllvm X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: projects/clang1000-import/lib/clang/libllvm X-SVN-Commit-Revision: 358033 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 18:51:53 -0000 Author: dim Date: Mon Feb 17 18:51:52 2020 New Revision: 358033 URL: https://svnweb.freebsd.org/changeset/base/358033 Log: Work around riscv buildworld failure where it cannot link the final clang binary, with: ld: error: undefined symbol: llvm::EnableABIBreakingChecks >>> referenced by PlistDiagnostics.cpp >>> PlistDiagnostics.o:(.sdata+0x0) in archive /usr/obj/usr/src/riscv.riscv64/lib/clang/libclang/libclang.a [... many more like this ...] Modified: projects/clang1000-import/lib/clang/libllvm/Makefile Modified: projects/clang1000-import/lib/clang/libllvm/Makefile ============================================================================== --- projects/clang1000-import/lib/clang/libllvm/Makefile Mon Feb 17 18:40:00 2020 (r358032) +++ projects/clang1000-import/lib/clang/libllvm/Makefile Mon Feb 17 18:51:52 2020 (r358033) @@ -825,6 +825,7 @@ SRCS_MIN+= Remarks/RemarkSerializer.cpp SRCS_MIN+= Remarks/RemarkStringTable.cpp SRCS_MIN+= Remarks/YAMLRemarkSerializer.cpp SRCS_MIN+= Support/AArch64TargetParser.cpp +SRCS_MIN+= Support/ABIBreak.cpp SRCS_MIN+= Support/APFloat.cpp SRCS_MIN+= Support/APInt.cpp SRCS_MIN+= Support/APSInt.cpp From owner-svn-src-projects@freebsd.org Mon Feb 17 19:20:48 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 780FE24386C for ; Mon, 17 Feb 2020 19:20:48 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48Lv334DhWz4RMv; Mon, 17 Feb 2020 19:20:47 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 89C7DBD65; Mon, 17 Feb 2020 19:20:47 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HJKlIe032901; Mon, 17 Feb 2020 19:20:47 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HJKlqB032900; Mon, 17 Feb 2020 19:20:47 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002171920.01HJKlqB032900@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 17 Feb 2020 19:20:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358034 - projects/clang1000-import/sys/powerpc/conf/dpaa X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: projects/clang1000-import/sys/powerpc/conf/dpaa X-SVN-Commit-Revision: 358034 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 19:20:48 -0000 Author: dim Date: Mon Feb 17 19:20:47 2020 New Revision: 358034 URL: https://svnweb.freebsd.org/changeset/base/358034 Log: Disable new clang 10.0.0 warnings about misleading indentation in sys/contrib/ncsw/Peripherals/FM/fman_ncsw.c. This is horribly formatted contributed code, and fixing it is not worth the effort. Modified: projects/clang1000-import/sys/powerpc/conf/dpaa/files.dpaa Modified: projects/clang1000-import/sys/powerpc/conf/dpaa/files.dpaa ============================================================================== --- projects/clang1000-import/sys/powerpc/conf/dpaa/files.dpaa Mon Feb 17 18:51:52 2020 (r358033) +++ projects/clang1000-import/sys/powerpc/conf/dpaa/files.dpaa Mon Feb 17 19:20:47 2020 (r358034) @@ -74,7 +74,7 @@ contrib/ncsw/Peripherals/FM/fm_muram.c optional dpaa contrib/ncsw/Peripherals/FM/fm_ncsw.c optional dpaa \ no-depend compile-with "${DPAA_COMPILE_CMD}" contrib/ncsw/Peripherals/FM/fman_ncsw.c optional dpaa \ - no-depend compile-with "${DPAA_COMPILE_CMD}" + no-depend compile-with "${DPAA_COMPILE_CMD} ${NO_WMISLEADING_INDENTATION}" contrib/ncsw/Peripherals/QM/qm.c optional dpaa \ no-depend compile-with "${DPAA_COMPILE_CMD}" contrib/ncsw/Peripherals/QM/qm_portal_fqr.c optional dpaa \ From owner-svn-src-projects@freebsd.org Mon Feb 17 19:51:05 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6EC31244F73 for ; Mon, 17 Feb 2020 19:51:05 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48Lvk12GRhz3xwl; Mon, 17 Feb 2020 19:51:05 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 474C2C377; Mon, 17 Feb 2020 19:51:05 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HJp50C053958; Mon, 17 Feb 2020 19:51:05 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HJp4QN053954; Mon, 17 Feb 2020 19:51:04 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002171951.01HJp4QN053954@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 19:51:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358038 - projects/nfs-over-tls/sys/rpc X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/rpc X-SVN-Commit-Revision: 358038 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 19:51:05 -0000 Author: rmacklem Date: Mon Feb 17 19:51:04 2020 New Revision: 358038 URL: https://svnweb.freebsd.org/changeset/base/358038 Log: Update the krpc for nfs-over-tls. Modified: projects/nfs-over-tls/sys/rpc/clnt_rc.c projects/nfs-over-tls/sys/rpc/clnt_stat.h projects/nfs-over-tls/sys/rpc/clnt_vc.c projects/nfs-over-tls/sys/rpc/krpc.h projects/nfs-over-tls/sys/rpc/rpc_generic.c Modified: projects/nfs-over-tls/sys/rpc/clnt_rc.c ============================================================================== --- projects/nfs-over-tls/sys/rpc/clnt_rc.c Mon Feb 17 19:40:26 2020 (r358037) +++ projects/nfs-over-tls/sys/rpc/clnt_rc.c Mon Feb 17 19:51:04 2020 (r358038) @@ -199,11 +199,7 @@ printf("at rpctls_connect\n"); stat = rpctls_connect(newclient, so); printf("aft rpctls_connect=%d\n", stat); if (stat != RPC_SUCCESS) { - if (stat != RPC_SYSTEMERROR) - stat = rpc_createerr.cf_stat = - RPC_TLSCONNECT; - else - stat = rpc_createerr.cf_stat = stat; + stat = rpc_createerr.cf_stat = stat; rpc_createerr.cf_error.re_errno = 0; CLNT_CLOSE(newclient); CLNT_RELEASE(newclient); @@ -228,6 +224,8 @@ printf("aft rpctls_connect=%d\n", stat); CLNT_CONTROL(newclient, CLSET_RETRY_TIMEOUT, &rc->rc_retry); CLNT_CONTROL(newclient, CLSET_WAITCHAN, rc->rc_waitchan); CLNT_CONTROL(newclient, CLSET_INTERRUPTIBLE, &rc->rc_intr); + if (rc->rc_tls != 0) + CLNT_CONTROL(newclient, CLSET_TLS, &one); if (rc->rc_backchannel != NULL) CLNT_CONTROL(newclient, CLSET_BACKCHANNEL, rc->rc_backchannel); stat = RPC_SUCCESS; Modified: projects/nfs-over-tls/sys/rpc/clnt_stat.h ============================================================================== --- projects/nfs-over-tls/sys/rpc/clnt_stat.h Mon Feb 17 19:40:26 2020 (r358037) +++ projects/nfs-over-tls/sys/rpc/clnt_stat.h Mon Feb 17 19:51:04 2020 (r358038) @@ -73,11 +73,7 @@ enum clnt_stat { RPC_STALERACHANDLE = 25, RPC_CANTCONNECT = 26, /* couldn't make connection (cots) */ RPC_XPRTFAILED = 27, /* received discon from remote (cots) */ - RPC_CANTCREATESTREAM = 28, /* can't push rpc module (cots) */ - /* - * TLS errors - */ - RPC_TLSCONNECT = 29 /* can't do TLS handshake */ + RPC_CANTCREATESTREAM = 28 /* can't push rpc module (cots) */ }; #ifdef __cplusplus Modified: projects/nfs-over-tls/sys/rpc/clnt_vc.c ============================================================================== --- projects/nfs-over-tls/sys/rpc/clnt_vc.c Mon Feb 17 19:40:26 2020 (r358037) +++ projects/nfs-over-tls/sys/rpc/clnt_vc.c Mon Feb 17 19:51:04 2020 (r358038) @@ -57,9 +57,12 @@ __FBSDID("$FreeBSD$"); * Now go hang yourself. */ +#include "opt_kern_tls.h" + #include #include #include +#include #include #include #include @@ -82,6 +85,10 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef KERN_TLS +extern u_int ktls_maxlen; +#endif + struct cmessage { struct cmsghdr cmsg; struct cmsgcred cmcred; @@ -303,7 +310,7 @@ clnt_vc_call( uint32_t xid; struct mbuf *mreq = NULL, *results; struct ct_request *cr; - int error, trycnt; + int error, maxextsiz, trycnt; cr = malloc(sizeof(struct ct_request), M_RPC, M_WAITOK); @@ -409,6 +416,17 @@ call_again: TAILQ_INSERT_TAIL(&ct->ct_pending, cr, cr_link); mtx_unlock(&ct->ct_lock); + if (ct->ct_tls) { + /* + * Copy the mbuf chain to a chain of ext_pgs mbuf(s) + * as required by KERN_TLS. + */ + maxextsiz = TLS_MAX_MSG_SIZE_V10_2; +#ifdef KERN_TLS + maxextsiz = min(maxextsiz, ktls_maxlen); +#endif + mreq = _rpc_copym_into_ext_pgs(mreq, maxextsiz); + } /* * sosend consumes mreq. */ @@ -424,6 +442,7 @@ call_again: TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); /* Sleep for 1 clock tick before trying the sosend() again. */ msleep(&fake_wchan, &ct->ct_lock, 0, "rpclpsnd", 1); +printf("TRY AGAIN!!\n"); goto call_again; } @@ -729,8 +748,14 @@ clnt_vc_control(CLIENT *cl, u_int request, void *info) xprt = (SVCXPRT *)info; if (ct->ct_backchannelxprt == NULL) { xprt->xp_p2 = ct; + if (ct->ct_tls) + xprt->xp_tls = TRUE; ct->ct_backchannelxprt = xprt; } + break; + + case CLSET_TLS: + ct->ct_tls = TRUE; break; case CLSET_BLOCKRCV: Modified: projects/nfs-over-tls/sys/rpc/krpc.h ============================================================================== --- projects/nfs-over-tls/sys/rpc/krpc.h Mon Feb 17 19:40:26 2020 (r358037) +++ projects/nfs-over-tls/sys/rpc/krpc.h Mon Feb 17 19:51:04 2020 (r358038) @@ -42,6 +42,7 @@ void clnt_bck_svccall(void *, struct mbuf *, uint32_t); enum clnt_stat clnt_bck_call(CLIENT *, struct rpc_callextra *, rpcproc_t, struct mbuf *, struct mbuf **, struct timeval, SVCXPRT *); +struct mbuf *_rpc_copym_into_ext_pgs(struct mbuf *, int); /* * A pending RPC request which awaits a reply. Requests which have @@ -102,6 +103,7 @@ struct ct_data { struct ct_request_list ct_pending; int ct_upcallrefs; /* Ref cnt of upcalls in prog. */ SVCXPRT *ct_backchannelxprt; /* xprt for backchannel */ + bool_t ct_tls; /* Enable RPC-over-TLS support. */ bool_t ct_dontrcv; /* TRUE to block receiving */ }; Modified: projects/nfs-over-tls/sys/rpc/rpc_generic.c ============================================================================== --- projects/nfs-over-tls/sys/rpc/rpc_generic.c Mon Feb 17 19:40:26 2020 (r358037) +++ projects/nfs-over-tls/sys/rpc/rpc_generic.c Mon Feb 17 19:51:04 2020 (r358038) @@ -64,7 +64,12 @@ __FBSDID("$FreeBSD$"); #include #include +#include +#include +#include +#include + extern u_long sb_max_adj; /* not defined in socketvar.h */ #if __FreeBSD_version < 700000 @@ -866,6 +871,100 @@ out: free(sa, M_SONAME); return (error); +} + +/* + * Make sure an mbuf list is made up entirely of ext_pgs mbufs. + * This is needed for sosend() when KERN_TLS is being used. + * (There might also be a performance improvement for certain + * network interfaces that handle ext_pgs mbufs efficiently.) + * It expects at least one non-ext_pgs mbuf followed by zero + * or more ext_pgs mbufs. It does not handle the case where + * non-ext_pgs mbuf(s) follow ext_pgs ones. + * It also performs sanity checks on the resultant list. + * The "mp" argument list is consumed. + * The "maxextsiz" argument is the upper bound on the data + * size for each mbuf (usually 16K for KERN_TLS). + */ +struct mbuf * +_rpc_copym_into_ext_pgs(struct mbuf *mp, int maxextsiz) +{ + struct mbuf *m, *m2, *m3, *mhead; + int tlen; + + KASSERT((mp->m_flags & (M_EXT | M_NOMAP)) != + (M_EXT | M_NOMAP), ("_rpc_copym_into_ext_pgs:" + " first mbuf is an ext_pgs")); + /* + * Find the last non-ext_pgs mbuf and the total + * length of the non-ext_pgs mbuf(s). + * The first mbuf must always be a non-ext_pgs + * mbuf. + */ + tlen = mp->m_len; + m2 = mp; + for (m = mp->m_next; m != NULL; m = m->m_next) { + if ((m->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + break; + tlen += m->m_len; + m2 = m; + } + + /* + * Copy the non-ext_pgs mbuf(s) into an ext_pgs + * mbuf list. + */ + m2->m_next = NULL; + mhead = mb_copym_ext_pgs(mp, tlen, maxextsiz, M_WAITOK, + true, mb_free_mext_pgs, &m2); + + /* + * Link the ext_pgs list onto the newly copied + * list and free up the non-ext_pgs mbuf(s). + */ + mhead->m_pkthdr.len = mp->m_pkthdr.len; + m2->m_next = m; + m_freem(mp); + + /* + * Sanity check the resultant mbuf list. Check for and + * remove any 0 length mbufs in the list, since the + * KERN_TLS code does not expect any 0 length mbuf(s) + * in the list. + */ + m3 = NULL; + m2 = mhead; + tlen = 0; + while (m2 != NULL) { + KASSERT(m2->m_len >= 0, ("_rpc_copym_into_ext_pgs:" + " negative m_len")); + KASSERT((m2->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP), ("_rpc_copym_into_ext_pgs:" + " non-nomap mbuf in list")); + if (m2->m_len == 0) { + if (m3 != NULL) + m3->m_next = m2->m_next; + else + m = m2->m_next; + m2->m_next = NULL; + m_free(m2); + if (m3 != NULL) + m2 = m3->m_next; + else + m2 = m; + } else { + MBUF_EXT_PGS_ASSERT_SANITY( + m2->m_ext.ext_pgs); + m3 = m2; + tlen += m2->m_len; + m2 = m2->m_next; + } + } + KASSERT(tlen == mhead->m_pkthdr.len, + ("_rpc_copym_into_ext_pgs: tlen=%d pkthdrlen=%d", + tlen, mhead->m_pkthdr.len)); + return (mhead); } /* From owner-svn-src-projects@freebsd.org Mon Feb 17 20:02:15 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D8C5F2452FC for ; Mon, 17 Feb 2020 20:02:15 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48Lvyv4KF7z46Wm; Mon, 17 Feb 2020 20:02:15 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 63876C722; Mon, 17 Feb 2020 20:02:15 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HK2F5v065021; Mon, 17 Feb 2020 20:02:15 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HK2FO6065020; Mon, 17 Feb 2020 20:02:15 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172002.01HK2FO6065020@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 20:02:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358039 - projects/nfs-over-tls/sys/rpc/rpcsec_tls X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/rpc/rpcsec_tls X-SVN-Commit-Revision: 358039 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 20:02:15 -0000 Author: rmacklem Date: Mon Feb 17 20:02:14 2020 New Revision: 358039 URL: https://svnweb.freebsd.org/changeset/base/358039 Log: Fix rpctls_impl.c for handling of cases where TLS won't work. Modified: projects/nfs-over-tls/sys/rpc/rpcsec_tls/rpctls_impl.c Modified: projects/nfs-over-tls/sys/rpc/rpcsec_tls/rpctls_impl.c ============================================================================== --- projects/nfs-over-tls/sys/rpc/rpcsec_tls/rpctls_impl.c Mon Feb 17 19:51:04 2020 (r358038) +++ projects/nfs-over-tls/sys/rpc/rpcsec_tls/rpctls_impl.c Mon Feb 17 20:02:14 2020 (r358039) @@ -32,6 +32,8 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_kern_tls.h" + #include #include #include @@ -52,6 +54,10 @@ __FBSDID("$FreeBSD$"); #include #include +#include +#include +#include + #include "rpctlscd.h" #include "rpctlssd.h" @@ -103,7 +109,6 @@ rpctls_init(void *dummy) rpctls_null_verf.oa_flavor = AUTH_NULL; rpctls_null_verf.oa_base = RPCTLS_START_STRING; rpctls_null_verf.oa_length = strlen(RPCTLS_START_STRING); -printf("RPCTLS init done\n"); } SYSINIT(rpctls_init, SI_SUB_KMEM, SI_ORDER_ANY, rpctls_init, NULL); @@ -115,7 +120,7 @@ sys_gssd_syscall(struct thread *td, struct gssd_syscal struct file *fp; struct socket *so; char path[MAXPATHLEN], *pathp; - int fd, error, retry_count = 5; + int fd = -1, error, retry_count = 5; CLIENT *cl, *oldcl; bool ssd; @@ -215,14 +220,23 @@ printf("cl=%p oldcl=%p\n", cl, oldcl); } } else if (path[0] == 'C') { printf("In connect\n"); - KASSERT(rpctls_connect_so != NULL, - ("rpctlsc syscall so != NULL")); - KASSERT(rpctls_connect_fd == -1, - ("rpctlsc syscall fd not -1")); - error = falloc(td, &fp, &fd, 0); -printf("falloc=%d fd=%d\n", error, fd); + error = EINVAL; +#ifdef KERN_TLS + if (PMAP_HAS_DMAP != 0) + error = 0; +#endif if (error == 0) { mtx_lock(&rpctls_connect_lock); + if (rpctls_connect_so == NULL || + rpctls_connect_fd != -1) + error = EINVAL; + mtx_unlock(&rpctls_connect_lock); + } + if (error == 0) + error = falloc(td, &fp, &fd, 0); + if (error == 0) { +printf("falloc=%d fd=%d\n", error, fd); + mtx_lock(&rpctls_connect_lock); so = rpctls_connect_so; rpctls_connect_so = NULL; rpctls_connect_fp = fp; @@ -256,14 +270,23 @@ printf("aft kern_close\n"); printf("rpctlsc fd -1\n"); } else if (path[0] == 'E') { printf("In srvconnect\n"); - KASSERT(rpctls_server_so != NULL, - ("rpctlss syscall so != NULL")); - KASSERT(rpctls_server_fd == -1, - ("rpctlss syscall fd not -1")); - error = falloc(td, &fp, &fd, 0); -printf("srv falloc=%d fd=%d\n", error, fd); + error = EINVAL; +#ifdef KERN_TLS + if (PMAP_HAS_DMAP != 0) + error = 0; +#endif if (error == 0) { mtx_lock(&rpctls_server_lock); + if (rpctls_server_so == NULL || + rpctls_server_fd != -1) + error = EINVAL; + mtx_unlock(&rpctls_server_lock); + } + if (error == 0) + error = falloc(td, &fp, &fd, 0); + if (error == 0) { +printf("srv falloc=%d fd=%d\n", error, fd); + mtx_lock(&rpctls_server_lock); so = rpctls_server_so; rpctls_server_so = NULL; rpctls_server_fp = fp; @@ -349,7 +372,7 @@ printf("In rpctls_connect\n"); cl = rpctls_connect_client(); printf("connect_client=%p\n", cl); if (cl == NULL) - return (RPC_TLSCONNECT); + return (RPC_AUTHERROR); /* First, do the AUTH_TLS NULL RPC. */ memset(&ext, 0, sizeof(ext)); @@ -361,6 +384,8 @@ printf("authtls=%p\n", ext.rc_auth); NULL, (xdrproc_t)xdr_void, NULL, utimeout); printf("aft NULLRPC=%d\n", stat); AUTH_DESTROY(ext.rc_auth); + if (stat == RPC_AUTHERROR) + return (stat); if (stat != RPC_SUCCESS) return (RPC_SYSTEMERROR); @@ -467,6 +492,13 @@ printf("authtls proc=%d\n", rqst->rq_proc); if (rqst->rq_proc != NULLPROC) return (AUTH_REJECTEDCRED); + if (PMAP_HAS_DMAP == 0) + return (AUTH_REJECTEDCRED); + +#ifndef KERN_TLS + return (AUTH_REJECTEDCRED); +#endif + /* * Disable reception for the krpc so that the TLS handshake can * be done on the socket in the rpctlssd daemon. @@ -487,7 +519,7 @@ printf("authtls: null reply=%d\n", call_stat); xprt->xp_dontrcv = FALSE; sx_xunlock(&xprt->xp_lock); xprt_active(xprt); /* Harmless if already active. */ - return (AUTH_FAILED); + return (AUTH_REJECTEDCRED); } /* Do an upcall to do the TLS handshake. */ @@ -496,12 +528,14 @@ printf("authtls: null reply=%d\n", call_stat); /* Re-enable reception on the socket within the krpc. */ sx_xlock(&xprt->xp_lock); xprt->xp_dontrcv = FALSE; + if (stat == RPC_SUCCESS) + xprt->xp_tls = TRUE; sx_xunlock(&xprt->xp_lock); xprt_active(xprt); /* Harmless if already active. */ printf("authtls: aft handshake stat=%d\n", stat); if (stat != RPC_SUCCESS) - return (AUTH_FAILED); + return (AUTH_REJECTEDCRED); return (RPCSEC_GSS_NODISPATCH); } From owner-svn-src-projects@freebsd.org Mon Feb 17 20:09:07 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E6D0B2453FE for ; Mon, 17 Feb 2020 20:09:07 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48Lw6q0ftqz4BVV; Mon, 17 Feb 2020 20:09:07 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 09263C745; Mon, 17 Feb 2020 20:09:07 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HK96hN065532; Mon, 17 Feb 2020 20:09:06 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HK96wK065531; Mon, 17 Feb 2020 20:09:06 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172009.01HK96wK065531@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 20:09:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358040 - in projects/nfs-over-tls/sys: kern sys X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: in projects/nfs-over-tls/sys: kern sys X-SVN-Commit-Revision: 358040 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 20:09:08 -0000 Author: rmacklem Date: Mon Feb 17 20:09:06 2020 New Revision: 358040 URL: https://svnweb.freebsd.org/changeset/base/358040 Log: Add two functions to kern_mbuf.c used by the RPC-over-TLS to copy a list of regular mbuf(s) to a list of ext_pgs ones. If these are not considered generic enough, they can easily be moved to the krpc sources and renamed. Modified: projects/nfs-over-tls/sys/kern/kern_mbuf.c projects/nfs-over-tls/sys/sys/mbuf.h Modified: projects/nfs-over-tls/sys/kern/kern_mbuf.c ============================================================================== --- projects/nfs-over-tls/sys/kern/kern_mbuf.c Mon Feb 17 20:02:14 2020 (r358039) +++ projects/nfs-over-tls/sys/kern/kern_mbuf.c Mon Feb 17 20:09:06 2020 (r358040) @@ -60,6 +60,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -1592,4 +1593,107 @@ m_snd_tag_destroy(struct m_snd_tag *mst) ifp->if_snd_tag_free(mst); if_rele(ifp); counter_u64_add(snd_tag_count, -1); +} + +/* + * Allocate an mbuf with anonymous external pages. + */ +struct mbuf * +mb_alloc_ext_plus_pages(int len, int how, bool pkthdr, m_ext_free_t ext_free) +{ + struct mbuf *m; + vm_page_t pg; + int i, npgs; + + m = mb_alloc_ext_pgs(how, pkthdr, ext_free); + if (m == NULL) + return (NULL); + m->m_ext.ext_pgs->flags |= MBUF_PEXT_FLAG_ANON; + npgs = howmany(len, PAGE_SIZE); + for (i = 0; i < npgs; i++) { + do { + pg = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | + VM_ALLOC_NOOBJ | VM_ALLOC_NODUMP | VM_ALLOC_WIRED); + if (pg == NULL) { + if (how == M_NOWAIT) { + m->m_ext.ext_pgs->npgs = i; + m_free(m); + return (NULL); + } + vm_wait(NULL); + } + } while (pg == NULL); + m->m_ext.ext_pgs->pa[i] = VM_PAGE_TO_PHYS(pg); + } + m->m_ext.ext_pgs->npgs = npgs; + return (m); +} + +/* + * Copy the data in the mbuf chain to a chain of mbufs with external pages. + * len is the length of data in the input mbuf chain. + * mlen is the maximum number of bytes put into each ext_page mbuf. + */ +struct mbuf * +mb_copym_ext_pgs(struct mbuf *mp, int len, int mlen, int how, bool pkthdr, + m_ext_free_t ext_free, struct mbuf **mlast) +{ + struct mbuf *m, *mout = NULL; + char *pgpos = NULL, *mbpos; + int i = 0, mblen, mbufsiz, pglen, xfer; + + if (len == 0) + return (NULL); + m = NULL; + pglen = mblen = 0; + do { + if (pglen == 0) { + if (m == NULL || ++i == m->m_ext.ext_pgs->npgs) { + mbufsiz = min(mlen, len); + if (m == NULL) { + m = mout = mb_alloc_ext_plus_pages( + mbufsiz, how, pkthdr, ext_free); + if (m == NULL) + return (m); + if (pkthdr) + m->m_pkthdr.len = len; + } else { + m->m_ext.ext_pgs->last_pg_len = + PAGE_SIZE; + m->m_next = mb_alloc_ext_plus_pages( + mbufsiz, how, false, ext_free); + m = m->m_next; + if (m == NULL) { + m_freem(mout); + return (m); + } + } + i = 0; + } + pgpos = (char *)(void *) + PHYS_TO_DMAP(m->m_ext.ext_pgs->pa[i]); + pglen = PAGE_SIZE; + } + while (mblen == 0) { + if (mp == NULL) { + m_freem(mout); + return (NULL); + } + mbpos = mtod(mp, char *); + mblen = mp->m_len; + mp = mp->m_next; + } + xfer = min(mblen, pglen); + bcopy(mbpos, pgpos, xfer); + pgpos += xfer; + mbpos += xfer; + pglen -= xfer; + mblen -= xfer; + len -= xfer; + m->m_len += xfer; + } while (len > 0); + m->m_ext.ext_pgs->last_pg_len = PAGE_SIZE - pglen; + if (mlast != NULL) + *mlast = m; + return (mout); } Modified: projects/nfs-over-tls/sys/sys/mbuf.h ============================================================================== --- projects/nfs-over-tls/sys/sys/mbuf.h Mon Feb 17 20:02:14 2020 (r358039) +++ projects/nfs-over-tls/sys/sys/mbuf.h Mon Feb 17 20:09:06 2020 (r358040) @@ -700,6 +700,9 @@ void mb_dupcl(struct mbuf *, struct mbuf *); void mb_free_ext(struct mbuf *); void mb_free_mext_pgs(struct mbuf *); struct mbuf *mb_alloc_ext_pgs(int, bool, m_ext_free_t); +struct mbuf *mb_alloc_ext_plus_pages(int, int, bool, m_ext_free_t); +struct mbuf *mb_copym_ext_pgs(struct mbuf *, int, int, int, bool, + m_ext_free_t, struct mbuf **); int mb_unmapped_compress(struct mbuf *m); struct mbuf *mb_unmapped_to_ext(struct mbuf *m); void mb_free_notready(struct mbuf *m, int count); From owner-svn-src-projects@freebsd.org Mon Feb 17 20:15:02 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2C1E424569D for ; Mon, 17 Feb 2020 20:15:02 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LwFf009wz4HLj; Mon, 17 Feb 2020 20:15:01 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BEBA8C947; Mon, 17 Feb 2020 20:15:01 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HKF1tS071223; Mon, 17 Feb 2020 20:15:01 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HKExZs071197; Mon, 17 Feb 2020 20:14:59 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002172014.01HKExZs071197@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 17 Feb 2020 20:14:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358042 - projects/clang1000-import/lib/libc/quad X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: projects/clang1000-import/lib/libc/quad X-SVN-Commit-Revision: 358042 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 20:15:02 -0000 Author: dim Date: Mon Feb 17 20:14:59 2020 New Revision: 358042 URL: https://svnweb.freebsd.org/changeset/base/358042 Log: Add casts and L suffixes to libc quad support, to work around various -Werror warnings from clang 10.0.0, such as: lib/libc/quad/fixdfdi.c:57:12: error: implicit conversion from 'long long' to 'double' changes value from 9223372036854775807 to 9223372036854775808 [-Werror,-Wimplicit-int-float-conversion] if (x >= QUAD_MAX) ~~ ^~~~~~~~ /usr/obj/usr/src/powerpc.powerpc/tmp/usr/include/sys/limits.h:89:19: note: expanded from macro 'QUAD_MAX' #define QUAD_MAX (__QUAD_MAX) /* max value for a quad_t */ ^~~~~~~~~~ /usr/obj/usr/src/powerpc.powerpc/tmp/usr/include/machine/_limits.h:91:20: note: expanded from macro '__QUAD_MAX' #define __QUAD_MAX __LLONG_MAX /* max value for a quad_t */ ^~~~~~~~~~~ /usr/obj/usr/src/powerpc.powerpc/tmp/usr/include/machine/_limits.h:75:21: note: expanded from macro '__LLONG_MAX' #define __LLONG_MAX 0x7fffffffffffffffLL /* max value for a long long */ ^~~~~~~~~~~~~~~~~~~~ and many instances of: lib/libc/quad/fixunsdfdi.c:73:17: error: shift count >= width of type [-Werror,-Wshift-count-overflow] toppart = (x - ONE_HALF) / ONE; ^~~~~~~~ lib/libc/quad/fixunsdfdi.c:45:19: note: expanded from macro 'ONE_HALF' #define ONE_HALF (ONE_FOURTH * 2.0) ^~~~~~~~~~ lib/libc/quad/fixunsdfdi.c:44:23: note: expanded from macro 'ONE_FOURTH' #define ONE_FOURTH (1 << (LONG_BITS - 2)) ^ ~~~~~~~~~~~~~~~ lib/libc/quad/fixunsdfdi.c:73:29: error: shift count >= width of type [-Werror,-Wshift-count-overflow] toppart = (x - ONE_HALF) / ONE; ^~~ lib/libc/quad/fixunsdfdi.c:46:15: note: expanded from macro 'ONE' #define ONE (ONE_FOURTH * 4.0) ^~~~~~~~~~ lib/libc/quad/fixunsdfdi.c:44:23: note: expanded from macro 'ONE_FOURTH' #define ONE_FOURTH (1 << (LONG_BITS - 2)) ^ ~~~~~~~~~~~~~~~ Modified: projects/clang1000-import/lib/libc/quad/fixdfdi.c projects/clang1000-import/lib/libc/quad/fixsfdi.c projects/clang1000-import/lib/libc/quad/fixunsdfdi.c projects/clang1000-import/lib/libc/quad/fixunssfdi.c projects/clang1000-import/lib/libc/quad/floatdidf.c projects/clang1000-import/lib/libc/quad/floatdisf.c projects/clang1000-import/lib/libc/quad/floatunsdidf.c projects/clang1000-import/lib/libc/quad/qdivrem.c projects/clang1000-import/lib/libc/quad/quad.h Modified: projects/clang1000-import/lib/libc/quad/fixdfdi.c ============================================================================== --- projects/clang1000-import/lib/libc/quad/fixdfdi.c Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/fixdfdi.c Mon Feb 17 20:14:59 2020 (r358042) @@ -49,12 +49,12 @@ quad_t __fixdfdi(double x) { if (x < 0) - if (x <= QUAD_MIN) + if (x <= (double)QUAD_MIN) return (QUAD_MIN); else return ((quad_t)-(u_quad_t)-x); else - if (x >= QUAD_MAX) + if (x >= (double)QUAD_MAX) return (QUAD_MAX); else return ((quad_t)(u_quad_t)x); Modified: projects/clang1000-import/lib/libc/quad/fixsfdi.c ============================================================================== --- projects/clang1000-import/lib/libc/quad/fixsfdi.c Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/fixsfdi.c Mon Feb 17 20:14:59 2020 (r358042) @@ -51,12 +51,12 @@ long long __fixsfdi(float x) { if (x < 0) - if (x <= QUAD_MIN) + if (x <= (float)QUAD_MIN) return (QUAD_MIN); else return ((quad_t)-(u_quad_t)-x); else - if (x >= QUAD_MAX) + if (x >= (float)QUAD_MAX) return (QUAD_MAX); else return ((quad_t)(u_quad_t)x); Modified: projects/clang1000-import/lib/libc/quad/fixunsdfdi.c ============================================================================== --- projects/clang1000-import/lib/libc/quad/fixunsdfdi.c Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/fixunsdfdi.c Mon Feb 17 20:14:59 2020 (r358042) @@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$"); #include "quad.h" -#define ONE_FOURTH (1 << (LONG_BITS - 2)) +#define ONE_FOURTH (1L << (LONG_BITS - 2)) #define ONE_HALF (ONE_FOURTH * 2.0) #define ONE (ONE_FOURTH * 4.0) @@ -84,11 +84,11 @@ __fixunsdfdi(double x) x -= (double)t.uq; if (x < 0) { t.ul[H]--; - x += ULONG_MAX; + x += (double)ULONG_MAX; } - if (x > ULONG_MAX) { + if (x > (double)ULONG_MAX) { t.ul[H]++; - x -= ULONG_MAX; + x -= (double)ULONG_MAX; } t.ul[L] = (u_long)x; return (t.uq); Modified: projects/clang1000-import/lib/libc/quad/fixunssfdi.c ============================================================================== --- projects/clang1000-import/lib/libc/quad/fixunssfdi.c Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/fixunssfdi.c Mon Feb 17 20:14:59 2020 (r358042) @@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$"); #include "quad.h" -#define ONE_FOURTH (1 << (LONG_BITS - 2)) +#define ONE_FOURTH (1L << (LONG_BITS - 2)) #define ONE_HALF (ONE_FOURTH * 2.0) #define ONE (ONE_FOURTH * 4.0) @@ -89,11 +89,11 @@ __fixunssfdi(float f) x -= (double)t.uq; if (x < 0) { t.ul[H]--; - x += ULONG_MAX; + x += (double)ULONG_MAX; } - if (x > ULONG_MAX) { + if (x > (double)ULONG_MAX) { t.ul[H]++; - x -= ULONG_MAX; + x -= (double)ULONG_MAX; } t.ul[L] = (u_long)x; return (t.uq); Modified: projects/clang1000-import/lib/libc/quad/floatdidf.c ============================================================================== --- projects/clang1000-import/lib/libc/quad/floatdidf.c Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/floatdidf.c Mon Feb 17 20:14:59 2020 (r358042) @@ -66,7 +66,7 @@ __floatdidf(quad_t x) * code and does not know how to get at an exponent. Machine- * specific code may be able to do this more efficiently. */ - d = (double)u.ul[H] * ((1 << (LONG_BITS - 2)) * 4.0); + d = (double)u.ul[H] * ((1L << (LONG_BITS - 2)) * 4.0); d += u.ul[L]; return (neg ? -d : d); Modified: projects/clang1000-import/lib/libc/quad/floatdisf.c ============================================================================== --- projects/clang1000-import/lib/libc/quad/floatdisf.c Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/floatdisf.c Mon Feb 17 20:14:59 2020 (r358042) @@ -68,7 +68,7 @@ __floatdisf(quad_t x) * * Using double here may be excessive paranoia. */ - f = (double)u.ul[H] * ((1 << (LONG_BITS - 2)) * 4.0); + f = (double)u.ul[H] * ((1L << (LONG_BITS - 2)) * 4.0); f += u.ul[L]; return (neg ? -f : f); Modified: projects/clang1000-import/lib/libc/quad/floatunsdidf.c ============================================================================== --- projects/clang1000-import/lib/libc/quad/floatunsdidf.c Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/floatunsdidf.c Mon Feb 17 20:14:59 2020 (r358042) @@ -52,7 +52,7 @@ __floatunsdidf(u_quad_t x) union uu u; u.uq = x; - d = (double)u.ul[H] * ((1 << (LONG_BITS - 2)) * 4.0); + d = (double)u.ul[H] * ((1L << (LONG_BITS - 2)) * 4.0); d += u.ul[L]; return (d); } Modified: projects/clang1000-import/lib/libc/quad/qdivrem.c ============================================================================== --- projects/clang1000-import/lib/libc/quad/qdivrem.c Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/qdivrem.c Mon Feb 17 20:14:59 2020 (r358042) @@ -46,7 +46,7 @@ __FBSDID("$FreeBSD$"); #include "quad.h" -#define B (1 << HALF_BITS) /* digit base */ +#define B (1L << HALF_BITS) /* digit base */ /* Combine two `digits' to make a single two-digit number. */ #define COMBINE(a, b) (((u_long)(a) << HALF_BITS) | (b)) Modified: projects/clang1000-import/lib/libc/quad/quad.h ============================================================================== --- projects/clang1000-import/lib/libc/quad/quad.h Mon Feb 17 20:12:34 2020 (r358041) +++ projects/clang1000-import/lib/libc/quad/quad.h Mon Feb 17 20:14:59 2020 (r358042) @@ -91,7 +91,7 @@ union uu { * (sizeof(long)*CHAR_BIT/2). */ #define HHALF(x) ((x) >> HALF_BITS) -#define LHALF(x) ((x) & ((1 << HALF_BITS) - 1)) +#define LHALF(x) ((x) & ((1L << HALF_BITS) - 1)) #define LHUP(x) ((x) << HALF_BITS) int __cmpdi2(quad_t a, quad_t b); From owner-svn-src-projects@freebsd.org Mon Feb 17 20:19:44 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 33726245924 for ; Mon, 17 Feb 2020 20:19:44 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LwM41Bdbz4MY5; Mon, 17 Feb 2020 20:19:44 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 22CA3C986; Mon, 17 Feb 2020 20:19:44 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HKJiQO071633; Mon, 17 Feb 2020 20:19:44 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HKJhPK071629; Mon, 17 Feb 2020 20:19:43 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172019.01HKJhPK071629@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 20:19:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358043 - projects/nfs-over-tls/sys/fs/nfs X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/fs/nfs X-SVN-Commit-Revision: 358043 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 20:19:44 -0000 Author: rmacklem Date: Mon Feb 17 20:19:43 2020 New Revision: 358043 URL: https://svnweb.freebsd.org/changeset/base/358043 Log: Fix the NFS code so that it can handle ext_pgs mbufs. This is quite a bit of churn, but I am trying to make sure I don't break the non-ext_pgs mbufs case. This updates sys/fs/nfs. Further commits will update sys/fs/nfsclient and sys/fs/nfsserver. Modified: projects/nfs-over-tls/sys/fs/nfs/nfs.h projects/nfs-over-tls/sys/fs/nfs/nfs_commonkrpc.c projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c projects/nfs-over-tls/sys/fs/nfs/nfs_var.h projects/nfs-over-tls/sys/fs/nfs/nfscl.h projects/nfs-over-tls/sys/fs/nfs/nfsm_subs.h Modified: projects/nfs-over-tls/sys/fs/nfs/nfs.h ============================================================================== --- projects/nfs-over-tls/sys/fs/nfs/nfs.h Mon Feb 17 20:14:59 2020 (r358042) +++ projects/nfs-over-tls/sys/fs/nfs/nfs.h Mon Feb 17 20:19:43 2020 (r358043) @@ -645,7 +645,12 @@ struct nfsrv_descript { NFSSOCKADDR_T nd_nam; /* and socket addr */ NFSSOCKADDR_T nd_nam2; /* return socket addr */ caddr_t nd_dpos; /* Current dissect pos */ + int nd_dextpg; /* Current ext_pgs page */ + int nd_dextpgsiz; /* Bytes left in page */ caddr_t nd_bpos; /* Current build pos */ + int nd_bextpg; /* Current ext_pgs page */ + int nd_bextpgsiz; /* Bytes left in page */ + int nd_maxextsiz; /* Max ext_pgs mbuf size */ u_int64_t nd_flag; /* nd_flag */ u_int16_t nd_procnum; /* RPC # */ u_int32_t nd_repstat; /* Reply status */ @@ -711,6 +716,8 @@ struct nfsrv_descript { #define ND_SAVEDCURSTATEID 0x100000000 #define ND_HASSLOTID 0x200000000 #define ND_NFSV42 0x400000000 +#define ND_EXTPG 0x800000000 +#define ND_TLS 0x1000000000 /* * ND_GSS should be the "or" of all GSS type authentications. Modified: projects/nfs-over-tls/sys/fs/nfs/nfs_commonkrpc.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfs/nfs_commonkrpc.c Mon Feb 17 20:14:59 2020 (r358042) +++ projects/nfs-over-tls/sys/fs/nfs/nfs_commonkrpc.c Mon Feb 17 20:19:43 2020 (r358043) @@ -285,7 +285,8 @@ newnfs_connect(struct nfsmount *nmp, struct nfssockreq CLNT_CONTROL(client, CLSET_INTERRUPTIBLE, &one); if ((nmp->nm_flag & NFSMNT_RESVPORT)) CLNT_CONTROL(client, CLSET_PRIVPORT, &one); -CLNT_CONTROL(client, CLSET_TLS, &one); + if (NFSHASTLS(nmp)) + CLNT_CONTROL(client, CLSET_TLS, &one); if (NFSHASSOFT(nmp)) { if (nmp->nm_sotype == SOCK_DGRAM) /* @@ -897,9 +898,11 @@ tryagain: * These could cause pointer alignment problems, so copy them to * well aligned mbufs. */ +#ifdef notnow newnfs_realign(&nd->nd_mrep, M_WAITOK); +#endif nd->nd_md = nd->nd_mrep; - nd->nd_dpos = NFSMTOD(nd->nd_md, caddr_t); + nfsm_set(nd, false); nd->nd_repstat = 0; if (nd->nd_procnum != NFSPROC_NULL && nd->nd_procnum != NFSV4PROC_CBNULL) { Modified: projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c Mon Feb 17 20:14:59 2020 (r358042) +++ projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c Mon Feb 17 20:19:43 2020 (r358043) @@ -44,11 +44,14 @@ __FBSDID("$FreeBSD$"); #ifndef APPLEKEXT #include "opt_inet.h" #include "opt_inet6.h" +#include "opt_kern_tls.h" #include #include +#include + #include /* @@ -84,6 +87,9 @@ extern volatile int nfsrv_devidcnt; extern int nfscl_debuglevel; extern struct nfsdevicehead nfsrv_devidhead; extern struct nfsstatsv1 nfsstatsv1; +#ifdef KERN_TLS +extern u_int ktls_maxlen; +#endif SYSCTL_DECL(_vfs_nfs); SYSCTL_INT(_vfs_nfs, OID_AUTO, enable_uidtostring, CTLFLAG_RW, @@ -97,6 +103,10 @@ int nfs_maxcopyrange = 10 * 1024 * 1024; SYSCTL_INT(_vfs_nfs, OID_AUTO, maxcopyrange, CTLFLAG_RW, &nfs_maxcopyrange, 0, "Max size of a Copy so RPC times reasonable"); +bool nfs_use_ext_pgs = false; +SYSCTL_BOOL(_vfs_nfs, OID_AUTO, use_ext_pgs, CTLFLAG_RW, &nfs_use_ext_pgs, + 0, "Set true to use TCP"); + /* * This array of structures indicates, for V4: * retfh - which of 3 types of calling args are used @@ -229,6 +239,11 @@ static void nfsrv_removeuser(struct nfsusrgrp *usrp, i static int nfsrv_getrefstr(struct nfsrv_descript *, u_char **, u_char **, int *, int *); static void nfsrv_refstrbigenough(int, u_char **, u_char **, int *); +static int nfsm_copyfrommbuf(struct nfsrv_descript *, char *, enum uio_seg, + int); +static int nfsm_copyfrommbuf_extpgs(struct nfsrv_descript *, char *, + enum uio_seg, int); +static struct mbuf *nfsm_splitatpgno(struct mbuf *, int, int); static struct { int op; @@ -319,7 +334,7 @@ static int nfs_bigrequest[NFSV42_NPROCS] = { APPLESTATIC void nfscl_reqstart(struct nfsrv_descript *nd, int procnum, struct nfsmount *nmp, u_int8_t *nfhp, int fhlen, u_int32_t **opcntpp, struct nfsclsession *sep, - int vers, int minorvers) + int vers, int minorvers, bool use_ext) { struct mbuf *mb; u_int32_t *tl; @@ -352,17 +367,32 @@ nfscl_reqstart(struct nfsrv_descript *nd, int procnum, } nd->nd_procnum = procnum; nd->nd_repstat = 0; + nd->nd_maxextsiz = 16384; + if (use_ext && PMAP_HAS_DMAP != 0) { + nd->nd_flag |= ND_EXTPG; +#ifdef KERN_TLS + nd->nd_maxextsiz = min(TLS_MAX_MSG_SIZE_V10_2, + ktls_maxlen); +#endif + } /* * Get the first mbuf for the request. */ - if (nfs_bigrequest[procnum]) - NFSMCLGET(mb, M_WAITOK); - else - NFSMGET(mb); - mbuf_setlen(mb, 0); - nd->nd_mreq = nd->nd_mb = mb; - nd->nd_bpos = NFSMTOD(mb, caddr_t); + if ((nd->nd_flag & ND_EXTPG) != 0) { + mb = mb_alloc_ext_plus_pages(PAGE_SIZE, M_WAITOK, false, + mb_free_mext_pgs); + nd->nd_mreq = nd->nd_mb = mb; + nfsm_set(nd, true); + } else { + if (nfs_bigrequest[procnum]) + NFSMCLGET(mb, M_WAITOK); + else + NFSMGET(mb); + mb->m_len = 0; + nd->nd_mreq = nd->nd_mb = mb; + nd->nd_bpos = mtod(mb, char *); + } /* * And fill the first file handle into the request. @@ -609,15 +639,11 @@ nfscl_fillsattr(struct nfsrv_descript *nd, struct vatt int nfsm_mbufuio(struct nfsrv_descript *nd, struct uio *uiop, int siz) { - char *mbufcp, *uiocp; + char *uiocp; int xfer, left, len; - mbuf_t mp; long uiosiz, rem; int error = 0; - mp = nd->nd_md; - mbufcp = nd->nd_dpos; - len = NFSMTOD(mp, caddr_t) + mbuf_len(mp) - mbufcp; rem = NFSM_RNDUP(siz) - siz; while (siz > 0) { if (uiop->uio_iovcnt <= 0 || uiop->uio_iov == NULL) { @@ -630,35 +656,21 @@ nfsm_mbufuio(struct nfsrv_descript *nd, struct uio *ui left = siz; uiosiz = left; while (left > 0) { - while (len == 0) { - mp = mbuf_next(mp); - if (mp == NULL) { - error = EBADRPC; - goto out; - } - mbufcp = NFSMTOD(mp, caddr_t); - len = mbuf_len(mp); - KASSERT(len >= 0, - ("len %d, corrupted mbuf?", len)); - } - xfer = (left > len) ? len : left; -#ifdef notdef - /* Not Yet.. */ - if (uiop->uio_iov->iov_op != NULL) - (*(uiop->uio_iov->iov_op)) - (mbufcp, uiocp, xfer); + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + xfer = nfsm_copyfrommbuf_extpgs(nd, uiocp, + uiop->uio_segflg, left); else -#endif - if (uiop->uio_segflg == UIO_SYSSPACE) - NFSBCOPY(mbufcp, uiocp, xfer); - else - copyout(mbufcp, CAST_USER_ADDR_T(uiocp), xfer); + xfer = nfsm_copyfrommbuf(nd, uiocp, + uiop->uio_segflg, left); left -= xfer; - len -= xfer; - mbufcp += xfer; uiocp += xfer; uiop->uio_offset += xfer; uiop->uio_resid -= xfer; + if (left > 0 && !nfsm_shiftnext(nd, &len)) { + error = EBADRPC; + goto out; + } } if (uiop->uio_iov->iov_len <= siz) { uiop->uio_iovcnt--; @@ -670,14 +682,8 @@ nfsm_mbufuio(struct nfsrv_descript *nd, struct uio *ui } siz -= uiosiz; } - nd->nd_dpos = mbufcp; - nd->nd_md = mp; - if (rem > 0) { - if (len < rem) - error = nfsm_advance(nd, rem, len); - else - nd->nd_dpos += rem; - } + if (rem > 0) + error = nfsm_advance(nd, rem, -1); out: NFSEXITCODE2(error, nd); @@ -694,59 +700,94 @@ out: APPLESTATIC void * nfsm_dissct(struct nfsrv_descript *nd, int siz, int how) { - mbuf_t mp2; + struct mbuf *mp2; + struct mbuf_ext_pgs *pgs; int siz2, xfer; caddr_t p; int left; caddr_t retp; retp = NULL; - left = NFSMTOD(nd->nd_md, caddr_t) + mbuf_len(nd->nd_md) - nd->nd_dpos; + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + left = nd->nd_dextpgsiz; + else + left = mtod(nd->nd_md, char *) + nd->nd_md->m_len - + nd->nd_dpos; while (left == 0) { - nd->nd_md = mbuf_next(nd->nd_md); - if (nd->nd_md == NULL) - return (retp); - left = mbuf_len(nd->nd_md); - nd->nd_dpos = NFSMTOD(nd->nd_md, caddr_t); + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP) && nd->nd_dextpg < + nd->nd_md->m_ext.ext_pgs->npgs - 1) { + pgs = nd->nd_md->m_ext.ext_pgs; + nd->nd_dextpg++; + nd->nd_dpos = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[nd->nd_dextpg]); + left = nd->nd_dextpgsiz = mbuf_ext_pg_len(pgs, + nd->nd_dextpg, 0); + } else if (!nfsm_shiftnext(nd, &left)) + return (NULL); } if (left >= siz) { retp = nd->nd_dpos; nd->nd_dpos += siz; - } else if (mbuf_next(nd->nd_md) == NULL) { - return (retp); + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + nd->nd_dextpgsiz -= siz; } else if (siz > ncl_mbuf_mhlen) { panic("nfs S too big"); } else { + /* Make sure an ext_pgs mbuf is at the last page. */ + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) { + if (nd->nd_dextpg < + nd->nd_md->m_ext.ext_pgs->npgs - 1) { + mp2 = nfsm_splitatpgno(nd->nd_md, + nd->nd_dextpg, how); + if (mp2 == NULL) + return (NULL); + } + nd->nd_md->m_ext.ext_pgs->last_pg_len -= + left; + } + if (nd->nd_md->m_next == NULL) + return (NULL); + + /* Allocate a new mbuf for the "siz" bytes of data. */ MGET(mp2, MT_DATA, how); if (mp2 == NULL) return (NULL); - mbuf_setnext(mp2, mbuf_next(nd->nd_md)); - mbuf_setnext(nd->nd_md, mp2); - mbuf_setlen(nd->nd_md, mbuf_len(nd->nd_md) - left); - nd->nd_md = mp2; - retp = p = NFSMTOD(mp2, caddr_t); - NFSBCOPY(nd->nd_dpos, p, left); /* Copy what was left */ + + /* + * Link the new mp2 mbuf into the list then copy left + * bytes from the mbuf before it and siz - left bytes + * from the mbuf after it. + */ + mp2->m_next = nd->nd_md->m_next; + nd->nd_md->m_next = mp2; + nd->nd_md->m_len -= left; + retp = p = mtod(mp2, char *); + memcpy(p, nd->nd_dpos, left); /* Copy what was left */ siz2 = siz - left; p += left; - mp2 = mbuf_next(mp2); + mp2->m_len = siz; + nd->nd_md = mp2->m_next; /* Loop around copying up the siz2 bytes */ while (siz2 > 0) { - if (mp2 == NULL) + if (nd->nd_md == NULL) return (NULL); - xfer = (siz2 > mbuf_len(mp2)) ? mbuf_len(mp2) : siz2; - if (xfer > 0) { - NFSBCOPY(NFSMTOD(mp2, caddr_t), p, xfer); - NFSM_DATAP(mp2, xfer); - mbuf_setlen(mp2, mbuf_len(mp2) - xfer); - p += xfer; - siz2 -= xfer; - } + nfsm_set(nd, false); + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + xfer = nfsm_copyfrommbuf_extpgs(nd, p, + UIO_SYSSPACE, siz2); + else + xfer = nfsm_copyfrommbuf(nd, p, + UIO_SYSSPACE, siz2); + p += xfer; + siz2 -= xfer; if (siz2 > 0) - mp2 = mbuf_next(mp2); + nd->nd_md = nd->nd_md->m_next; } - mbuf_setlen(nd->nd_md, siz); - nd->nd_md = mp2; - nd->nd_dpos = NFSMTOD(mp2, caddr_t); } return (retp); } @@ -760,7 +801,7 @@ nfsm_dissct(struct nfsrv_descript *nd, int siz, int ho APPLESTATIC int nfsm_advance(struct nfsrv_descript *nd, int offs, int left) { - int error = 0; + int error = 0, xfer; if (offs == 0) goto out; @@ -777,24 +818,41 @@ nfsm_advance(struct nfsrv_descript *nd, int offs, int /* * If left == -1, calculate it here. */ - if (left == -1) - left = NFSMTOD(nd->nd_md, caddr_t) + mbuf_len(nd->nd_md) - - nd->nd_dpos; + if (left == -1) { + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + left = nd->nd_dextpgsiz; + else + left = mtod(nd->nd_md, char *) + + nd->nd_md->m_len - nd->nd_dpos; + } /* * Loop around, advancing over the mbuf data. */ while (offs > left) { - offs -= left; - nd->nd_md = mbuf_next(nd->nd_md); - if (nd->nd_md == NULL) { + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP) && nd->nd_dextpg < + nd->nd_md->m_ext.ext_pgs->npgs - 1) { + xfer = nfsm_copyfrommbuf_extpgs(nd, NULL, + UIO_SYSSPACE, offs); + offs -= xfer; + } else + offs -= left; + left = 0; + if (offs > 0 && !nfsm_shiftnext(nd, &left)) { error = EBADRPC; goto out; } - left = mbuf_len(nd->nd_md); - nd->nd_dpos = NFSMTOD(nd->nd_md, caddr_t); } - nd->nd_dpos += offs; + if (offs > 0) { + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + nfsm_copyfrommbuf_extpgs(nd, NULL, + UIO_SYSSPACE, offs); + else + nd->nd_dpos += offs; + } out: NFSEXITCODE(error); @@ -821,22 +879,38 @@ nfsm_strtom(struct nfsrv_descript *nd, const char *cp, bytesize = NFSX_UNSIGNED + siz + rem; m2 = nd->nd_mb; cp2 = nd->nd_bpos; - left = M_TRAILINGSPACE(m2); + if ((nd->nd_flag & ND_EXTPG) != 0) + left = nd->nd_bextpgsiz; + else + left = M_TRAILINGSPACE(m2); + KASSERT(((m2->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP) && (nd->nd_flag & ND_EXTPG) != 0) || + ((m2->m_flags & (M_EXT | M_NOMAP)) != + (M_EXT | M_NOMAP) && (nd->nd_flag & ND_EXTPG) == 0), + ("nfsm_strtom: ext_pgs and non-ext_pgs mbufs mixed")); /* * Loop around copying the string to mbuf(s). */ while (siz > 0) { if (left == 0) { - if (siz > ncl_mbuf_mlen) - NFSMCLGET(m1, M_WAITOK); - else - NFSMGET(m1); - mbuf_setlen(m1, 0); - mbuf_setnext(m2, m1); - m2 = m1; - cp2 = NFSMTOD(m2, caddr_t); - left = M_TRAILINGSPACE(m2); + if ((nd->nd_flag & ND_EXTPG) != 0) { + m2 = nfsm_add_ext_pgs(m2, + nd->nd_maxextsiz, &nd->nd_bextpg); + cp2 = (char *)(void *)PHYS_TO_DMAP( + m2->m_ext.ext_pgs->pa[nd->nd_bextpg]); + nd->nd_bextpgsiz = left = PAGE_SIZE; + } else { + if (siz > ncl_mbuf_mlen) + NFSMCLGET(m1, M_WAITOK); + else + NFSMGET(m1); + m1->m_len = 0; + cp2 = mtod(m1, char *); + left = M_TRAILINGSPACE(m1); + m2->m_next = m1; + m2 = m1; + } } if (left >= siz) xfer = siz; @@ -844,18 +918,31 @@ nfsm_strtom(struct nfsrv_descript *nd, const char *cp, xfer = left; NFSBCOPY(cp, cp2, xfer); cp += xfer; - mbuf_setlen(m2, mbuf_len(m2) + xfer); + cp2 += xfer; + m2->m_len += xfer; siz -= xfer; left -= xfer; + if ((nd->nd_flag & ND_EXTPG) != 0) { + nd->nd_bextpgsiz -= xfer; + m2->m_ext.ext_pgs->last_pg_len += xfer; + } if (siz == 0 && rem) { if (left < rem) panic("nfsm_strtom"); - NFSBZERO(cp2 + xfer, rem); - mbuf_setlen(m2, mbuf_len(m2) + rem); + NFSBZERO(cp2, rem); + m2->m_len += rem; + cp2 += rem; + if ((nd->nd_flag & ND_EXTPG) != 0) { + nd->nd_bextpgsiz -= rem; + m2->m_ext.ext_pgs->last_pg_len += rem; + } } } nd->nd_mb = m2; - nd->nd_bpos = NFSMTOD(m2, caddr_t) + mbuf_len(m2); + if ((nd->nd_flag & ND_EXTPG) != 0) + nd->nd_bpos = cp2; + else + nd->nd_bpos = mtod(m2, char *) + m2->m_len; return (bytesize); } @@ -1008,66 +1095,46 @@ nfsaddr2_match(NFSSOCKADDR_T nam1, NFSSOCKADDR_T nam2) /* - * Trim the stuff already dissected off the mbuf list. - */ -APPLESTATIC void -newnfs_trimleading(nd) - struct nfsrv_descript *nd; -{ - mbuf_t m, n; - int offs; - - /* - * First, free up leading mbufs. - */ - if (nd->nd_mrep != nd->nd_md) { - m = nd->nd_mrep; - while (mbuf_next(m) != nd->nd_md) { - if (mbuf_next(m) == NULL) - panic("nfsm trim leading"); - m = mbuf_next(m); - } - mbuf_setnext(m, NULL); - mbuf_freem(nd->nd_mrep); - } - m = nd->nd_md; - - /* - * Now, adjust this mbuf, based on nd_dpos. - */ - offs = nd->nd_dpos - NFSMTOD(m, caddr_t); - if (offs == mbuf_len(m)) { - n = m; - m = mbuf_next(m); - if (m == NULL) - panic("nfsm trim leading2"); - mbuf_setnext(n, NULL); - mbuf_freem(n); - } else if (offs > 0) { - mbuf_setlen(m, mbuf_len(m) - offs); - NFSM_DATAP(m, offs); - } else if (offs < 0) - panic("nfsm trimleading offs"); - nd->nd_mrep = m; - nd->nd_md = m; - nd->nd_dpos = NFSMTOD(m, caddr_t); -} - -/* * Trim trailing data off the mbuf list being built. */ APPLESTATIC void -newnfs_trimtrailing(nd, mb, bpos) - struct nfsrv_descript *nd; - mbuf_t mb; - caddr_t bpos; +nfsm_trimtrailing(struct nfsrv_descript *nd, struct mbuf *mb, char *bpos, + int bextpg, int bextpgsiz) { + struct mbuf_ext_pgs *pgs; + vm_page_t pg; + int fullpgsiz, i; + char *ppos; - if (mbuf_next(mb)) { - mbuf_freem(mbuf_next(mb)); - mbuf_setnext(mb, NULL); + if (mb->m_next != NULL) { + m_freem(mb->m_next); + mb->m_next = NULL; } - mbuf_setlen(mb, bpos - NFSMTOD(mb, caddr_t)); + if ((mb->m_flags & (M_EXT | M_NOMAP)) == (M_EXT | M_NOMAP)) { + pgs = mb->m_ext.ext_pgs; + /* First, get rid of any pages after this position. */ + for (i = pgs->npgs - 1; i > bextpg; i--) { + pg = PHYS_TO_VM_PAGE(pgs->pa[i]); + vm_page_unwire_noq(pg); + vm_page_free(pg); + } + pgs->npgs = bextpg + 1; + if (bextpg == 0) + fullpgsiz = PAGE_SIZE - pgs->first_pg_off; + else + fullpgsiz = PAGE_SIZE; + pgs->last_pg_len = fullpgsiz - bextpgsiz; + mb->m_len = mbuf_ext_pg_len(pgs, 0, pgs->first_pg_off); + for (i = 1; i < pgs->npgs; i++) + mb->m_len += mbuf_ext_pg_len(pgs, i, 0); + ppos = (char *)(void *)PHYS_TO_DMAP(pgs->pa[bextpg]); + ppos += pgs->last_pg_len; + if (ppos != bpos) + printf("EEK trimtrail\n"); + nd->nd_bextpgsiz = bextpgsiz; + nd->nd_bextpg = bextpg; + } else + mb->m_len = bpos - mtod(mb, char *); nd->nd_mb = mb; nd->nd_bpos = bpos; } @@ -2421,45 +2488,27 @@ nfsv4_wanted(struct nfsv4lock *lp) APPLESTATIC int nfsrv_mtostr(struct nfsrv_descript *nd, char *str, int siz) { - char *cp; - int xfer, len; - mbuf_t mp; - int rem, error = 0; + int rem, error = 0, xfer; - mp = nd->nd_md; - cp = nd->nd_dpos; - len = NFSMTOD(mp, caddr_t) + mbuf_len(mp) - cp; rem = NFSM_RNDUP(siz) - siz; while (siz > 0) { - if (len > siz) - xfer = siz; + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + xfer = nfsm_copyfrommbuf_extpgs(nd, str, + UIO_SYSSPACE, siz); else - xfer = len; - NFSBCOPY(cp, str, xfer); + xfer = nfsm_copyfrommbuf(nd, str, + UIO_SYSSPACE, siz); str += xfer; siz -= xfer; - if (siz > 0) { - mp = mbuf_next(mp); - if (mp == NULL) { - error = EBADRPC; - goto out; - } - cp = NFSMTOD(mp, caddr_t); - len = mbuf_len(mp); - } else { - cp += xfer; - len -= xfer; + if (siz > 0 && !nfsm_shiftnext(nd, &xfer)) { + error = EBADRPC; + goto out; } } *str = '\0'; - nd->nd_dpos = cp; - nd->nd_md = mp; - if (rem > 0) { - if (len < rem) - error = nfsm_advance(nd, rem, len); - else - nd->nd_dpos += rem; - } + if (rem > 0) + error = nfsm_advance(nd, rem, -1); out: NFSEXITCODE2(error, nd); @@ -2550,7 +2599,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount if (error == 0) error = VOP_GETACL(vp, ACL_TYPE_NFS4, naclp, cred, p); - NFSVOPUNLOCK(vp); + NFSVOPUNLOCK(vp, 0); } else error = NFSERR_PERM; if (error != 0) { @@ -2570,7 +2619,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount if (NFSVOPLOCK(vp, LK_SHARED) == 0) { error = VOP_GETEXTATTR(vp, EXTATTR_NAMESPACE_USER, "xxx", NULL, &atsiz, cred, p); - NFSVOPUNLOCK(vp); + NFSVOPUNLOCK(vp, 0); if (error != EOPNOTSUPP) xattrsupp = true; } @@ -4439,21 +4488,31 @@ nfsrvd_rephead(struct nfsrv_descript *nd) { mbuf_t mreq; - /* - * If this is a big reply, use a cluster. - */ - if ((nd->nd_flag & ND_GSSINITREPLY) == 0 && - nfs_bigreply[nd->nd_procnum]) { - NFSMCLGET(mreq, M_WAITOK); - nd->nd_mreq = mreq; - nd->nd_mb = mreq; + if ((nd->nd_flag & ND_EXTPG) != 0) { + mreq = mb_alloc_ext_plus_pages(PAGE_SIZE, M_WAITOK, false, + mb_free_mext_pgs); + nd->nd_mreq = nd->nd_mb = mreq; + nd->nd_bpos = (char *)(void *) + PHYS_TO_DMAP(mreq->m_ext.ext_pgs->pa[0]); + nd->nd_bextpg = 0; + nd->nd_bextpgsiz = PAGE_SIZE; } else { - NFSMGET(mreq); - nd->nd_mreq = mreq; - nd->nd_mb = mreq; + /* + * If this is a big reply, use a cluster. + */ + if ((nd->nd_flag & ND_GSSINITREPLY) == 0 && + nfs_bigreply[nd->nd_procnum]) { + NFSMCLGET(mreq, M_WAITOK); + nd->nd_mreq = mreq; + nd->nd_mb = mreq; + } else { + NFSMGET(mreq); + nd->nd_mreq = mreq; + nd->nd_mb = mreq; + } + nd->nd_bpos = mtod(mreq, char *); + mreq->m_len = 0; } - nd->nd_bpos = NFSMTOD(mreq, caddr_t); - mbuf_setlen(mreq, 0); if ((nd->nd_flag & ND_GSSINITREPLY) == 0) NFSM_BUILD(nd->nd_errp, int *, NFSX_UNSIGNED); @@ -4826,5 +4885,290 @@ nfsv4_findmirror(struct nfsmount *nmp) } } return (ds); +} + +/* + * Fill in the fields of "struct nfsrv_descript" for a new ext_pgs mbuf. + * The build argument is true for build and false for dissect. + */ +int +nfsm_set(struct nfsrv_descript *nd, bool build) +{ + struct mbuf *m; + struct mbuf_ext_pgs *pgs; + int rlen; + + if (build) + m = nd->nd_mb; + else + m = nd->nd_md; + if ((m->m_flags & (M_EXT | M_NOMAP)) == (M_EXT | M_NOMAP)) { + if (build) { + pgs = m->m_ext.ext_pgs; + nd->nd_bpos = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[0]); + nd->nd_bpos += pgs->first_pg_off; + nd->nd_bextpg = 0; + /* For build, set the size that can be filled. */ + rlen = nd->nd_bextpgsiz = PAGE_SIZE - + pgs->first_pg_off; + } else { + pgs = m->m_ext.ext_pgs; + nd->nd_dpos = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[0]); + nd->nd_dpos += pgs->first_pg_off; + nd->nd_dextpg = 0; + /* For dissect, set the size already filled. */ + rlen = nd->nd_dextpgsiz = mbuf_ext_pg_len(pgs, 0, + pgs->first_pg_off); + } + } else if (build) { + nd->nd_bpos = mtod(m, char *); + rlen = m->m_len; + } else { + nd->nd_dpos = mtod(m, char *); + rlen = m->m_len; + } + return (rlen); +} + +/* + * Copy up to "len" bytes from the mbuf into "cp" and adjust the + * mbuf accordingly. + * If cp == NULL, do not do the actual copy, but adjust the mbuf. + * Return the number of bytes actually copied. + * Adjust m_data and m_len so that a future calculation of what + * is left using mtod() will work correctly. + */ +static int +nfsm_copyfrommbuf(struct nfsrv_descript *nd, char *cp, enum uio_seg segflg, + int len) +{ + struct mbuf *m; + int xfer; + + m = nd->nd_md; + xfer = mtod(m, char *) + m->m_len - nd->nd_dpos; + xfer = min(xfer, len); + if (xfer > 0) { + if (cp != NULL) { + if (segflg == UIO_SYSSPACE) + memcpy(cp, nd->nd_dpos, xfer); + else + copyout(nd->nd_dpos, cp, xfer); + } + nd->nd_dpos += xfer; + m->m_data += xfer; + m->m_len -= xfer; + } + return (xfer); +} + +/* + * Copy up to "len" bytes from the mbuf into "cp" and adjust the + * mbuf accordingly. + * If cp == NULL, do not do the actual copy, but adjust the mbuf. + * Return the number of bytes actually copied. + * Same as above, but for an ext_pgs mbuf. + */ +static int +nfsm_copyfrommbuf_extpgs(struct nfsrv_descript *nd, char *cp, + enum uio_seg segflg, int len) +{ + struct mbuf_ext_pgs *pgs; + int tlen, xfer; + + pgs = nd->nd_md->m_ext.ext_pgs; + tlen = 0; + /* Copy from the page(s) into cp. */ + do { + xfer = nd->nd_dextpgsiz; + xfer = min(xfer, len); + if (cp != NULL && xfer > 0) { + if (segflg == UIO_SYSSPACE) + memcpy(cp, nd->nd_dpos, xfer); + else + copyout(nd->nd_dpos, cp, xfer); + cp += xfer; + } + tlen += xfer; + len -= xfer; + nd->nd_dextpgsiz -= xfer; + nd->nd_dpos += xfer; + if (nd->nd_dextpgsiz == 0 && len > 0 && + nd->nd_dextpg < pgs->npgs - 1) { + nd->nd_dextpg++; + nd->nd_dpos = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[nd->nd_dextpg]); + nd->nd_dextpgsiz = mbuf_ext_pg_len(pgs, + nd->nd_dextpg, 0); + } + } while (len > 0 && nd->nd_dextpgsiz > 0); + return (tlen); +} + +/* + * Split an ext_pgs mbuf into two ext_pgs mbufs on a page boundary. + */ +static struct mbuf * +nfsm_splitatpgno(struct mbuf *mp, int pgno, int how) +{ + struct mbuf *m; + struct mbuf_ext_pgs *pgs, *pgs0; + int i, j, tlen; + + KASSERT((mp->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP), ("nfsm_splitatpgno: mp not ext_pgs")); + pgs = mp->m_ext.ext_pgs; + KASSERT(pgno < pgs->npgs - 1, ("nfsm_splitatpgno:" + " at the last page")); + m = mb_alloc_ext_pgs(how, false, mb_free_mext_pgs); + if (m == NULL) + return (m); + pgs0 = m->m_ext.ext_pgs; + + /* Move the pages beyond pgno to the new mbuf. */ + for (i = pgno + 1, j = 0; i < pgs->npgs; i++, j++) + pgs0->pa[j] = pgs->pa[i]; + pgs0->npgs = j; + pgs0->last_pg_len = pgs->last_pg_len; + pgs->npgs = pgno + 1; + pgs->last_pg_len = PAGE_SIZE; + if (pgno == 0) + pgs->last_pg_len -= pgs->first_pg_off; + + /* Now set m_len for both mbufs. */ + tlen = mbuf_ext_pg_len(pgs, 0, pgs->first_pg_off); + for (i = 1; i < pgs->npgs; i++) + tlen += mbuf_ext_pg_len(pgs, i, 0); + mp->m_len = tlen; + + /* The new mbuf has first_pg_off == 0. */ + tlen = 0; + for (i = 0; i < pgs0->npgs; i++) + tlen += mbuf_ext_pg_len(pgs0, i, 0); + m->m_len = tlen; + + /* Link the new mbuf after mp. */ + m->m_next = mp->m_next; + mp->m_next = m; + return (mp); +} + +/* + * Shift to the next mbuf in the list list and update the nd fields. + * Return true if successful, false otherwise. + */ +bool +nfsm_shiftnext(struct nfsrv_descript *nd, int *leftp) +{ + + nd->nd_md = nd->nd_md->m_next; + if (nd->nd_md == NULL) + return (false); + *leftp = nfsm_set(nd, false); + return (true); +} + +/* + * Grow a ext_pgs mbuf list. Either allocate another page or add + * an mbuf to the list. + */ +struct mbuf * +nfsm_add_ext_pgs(struct mbuf *m, int maxextsiz, int *bextpg) +{ + struct mbuf_ext_pgs *pgs; + struct mbuf *mp; + vm_page_t pg; + + pgs = m->m_ext.ext_pgs; + if ((pgs->npgs + 1) * PAGE_SIZE > maxextsiz) { + mp = mb_alloc_ext_plus_pages(PAGE_SIZE, M_WAITOK, + false, mb_free_mext_pgs); + *bextpg = 0; + m->m_next = mp; + } else { + do { + pg = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | + VM_ALLOC_NOOBJ | VM_ALLOC_NODUMP | + VM_ALLOC_WIRED); + if (pg == NULL) + vm_wait(NULL); + } while (pg == NULL); + pgs->pa[pgs->npgs] = VM_PAGE_TO_PHYS(pg); + *bextpg = pgs->npgs; + pgs->npgs++; + pgs->last_pg_len = 0; + mp = m; + } + return (mp); +} + +/* + * Trim the ext_pgs mbuf to the current dissect position. + */ +void +nfsm_trimatpos_extpgs(struct nfsrv_descript *nd) +{ + struct mbuf_ext_pgs *pgs; + vm_page_t pg; + int i, j; + + pgs = nd->nd_md->m_ext.ext_pgs; + for (i = 0; i < nd->nd_dextpg; i++) { + pg = PHYS_TO_VM_PAGE(pgs->pa[0]); + vm_page_unwire_noq(pg); + vm_page_free(pg); + nd->nd_md->m_len -= mbuf_ext_pg_len(pgs, i, + pgs->first_pg_off); + pgs->first_pg_off = 0; + for (j = 0; j < pgs->npgs - 1; j++) + pgs->pa[j] = pgs->pa[j + 1]; + pgs->npgs--; + } + nd->nd_dextpg = 0; + if (nd->nd_dextpgsiz > 0) { + j = mbuf_ext_pg_len(pgs, 0, pgs->first_pg_off); + j -= nd->nd_dextpgsiz; + pgs->first_pg_off += j; + nd->nd_md->m_len -= j; + if (nd->nd_dextpg == pgs->npgs - 1) + pgs->last_pg_len -= j; + } +} + +/* + * Trim the ext_pgs mbuf back to "tlen" bytes in length. + */ +void +nfsm_trimback_extpgs(struct mbuf *m, int len) +{ + struct mbuf_ext_pgs *pgs; + vm_page_t pg; + int i, j, pgno, tlen; + + pgs = m->m_ext.ext_pgs; + pgno = 0; + tlen = len; + while (len > 0 && pgno < pgs->npgs) { + if (pgno == 0) + i = mbuf_ext_pg_len(pgs, pgno, + pgs->first_pg_off); + else + i = mbuf_ext_pg_len(pgs, pgno, 0); + if (len <= i) { + /* Free pages past pgno. */ + for (j = pgno + 1; j < pgs->npgs; j++) { + pg = PHYS_TO_VM_PAGE(pgs->pa[j]); + vm_page_unwire_noq(pg); + vm_page_free(pg); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Mon Feb 17 20:25:30 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A70CF245EE2 for ; Mon, 17 Feb 2020 20:25:30 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LwTk14Cnz4V6j; Mon, 17 Feb 2020 20:25:30 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 15EA2CB58; Mon, 17 Feb 2020 20:25:30 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HKPT0m077602; Mon, 17 Feb 2020 20:25:29 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HKPTmW077601; Mon, 17 Feb 2020 20:25:29 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002172025.01HKPTmW077601@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 17 Feb 2020 20:25:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358047 - projects/clang1000-import/sys/dev/altera/sdcard X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: projects/clang1000-import/sys/dev/altera/sdcard X-SVN-Commit-Revision: 358047 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 20:25:30 -0000 Author: dim Date: Mon Feb 17 20:25:29 2020 New Revision: 358047 URL: https://svnweb.freebsd.org/changeset/base/358047 Log: Revert r358029 in anticipation of merging the different fix from head. Modified: projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c Modified: projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c ============================================================================== --- projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c Mon Feb 17 20:24:21 2020 (r358046) +++ projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c Mon Feb 17 20:25:29 2020 (r358047) @@ -293,27 +293,27 @@ recheck: } static void -altera_sdcard_io_start_internal(struct altera_sdcard_softc *sc, struct bio **bpp) +altera_sdcard_io_start_internal(struct altera_sdcard_softc *sc, struct bio **bp) { - switch ((*bpp)->bio_cmd) { + switch (*bp->bio_cmd) { case BIO_READ: - altera_sdcard_write_cmd_arg(sc, (*bpp)->bio_pblkno * + altera_sdcard_write_cmd_arg(sc, *bp->bio_pblkno * ALTERA_SDCARD_SECTORSIZE); altera_sdcard_write_cmd(sc, ALTERA_SDCARD_CMD_READ_BLOCK); break; case BIO_WRITE: - altera_sdcard_write_rxtx_buffer(sc, (*bpp)->bio_data, - (*bpp)->bio_bcount); - altera_sdcard_write_cmd_arg(sc, (*bpp)->bio_pblkno * + altera_sdcard_write_rxtx_buffer(sc, *bp->bio_data, + *bp->bio_bcount); + altera_sdcard_write_cmd_arg(sc, *bp->bio_pblkno * ALTERA_SDCARD_SECTORSIZE); altera_sdcard_write_cmd(sc, ALTERA_SDCARD_CMD_WRITE_BLOCK); break; default: - biofinish(*bpp, NULL, EOPNOTSUPP); - *bpp = NULL; + biofinish(*bp, NULL, EOPNOTSUPP); + *bp = NULL; } } @@ -333,7 +333,7 @@ altera_sdcard_io_start(struct altera_sdcard_softc *sc, KASSERT(bp->bio_bcount == ALTERA_SDCARD_SECTORSIZE, ("%s: I/O size not %d", __func__, ALTERA_SDCARD_SECTORSIZE)); altera_sdcard_io_start_internal(sc, &bp); - sc->as_currentbio = bp; + sc->as_currentbio = *bp; sc->as_retriesleft = ALTERA_SDCARD_RETRY_LIMIT; } From owner-svn-src-projects@freebsd.org Mon Feb 17 20:27:13 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0EAD8246093 for ; Mon, 17 Feb 2020 20:27:13 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LwWh6hlpz4X6q; Mon, 17 Feb 2020 20:27:12 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C4BCFCB6B; Mon, 17 Feb 2020 20:27:12 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HKRCeK077955; Mon, 17 Feb 2020 20:27:12 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HKR6l8077920; Mon, 17 Feb 2020 20:27:06 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002172027.01HKR6l8077920@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 17 Feb 2020 20:27:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358049 - in projects/clang1000-import: . contrib/capsicum-test lib/libkvm sys/cam/ata sys/cam/nvme sys/cam/scsi sys/dev/acpica sys/dev/altera/sdcard sys/dev/drm2 sys/dev/pci sys/kern s... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang1000-import: . contrib/capsicum-test lib/libkvm sys/cam/ata sys/cam/nvme sys/cam/scsi sys/dev/acpica sys/dev/altera/sdcard sys/dev/drm2 sys/dev/pci sys/kern sys/modules sys/net sys/ne... X-SVN-Commit-Revision: 358049 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 20:27:13 -0000 Author: dim Date: Mon Feb 17 20:27:05 2020 New Revision: 358049 URL: https://svnweb.freebsd.org/changeset/base/358049 Log: Merge ^/head r358000 through r358048. Modified: projects/clang1000-import/UPDATING projects/clang1000-import/contrib/capsicum-test/capsicum-test.h projects/clang1000-import/contrib/capsicum-test/procdesc.cc projects/clang1000-import/lib/libkvm/kvm.c projects/clang1000-import/lib/libkvm/kvm_getswapinfo.c projects/clang1000-import/lib/libkvm/kvm_private.c projects/clang1000-import/lib/libkvm/kvm_vnet.c projects/clang1000-import/sys/cam/ata/ata_da.c projects/clang1000-import/sys/cam/nvme/nvme_da.c projects/clang1000-import/sys/cam/scsi/scsi_da.c projects/clang1000-import/sys/dev/acpica/acpi.c projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c projects/clang1000-import/sys/dev/drm2/drm_pci.c projects/clang1000-import/sys/dev/drm2/drm_sysctl.c projects/clang1000-import/sys/dev/pci/pci.c projects/clang1000-import/sys/dev/pci/pcireg.h projects/clang1000-import/sys/kern/kern_synch.c projects/clang1000-import/sys/modules/Makefile projects/clang1000-import/sys/net/if.c projects/clang1000-import/sys/net/netisr.c projects/clang1000-import/sys/net/vnet.c projects/clang1000-import/sys/net/vnet.h projects/clang1000-import/sys/netinet/igmp.c projects/clang1000-import/sys/netinet/sctp_ss_functions.c projects/clang1000-import/sys/netinet/tcp_hostcache.c projects/clang1000-import/sys/netinet6/mld6.c projects/clang1000-import/sys/sys/param.h projects/clang1000-import/sys/sys/refcount.h projects/clang1000-import/sys/ufs/ffs/ffs_softdep.c projects/clang1000-import/sys/ufs/ffs/ffs_vfsops.c projects/clang1000-import/sys/ufs/ufs/ufsmount.h projects/clang1000-import/sys/vm/swap_pager.c projects/clang1000-import/sys/vm/swap_pager.h projects/clang1000-import/sys/vm/uma.h projects/clang1000-import/sys/vm/uma_core.c projects/clang1000-import/sys/vm/vm_page.c projects/clang1000-import/sys/vm/vm_page.h projects/clang1000-import/tests/sys/net/if_lagg_test.sh projects/clang1000-import/tests/sys/netinet/fibs_test.sh projects/clang1000-import/tests/sys/netinet6/frag6/frag6_07.sh projects/clang1000-import/usr.sbin/pciconf/cap.c Directory Properties: projects/clang1000-import/ (props changed) Modified: projects/clang1000-import/UPDATING ============================================================================== --- projects/clang1000-import/UPDATING Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/UPDATING Mon Feb 17 20:27:05 2020 (r358049) @@ -32,6 +32,11 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: information about prerequisites and upgrading, if you are not already using clang 3.5.0 or higher. +20200217: + The size of struct vnet and the magic cookie have changed. + Users need to recompile libkvm and all modules using VIMAGE + together with their new kernel. + 20200212: Defining the long deprecated NO_CTF, NO_DEBUG_FILES, NO_INSTALLLIB, NO_MAN, NO_PROFILE, and NO_WARNS variables is now an error. Update Modified: projects/clang1000-import/contrib/capsicum-test/capsicum-test.h ============================================================================== --- projects/clang1000-import/contrib/capsicum-test/capsicum-test.h Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/contrib/capsicum-test/capsicum-test.h Mon Feb 17 20:27:05 2020 (r358049) @@ -248,6 +248,7 @@ void TestSkipped(const char *testcase, const char *tes const ::testing::TestInfo* const info = ::testing::UnitTest::GetInstance()->current_test_info(); \ std::cerr << "Skipping " << info->test_case_name() << "::" << info->name() << " because: " << reason << std::endl; \ TestSkipped(info->test_case_name(), info->name(), reason); \ + GTEST_SKIP(); \ } while (0) // Mark a test that can only be run as root. Modified: projects/clang1000-import/contrib/capsicum-test/procdesc.cc ============================================================================== --- projects/clang1000-import/contrib/capsicum-test/procdesc.cc Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/contrib/capsicum-test/procdesc.cc Mon Feb 17 20:27:05 2020 (r358049) @@ -763,6 +763,7 @@ TEST_F(PipePdfork, ModeBits) { #endif TEST_F(PipePdfork, WildcardWait) { + TEST_SKIPPED("https://bugs.freebsd.org/244165"); // TODO(FreeBSD): make wildcard wait ignore pdfork()ed children // https://bugs.freebsd.org/201054 TerminateChild(); Modified: projects/clang1000-import/lib/libkvm/kvm.c ============================================================================== --- projects/clang1000-import/lib/libkvm/kvm.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/lib/libkvm/kvm.c Mon Feb 17 20:27:05 2020 (r358049) @@ -49,6 +49,7 @@ __SCCSID("@(#)kvm.c 8.2 (Berkeley) 2/13/94"); #include #include +#include #include #include Modified: projects/clang1000-import/lib/libkvm/kvm_getswapinfo.c ============================================================================== --- projects/clang1000-import/lib/libkvm/kvm_getswapinfo.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/lib/libkvm/kvm_getswapinfo.c Mon Feb 17 20:27:05 2020 (r358049) @@ -115,8 +115,7 @@ int kvm_getswapinfo_kvm(kvm_t *kd, struct kvm_swap *swap_ary, int swap_max, int flags) { - int i; - swblk_t ttl; + int i, ttl; TAILQ_HEAD(, swdevt) swtailq; struct swdevt *sp, swinfo; struct kvm_swap tot; @@ -167,8 +166,7 @@ int kvm_getswapinfo_sysctl(kvm_t *kd, struct kvm_swap *swap_ary, int swap_max, int flags) { - int ti; - swblk_t ttl; + int ti, ttl; size_t mibi, len; int soid[SWI_MAXMIB]; struct xswdev xsd; Modified: projects/clang1000-import/lib/libkvm/kvm_private.c ============================================================================== --- projects/clang1000-import/lib/libkvm/kvm_private.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/lib/libkvm/kvm_private.c Mon Feb 17 20:27:05 2020 (r358049) @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include Modified: projects/clang1000-import/lib/libkvm/kvm_vnet.c ============================================================================== --- projects/clang1000-import/lib/libkvm/kvm_vnet.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/lib/libkvm/kvm_vnet.c Mon Feb 17 20:27:05 2020 (r358049) @@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include Modified: projects/clang1000-import/sys/cam/ata/ata_da.c ============================================================================== --- projects/clang1000-import/sys/cam/ata/ata_da.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/cam/ata/ata_da.c Mon Feb 17 20:27:05 2020 (r358049) @@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #endif /* _KERNEL */ @@ -878,6 +879,7 @@ static int ada_spindown_shutdown = ADA_DEFAULT_SPINDOW static int ada_spindown_suspend = ADA_DEFAULT_SPINDOWN_SUSPEND; static int ada_read_ahead = ADA_DEFAULT_READ_AHEAD; static int ada_write_cache = ADA_DEFAULT_WRITE_CACHE; +static int ada_enable_biospeedup = 1; static SYSCTL_NODE(_kern_cam, OID_AUTO, ada, CTLFLAG_RD, 0, "CAM Direct Access Disk driver"); @@ -895,6 +897,8 @@ SYSCTL_INT(_kern_cam_ada, OID_AUTO, read_ahead, CTLFLA &ada_read_ahead, 0, "Enable disk read-ahead"); SYSCTL_INT(_kern_cam_ada, OID_AUTO, write_cache, CTLFLAG_RWTUN, &ada_write_cache, 0, "Enable disk write cache"); +SYSCTL_INT(_kern_cam_ada, OID_AUTO, enable_biospeedup, CTLFLAG_RDTUN, + &ada_enable_biospeedup, 0, "Enable BIO_SPEEDUP processing"); /* * ADA_ORDEREDTAG_INTERVAL determines how often, relative @@ -1565,6 +1569,9 @@ adagetattr(struct bio *bp) { int ret; struct cam_periph *periph; + + if (g_handleattr_int(bp, "GEOM::canspeedup", ada_enable_biospeedup)) + return (EJUSTRETURN); periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); Modified: projects/clang1000-import/sys/cam/nvme/nvme_da.c ============================================================================== --- projects/clang1000-import/sys/cam/nvme/nvme_da.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/cam/nvme/nvme_da.c Mon Feb 17 20:27:05 2020 (r358049) @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #endif /* _KERNEL */ @@ -174,9 +175,12 @@ static SYSCTL_NODE(_kern_cam, OID_AUTO, nda, CTLFLAG_R static int nda_send_ordered = NDA_DEFAULT_SEND_ORDERED; static int nda_default_timeout = NDA_DEFAULT_TIMEOUT; static int nda_max_trim_entries = NDA_MAX_TRIM_ENTRIES; +static int nda_enable_biospeedup = 1; SYSCTL_INT(_kern_cam_nda, OID_AUTO, max_trim, CTLFLAG_RDTUN, &nda_max_trim_entries, NDA_MAX_TRIM_ENTRIES, "Maximum number of BIO_DELETE to send down as a DSM TRIM."); +SYSCTL_INT(_kern_cam_nda, OID_AUTO, enable_biospeedup, CTLFLAG_RDTUN, + &nda_enable_biospeedup, 0, "Enable BIO_SPEEDUP processing"); /* * All NVMe media is non-rotational, so all nvme device instances @@ -699,6 +703,9 @@ ndagetattr(struct bio *bp) { int ret; struct cam_periph *periph; + + if (g_handleattr_int(bp, "GEOM::canspeedup", nda_enable_biospeedup)) + return (EJUSTRETURN); periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); Modified: projects/clang1000-import/sys/cam/scsi/scsi_da.c ============================================================================== --- projects/clang1000-import/sys/cam/scsi/scsi_da.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/cam/scsi/scsi_da.c Mon Feb 17 20:27:05 2020 (r358049) @@ -1547,6 +1547,7 @@ static int da_default_timeout = DA_DEFAULT_TIMEOUT; static sbintime_t da_default_softtimeout = DA_DEFAULT_SOFTTIMEOUT; static int da_send_ordered = DA_DEFAULT_SEND_ORDERED; static int da_disable_wp_detection = 0; +static int da_enable_biospeedup = 1; static SYSCTL_NODE(_kern_cam, OID_AUTO, da, CTLFLAG_RD, 0, "CAM Direct Access Disk driver"); @@ -1561,6 +1562,8 @@ SYSCTL_INT(_kern_cam_da, OID_AUTO, send_ordered, CTLFL SYSCTL_INT(_kern_cam_da, OID_AUTO, disable_wp_detection, CTLFLAG_RWTUN, &da_disable_wp_detection, 0, "Disable detection of write-protected disks"); +SYSCTL_INT(_kern_cam_da, OID_AUTO, enable_biospeedup, CTLFLAG_RDTUN, + &da_enable_biospeedup, 0, "Enable BIO_SPEEDUP processing"); SYSCTL_PROC(_kern_cam_da, OID_AUTO, default_softtimeout, CTLTYPE_UINT | CTLFLAG_RW, NULL, 0, dasysctlsofttimeout, "I", @@ -1966,6 +1969,9 @@ dagetattr(struct bio *bp) { int ret; struct cam_periph *periph; + + if (g_handleattr_int(bp, "GEOM::canspeedup", da_enable_biospeedup)) + return (EJUSTRETURN); periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); Modified: projects/clang1000-import/sys/dev/acpica/acpi.c ============================================================================== --- projects/clang1000-import/sys/dev/acpica/acpi.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/dev/acpica/acpi.c Mon Feb 17 20:27:05 2020 (r358049) @@ -237,7 +237,8 @@ static driver_t acpi_driver = { }; static devclass_t acpi_devclass; -DRIVER_MODULE(acpi, nexus, acpi_driver, acpi_devclass, acpi_modevent, 0); +EARLY_DRIVER_MODULE(acpi, nexus, acpi_driver, acpi_devclass, acpi_modevent, 0, + BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); MODULE_VERSION(acpi, 1); ACPI_SERIAL_DECL(acpi, "ACPI root bus"); Modified: projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c ============================================================================== --- projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/dev/altera/sdcard/altera_sdcard_io.c Mon Feb 17 20:27:05 2020 (r358049) @@ -293,27 +293,31 @@ recheck: } static void -altera_sdcard_io_start_internal(struct altera_sdcard_softc *sc, struct bio **bp) +altera_sdcard_io_start_internal(struct altera_sdcard_softc *sc, + struct bio **bpp) { + struct bio *bp; - switch (*bp->bio_cmd) { + bp = *bpp; + + switch (bp->bio_cmd) { case BIO_READ: - altera_sdcard_write_cmd_arg(sc, *bp->bio_pblkno * + altera_sdcard_write_cmd_arg(sc, bp->bio_pblkno * ALTERA_SDCARD_SECTORSIZE); altera_sdcard_write_cmd(sc, ALTERA_SDCARD_CMD_READ_BLOCK); break; case BIO_WRITE: - altera_sdcard_write_rxtx_buffer(sc, *bp->bio_data, - *bp->bio_bcount); - altera_sdcard_write_cmd_arg(sc, *bp->bio_pblkno * + altera_sdcard_write_rxtx_buffer(sc, bp->bio_data, + bp->bio_bcount); + altera_sdcard_write_cmd_arg(sc, bp->bio_pblkno * ALTERA_SDCARD_SECTORSIZE); altera_sdcard_write_cmd(sc, ALTERA_SDCARD_CMD_WRITE_BLOCK); break; default: - biofinish(*bp, NULL, EOPNOTSUPP); - *bp = NULL; + biofinish(bp, NULL, EOPNOTSUPP); + *bpp = NULL; } } @@ -333,7 +337,7 @@ altera_sdcard_io_start(struct altera_sdcard_softc *sc, KASSERT(bp->bio_bcount == ALTERA_SDCARD_SECTORSIZE, ("%s: I/O size not %d", __func__, ALTERA_SDCARD_SECTORSIZE)); altera_sdcard_io_start_internal(sc, &bp); - sc->as_currentbio = *bp; + sc->as_currentbio = bp; sc->as_retriesleft = ALTERA_SDCARD_RETRY_LIMIT; } Modified: projects/clang1000-import/sys/dev/drm2/drm_pci.c ============================================================================== --- projects/clang1000-import/sys/dev/drm2/drm_pci.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/dev/drm2/drm_pci.c Mon Feb 17 20:27:05 2020 (r358049) @@ -42,7 +42,8 @@ __FBSDID("$FreeBSD$"); #include static int drm_msi = 1; /* Enable by default. */ -SYSCTL_NODE(_hw, OID_AUTO, drm, CTLFLAG_RW, NULL, "DRM device"); +SYSCTL_NODE(_hw, OID_AUTO, drm, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, + "DRM device"); SYSCTL_INT(_hw_drm, OID_AUTO, msi, CTLFLAG_RDTUN, &drm_msi, 1, "Enable MSI interrupts for drm devices"); Modified: projects/clang1000-import/sys/dev/drm2/drm_sysctl.c ============================================================================== --- projects/clang1000-import/sys/dev/drm2/drm_sysctl.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/dev/drm2/drm_sysctl.c Mon Feb 17 20:27:05 2020 (r358049) @@ -69,7 +69,7 @@ int drm_sysctl_init(struct drm_device *dev) /* Add the sysctl node for DRI if it doesn't already exist */ drioid = SYSCTL_ADD_NODE(&info->ctx, SYSCTL_CHILDREN(&sysctl___hw), OID_AUTO, - "dri", CTLFLAG_RW, NULL, "DRI Graphics"); + "dri", CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, "DRI Graphics"); if (!drioid) { free(dev->sysctl, DRM_MEM_DRIVER); dev->sysctl = NULL; @@ -92,23 +92,17 @@ int drm_sysctl_init(struct drm_device *dev) info->name[0] = '0' + i; info->name[1] = 0; top = SYSCTL_ADD_NODE(&info->ctx, SYSCTL_CHILDREN(drioid), - OID_AUTO, info->name, CTLFLAG_RW, NULL, NULL); + OID_AUTO, info->name, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, NULL); if (!top) { drm_sysctl_cleanup(dev); return (-ENOMEM); } for (i = 0; i < DRM_SYSCTL_ENTRIES; i++) { - oid = SYSCTL_ADD_OID(&info->ctx, - SYSCTL_CHILDREN(top), - OID_AUTO, - drm_sysctl_list[i].name, - CTLTYPE_STRING | CTLFLAG_RD, - dev, - 0, - drm_sysctl_list[i].f, - "A", - NULL); + oid = SYSCTL_ADD_OID(&info->ctx, SYSCTL_CHILDREN(top), + OID_AUTO, drm_sysctl_list[i].name, + CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, + dev, 0, drm_sysctl_list[i].f, "A", NULL); if (!oid) { drm_sysctl_cleanup(dev); return (-ENOMEM); Modified: projects/clang1000-import/sys/dev/pci/pci.c ============================================================================== --- projects/clang1000-import/sys/dev/pci/pci.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/dev/pci/pci.c Mon Feb 17 20:27:05 2020 (r358049) @@ -332,7 +332,8 @@ uint32_t pci_numdevs = 0; static int pcie_chipset, pcix_chipset; /* sysctl vars */ -SYSCTL_NODE(_hw, OID_AUTO, pci, CTLFLAG_RD, 0, "PCI bus tuning parameters"); +SYSCTL_NODE(_hw, OID_AUTO, pci, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, + "PCI bus tuning parameters"); static int pci_enable_io_modes = 1; SYSCTL_INT(_hw_pci, OID_AUTO, enable_io_modes, CTLFLAG_RWTUN, Modified: projects/clang1000-import/sys/dev/pci/pcireg.h ============================================================================== --- projects/clang1000-import/sys/dev/pci/pcireg.h Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/dev/pci/pcireg.h Mon Feb 17 20:27:05 2020 (r358049) @@ -192,7 +192,7 @@ #define PCIZ_PMUX 0x001a /* Protocol Multiplexing */ #define PCIZ_PASID 0x001b /* Process Address Space ID */ #define PCIZ_LN_REQ 0x001c /* LN Requester */ -#define PCIZ_DPC 0x001d /* Downstream Porto Containment */ +#define PCIZ_DPC 0x001d /* Downstream Port Containment */ #define PCIZ_L1PM 0x001e /* L1 PM Substates */ /* config registers for header type 0 devices */ Modified: projects/clang1000-import/sys/kern/kern_synch.c ============================================================================== --- projects/clang1000-import/sys/kern/kern_synch.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/kern/kern_synch.c Mon Feb 17 20:27:05 2020 (r358049) @@ -368,8 +368,8 @@ refcount_release_last(volatile u_int *count, u_int n, /* * Last reference. Signal the user to call the destructor. * - * Ensure that the destructor sees all updates. The fence_rel - * at the start of refcount_releasen synchronizes with this fence. + * Ensure that the destructor sees all updates. This synchronizes + * with release fences from all routines which drop the count. */ atomic_thread_fence_acq(); return (true); Modified: projects/clang1000-import/sys/modules/Makefile ============================================================================== --- projects/clang1000-import/sys/modules/Makefile Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/modules/Makefile Mon Feb 17 20:27:05 2020 (r358049) @@ -8,6 +8,8 @@ SUBDIR_PARALLEL= # Modules that include binary-only blobs of microcode should be selectable by # MK_SOURCELESS_UCODE option (see below). +.include "${SYSDIR}/conf/config.mk" + .if defined(MODULES_OVERRIDE) && !defined(ALL_MODULES) SUBDIR=${MODULES_OVERRIDE} .else @@ -396,8 +398,10 @@ _autofs= autofs .if ${MK_CDDL} != "no" || defined(ALL_MODULES) .if (${MACHINE_CPUARCH} != "arm" || ${MACHINE_ARCH:Marmv[67]*} != "") && \ ${MACHINE_CPUARCH} != "mips" +.if ${KERN_OPTS:MKDTRACE_HOOKS} SUBDIR+= dtrace .endif +.endif SUBDIR+= opensolaris .endif @@ -712,9 +716,11 @@ _sgx_linux= sgx_linux _smartpqi= smartpqi .if ${MK_BHYVE} != "no" || defined(ALL_MODULES) +.if ${KERN_OPTS:MSMP} _vmm= vmm .endif .endif +.endif .if ${MACHINE_CPUARCH} == "i386" # XXX some of these can move to the general case when de-i386'ed @@ -798,8 +804,6 @@ afterinstall: .PHONY ${KLDXREF_CMD} ${DESTDIR}${KMODDIR}; \ fi .endif - -.include "${SYSDIR}/conf/config.mk" SUBDIR:= ${SUBDIR:u:O} Modified: projects/clang1000-import/sys/net/if.c ============================================================================== --- projects/clang1000-import/sys/net/if.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/net/if.c Mon Feb 17 20:27:05 2020 (r358049) @@ -322,6 +322,11 @@ SX_SYSINIT_FLAGS(ifnet_sx, &ifnet_sxlock, "ifnet_sx", */ #define IFNET_HOLD (void *)(uintptr_t)(-1) +#ifdef VIMAGE +#define VNET_IS_SHUTTING_DOWN(_vnet) \ + ((_vnet)->vnet_shutdown && (_vnet)->vnet_state < SI_SUB_VNET_DONE) +#endif + static if_com_alloc_t *if_com_alloc[256]; static if_com_free_t *if_com_free[256]; @@ -1080,7 +1085,7 @@ if_detach_internal(struct ifnet *ifp, int vmove, struc #ifdef VIMAGE bool shutdown; - shutdown = ifp->if_vnet->vnet_shutdown; + shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet); #endif IFNET_WLOCK(); CK_STAILQ_FOREACH(iter, &V_ifnet, if_link) @@ -1339,6 +1344,7 @@ if_vmove_loan(struct thread *td, struct ifnet *ifp, ch struct prison *pr; struct ifnet *difp; int error; + bool shutdown; /* Try to find the prison within our visibility. */ sx_slock(&allprison_lock); @@ -1366,7 +1372,8 @@ if_vmove_loan(struct thread *td, struct ifnet *ifp, ch } /* Make sure the VNET is stable. */ - if (ifp->if_vnet->vnet_shutdown) { + shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet); + if (shutdown) { CURVNET_RESTORE(); prison_free(pr); return (EBUSY); @@ -1391,6 +1398,7 @@ if_vmove_reclaim(struct thread *td, char *ifname, int struct vnet *vnet_dst; struct ifnet *ifp; int error; + bool shutdown; /* Try to find the prison within our visibility. */ sx_slock(&allprison_lock); @@ -1419,7 +1427,8 @@ if_vmove_reclaim(struct thread *td, char *ifname, int } /* Make sure the VNET is stable. */ - if (ifp->if_vnet->vnet_shutdown) { + shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet); + if (shutdown) { CURVNET_RESTORE(); prison_free(pr); return (EBUSY); @@ -2950,11 +2959,15 @@ ifioctl(struct socket *so, u_long cmd, caddr_t data, s struct ifreq *ifr; int error; int oif_flags; +#ifdef VIMAGE + bool shutdown; +#endif CURVNET_SET(so->so_vnet); #ifdef VIMAGE /* Make sure the VNET is stable. */ - if (so->so_vnet->vnet_shutdown) { + shutdown = VNET_IS_SHUTTING_DOWN(so->so_vnet); + if (shutdown) { CURVNET_RESTORE(); return (EBUSY); } Modified: projects/clang1000-import/sys/net/netisr.c ============================================================================== --- projects/clang1000-import/sys/net/netisr.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/net/netisr.c Mon Feb 17 20:27:05 2020 (r358049) @@ -1056,6 +1056,8 @@ netisr_queue_src(u_int proto, uintptr_t source, struct if (m != NULL) { KASSERT(!CPU_ABSENT(cpuid), ("%s: CPU %u absent", __func__, cpuid)); + VNET_ASSERT(m->m_pkthdr.rcvif != NULL, + ("%s:%d rcvif == NULL: m=%p", __func__, __LINE__, m)); error = netisr_queue_internal(proto, m, cpuid); } else error = ENOBUFS; Modified: projects/clang1000-import/sys/net/vnet.c ============================================================================== --- projects/clang1000-import/sys/net/vnet.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/net/vnet.c Mon Feb 17 20:27:05 2020 (r358049) @@ -279,6 +279,9 @@ vnet_destroy(struct vnet *vnet) LIST_REMOVE(vnet, vnet_le); VNET_LIST_WUNLOCK(); + /* Signal that VNET is being shutdown. */ + vnet->vnet_shutdown = true; + CURVNET_SET_QUIET(vnet); vnet_sysuninit(); CURVNET_RESTORE(); @@ -350,15 +353,15 @@ vnet_data_startup(void *dummy __unused) } SYSINIT(vnet_data, SI_SUB_KLD, SI_ORDER_FIRST, vnet_data_startup, NULL); +/* Dummy VNET_SYSINIT to make sure we always reach the final end state. */ static void -vnet_sysuninit_shutdown(void *unused __unused) +vnet_sysinit_done(void *unused __unused) { - /* Signal that VNET is being shutdown. */ - curvnet->vnet_shutdown = 1; + return; } -VNET_SYSUNINIT(vnet_sysuninit_shutdown, SI_SUB_VNET_DONE, SI_ORDER_FIRST, - vnet_sysuninit_shutdown, NULL); +VNET_SYSINIT(vnet_sysinit_done, SI_SUB_VNET_DONE, SI_ORDER_ANY, + vnet_sysinit_done, NULL); /* * When a module is loaded and requires storage for a virtualized global @@ -572,8 +575,10 @@ vnet_sysinit(void) struct vnet_sysinit *vs; VNET_SYSINIT_RLOCK(); - TAILQ_FOREACH(vs, &vnet_constructors, link) + TAILQ_FOREACH(vs, &vnet_constructors, link) { + curvnet->vnet_state = vs->subsystem; vs->func(vs->arg); + } VNET_SYSINIT_RUNLOCK(); } @@ -589,8 +594,10 @@ vnet_sysuninit(void) VNET_SYSINIT_RLOCK(); TAILQ_FOREACH_REVERSE(vs, &vnet_destructors, vnet_sysuninit_head, - link) + link) { + curvnet->vnet_state = vs->subsystem; vs->func(vs->arg); + } VNET_SYSINIT_RUNLOCK(); } @@ -704,7 +711,8 @@ db_vnet_print(struct vnet *vnet) db_printf(" vnet_data_mem = %p\n", vnet->vnet_data_mem); db_printf(" vnet_data_base = %#jx\n", (uintmax_t)vnet->vnet_data_base); - db_printf(" vnet_shutdown = %#08x\n", vnet->vnet_shutdown); + db_printf(" vnet_state = %#08x\n", vnet->vnet_state); + db_printf(" vnet_shutdown = %#03x\n", vnet->vnet_shutdown); db_printf("\n"); } Modified: projects/clang1000-import/sys/net/vnet.h ============================================================================== --- projects/clang1000-import/sys/net/vnet.h Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/net/vnet.h Mon Feb 17 20:27:05 2020 (r358049) @@ -72,11 +72,12 @@ struct vnet { u_int vnet_magic_n; u_int vnet_ifcnt; u_int vnet_sockcnt; - u_int vnet_shutdown; /* Shutdown in progress. */ + u_int vnet_state; /* SI_SUB_* */ void *vnet_data_mem; uintptr_t vnet_data_base; -}; -#define VNET_MAGIC_N 0x3e0d8f29 + bool vnet_shutdown; /* Shutdown in progress. */ +} __aligned(CACHE_LINE_SIZE); +#define VNET_MAGIC_N 0x5e4a6f28 /* * These two virtual network stack allocator definitions are also required Modified: projects/clang1000-import/sys/netinet/igmp.c ============================================================================== --- projects/clang1000-import/sys/netinet/igmp.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/netinet/igmp.c Mon Feb 17 20:27:05 2020 (r358049) @@ -303,6 +303,7 @@ igmp_save_context(struct mbuf *m, struct ifnet *ifp) #ifdef VIMAGE m->m_pkthdr.PH_loc.ptr = ifp->if_vnet; #endif /* VIMAGE */ + m->m_pkthdr.rcvif = ifp; m->m_pkthdr.flowid = ifp->if_index; } Modified: projects/clang1000-import/sys/netinet/sctp_ss_functions.c ============================================================================== --- projects/clang1000-import/sys/netinet/sctp_ss_functions.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/netinet/sctp_ss_functions.c Mon Feb 17 20:27:05 2020 (r358049) @@ -517,6 +517,9 @@ sctp_ss_prio_select(struct sctp_tcb *stcb SCTP_UNUSED, { struct sctp_stream_out *strq, *strqt, *strqn; + if (asoc->ss_data.locked_on_sending) { + return (asoc->ss_data.locked_on_sending); + } strqt = asoc->ss_data.last_out_stream; prio_again: /* Find the next stream to use */ @@ -694,6 +697,9 @@ sctp_ss_fb_select(struct sctp_tcb *stcb SCTP_UNUSED, s { struct sctp_stream_out *strq = NULL, *strqt; + if (asoc->ss_data.locked_on_sending) { + return (asoc->ss_data.locked_on_sending); + } if (asoc->ss_data.last_out_stream == NULL || TAILQ_FIRST(&asoc->ss_data.out.wheel) == TAILQ_LAST(&asoc->ss_data.out.wheel, sctpwheel_listhead)) { strqt = TAILQ_FIRST(&asoc->ss_data.out.wheel); @@ -900,6 +906,9 @@ sctp_ss_fcfs_select(struct sctp_tcb *stcb SCTP_UNUSED, struct sctp_stream_out *strq; struct sctp_stream_queue_pending *sp; + if (asoc->ss_data.locked_on_sending) { + return (asoc->ss_data.locked_on_sending); + } sp = TAILQ_FIRST(&asoc->ss_data.out.list); default_again: if (sp != NULL) { Modified: projects/clang1000-import/sys/netinet/tcp_hostcache.c ============================================================================== --- projects/clang1000-import/sys/netinet/tcp_hostcache.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/netinet/tcp_hostcache.c Mon Feb 17 20:27:05 2020 (r358049) @@ -437,8 +437,10 @@ tcp_hc_get(struct in_conninfo *inc, struct hc_metrics_ { struct hc_metrics *hc_entry; - if (!V_tcp_use_hostcache) + if (!V_tcp_use_hostcache) { + bzero(hc_metrics_lite, sizeof(*hc_metrics_lite)); return; + } /* * Find the right bucket. Modified: projects/clang1000-import/sys/netinet6/mld6.c ============================================================================== --- projects/clang1000-import/sys/netinet6/mld6.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/netinet6/mld6.c Mon Feb 17 20:27:05 2020 (r358049) @@ -283,6 +283,7 @@ mld_save_context(struct mbuf *m, struct ifnet *ifp) #ifdef VIMAGE m->m_pkthdr.PH_loc.ptr = ifp->if_vnet; #endif /* VIMAGE */ + m->m_pkthdr.rcvif = ifp; m->m_pkthdr.flowid = ifp->if_index; } Modified: projects/clang1000-import/sys/sys/param.h ============================================================================== --- projects/clang1000-import/sys/sys/param.h Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/sys/param.h Mon Feb 17 20:27:05 2020 (r358049) @@ -60,7 +60,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1300077 /* Master, propagated to newvers */ +#define __FreeBSD_version 1300078 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, Modified: projects/clang1000-import/sys/sys/refcount.h ============================================================================== --- projects/clang1000-import/sys/sys/refcount.h Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/sys/refcount.h Mon Feb 17 20:27:05 2020 (r358049) @@ -119,6 +119,9 @@ refcount_releasen(volatile u_int *count, u_int n) KASSERT(n < REFCOUNT_SATURATION_VALUE / 2, ("refcount_releasen: n=%u too large", n)); + /* + * Paired with acquire fence in refcount_release_last. + */ atomic_thread_fence_rel(); old = atomic_fetchadd_int(count, -n); if (__predict_false(n >= REFCOUNT_COUNT(old) || @@ -198,6 +201,9 @@ refcount_release_if_gt(volatile u_int *count, u_int n) return (false); if (__predict_false(REFCOUNT_SATURATED(old))) return (true); + /* + * Paired with acquire fence in refcount_release_last. + */ if (atomic_fcmpset_rel_int(count, &old, old - 1)) return (true); } Modified: projects/clang1000-import/sys/ufs/ffs/ffs_softdep.c ============================================================================== --- projects/clang1000-import/sys/ufs/ffs/ffs_softdep.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/ufs/ffs/ffs_softdep.c Mon Feb 17 20:27:05 2020 (r358049) @@ -1464,6 +1464,9 @@ softdep_send_speedup(struct ufsmount *ump, size_t shor { struct buf *bp; + if ((ump->um_flags & UM_CANSPEEDUP) == 0) + return; + bp = malloc(sizeof(*bp), M_TRIM, M_WAITOK | M_ZERO); bp->b_iocmd = BIO_SPEEDUP; bp->b_ioflags = flags; Modified: projects/clang1000-import/sys/ufs/ffs/ffs_vfsops.c ============================================================================== --- projects/clang1000-import/sys/ufs/ffs/ffs_vfsops.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/ufs/ffs/ffs_vfsops.c Mon Feb 17 20:27:05 2020 (r358049) @@ -794,7 +794,7 @@ ffs_mountfs(devvp, mp, td) struct ucred *cred; struct g_consumer *cp; struct mount *nmp; - int candelete; + int candelete, canspeedup; off_t loc; fs = NULL; @@ -1009,6 +1009,12 @@ ffs_mountfs(devvp, mp, td) ump->um_trimhash = hashinit(MAXTRIMIO, M_TRIM, &ump->um_trimlisthashsize); } + } + + len = sizeof(int); + if (g_io_getattr("GEOM::canspeedup", cp, &len, &canspeedup) == 0) { + if (canspeedup) + ump->um_flags |= UM_CANSPEEDUP; } ump->um_mountp = mp; Modified: projects/clang1000-import/sys/ufs/ufs/ufsmount.h ============================================================================== --- projects/clang1000-import/sys/ufs/ufs/ufsmount.h Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/ufs/ufs/ufsmount.h Mon Feb 17 20:27:05 2020 (r358049) @@ -131,6 +131,7 @@ struct ufsmount { */ #define UM_CANDELETE 0x00000001 /* devvp supports TRIM */ #define UM_WRITESUSPENDED 0x00000002 /* suspension in progress */ +#define UM_CANSPEEDUP 0x00000004 /* devvp supports SPEEDUP */ /* * function prototypes Modified: projects/clang1000-import/sys/vm/swap_pager.c ============================================================================== --- projects/clang1000-import/sys/vm/swap_pager.c Mon Feb 17 20:25:33 2020 (r358048) +++ projects/clang1000-import/sys/vm/swap_pager.c Mon Feb 17 20:27:05 2020 (r358049) @@ -1188,8 +1188,8 @@ swap_pager_unswapped(vm_page_t m) * The pages in "ma" must be busied and will remain busied upon return. */ static int -swap_pager_getpages(vm_object_t object, vm_page_t *ma, int count, int *rbehind, - int *rahead) +swap_pager_getpages_locked(vm_object_t object, vm_page_t *ma, int count, + int *rbehind, int *rahead) { struct buf *bp; vm_page_t bm, mpred, msucc, p; @@ -1197,7 +1197,7 @@ swap_pager_getpages(vm_object_t object, vm_page_t *ma, daddr_t blk; int i, maxahead, maxbehind, reqcount; - VM_OBJECT_WLOCK(object); + VM_OBJECT_ASSERT_WLOCKED(object); reqcount = count; KASSERT(object->type == OBJT_SWAP, @@ -1352,6 +1352,15 @@ swap_pager_getpages(vm_object_t object, vm_page_t *ma, */ } +static int +swap_pager_getpages(vm_object_t object, vm_page_t *ma, int count, + int *rbehind, int *rahead) +{ + + VM_OBJECT_WLOCK(object); + return (swap_pager_getpages_locked(object, ma, count, rbehind, rahead)); +} + /* * swap_pager_getpages_async(): * @@ -1444,18 +1453,6 @@ swap_pager_putpages(vm_object_t object, vm_page_t *ma, /* Maximum I/O size is limited by maximum swap block size. */ n = min(count - i, nsw_cluster_max); - /* Get a block of swap of size up to size n. */ - blk = swp_pager_getswapspace(&n, 4); - if (blk == SWAPBLK_NONE) { - for (j = 0; j < n; ++j) - rtvals[i + j] = VM_PAGER_FAIL; - continue; - } - - /* - * All I/O parameters have been satisfied. Build the I/O - * request and assign the swap space. - */ if (async) { mtx_lock(&swbuf_mtx); while (nsw_wcount_async == 0) @@ -1464,19 +1461,20 @@ swap_pager_putpages(vm_object_t object, vm_page_t *ma, nsw_wcount_async--; mtx_unlock(&swbuf_mtx); } - bp = uma_zalloc(swwbuf_zone, M_WAITOK); - if (async) - bp->b_flags = B_ASYNC; - bp->b_flags |= B_PAGING; - bp->b_iocmd = BIO_WRITE; - bp->b_rcred = crhold(thread0.td_ucred); - bp->b_wcred = crhold(thread0.td_ucred); - bp->b_bcount = PAGE_SIZE * n; - bp->b_bufsize = PAGE_SIZE * n; - bp->b_blkno = blk; - + /* Get a block of swap of size up to size n. */ VM_OBJECT_WLOCK(object); + blk = swp_pager_getswapspace(&n, 4); + if (blk == SWAPBLK_NONE) { + VM_OBJECT_WUNLOCK(object); + mtx_lock(&swbuf_mtx); + if (++nsw_wcount_async == 1) + wakeup(&nsw_wcount_async); + mtx_unlock(&swbuf_mtx); + for (j = 0; j < n; ++j) + rtvals[i + j] = VM_PAGER_FAIL; + continue; + } for (j = 0; j < n; ++j) { mreq = ma[i + j]; vm_page_aflag_clear(mreq, PGA_SWAP_FREE); @@ -1487,10 +1485,24 @@ swap_pager_putpages(vm_object_t object, vm_page_t *ma, addr); MPASS(mreq->dirty == VM_PAGE_BITS_ALL); mreq->oflags |= VPO_SWAPINPROG; - bp->b_pages[j] = mreq; } VM_OBJECT_WUNLOCK(object); + + bp = uma_zalloc(swwbuf_zone, M_WAITOK); + if (async) + bp->b_flags = B_ASYNC; + bp->b_flags |= B_PAGING; + bp->b_iocmd = BIO_WRITE; + + bp->b_rcred = crhold(thread0.td_ucred); + bp->b_wcred = crhold(thread0.td_ucred); + bp->b_bcount = PAGE_SIZE * n; + bp->b_bufsize = PAGE_SIZE * n; + bp->b_blkno = blk; + for (j = 0; j < n; j++) + bp->b_pages[j] = ma[i + j]; bp->b_npages = n; + /* * Must set dirty range for NFS to work. */ @@ -1712,72 +1724,11 @@ swp_pager_force_dirty(vm_page_t m) { vm_page_dirty(m); -#ifdef INVARIANTS - if (!vm_page_wired(m) && m->a.queue == PQ_NONE) - panic("page %p is neither wired nor queued", m); -#endif - vm_page_xunbusy(m); swap_pager_unswapped(m); -} - -static void -swp_pager_force_launder(vm_page_t m) -{ - - vm_page_dirty(m); vm_page_launder(m); - vm_page_xunbusy(m); - swap_pager_unswapped(m); } /* - * SWP_PAGER_FORCE_PAGEIN() - force swap blocks to be paged in - * - * This routine dissociates pages starting at the given index within an - * object from their backing store, paging them in if they do not reside - * in memory. Pages that are paged in are marked dirty and placed in the - * laundry queue. Pages are marked dirty because they no longer have - * backing store. They are placed in the laundry queue because they have - * not been accessed recently. Otherwise, they would already reside in - * memory. - */ -static void -swp_pager_force_pagein(vm_object_t object, vm_pindex_t pindex, int npages) -{ - vm_page_t ma[npages]; - int i, j; - - KASSERT(npages > 0, ("%s: No pages", __func__)); - KASSERT(npages <= MAXPHYS / PAGE_SIZE, - ("%s: Too many pages: %d", __func__, npages)); - KASSERT(object->type == OBJT_SWAP, - ("%s: Object not swappable", __func__)); - vm_object_pip_add(object, npages); - vm_page_grab_pages(object, pindex, VM_ALLOC_NORMAL, ma, npages); - for (i = j = 0;; i++) { - /* Count nonresident pages, to page-in all at once. */ - if (i < npages && ma[i]->valid != VM_PAGE_BITS_ALL) - continue; - if (j < i) { - VM_OBJECT_WUNLOCK(object); - /* Page-in nonresident pages. Mark for laundering. */ - if (swap_pager_getpages(object, &ma[j], i - j, NULL, - NULL) != VM_PAGER_OK) - panic("%s: read from swap failed", __func__); - VM_OBJECT_WLOCK(object); - do { - swp_pager_force_launder(ma[j]); - } while (++j < i); - } - if (i == npages) - break; - /* Mark dirty a resident page. */ - swp_pager_force_dirty(ma[j++]); - } - vm_object_pip_wakeupn(object, npages); -} - -/* * swap_pager_swapoff_object: * * Page in all of the pages that have been paged out for an object @@ -1787,62 +1738,95 @@ static void swap_pager_swapoff_object(struct swdevt *sp, vm_object_t object) { struct swblk *sb; - vm_pindex_t pi, s_pindex; - daddr_t blk, n_blks, s_blk; - int i; + vm_page_t m; + vm_pindex_t pi; + daddr_t blk; + int i, nv, rahead, rv; KASSERT(object->type == OBJT_SWAP, ("%s: Object not swappable", __func__)); - n_blks = 0; + for (pi = 0; (sb = SWAP_PCTRIE_LOOKUP_GE( &object->un_pager.swp.swp_blks, pi)) != NULL; ) { + if ((object->flags & OBJ_DEAD) != 0) { + /* + * Make sure that pending writes finish before + * returning. + */ + vm_object_pip_wait(object, "swpoff"); + swp_pager_meta_free_all(object); + break; + } for (i = 0; i < SWAP_META_PAGES; i++) { - blk = sb->d[i]; - if (!swp_pager_isondev(blk, sp)) - blk = SWAPBLK_NONE; - /* - * If there are no blocks/pages accumulated, start a new - * accumulation here. + * Count the number of contiguous valid blocks. */ - if (n_blks == 0) { - if (blk != SWAPBLK_NONE) { - s_blk = blk; - s_pindex = sb->p + i; - n_blks = 1; - } - continue; + for (nv = 0; nv < SWAP_META_PAGES - i; nv++) { + blk = sb->d[i + nv]; + if (!swp_pager_isondev(blk, sp) || + blk == SWAPBLK_NONE) + break; } + if (nv == 0) + continue; /* - * If the accumulation can be extended without breaking - * the sequence of consecutive blocks and pages that - * swp_pager_force_pagein() depends on, do so. + * Look for a page corresponding to the first + * valid block and ensure that any pending paging + * operations on it are complete. If the page is valid, + * mark it dirty and free the swap block. Try to batch + * this operation since it may cause sp to be freed, + * meaning that we must restart the scan. Avoid busying + * valid pages since we may block forever on kernel + * stack pages. */ - if (n_blks < MAXPHYS / PAGE_SIZE && - s_blk + n_blks == blk && - s_pindex + n_blks == sb->p + i) { - ++n_blks; - continue; + m = vm_page_lookup(object, sb->p + i); + if (m == NULL) { + m = vm_page_alloc(object, sb->p + i, + VM_ALLOC_NORMAL | VM_ALLOC_WAITFAIL); + if (m == NULL) + break; + } else { + if ((m->oflags & VPO_SWAPINPROG) != 0) { + m->oflags |= VPO_SWAPSLEEP; + VM_OBJECT_SLEEP(object, &object->handle, + PSWP, "swpoff", 0); + break; + } + if (vm_page_all_valid(m)) { + do { + swp_pager_force_dirty(m); + } while (--nv > 0 && + (m = vm_page_next(m)) != NULL && + vm_page_all_valid(m) && + (m->oflags & VPO_SWAPINPROG) == 0); + break; + } + if (!vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL)) + break; } + vm_object_pip_add(object, 1); + rahead = SWAP_META_PAGES; + rv = swap_pager_getpages_locked(object, &m, 1, NULL, + &rahead); + if (rv != VM_PAGER_OK) + panic("%s: read from swap failed: %d", + __func__, rv); + vm_object_pip_wakeupn(object, 1); + VM_OBJECT_WLOCK(object); + vm_page_xunbusy(m); + /* - * The sequence of consecutive blocks and pages cannot - * be extended, so page them all in here. Then, - * because doing so involves releasing and reacquiring - * a lock that protects the swap block pctrie, do not - * rely on the current swap block. Break this loop and - * re-fetch the same pindex from the pctrie again. + * The object lock was dropped so we must restart the *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Mon Feb 17 20:35:25 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D9999246572 for ; Mon, 17 Feb 2020 20:35:25 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48Lwj93hqqz4g3D; Mon, 17 Feb 2020 20:35:25 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7A23BCD35; Mon, 17 Feb 2020 20:35:25 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HKZPR2084044; Mon, 17 Feb 2020 20:35:25 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HKZPIO084043; Mon, 17 Feb 2020 20:35:25 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172035.01HKZPIO084043@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 20:35:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358050 - projects/nfs-over-tls/sys/fs/nfs X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/fs/nfs X-SVN-Commit-Revision: 358050 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 20:35:25 -0000 Author: rmacklem Date: Mon Feb 17 20:35:25 2020 New Revision: 358050 URL: https://svnweb.freebsd.org/changeset/base/358050 Log: Update nfsport.h. I haven't yet decided what to do about NFSVOPUNLOCK(), since the second argument was removed and that makes code merge very difficult. Modified: projects/nfs-over-tls/sys/fs/nfs/nfsport.h Modified: projects/nfs-over-tls/sys/fs/nfs/nfsport.h ============================================================================== --- projects/nfs-over-tls/sys/fs/nfs/nfsport.h Mon Feb 17 20:27:05 2020 (r358049) +++ projects/nfs-over-tls/sys/fs/nfs/nfsport.h Mon Feb 17 20:35:25 2020 (r358050) @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -115,6 +116,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -1057,6 +1062,7 @@ bool ncl_pager_setsize(struct vnode *vp, u_quad_t *nsi #define NFSHASOPENMODE(n) ((n)->nm_state & NFSSTA_OPENMODE) #define NFSHASONEOPENOWN(n) (((n)->nm_flag & NFSMNT_ONEOPENOWN) != 0 && \ (n)->nm_minorvers > 0) +#define NFSHASTLS(n) (((n)->nm_newflag & NFSMNT_TLS) != 0) /* * Gets the stats field out of the mount structure. From owner-svn-src-projects@freebsd.org Mon Feb 17 20:58:34 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 85392246F67 for ; Mon, 17 Feb 2020 20:58:34 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LxCt3Pqzz3HxH; Mon, 17 Feb 2020 20:58:34 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1EF27D11F; Mon, 17 Feb 2020 20:58:34 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HKwXOU096535; Mon, 17 Feb 2020 20:58:33 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HKwXR8096531; Mon, 17 Feb 2020 20:58:33 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172058.01HKwXR8096531@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 20:58:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358051 - projects/nfs-over-tls/sys/fs/nfsserver X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/fs/nfsserver X-SVN-Commit-Revision: 358051 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 20:58:34 -0000 Author: rmacklem Date: Mon Feb 17 20:58:33 2020 New Revision: 358051 URL: https://svnweb.freebsd.org/changeset/base/358051 Log: Update sys/fs/nfsserver sources so that they handle ext_pgs mbufs. Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdkrpc.c projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdsubs.c Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdkrpc.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdkrpc.c Mon Feb 17 20:35:25 2020 (r358050) +++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdkrpc.c Mon Feb 17 20:58:33 2020 (r358051) @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include "opt_inet6.h" #include "opt_kgssapi.h" +#include "opt_kern_tls.h" #include @@ -110,6 +111,9 @@ extern time_t nfsdev_time; extern int nfsrv_writerpc[NFS_NPROCS]; extern volatile int nfsrv_devidcnt; extern struct nfsv4_opflag nfsv4_opflag[NFSV42_NOPS]; +#ifdef KERN_TLS +extern u_int ktls_maxlen; +#endif /* * NFS server system calls @@ -158,9 +162,11 @@ nfssvc_program(struct svc_req *rqst, SVCXPRT *xprt) */ nd.nd_mrep = rqst->rq_args; rqst->rq_args = NULL; +#ifdef notnow newnfs_realign(&nd.nd_mrep, M_WAITOK); +#endif nd.nd_md = nd.nd_mrep; - nd.nd_dpos = mtod(nd.nd_md, caddr_t); + nfsm_set(&nd, false); nd.nd_nam = svc_getrpccaller(rqst); nd.nd_nam2 = rqst->rq_addr; nd.nd_mreq = NULL; @@ -269,6 +275,14 @@ nfssvc_program(struct svc_req *rqst, SVCXPRT *xprt) } } + if (xprt->xp_tls) + nd.nd_flag |= ND_TLS; + nd.nd_maxextsiz = 16384; +#ifdef KERN_TLS + if (xprt->xp_tls) + nd.nd_maxextsiz = min(TLS_MAX_MSG_SIZE_V10_2, + ktls_maxlen); +#endif cacherep = nfs_proc(&nd, rqst->rq_xid, xprt, &rp); NFSLOCKV4ROOTMUTEX(); nfsv4_relref(&nfsd_suspend_lock); Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c Mon Feb 17 20:35:25 2020 (r358050) +++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c Mon Feb 17 20:58:33 2020 (r358051) @@ -76,6 +76,7 @@ extern struct nfsdontlisthead nfsrv_dontlisthead; extern volatile int nfsrv_dontlistlen; extern volatile int nfsrv_devidcnt; extern int nfsrv_maxpnfsmirror; +extern bool nfs_use_ext_pgs; struct vfsoptlist nfsv4root_opt, nfsv4root_newopt; NFSDLOCKMUTEX; NFSSTATESPINLOCK; @@ -108,8 +109,12 @@ extern struct nfsdevicehead nfsrv_devidhead; static int nfsrv_createiovec(int, struct mbuf **, struct mbuf **, struct iovec **); +static int nfsrv_createiovec_extpgs(int, int, struct mbuf **, + struct mbuf **, struct iovec **); static int nfsrv_createiovecw(int, struct mbuf *, char *, struct iovec **, int *); +static int nfsrv_createiovecw_extpgs(int, struct mbuf *, char *, int, + int, struct iovec **, int *); static void nfsrv_pnfscreate(struct vnode *, struct vattr *, struct ucred *, NFSPROC_T *); static void nfsrv_pnfsremovesetup(struct vnode *, NFSPROC_T *, struct vnode **, @@ -730,8 +735,8 @@ nfsvno_relpathbuf(struct nameidata *ndp) * Readlink vnode op into an mbuf list. */ int -nfsvno_readlink(struct vnode *vp, struct ucred *cred, struct thread *p, - struct mbuf **mpp, struct mbuf **mpendp, int *lenp) +nfsvno_readlink(struct vnode *vp, struct ucred *cred, int maxextsiz, + struct thread *p, struct mbuf **mpp, struct mbuf **mpendp, int *lenp) { struct iovec *iv; struct uio io, *uiop = &io; @@ -739,7 +744,11 @@ nfsvno_readlink(struct vnode *vp, struct ucred *cred, int len, tlen, error = 0; len = NFS_MAXPATHLEN; - uiop->uio_iovcnt = nfsrv_createiovec(len, &mp3, &mp, &iv); + if (maxextsiz > 0) + uiop->uio_iovcnt = nfsrv_createiovec_extpgs(len, maxextsiz, + &mp3, &mp, &iv); + else + uiop->uio_iovcnt = nfsrv_createiovec(len, &mp3, &mp, &iv); uiop->uio_iov = iv; uiop->uio_offset = 0; uiop->uio_resid = len; @@ -756,7 +765,12 @@ nfsvno_readlink(struct vnode *vp, struct ucred *cred, if (uiop->uio_resid > 0) { len -= uiop->uio_resid; tlen = NFSM_RNDUP(len); - nfsrv_adj(mp3, NFS_MAXPATHLEN - tlen, tlen - len); + if (tlen == 0) { + m_freem(mp3); + mp3 = mp = NULL; + } else if (tlen != NFS_MAXPATHLEN || tlen != len) + mp = nfsrv_adj(mp3, NFS_MAXPATHLEN - tlen, + tlen - len); } *lenp = len; *mpp = mp3; @@ -824,11 +838,80 @@ nfsrv_createiovec(int len, struct mbuf **mpp, struct m } /* + * Create an mbuf chain and an associated iovec that can be used to Read + * or Getextattr of data. + * Upon success, return pointers to the first and last mbufs in the chain + * plus the malloc'd iovec and its iovlen. + * Same as above, but creates ext_pgs mbuf(s). + */ +static int +nfsrv_createiovec_extpgs(int len, int maxextsiz, struct mbuf **mpp, + struct mbuf **mpendp, struct iovec **ivp) +{ + struct mbuf *m, *m2 = NULL, *m3; + struct mbuf_ext_pgs *pgs; + struct iovec *iv; + int i, left, pgno, siz; + + left = len; + m3 = NULL; + /* + * Generate the mbuf list with the uio_iov ref. to it. + */ + i = 0; + while (left > 0) { + siz = min(left, maxextsiz); + m = mb_alloc_ext_plus_pages(siz, M_WAITOK, false, + mb_free_mext_pgs); + left -= siz; + i += m->m_ext.ext_pgs->npgs; + if (m3 != NULL) + m2->m_next = m; + else + m3 = m; + m2 = m; + } + *ivp = iv = malloc(i * sizeof (struct iovec), M_TEMP, M_WAITOK); + m = m3; + left = len; + i = 0; + pgno = 0; + pgs = m->m_ext.ext_pgs; + while (left > 0) { + if (m == NULL) + panic("nfsvno_createiovec_extpgs iov"); + siz = min(PAGE_SIZE, left); + if (siz > 0) { + iv->iov_base = (void *)PHYS_TO_DMAP(pgs->pa[pgno]); + iv->iov_len = siz; + m->m_len += siz; + if (pgno == pgs->npgs - 1) + pgs->last_pg_len = siz; + left -= siz; + iv++; + i++; + pgno++; + } + if (pgno == pgs->npgs && left > 0) { + m = m->m_next; + if (m == NULL) + panic("nfsvno_createiovec_extpgs iov"); + pgs = m->m_ext.ext_pgs; + pgno = 0; + } + } + *mpp = m3; + *mpendp = m2; + return (i); +} + +/* * Read vnode op call into mbuf list. */ int nfsvno_read(struct vnode *vp, off_t off, int cnt, struct ucred *cred, - struct thread *p, struct mbuf **mpp, struct mbuf **mpendp) + int maxextsiz, struct thread *p, struct mbuf **mpp, + struct mbuf **mpendp) { struct mbuf *m; struct iovec *iv; @@ -847,7 +930,11 @@ nfsvno_read(struct vnode *vp, off_t off, int cnt, stru return (error); len = NFSM_RNDUP(cnt); - uiop->uio_iovcnt = nfsrv_createiovec(len, &m3, &m, &iv); + if (maxextsiz > 0) + uiop->uio_iovcnt = nfsrv_createiovec_extpgs(len, maxextsiz, + &m3, &m, &iv); + else + uiop->uio_iovcnt = nfsrv_createiovec(len, &m3, &m, &iv); uiop->uio_iov = iv; uiop->uio_offset = off; uiop->uio_resid = len; @@ -871,9 +958,9 @@ nfsvno_read(struct vnode *vp, off_t off, int cnt, stru tlen = NFSM_RNDUP(cnt); if (tlen == 0) { m_freem(m3); - m3 = NULL; + m3 = m = NULL; } else if (len != tlen || tlen != cnt) - nfsrv_adj(m3, len - tlen, tlen - cnt); + m = nfsrv_adj(m3, len - tlen, tlen - cnt); *mpp = m3; *mpendp = m; @@ -943,11 +1030,98 @@ nfsrv_createiovecw(int retlen, struct mbuf *m, char *c } /* + * Create the iovec for the mbuf chain passed in as an argument. + * The "cp" argument is where the data starts within the first mbuf in + * the chain. It returns the iovec and the iovcnt. + * Same as above, but for ext_pgs mbufs. + */ +static int +nfsrv_createiovecw_extpgs(int retlen, struct mbuf *m, char *cp, int dextpg, + int dextpgsiz, struct iovec **ivpp, int *iovcntp) +{ + struct mbuf *mp; + struct mbuf_ext_pgs *pgs; + struct iovec *ivp; + int cnt, i, len, pgno; + + /* + * Loop through the mbuf chain, counting how many pages are + * part of this write oepration, so the iovec size is known. + */ + cnt = 0; + len = retlen; + mp = m; + pgs = mp->m_ext.ext_pgs; + i = dextpgsiz; + pgno = dextpg; + while (len > 0) { + if (i > 0) { + len -= i; + cnt++; + } + if (len > 0) { + if (pgno == pgs->npgs - 1) { + mp = mp->m_next; + if (mp == NULL) + return (EBADRPC); + pgno = 0; + pgs = mp->m_ext.ext_pgs; + } else + pgno++; + if (pgno == 0) + i = mbuf_ext_pg_len(pgs, 0, + pgs->first_pg_off); + else + i = mbuf_ext_pg_len(pgs, pgno, 0); + } + } + + /* Now, create the iovec. */ + mp = m; + *ivpp = ivp = malloc(cnt * sizeof (struct iovec), M_TEMP, + M_WAITOK); + *iovcntp = cnt; + len = retlen; + pgs = mp->m_ext.ext_pgs; + i = dextpgsiz; + pgno = dextpg; + while (len > 0) { + if (i > 0) { + i = min(i, len); + ivp->iov_base = cp; + ivp->iov_len = i; + ivp++; + len -= i; + } + if (len > 0) { + if (pgno == pgs->npgs - 1) { + mp = mp->m_next; + if (mp == NULL) + return (EBADRPC); + pgno = 0; + pgs = mp->m_ext.ext_pgs; + } else + pgno++; + cp = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[pgno]); + if (pgno == 0) { + cp += pgs->first_pg_off; + i = mbuf_ext_pg_len(pgs, 0, + pgs->first_pg_off); + } else + i = mbuf_ext_pg_len(pgs, pgno, 0); + } + } + return (0); +} + +/* * Write vnode op from an mbuf list. */ int nfsvno_write(struct vnode *vp, off_t off, int retlen, int *stable, - struct mbuf *mp, char *cp, struct ucred *cred, struct thread *p) + struct mbuf *mp, char *cp, int dextpg, int dextpgsiz, + struct ucred *cred, struct thread *p) { struct iovec *iv; int cnt, ioflags, error; @@ -970,7 +1144,11 @@ nfsvno_write(struct vnode *vp, off_t off, int retlen, ioflags = IO_NODELOCKED; else ioflags = (IO_SYNC | IO_NODELOCKED); - error = nfsrv_createiovecw(retlen, mp, cp, &iv, &cnt); + if ((mp->m_flags & (M_EXT | M_NOMAP)) == (M_EXT | M_NOMAP)) + error = nfsrv_createiovecw_extpgs(retlen, mp, cp, dextpg, + dextpgsiz, &iv, &cnt); + else + error = nfsrv_createiovecw(retlen, mp, cp, &iv, &cnt); if (error != 0) return (error); uiop->uio_iov = iv; @@ -2135,6 +2313,7 @@ nfsrvd_readdirplus(struct nfsrv_descript *nd, int isdg struct mount *mp, *new_mp; uint64_t mounted_on_fileno; struct thread *p = curthread; + int bextpg0, bextpg1, bextpgsiz0, bextpgsiz1; if (nd->nd_repstat) { nfsrv_postopattr(nd, getret, &at); @@ -2353,6 +2532,8 @@ again: */ mb0 = nd->nd_mb; bpos0 = nd->nd_bpos; + bextpg0 = nd->nd_bextpg; + bextpgsiz0 = nd->nd_bextpgsiz; /* * Fill in the first part of the reply. @@ -2374,6 +2555,8 @@ again: */ mb1 = nd->nd_mb; bpos1 = nd->nd_bpos; + bextpg1 = nd->nd_bextpg; + bextpgsiz1 = nd->nd_bextpgsiz; /* Loop through the records and build reply */ entrycnt = 0; @@ -2390,6 +2573,8 @@ again: */ mb1 = nd->nd_mb; bpos1 = nd->nd_bpos; + bextpg1 = nd->nd_bextpg; + bextpgsiz1 = nd->nd_bextpgsiz; /* * For readdir_and_lookup get the vnode using @@ -2615,11 +2800,11 @@ invalid: if (!nd->nd_repstat && entrycnt == 0) nd->nd_repstat = NFSERR_TOOSMALL; if (nd->nd_repstat) { - newnfs_trimtrailing(nd, mb0, bpos0); + nfsm_trimtrailing(nd, mb0, bpos0, bextpg0, bextpgsiz0); if (nd->nd_flag & ND_NFSV3) nfsrv_postopattr(nd, getret, &at); } else - newnfs_trimtrailing(nd, mb1, bpos1); + nfsm_trimtrailing(nd, mb1, bpos1, bextpg1, bextpgsiz1); eofflag = 0; } else if (cpos < cend) eofflag = 0; @@ -4928,7 +5113,7 @@ nfsrv_readdsrpc(fhandle_t *fhp, off_t off, int len, st st.other[2] = 0x55555555; st.seqid = 0xffffffff; nfscl_reqstart(nd, NFSPROC_READDS, nmp, (u_int8_t *)fhp, sizeof(*fhp), - NULL, NULL, 0, 0); + NULL, NULL, 0, 0, false); nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID); NFSM_BUILD(tl, uint32_t *, NFSX_UNSIGNED * 3); txdr_hyper(off, tl); @@ -4963,10 +5148,15 @@ nfsrv_readdsrpc(fhandle_t *fhp, off_t off, int len, st * Now, adjust first mbuf so that any XDR before the * read data is skipped over. */ - trimlen = nd->nd_dpos - mtod(m, char *); - if (trimlen > 0) { - m->m_len -= trimlen; - NFSM_DATAP(m, trimlen); + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + nfsm_trimatpos_extpgs(nd); + else { + trimlen = nd->nd_dpos - mtod(m, char *); + if (trimlen > 0) { + m->m_len -= trimlen; + NFSM_DATAP(m, trimlen); + } } /* @@ -4977,7 +5167,11 @@ nfsrv_readdsrpc(fhandle_t *fhp, off_t off, int len, st tlen = NFSM_RNDUP(retlen); do { if (m->m_len >= tlen) { - m->m_len = tlen; + if ((m->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + nfsm_trimback_extpgs(m, tlen); + else + m->m_len = tlen; tlen = 0; m2 = m->m_next; m->m_next = NULL; @@ -5036,7 +5230,7 @@ nfsrv_writedsdorpc(struct nfsmount *nmp, fhandle_t *fh nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); nfscl_reqstart(nd, NFSPROC_WRITE, nmp, (u_int8_t *)fhp, - sizeof(fhandle_t), NULL, NULL, 0, 0); + sizeof(fhandle_t), NULL, NULL, 0, 0, false); /* * Use a stateid where other is an alternating 01010 pattern and @@ -5258,7 +5452,7 @@ nfsrv_allocatedsdorpc(struct nfsmount *nmp, fhandle_t nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); nfscl_reqstart(nd, NFSPROC_ALLOCATE, nmp, (u_int8_t *)fhp, - sizeof(fhandle_t), NULL, NULL, 0, 0); + sizeof(fhandle_t), NULL, NULL, 0, 0, false); /* * Use a stateid where other is an alternating 01010 pattern and @@ -5412,7 +5606,7 @@ nfsrv_setattrdsdorpc(fhandle_t *fhp, struct ucred *cre st.other[2] = 0x55555555; st.seqid = 0xffffffff; nfscl_reqstart(nd, NFSPROC_SETATTR, nmp, (u_int8_t *)fhp, sizeof(*fhp), - NULL, NULL, 0, 0); + NULL, NULL, 0, 0, false); nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID); nfscl_fillsattr(nd, &nap->na_vattr, vp, NFSSATTR_FULL, 0); @@ -5597,7 +5791,7 @@ nfsrv_setacldsdorpc(fhandle_t *fhp, struct ucred *cred st.other[2] = 0x55555555; st.seqid = 0xffffffff; nfscl_reqstart(nd, NFSPROC_SETACL, nmp, (u_int8_t *)fhp, sizeof(*fhp), - NULL, NULL, 0, 0); + NULL, NULL, 0, 0, false); nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID); NFSZERO_ATTRBIT(&attrbits); NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_ACL); @@ -5732,7 +5926,7 @@ nfsrv_getattrdsrpc(fhandle_t *fhp, struct ucred *cred, NFSD_DEBUG(4, "in nfsrv_getattrdsrpc\n"); nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, (u_int8_t *)fhp, - sizeof(fhandle_t), NULL, NULL, 0, 0); + sizeof(fhandle_t), NULL, NULL, 0, 0, false); NFSZERO_ATTRBIT(&attrbits); NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_SIZE); NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_CHANGE); @@ -5800,7 +5994,7 @@ nfsrv_seekdsrpc(fhandle_t *fhp, off_t *offp, int conte st.seqid = 0xffffffff; nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); nfscl_reqstart(nd, NFSPROC_SEEKDS, nmp, (u_int8_t *)fhp, - sizeof(fhandle_t), NULL, NULL, 0, 0); + sizeof(fhandle_t), NULL, NULL, 0, 0, false); nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID); NFSM_BUILD(tl, uint32_t *, NFSX_HYPER + NFSX_UNSIGNED); txdr_hyper(*offp, tl); tl += 2; @@ -6140,8 +6334,8 @@ nfsvno_allocate(struct vnode *vp, off_t off, off_t len */ int nfsvno_getxattr(struct vnode *vp, char *name, uint32_t maxresp, - struct ucred *cred, struct thread *p, struct mbuf **mpp, - struct mbuf **mpendp, int *lenp) + struct ucred *cred, uint64_t flag, int maxextsiz, struct thread *p, + struct mbuf **mpp, struct mbuf **mpendp, int *lenp) { struct iovec *iv; struct uio io, *uiop = &io; @@ -6158,7 +6352,17 @@ nfsvno_getxattr(struct vnode *vp, char *name, uint32_t return (NFSERR_XATTR2BIG); len = siz; tlen = NFSM_RNDUP(len); - uiop->uio_iovcnt = nfsrv_createiovec(tlen, &m, &m2, &iv); + /* + * If the cnt is larger than MCLBYTES, use ext_pgs if + * possible. + * Always use ext_pgs if ND_EXTPG is set. + */ + if ((flag & ND_EXTPG) != 0 || (tlen > MCLBYTES && + PMAP_HAS_DMAP != 0 && ((flag & ND_TLS) != 0 || nfs_use_ext_pgs))) + uiop->uio_iovcnt = nfsrv_createiovec_extpgs(tlen, maxextsiz, + &m, &m2, &iv); + else + uiop->uio_iovcnt = nfsrv_createiovec(tlen, &m, &m2, &iv); uiop->uio_iov = iv; uiop->uio_offset = 0; uiop->uio_resid = tlen; @@ -6182,7 +6386,11 @@ nfsvno_getxattr(struct vnode *vp, char *name, uint32_t tlen = NFSM_RNDUP(len); if (alen != tlen) printf("nfsvno_getxattr: weird size read\n"); - nfsrv_adj(m, alen - tlen, tlen - len); + if (tlen == 0) { + m_freem(m); + m = m2 = NULL; + } else if (alen != tlen || tlen != len) + m2 = nfsrv_adj(m, alen - tlen, tlen - len); } *lenp = len; *mpp = m; @@ -6203,7 +6411,8 @@ out: */ int nfsvno_setxattr(struct vnode *vp, char *name, int len, struct mbuf *m, - char *cp, struct ucred *cred, struct thread *p) + char *cp, int dextpg, int dextpgsiz, struct ucred *cred, + struct thread *p) { struct iovec *iv; struct uio uio, *uiop = &uio; @@ -6222,7 +6431,11 @@ nfsvno_setxattr(struct vnode *vp, char *name, int len, uiop->uio_td = p; uiop->uio_offset = 0; uiop->uio_resid = len; - error = nfsrv_createiovecw(len, m, cp, &iv, &cnt); + if ((m->m_flags & (M_EXT | M_NOMAP)) == (M_EXT | M_NOMAP)) + error = nfsrv_createiovecw_extpgs(len, m, cp, dextpg, + dextpgsiz, &iv, &cnt); + else + error = nfsrv_createiovecw(len, m, cp, &iv, &cnt); uiop->uio_iov = iv; uiop->uio_iovcnt = cnt; if (error == 0) { Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c Mon Feb 17 20:35:25 2020 (r358050) +++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c Mon Feb 17 20:58:33 2020 (r358051) @@ -68,6 +68,7 @@ extern u_long sb_max_adj; extern int nfsrv_pnfsatime; extern int nfsrv_maxpnfsmirror; extern int nfs_maxcopyrange; +extern bool nfs_use_ext_pgs; #endif /* !APPLEKEXT */ static int nfs_async = 0; @@ -665,6 +666,8 @@ nfsrvd_readlink(struct nfsrv_descript *nd, __unused in int getret = 1, len; struct nfsvattr nva; struct thread *p = curthread; + struct mbuf_ext_pgs *pgs; + uint16_t off; if (nd->nd_repstat) { nfsrv_postopattr(nd, getret, &nva); @@ -676,9 +679,14 @@ nfsrvd_readlink(struct nfsrv_descript *nd, __unused in else nd->nd_repstat = EINVAL; } - if (!nd->nd_repstat) - nd->nd_repstat = nfsvno_readlink(vp, nd->nd_cred, p, - &mp, &mpend, &len); + if (nd->nd_repstat == 0) { + if ((nd->nd_flag & ND_EXTPG) != 0) + nd->nd_repstat = nfsvno_readlink(vp, nd->nd_cred, + nd->nd_maxextsiz, p, &mp, &mpend, &len); + else + nd->nd_repstat = nfsvno_readlink(vp, nd->nd_cred, + 0, p, &mp, &mpend, &len); + } if (nd->nd_flag & ND_NFSV3) getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); vput(vp); @@ -688,9 +696,21 @@ nfsrvd_readlink(struct nfsrv_descript *nd, __unused in goto out; NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED); *tl = txdr_unsigned(len); - mbuf_setnext(nd->nd_mb, mp); - nd->nd_mb = mpend; - nd->nd_bpos = NFSMTOD(mpend, caddr_t) + mbuf_len(mpend); + if (mp != NULL) { + nd->nd_mb->m_next = mp; + nd->nd_mb = mpend; + if ((mpend->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) { + pgs = mpend->m_ext.ext_pgs; + nd->nd_bextpg = pgs->npgs - 1; + nd->nd_bpos = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[nd->nd_bextpg]); + off = (nd->nd_bextpg == 0) ? pgs->first_pg_off : 0; + nd->nd_bpos += off + pgs->last_pg_len; + nd->nd_bextpgsiz = PAGE_SIZE - pgs->last_pg_len - off; + } else + nd->nd_bpos = mtod(mpend, char *) + mpend->m_len; + } out: NFSEXITCODE2(0, nd); @@ -714,6 +734,8 @@ nfsrvd_read(struct nfsrv_descript *nd, __unused int is nfsv4stateid_t stateid; nfsquad_t clientid; struct thread *p = curthread; + struct mbuf_ext_pgs *pgs; + uint16_t poff; if (nd->nd_repstat) { nfsrv_postopattr(nd, getret, &nva); @@ -835,8 +857,18 @@ nfsrvd_read(struct nfsrv_descript *nd, __unused int is cnt = reqlen; m3 = NULL; if (cnt > 0) { - nd->nd_repstat = nfsvno_read(vp, off, cnt, nd->nd_cred, p, - &m3, &m2); + /* + * If the cnt is larger than MCLBYTES, use ext_pgs if + * possible. + * Always use ext_pgs if ND_EXTPG is set. + */ + if ((nd->nd_flag & ND_EXTPG) != 0 || (PMAP_HAS_DMAP != 0 && + ((nd->nd_flag & ND_TLS) != 0 || nfs_use_ext_pgs))) + nd->nd_repstat = nfsvno_read(vp, off, cnt, nd->nd_cred, + nd->nd_maxextsiz, p, &m3, &m2); + else + nd->nd_repstat = nfsvno_read(vp, off, cnt, nd->nd_cred, + 0, p, &m3, &m2); if (!(nd->nd_flag & ND_NFSV4)) { getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); if (!nd->nd_repstat) @@ -869,9 +901,20 @@ nfsrvd_read(struct nfsrv_descript *nd, __unused int is } *tl = txdr_unsigned(cnt); if (m3) { - mbuf_setnext(nd->nd_mb, m3); + nd->nd_mb->m_next = m3; nd->nd_mb = m2; - nd->nd_bpos = NFSMTOD(m2, caddr_t) + mbuf_len(m2); + if ((m2->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) { + nd->nd_flag |= ND_EXTPG; + pgs = m2->m_ext.ext_pgs; + nd->nd_bextpg = pgs->npgs - 1; + nd->nd_bpos = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[nd->nd_bextpg]); + poff = (nd->nd_bextpg == 0) ? pgs->first_pg_off : 0; + nd->nd_bpos += poff + pgs->last_pg_len; + nd->nd_bextpgsiz = PAGE_SIZE - pgs->last_pg_len - poff; + } else + nd->nd_bpos = mtod(m2, char *) + m2->m_len; } out: @@ -1014,7 +1057,8 @@ nfsrvd_write(struct nfsrv_descript *nd, __unused int i */ if (retlen > 0) { nd->nd_repstat = nfsvno_write(vp, off, retlen, &stable, - nd->nd_md, nd->nd_dpos, nd->nd_cred, p); + nd->nd_md, nd->nd_dpos, nd->nd_dextpg, nd->nd_dextpgsiz, + nd->nd_cred, p); error = nfsm_advance(nd, NFSM_RNDUP(retlen), -1); if (error) goto nfsmout; @@ -5509,6 +5553,8 @@ nfsrvd_getxattr(struct nfsrv_descript *nd, __unused in int error, len; char *name; struct thread *p = curthread; + struct mbuf_ext_pgs *pgs; + uint16_t off; error = 0; if (nfs_rootfhset == 0 || nfsd_checkrootexp(nd) != 0) { @@ -5528,8 +5574,9 @@ nfsrvd_getxattr(struct nfsrv_descript *nd, __unused in name = malloc(len + 1, M_TEMP, M_WAITOK); nd->nd_repstat = nfsrv_mtostr(nd, name, len); if (nd->nd_repstat == 0) - nd->nd_repstat = nfsvno_getxattr(vp, name, nd->nd_maxresp, - nd->nd_cred, p, &mp, &mpend, &len); + nd->nd_repstat = nfsvno_getxattr(vp, name, + nd->nd_maxresp, nd->nd_cred, nd->nd_flag, + nd->nd_maxextsiz, p, &mp, &mpend, &len); if (nd->nd_repstat == ENOATTR) nd->nd_repstat = NFSERR_NOXATTR; else if (nd->nd_repstat == EOPNOTSUPP) @@ -5537,9 +5584,22 @@ nfsrvd_getxattr(struct nfsrv_descript *nd, __unused in if (nd->nd_repstat == 0) { NFSM_BUILD(tl, uint32_t *, NFSX_UNSIGNED); *tl = txdr_unsigned(len); - mbuf_setnext(nd->nd_mb, mp); - nd->nd_mb = mpend; - nd->nd_bpos = NFSMTOD(mpend, caddr_t) + mbuf_len(mpend); + if (mp != NULL) { + nd->nd_mb->m_next = mp; + nd->nd_mb = mpend; + if ((mpend->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) { + nd->nd_flag |= ND_EXTPG; + pgs = mpend->m_ext.ext_pgs; + nd->nd_bextpg = pgs->npgs - 1; + nd->nd_bpos = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[nd->nd_bextpg]); + off = (nd->nd_bextpg == 0) ? pgs->first_pg_off : 0; + nd->nd_bpos += off + pgs->last_pg_len; + nd->nd_bextpgsiz = PAGE_SIZE - pgs->last_pg_len - off; + } else + nd->nd_bpos = mtod(mpend, char *) + mpend->m_len; + } } free(name, M_TEMP); @@ -5621,7 +5681,8 @@ nfsrvd_setxattr(struct nfsrv_descript *nd, __unused in nd->nd_repstat = nfsvno_getattr(vp, &ova, nd, p, 1, &attrbits); if (nd->nd_repstat == 0) { nd->nd_repstat = nfsvno_setxattr(vp, name, len, nd->nd_md, - nd->nd_dpos, nd->nd_cred, p); + nd->nd_dpos, nd->nd_dextpg, nd->nd_dextpgsiz, nd->nd_cred, + p); if (nd->nd_repstat == ENXIO) nd->nd_repstat = NFSERR_XATTR2BIG; } Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdsubs.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdsubs.c Mon Feb 17 20:35:25 2020 (r358050) +++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdsubs.c Mon Feb 17 20:58:33 2020 (r358051) @@ -1270,62 +1270,96 @@ static short *nfsrv_v4errmap[] = { }; /* - * A fiddled version of m_adj() that ensures null fill to a long - * boundary and only trims off the back end + * Trim tlen bytes off the end of the mbuf list and then ensure + * the end of the last mbuf is nul filled to a long boundary, + * as indicated by the value of "nul". + * Return the last mbuf in the updated list and free and mbufs + * that follow it in the original list. + * This is somewhat different than the old nfsrv_adj() with + * support for ext_pgs mbufs. It frees the remaining mbufs + * instead of setting them 0 length, since lists of ext_pgs + * mbufs are all expected to be non-empty. */ -APPLESTATIC void -nfsrv_adj(mbuf_t mp, int len, int nul) +struct mbuf * +nfsrv_adj(struct mbuf *mp, int len, int nul) { - mbuf_t m; - int count, i; + struct mbuf *m, *m2; + struct mbuf_ext_pgs *pgs; + vm_page_t pg; + int i, lastlen, pgno, plen, tlen, trim; + uint16_t off; char *cp; /* - * Trim from tail. Scan the mbuf chain, - * calculating its length and finding the last mbuf. - * If the adjustment only affects this mbuf, then just - * adjust and return. Otherwise, rescan and truncate - * after the remaining size. + * Find the last mbuf after adjustment and + * how much it needs to be adjusted by. */ - count = 0; + tlen = 0; m = mp; for (;;) { - count += mbuf_len(m); - if (mbuf_next(m) == NULL) + tlen += m->m_len; + if (m->m_next == NULL) break; - m = mbuf_next(m); + m = m->m_next; } - if (mbuf_len(m) > len) { - mbuf_setlen(m, mbuf_len(m) - len); - if (nul > 0) { - cp = NFSMTOD(m, caddr_t) + mbuf_len(m) - nul; - for (i = 0; i < nul; i++) - *cp++ = '\0'; + + /* m is now the last mbuf and tlen the total length. */ + if (len >= m->m_len) { + /* Need to trim away the last mbuf(s). */ + i = tlen - len; + m = mp; + for (;;) { + if (m->m_len >= i) + break; + i -= m->m_len; + m = m->m_next; } - return; - } - count -= len; - if (count < 0) - count = 0; - /* - * Correct length for chain is "count". - * Find the mbuf with last data, adjust its length, - * and toss data from remaining mbufs on chain. - */ - for (m = mp; m; m = mbuf_next(m)) { - if (mbuf_len(m) >= count) { - mbuf_setlen(m, count); - if (nul > 0) { - cp = NFSMTOD(m, caddr_t) + mbuf_len(m) - nul; - for (i = 0; i < nul; i++) - *cp++ = '\0'; + lastlen = i; + } else + lastlen = m->m_len - len; + + /* Adjust the last mbuf. */ + if ((m->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) { + pgs = m->m_ext.ext_pgs; + pgno = pgs->npgs - 1; + off = (pgno == 0) ? pgs->first_pg_off : 0; + plen = mbuf_ext_pg_len(pgs, pgno, off); + if (m->m_len > lastlen) { + /* Trim this mbuf. */ + trim = m->m_len - lastlen; + while (trim >= plen) { + /* Free page. */ + pg = PHYS_TO_VM_PAGE(pgs->pa[pgno]); + vm_page_unwire_noq(pg); + vm_page_free(pg); + trim -= plen; + pgs->npgs--; + pgno--; + off = (pgno == 0) ? pgs->first_pg_off : 0; + plen = mbuf_ext_pg_len(pgs, pgno, off); } - break; + plen -= trim; + pgs->last_pg_len = plen; + m->m_len = lastlen; } - count -= mbuf_len(m); + cp = (char *)(void *)PHYS_TO_DMAP(pgs->pa[pgno]); + cp += off + plen - nul; + } else { + m->m_len = lastlen; + cp = mtod(m, char *) + m->m_len - nul; } - for (m = mbuf_next(m); m; m = mbuf_next(m)) - mbuf_setlen(m, 0); + + /* Write the nul bytes. */ + for (i = 0; i < nul; i++) + *cp++ = '\0'; + + /* Free up any mbufs past "m". */ + m2 = m->m_next; + m->m_next = NULL; + if (m2 != NULL) + m_freem(m2); + return (m); } /* @@ -1837,8 +1871,9 @@ APPLESTATIC int nfsrv_parsename(struct nfsrv_descript *nd, char *bufp, u_long *hashp, NFSPATHLEN_T *outlenp) { + struct mbuf_ext_pgs *pgs; + vm_page_t pg; char *fromcp, *tocp, val = '\0'; - mbuf_t md; int i; int rem, len, error = 0, pubtype = 0, outlen = 0, percent = 0; char digit; @@ -1853,177 +1888,194 @@ nfsrv_parsename(struct nfsrv_descript *nd, char *bufp, * Otherwise, get the component name. */ if ((nd->nd_flag & ND_NFSV4) && nd->nd_procnum == NFSV4OP_LOOKUPP) { - *tocp++ = '.'; - hash += ((u_char)'.'); - *tocp++ = '.'; - hash += ((u_char)'.'); - outlen = 2; + *tocp++ = '.'; + hash += ((u_char)'.'); + *tocp++ = '.'; + hash += ((u_char)'.'); + outlen = 2; } else { - /* - * First, get the name length. - */ - NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); - len = fxdr_unsigned(int, *tl); - if (len > NFS_MAXNAMLEN) { - nd->nd_repstat = NFSERR_NAMETOL; - error = 0; - goto nfsmout; - } else if (len <= 0) { - nd->nd_repstat = NFSERR_INVAL; - error = 0; - goto nfsmout; - } - - /* - * Now, copy the component name into the buffer. - */ - fromcp = nd->nd_dpos; - md = nd->nd_md; - rem = NFSMTOD(md, caddr_t) + mbuf_len(md) - fromcp; - for (i = 0; i < len; i++) { - while (rem == 0) { - md = mbuf_next(md); - if (md == NULL) { - error = EBADRPC; - goto nfsmout; - } - fromcp = NFSMTOD(md, caddr_t); - rem = mbuf_len(md); - } - if (*fromcp == '\0') { - nd->nd_repstat = EACCES; + /* + * First, get the name length. + */ + NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); + len = fxdr_unsigned(int, *tl); + if (len > NFS_MAXNAMLEN) { + nd->nd_repstat = NFSERR_NAMETOL; error = 0; goto nfsmout; + } else if (len <= 0) { + nd->nd_repstat = NFSERR_INVAL; + error = 0; + goto nfsmout; } + /* - * For lookups on the public filehandle, do some special - * processing on the name. (The public file handle is the - * root of the public file system for this server.) + * Now, copy the component name into the buffer. */ - if (nd->nd_flag & ND_PUBLOOKUP) { - /* - * If the first char is ASCII, it is a canonical - * path, otherwise it is a native path. (RFC2054 - * doesn't actually state what it is if the first - * char isn't ASCII or 0x80, so I assume native.) - * pubtype == 1 -> native path - * pubtype == 2 -> canonical path - */ - if (i == 0) { - if (*fromcp & 0x80) { - /* - * Since RFC2054 doesn't indicate - * that a native path of just 0x80 - * isn't allowed, I'll replace the - * 0x80 with '/' instead of just - * throwing it away. - */ - *fromcp = '/'; - pubtype = 1; + fromcp = nd->nd_dpos; + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP)) + rem = nd->nd_dextpgsiz; + else + rem = mtod(nd->nd_md, char *) + nd->nd_md->m_len - + fromcp; + for (i = 0; i < len; i++) { + while (rem == 0) { + if ((nd->nd_md->m_flags & (M_EXT | M_NOMAP)) == + (M_EXT | M_NOMAP) && nd->nd_dextpg < + nd->nd_md->m_ext.ext_pgs->npgs - 1) { + pgs = nd->nd_md->m_ext.ext_pgs; + pg = PHYS_TO_VM_PAGE( + pgs->pa[nd->nd_dextpg]); + vm_page_unwire_noq(pg); + vm_page_free(pg); + for (i = nd->nd_bextpg; + i < pgs->npgs - 1; i++) + pgs->pa[i] = pgs->pa[i + 1]; + pgs->npgs--; + if (nd->nd_dextpg == 0) + pgs->first_pg_off = 0; + fromcp = nd->nd_dpos = (char *)(void *) + PHYS_TO_DMAP(pgs->pa[nd->nd_dextpg]); + rem = nd->nd_dextpgsiz = + mbuf_ext_pg_len(pgs, nd->nd_dextpg, 0); } else { - pubtype = 2; + if (!nfsm_shiftnext(nd, &rem)) { + error = EBADRPC; + goto nfsmout; + } + fromcp = nd->nd_dpos; } } - /* *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Mon Feb 17 21:02:30 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E40CE247148 for ; Mon, 17 Feb 2020 21:02:30 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LxJQ5qKhz3LTl; Mon, 17 Feb 2020 21:02:30 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BE38FD2DB; Mon, 17 Feb 2020 21:02:30 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HL2U3O002480; Mon, 17 Feb 2020 21:02:30 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HL2UGH002479; Mon, 17 Feb 2020 21:02:30 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172102.01HL2UGH002479@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 21:02:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358052 - projects/nfs-over-tls/sys/fs/nfs X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/fs/nfs X-SVN-Commit-Revision: 358052 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 21:02:31 -0000 Author: rmacklem Date: Mon Feb 17 21:02:30 2020 New Revision: 358052 URL: https://svnweb.freebsd.org/changeset/base/358052 Log: Get rid of the extra argument to NFSVOPUNLOCK(). Modified: projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c Modified: projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c Mon Feb 17 20:58:33 2020 (r358051) +++ projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c Mon Feb 17 21:02:30 2020 (r358052) @@ -2599,7 +2599,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount if (error == 0) error = VOP_GETACL(vp, ACL_TYPE_NFS4, naclp, cred, p); - NFSVOPUNLOCK(vp, 0); + NFSVOPUNLOCK(vp); } else error = NFSERR_PERM; if (error != 0) { @@ -2619,7 +2619,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount if (NFSVOPLOCK(vp, LK_SHARED) == 0) { error = VOP_GETEXTATTR(vp, EXTATTR_NAMESPACE_USER, "xxx", NULL, &atsiz, cred, p); - NFSVOPUNLOCK(vp, 0); + NFSVOPUNLOCK(vp); if (error != EOPNOTSUPP) xattrsupp = true; } From owner-svn-src-projects@freebsd.org Mon Feb 17 21:10:33 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8D09A247319 for ; Mon, 17 Feb 2020 21:10:33 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LxTj2y6hz3whK; Mon, 17 Feb 2020 21:10:33 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 27B3DD2ED; Mon, 17 Feb 2020 21:10:33 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HLAXUR003013; Mon, 17 Feb 2020 21:10:33 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HLAXZY003012; Mon, 17 Feb 2020 21:10:33 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172110.01HLAXZY003012@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 21:10:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358053 - projects/nfs-over-tls/sys/fs/nfsclient X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/fs/nfsclient X-SVN-Commit-Revision: 358053 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 21:10:33 -0000 Author: rmacklem Date: Mon Feb 17 21:10:32 2020 New Revision: 358053 URL: https://svnweb.freebsd.org/changeset/base/358053 Log: Update nfs_clrpcops.c to handle ext_pgs mbufs, including the additional argument to nfscl_reqstart() to tell it if it should build ext_pgs mbufs. This completes most of the conversion to support of ext_pgs mbufs, but there are still a couple of areas to fix. 1 - The code that the MDS uses to do a proxy to a DS for a pNFS server. 2 - The krpc code on the receive side. (The NFS code now handles the ext_pgs mbufs, but they are being created by copying the regular mbuf list when the NFS code gets it from the krpc.) The krpc still needs to be fixed so it can handle a list of ext_pgs mbufs handed to it by soreceive(). Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfs_clrpcops.c Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfs_clrpcops.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsclient/nfs_clrpcops.c Mon Feb 17 21:02:30 2020 (r358052) +++ projects/nfs-over-tls/sys/fs/nfsclient/nfs_clrpcops.c Mon Feb 17 21:10:32 2020 (r358053) @@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$"); #ifndef APPLEKEXT #include "opt_inet6.h" +#include "opt_kern_tls.h" #include #include @@ -76,6 +77,7 @@ extern int nfscl_debuglevel; extern int nfs_pnfsiothreads; extern u_long sb_max_adj; extern int nfs_maxcopyrange; +extern bool nfs_use_ext_pgs; NFSCLSTATEMUTEX; int nfstest_outofseq = 0; int nfscl_assumeposixlocks = 1; @@ -501,7 +503,8 @@ nfsrpc_openrpc(struct nfsmount *nmp, vnode_t vp, u_int dp = *dpp; *dpp = NULL; - nfscl_reqstart(nd, NFSPROC_OPEN, nmp, nfhp, fhlen, NULL, NULL, 0, 0); + nfscl_reqstart(nd, NFSPROC_OPEN, nmp, nfhp, fhlen, NULL, NULL, 0, 0, + false); NFSM_BUILD(tl, u_int32_t *, 5 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid); *tl++ = txdr_unsigned(mode & NFSV4OPEN_ACCESSBOTH); @@ -857,7 +860,7 @@ nfsrpc_closerpc(struct nfsrv_descript *nd, struct nfsm int error; nfscl_reqstart(nd, NFSPROC_CLOSE, nmp, op->nfso_fh, - op->nfso_fhlen, NULL, NULL, 0, 0); + op->nfso_fhlen, NULL, NULL, 0, 0, false); NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID); *tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid); if (NFSHASNFSV4N(nmp)) @@ -900,7 +903,7 @@ nfsrpc_openconfirm(vnode_t vp, u_int8_t *nfhp, int fhl if (NFSHASNFSV4N(nmp)) return (0); /* No confirmation for NFSv4.1. */ nfscl_reqstart(nd, NFSPROC_OPENCONFIRM, nmp, nfhp, fhlen, NULL, NULL, - 0, 0); + 0, 0, false); NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID); *tl++ = op->nfso_stateid.seqid; *tl++ = op->nfso_stateid.other[0]; @@ -1014,7 +1017,8 @@ nfsrpc_setclient(struct nfsmount *nmp, struct nfsclcli tsep = NFSMNT_MDSSESSION(nmp); NFSUNLOCKMNT(nmp); - nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL, NULL, 0, 0); + nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL, NULL, 0, 0, + false); NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(nfsboottime.tv_sec); *tl = txdr_unsigned(clp->nfsc_rev); @@ -1084,7 +1088,7 @@ nfsrpc_setclient(struct nfsmount *nmp, struct nfsclcli * and confirm it. */ nfscl_reqstart(nd, NFSPROC_SETCLIENTIDCFRM, nmp, NULL, 0, NULL, - NULL, 0, 0); + NULL, 0, 0, false); NFSM_BUILD(tl, u_int32_t *, 4 * NFSX_UNSIGNED); *tl++ = tsep->nfsess_clientid.lval[0]; *tl++ = tsep->nfsess_clientid.lval[1]; @@ -1099,7 +1103,7 @@ nfsrpc_setclient(struct nfsmount *nmp, struct nfsclcli nd->nd_mrep = NULL; if (nd->nd_repstat == 0) { nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, nmp->nm_fh, - nmp->nm_fhsize, NULL, NULL, 0, 0); + nmp->nm_fhsize, NULL, NULL, 0, 0, false); NFSZERO_ATTRBIT(&attrbits); NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_LEASETIME); (void) nfsrv_putattrbit(nd, &attrbits); @@ -1166,7 +1170,8 @@ nfsrpc_getattrnovp(struct nfsmount *nmp, u_int8_t *fhp int error, vers = NFS_VER2; nfsattrbit_t attrbits; - nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, fhp, fhlen, NULL, NULL, 0, 0); + nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, fhp, fhlen, NULL, NULL, 0, 0, + false); if (nd->nd_flag & ND_NFSV4) { vers = NFS_VER4; NFSGETATTR_ATTRBIT(&attrbits); @@ -1734,8 +1739,13 @@ nfsrpc_writerpc(vnode_t vp, struct uio *uiop, int *iom struct nfsrv_descript *nd = &nfsd; nfsattrbit_t attrbits; off_t tmp_off; + bool use_ext; KASSERT(uiop->uio_iovcnt == 1, ("nfs: writerpc iovcnt > 1")); + use_ext = false; + if ((NFSHASTLS(nmp) || nfs_use_ext_pgs) && + PMAP_HAS_DMAP != 0) + use_ext = true; *attrflagp = 0; tsiz = uio_uio_resid(uiop); tmp_off = uiop->uio_offset + tsiz; @@ -1751,7 +1761,8 @@ nfsrpc_writerpc(vnode_t vp, struct uio *uiop, int *iom while (tsiz > 0) { *attrflagp = 0; len = (tsiz > wsize) ? wsize : tsiz; - NFSCL_REQSTART(nd, NFSPROC_WRITE, vp); + nfscl_reqstart(nd, NFSPROC_WRITE, nmp, np->n_fhp->nfh_fh, + np->n_fhp->nfh_len, NULL, NULL, 0, 0, use_ext); if (nd->nd_flag & ND_NFSV4) { nfsm_stateidtom(nd, stateidp, NFSSTATEID_PUTSTATEID); NFSM_BUILD(tl, u_int32_t *, NFSX_HYPER+2*NFSX_UNSIGNED); @@ -4089,7 +4100,7 @@ nfsrpc_locku(struct nfsrv_descript *nd, struct nfsmoun int error; nfscl_reqstart(nd, NFSPROC_LOCKU, nmp, lp->nfsl_open->nfso_fh, - lp->nfsl_open->nfso_fhlen, NULL, NULL, 0, 0); + lp->nfsl_open->nfso_fhlen, NULL, NULL, 0, 0, false); NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID + 6 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(type); *tl = txdr_unsigned(lp->nfsl_seqid); @@ -4141,7 +4152,8 @@ nfsrpc_lock(struct nfsrv_descript *nd, struct nfsmount uint8_t own[NFSV4CL_LOCKNAMELEN + NFSX_V4FHMAX]; struct nfsclsession *tsep; - nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL, NULL, 0, 0); + nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL, NULL, 0, 0, + false); NFSM_BUILD(tl, u_int32_t *, 7 * NFSX_UNSIGNED); if (type == F_RDLCK) *tl++ = txdr_unsigned(NFSV4LOCKT_READ); @@ -4415,10 +4427,10 @@ nfsrpc_renew(struct nfsclclient *clp, struct nfsclds * return (0); if (dsp == NULL) nfscl_reqstart(nd, NFSPROC_RENEW, nmp, NULL, 0, NULL, NULL, 0, - 0); + 0, false); else nfscl_reqstart(nd, NFSPROC_RENEW, nmp, NULL, 0, NULL, - &dsp->nfsclds_sess, 0, 0); + &dsp->nfsclds_sess, 0, 0, false); if (!NFSHASNFSV4N(nmp)) { /* NFSv4.1 just uses a Sequence Op and not a Renew. */ NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); @@ -4465,11 +4477,11 @@ nfsrpc_rellockown(struct nfsmount *nmp, struct nfscllo if (NFSHASNFSV4N(nmp)) { /* For NFSv4.1, do a FreeStateID. */ nfscl_reqstart(nd, NFSPROC_FREESTATEID, nmp, NULL, 0, NULL, - NULL, 0, 0); + NULL, 0, 0, false); nfsm_stateidtom(nd, &lp->nfsl_stateid, NFSSTATEID_PUTSTATEID); } else { nfscl_reqstart(nd, NFSPROC_RELEASELCKOWN, nmp, NULL, 0, NULL, - NULL, 0, 0); + NULL, 0, 0, false); NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); tsep = nfsmnt_mdssession(nmp); *tl++ = tsep->nfsess_clientid.lval[0]; @@ -4503,7 +4515,7 @@ nfsrpc_getdirpath(struct nfsmount *nmp, u_char *dirpat u_int32_t *opcntp; nfscl_reqstart(nd, NFSPROC_PUTROOTFH, nmp, NULL, 0, &opcntp, NULL, 0, - 0); + 0, false); cp = dirpath; cnt = 0; do { @@ -4570,7 +4582,7 @@ nfsrpc_delegreturn(struct nfscldeleg *dp, struct ucred int error; nfscl_reqstart(nd, NFSPROC_DELEGRETURN, nmp, dp->nfsdl_fh, - dp->nfsdl_fhlen, NULL, NULL, 0, 0); + dp->nfsdl_fhlen, NULL, NULL, 0, 0, false); NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID); if (NFSHASNFSV4N(nmp)) *tl++ = 0; @@ -4683,7 +4695,7 @@ nfsrpc_exchangeid(struct nfsmount *nmp, struct nfsclcl if (minorvers == 0) minorvers = nmp->nm_minorvers; nfscl_reqstart(nd, NFSPROC_EXCHANGEID, nmp, NULL, 0, NULL, NULL, - NFS_VER4, minorvers); + NFS_VER4, minorvers, false); NFSM_BUILD(tl, uint32_t *, 2 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(nfsboottime.tv_sec); /* Client owner */ *tl = txdr_unsigned(clp->nfsc_rev); @@ -4779,7 +4791,7 @@ nfsrpc_createsession(struct nfsmount *nmp, struct nfsc else minorvers = NFSV41_MINORVERSION; nfscl_reqstart(nd, NFSPROC_CREATESESSION, nmp, NULL, 0, NULL, NULL, - NFS_VER4, minorvers); + NFS_VER4, minorvers, false); NFSM_BUILD(tl, uint32_t *, 4 * NFSX_UNSIGNED); *tl++ = sep->nfsess_clientid.lval[0]; *tl++ = sep->nfsess_clientid.lval[1]; @@ -4906,7 +4918,7 @@ nfsrpc_destroysession(struct nfsmount *nmp, struct nfs struct nfsclsession *tsep; nfscl_reqstart(nd, NFSPROC_DESTROYSESSION, nmp, NULL, 0, NULL, NULL, 0, - 0); + 0, false); NFSM_BUILD(tl, uint32_t *, NFSX_V4SESSIONID); tsep = nfsmnt_mdssession(nmp); bcopy(tsep->nfsess_sessionid, tl, NFSX_V4SESSIONID); @@ -4934,7 +4946,7 @@ nfsrpc_destroyclient(struct nfsmount *nmp, struct nfsc struct nfsclsession *tsep; nfscl_reqstart(nd, NFSPROC_DESTROYCLIENT, nmp, NULL, 0, NULL, NULL, 0, - 0); + 0, false); NFSM_BUILD(tl, uint32_t *, 2 * NFSX_UNSIGNED); tsep = nfsmnt_mdssession(nmp); *tl++ = tsep->nfsess_clientid.lval[0]; @@ -4963,7 +4975,7 @@ nfsrpc_layoutget(struct nfsmount *nmp, uint8_t *fhp, i int error; nfscl_reqstart(nd, NFSPROC_LAYOUTGET, nmp, fhp, fhlen, NULL, NULL, 0, - 0); + 0, false); nfsrv_setuplayoutget(nd, iomode, offset, len, minlen, stateidp, layouttype, layoutlen, 0); nd->nd_flag |= ND_USEGSSNAME; @@ -5007,7 +5019,7 @@ nfsrpc_getdeviceinfo(struct nfsmount *nmp, uint8_t *de ndi = NULL; gotdspp = NULL; nfscl_reqstart(nd, NFSPROC_GETDEVICEINFO, nmp, NULL, 0, NULL, NULL, 0, - 0); + 0, false); NFSM_BUILD(tl, uint32_t *, NFSX_V4DEVICEID + 3 * NFSX_UNSIGNED); NFSBCOPY(deviceid, tl, NFSX_V4DEVICEID); tl += (NFSX_V4DEVICEID / NFSX_UNSIGNED); @@ -5228,7 +5240,7 @@ nfsrpc_layoutcommit(struct nfsmount *nmp, uint8_t *fh, int error; nfscl_reqstart(nd, NFSPROC_LAYOUTCOMMIT, nmp, fh, fhlen, NULL, NULL, - 0, 0); + 0, 0, false); NFSM_BUILD(tl, uint32_t *, 5 * NFSX_UNSIGNED + 3 * NFSX_HYPER + NFSX_STATEID); txdr_hyper(off, tl); @@ -5279,7 +5291,7 @@ nfsrpc_layoutreturn(struct nfsmount *nmp, uint8_t *fh, int error; nfscl_reqstart(nd, NFSPROC_LAYOUTRETURN, nmp, fh, fhlen, NULL, NULL, - 0, 0); + 0, 0, false); NFSM_BUILD(tl, uint32_t *, 4 * NFSX_UNSIGNED); if (reclaim != 0) *tl++ = newnfs_true; @@ -5636,7 +5648,7 @@ nfsrpc_reclaimcomplete(struct nfsmount *nmp, struct uc int error; nfscl_reqstart(nd, NFSPROC_RECLAIMCOMPL, nmp, NULL, 0, NULL, NULL, 0, - 0); + 0, false); NFSM_BUILD(tl, uint32_t *, NFSX_UNSIGNED); *tl = newnfs_false; nd->nd_flag |= ND_USEGSSNAME; @@ -5784,7 +5796,7 @@ nfscl_doiods(vnode_t vp, struct uio *uiop, int *iomode iovbase = uiop->uio_iov->iov_base; iovlen = uiop->uio_iov->iov_len; - m = nfsm_uiombuflist(uiop, len, + m = nfsm_uiombuflist(0, 0, uiop, len, NULL, NULL); } tdrpc = drpc = malloc(sizeof(*drpc) * @@ -6227,7 +6239,8 @@ nfsrpc_readds(vnode_t vp, struct uio *uiop, nfsv4state nd->nd_mrep = NULL; if (vers == 0 || vers == NFS_VER4) { nfscl_reqstart(nd, NFSPROC_READDS, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); vers = NFS_VER4; NFSCL_DEBUG(4, "nfsrpc_readds: vers4 minvers=%d\n", minorvers); if (flex != 0) @@ -6236,7 +6249,8 @@ nfsrpc_readds(vnode_t vp, struct uio *uiop, nfsv4state nfsm_stateidtom(nd, stateidp, NFSSTATEID_PUTSEQIDZERO); } else { nfscl_reqstart(nd, NFSPROC_READ, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); NFSCL_DEBUG(4, "nfsrpc_readds: vers3\n"); } NFSM_BUILD(tl, uint32_t *, NFSX_UNSIGNED * 3); @@ -6301,7 +6315,8 @@ nfsrpc_writeds(vnode_t vp, struct uio *uiop, int *iomo nd->nd_mrep = NULL; if (vers == 0 || vers == NFS_VER4) { nfscl_reqstart(nd, NFSPROC_WRITEDS, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); NFSCL_DEBUG(4, "nfsrpc_writeds: vers4 minvers=%d\n", minorvers); vers = NFS_VER4; if (flex != 0) @@ -6311,7 +6326,8 @@ nfsrpc_writeds(vnode_t vp, struct uio *uiop, int *iomo NFSM_BUILD(tl, uint32_t *, NFSX_HYPER + 2 * NFSX_UNSIGNED); } else { nfscl_reqstart(nd, NFSPROC_WRITE, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); NFSCL_DEBUG(4, "nfsrpc_writeds: vers3\n"); NFSM_BUILD(tl, uint32_t *, NFSX_HYPER + 3 * NFSX_UNSIGNED); } @@ -6429,7 +6445,8 @@ nfsrpc_writedsmir(vnode_t vp, int *iomode, int *must_c nd->nd_mrep = NULL; if (vers == 0 || vers == NFS_VER4) { nfscl_reqstart(nd, NFSPROC_WRITEDS, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); vers = NFS_VER4; NFSCL_DEBUG(4, "nfsrpc_writedsmir: vers4 minvers=%d\n", minorvers); @@ -6437,7 +6454,8 @@ nfsrpc_writedsmir(vnode_t vp, int *iomode, int *must_c NFSM_BUILD(tl, uint32_t *, NFSX_HYPER + 2 * NFSX_UNSIGNED); } else { nfscl_reqstart(nd, NFSPROC_WRITE, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); NFSCL_DEBUG(4, "nfsrpc_writedsmir: vers3\n"); NFSM_BUILD(tl, uint32_t *, NFSX_HYPER + 3 * NFSX_UNSIGNED); } @@ -6658,11 +6676,13 @@ nfsrpc_commitds(vnode_t vp, uint64_t offset, int cnt, nd->nd_mrep = NULL; if (vers == 0 || vers == NFS_VER4) { nfscl_reqstart(nd, NFSPROC_COMMITDS, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); vers = NFS_VER4; } else nfscl_reqstart(nd, NFSPROC_COMMIT, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); NFSCL_DEBUG(4, "nfsrpc_commitds: vers=%d minvers=%d\n", vers, minorvers); NFSM_BUILD(tl, uint32_t *, NFSX_HYPER + NFSX_UNSIGNED); @@ -6815,7 +6835,8 @@ nfsrpc_adviseds(vnode_t vp, uint64_t offset, int cnt, return (0); nd->nd_mrep = NULL; nfscl_reqstart(nd, NFSPROC_IOADVISEDS, nmp, fhp->nfh_fh, - fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers); + fhp->nfh_len, NULL, &dsp->nfsclds_sess, vers, minorvers, + false); vers = NFS_VER4; NFSCL_DEBUG(4, "nfsrpc_adviseds: vers=%d minvers=%d\n", vers, minorvers); @@ -7470,7 +7491,7 @@ nfsrpc_openlayoutrpc(struct nfsmount *nmp, vnode_t vp, *dpp = NULL; *laystatp = ENXIO; nfscl_reqstart(nd, NFSPROC_OPENLAYGET, nmp, nfhp, fhlen, NULL, NULL, - 0, 0); + 0, 0, false); NFSM_BUILD(tl, uint32_t *, 5 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid); *tl++ = txdr_unsigned(mode & NFSV4OPEN_ACCESSBOTH); @@ -8370,10 +8391,18 @@ nfsrpc_setextattr(vnode_t vp, const char *name, struct int error; struct nfsrv_descript nfsd; struct nfsrv_descript *nd = &nfsd; + struct nfsmount *nmp = VFSTONFS(vnode_mount(vp)); nfsattrbit_t attrbits; + bool use_ext; *attrflagp = 0; - NFSCL_REQSTART(nd, NFSPROC_SETEXTATTR, vp); + use_ext = false; + if (uiop->uio_resid > MCLBYTES && (NFSHASTLS(nmp) || + nfs_use_ext_pgs) && PMAP_HAS_DMAP != 0) + use_ext = true; + nfscl_reqstart(nd, NFSPROC_SETEXTATTR, nmp, + VTONFS(vp)->n_fhp->nfh_fh, VTONFS(vp)->n_fhp->nfh_len, NULL, + NULL, 0, 0, use_ext); if (uiop->uio_resid > nd->nd_maxreq) { /* nd_maxreq is set by NFSCL_REQSTART(). */ mbuf_freem(nd->nd_mreq); From owner-svn-src-projects@freebsd.org Mon Feb 17 21:15:27 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 51A6624763F for ; Mon, 17 Feb 2020 21:15:27 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48LxbM1Nltz41xY; Mon, 17 Feb 2020 21:15:27 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0CF76D4AC; Mon, 17 Feb 2020 21:15:27 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HLFQWd008716; Mon, 17 Feb 2020 21:15:26 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HLFQW5008715; Mon, 17 Feb 2020 21:15:26 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172115.01HLFQW5008715@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 21:15:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358054 - projects/nfs-over-tls/sys/fs/nfsclient X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/fs/nfsclient X-SVN-Commit-Revision: 358054 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 21:15:27 -0000 Author: rmacklem Date: Mon Feb 17 21:15:26 2020 New Revision: 358054 URL: https://svnweb.freebsd.org/changeset/base/358054 Log: Add a field for new mount options only done via nmount(2), since all the bits in nm_flags are used. Add a new flag for TLS mounts. Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfsmount.h Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfsmount.h ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsclient/nfsmount.h Mon Feb 17 21:10:32 2020 (r358053) +++ projects/nfs-over-tls/sys/fs/nfsclient/nfsmount.h Mon Feb 17 21:15:26 2020 (r358054) @@ -47,6 +47,7 @@ struct nfsmount { struct nfsmount_common nm_com; /* Common fields for nlm */ uint32_t nm_privflag; /* Private flags */ + uint32_t nm_newflag; /* New mount flags */ int nm_numgrps; /* Max. size of groupslist */ u_char nm_fh[NFSX_FHMAX]; /* File handle of root dir */ int nm_fhsize; /* Size of root file handle */ @@ -113,6 +114,9 @@ struct nfsmount { #define NFSMNTP_NOXATTR 0x00000080 #define NFSMNTP_NOADVISE 0x00000100 #define NFSMNTP_NOALLOCATE 0x00000200 + +/* New mount flags only used by the kernel via nmount(2). */ +#define NFSMNT_TLS 0x00000001 #define NFSMNT_DIRPATH(m) (&((m)->nm_name[(m)->nm_krbnamelen + 1])) #define NFSMNT_SRVKRBNAME(m) \ From owner-svn-src-projects@freebsd.org Mon Feb 17 21:29:06 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C90E0247922 for ; Mon, 17 Feb 2020 21:29:06 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48Lxv64CYBz4FQk; Mon, 17 Feb 2020 21:29:06 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8769BD694; Mon, 17 Feb 2020 21:29:06 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HLT6Dx015165; Mon, 17 Feb 2020 21:29:06 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HLT6DR015161; Mon, 17 Feb 2020 21:29:06 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172129.01HLT6DR015161@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 21:29:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358055 - projects/nfs-over-tls/sys/fs/nfsclient X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/fs/nfsclient X-SVN-Commit-Revision: 358055 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 21:29:06 -0000 Author: rmacklem Date: Mon Feb 17 21:29:05 2020 New Revision: 358055 URL: https://svnweb.freebsd.org/changeset/base/358055 Log: Update the last three NFS files for ext_pgs and TLS support. Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfs_clcomsubs.c projects/nfs-over-tls/sys/fs/nfsclient/nfs_clkrpc.c projects/nfs-over-tls/sys/fs/nfsclient/nfs_clvfsops.c Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfs_clcomsubs.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsclient/nfs_clcomsubs.c Mon Feb 17 21:15:26 2020 (r358054) +++ projects/nfs-over-tls/sys/fs/nfsclient/nfs_clcomsubs.c Mon Feb 17 21:29:05 2020 (r358055) @@ -64,7 +64,7 @@ nfsm_uiombuf(struct nfsrv_descript *nd, struct uio *ui struct mbuf *mp, *mp2; int xfer, left, mlen; int uiosiz, clflg, rem; - char *cp, *tcp; + char *mcp, *tcp; KASSERT(uiop->uio_iovcnt == 1, ("nfsm_uiotombuf: iovcnt != 1")); @@ -74,6 +74,7 @@ nfsm_uiombuf(struct nfsrv_descript *nd, struct uio *ui clflg = 0; rem = NFSM_RNDUP(siz) - siz; mp = mp2 = nd->nd_mb; + mcp = nd->nd_bpos; while (siz > 0) { left = uiop->uio_iov->iov_len; uiocp = uiop->uio_iov->iov_base; @@ -81,35 +82,42 @@ nfsm_uiombuf(struct nfsrv_descript *nd, struct uio *ui left = siz; uiosiz = left; while (left > 0) { - mlen = M_TRAILINGSPACE(mp); - if (mlen == 0) { - if (clflg) - NFSMCLGET(mp, M_WAITOK); - else - NFSMGET(mp); - mbuf_setlen(mp, 0); - mbuf_setnext(mp2, mp); - mp2 = mp; + if ((nd->nd_flag & ND_EXTPG) != 0) + mlen = nd->nd_bextpgsiz; + else mlen = M_TRAILINGSPACE(mp); + if (mlen == 0) { + if ((nd->nd_flag & ND_EXTPG) != 0) { + mp = nfsm_add_ext_pgs(mp, + nd->nd_maxextsiz, &nd->nd_bextpg); + mcp = (char *)(void *)PHYS_TO_DMAP( + mp->m_ext.ext_pgs->pa[nd->nd_bextpg]); + nd->nd_bextpgsiz = PAGE_SIZE; + } else { + if (clflg) + NFSMCLGET(mp, M_WAITOK); + else + NFSMGET(mp); + mp->m_len = 0; + mlen = M_TRAILINGSPACE(mp); + mcp = mtod(mp, char *); + mp2->m_next = mp; + mp2 = mp; + } } xfer = (left > mlen) ? mlen : left; -#ifdef notdef - /* Not Yet.. */ - if (uiop->uio_iov->iov_op != NULL) - (*(uiop->uio_iov->iov_op)) - (uiocp, NFSMTOD(mp, caddr_t) + mbuf_len(mp), - xfer); - else -#endif if (uiop->uio_segflg == UIO_SYSSPACE) - NFSBCOPY(uiocp, NFSMTOD(mp, caddr_t) + mbuf_len(mp), - xfer); + NFSBCOPY(uiocp, mcp, xfer); else - copyin(CAST_USER_ADDR_T(uiocp), NFSMTOD(mp, caddr_t) - + mbuf_len(mp), xfer); - mbuf_setlen(mp, mbuf_len(mp) + xfer); + copyin(uiocp, mcp, xfer); + mp->m_len += xfer; left -= xfer; uiocp += xfer; + mcp += xfer; + if ((nd->nd_flag & ND_EXTPG) != 0) { + nd->nd_bextpgsiz -= xfer; + mp->m_ext.ext_pgs->last_pg_len += xfer; + } uiop->uio_offset += xfer; uiop->uio_resid -= xfer; } @@ -120,18 +128,30 @@ nfsm_uiombuf(struct nfsrv_descript *nd, struct uio *ui siz -= uiosiz; } if (rem > 0) { - if (rem > M_TRAILINGSPACE(mp)) { + if ((nd->nd_flag & ND_EXTPG) == 0 && rem > + M_TRAILINGSPACE(mp)) { NFSMGET(mp); - mbuf_setlen(mp, 0); - mbuf_setnext(mp2, mp); + mp->m_len = 0; + mp2->m_next = mp; + mcp = mtod(mp, char *); + } else if ((nd->nd_flag & ND_EXTPG) != 0 && rem > + nd->nd_bextpgsiz) { + mp = nfsm_add_ext_pgs(mp, nd->nd_maxextsiz, + &nd->nd_bextpg); + mcp = (char *)(void *) + PHYS_TO_DMAP(mp->m_ext.ext_pgs->pa[nd->nd_bextpg]); + nd->nd_bextpgsiz = PAGE_SIZE; } - cp = NFSMTOD(mp, caddr_t) + mbuf_len(mp); for (left = 0; left < rem; left++) - *cp++ = '\0'; - mbuf_setlen(mp, mbuf_len(mp) + rem); - nd->nd_bpos = cp; + *mcp++ = '\0'; + mp->m_len += rem; + nd->nd_bpos = mcp; + if ((nd->nd_flag & ND_EXTPG) != 0) { + nd->nd_bextpgsiz -= rem; + mp->m_ext.ext_pgs->last_pg_len += rem; + } } else - nd->nd_bpos = NFSMTOD(mp, caddr_t) + mbuf_len(mp); + nd->nd_bpos = mcp; nd->nd_mb = mp; } @@ -141,13 +161,14 @@ nfsm_uiombuf(struct nfsrv_descript *nd, struct uio *ui * NOTE: can ony handle iovcnt == 1 */ struct mbuf * -nfsm_uiombuflist(struct uio *uiop, int siz, struct mbuf **mbp, char **cpp) +nfsm_uiombuflist(int flag, int maxextsiz, struct uio *uiop, int siz, + struct mbuf **mbp, char **cpp) { char *uiocp; struct mbuf *mp, *mp2, *firstmp; int xfer, left, mlen; - int uiosiz, clflg; - char *tcp; + int uiosiz, clflg, bextpg, bextpgsiz = 0; + char *mcp, *tcp; KASSERT(uiop->uio_iovcnt == 1, ("nfsm_uiotombuf: iovcnt != 1")); @@ -155,11 +176,21 @@ nfsm_uiombuflist(struct uio *uiop, int siz, struct mbu clflg = 1; else clflg = 0; - if (clflg != 0) - NFSMCLGET(mp, M_WAITOK); - else - NFSMGET(mp); - mbuf_setlen(mp, 0); + if ((flag & ND_EXTPG) != 0) { + mp = mb_alloc_ext_plus_pages(PAGE_SIZE, M_WAITOK, + false, mb_free_mext_pgs); + mcp = (char *)(void *) + PHYS_TO_DMAP(mp->m_ext.ext_pgs->pa[0]); + bextpgsiz = PAGE_SIZE; + bextpg = 0; + } else { + if (clflg != 0) + NFSMCLGET(mp, M_WAITOK); + else + NFSMGET(mp); + mp->m_len = 0; + mcp = mtod(mp, char *); + } firstmp = mp2 = mp; while (siz > 0) { left = uiop->uio_iov->iov_len; @@ -168,27 +199,42 @@ nfsm_uiombuflist(struct uio *uiop, int siz, struct mbu left = siz; uiosiz = left; while (left > 0) { - mlen = M_TRAILINGSPACE(mp); - if (mlen == 0) { - if (clflg) - NFSMCLGET(mp, M_WAITOK); - else - NFSMGET(mp); - mbuf_setlen(mp, 0); - mbuf_setnext(mp2, mp); - mp2 = mp; + if ((flag & ND_EXTPG) != 0) + mlen = bextpgsiz; + else mlen = M_TRAILINGSPACE(mp); + if (mlen == 0) { + if ((flag & ND_EXTPG) != 0) { + mp = nfsm_add_ext_pgs(mp, maxextsiz, + &bextpg); + mcp = (char *)(void *)PHYS_TO_DMAP( + mp->m_ext.ext_pgs->pa[bextpg]); + mlen = bextpgsiz = PAGE_SIZE; + } else { + if (clflg) + NFSMCLGET(mp, M_WAITOK); + else + NFSMGET(mp); + mp->m_len = 0; + mcp = mtod(mp, char *); + mlen = M_TRAILINGSPACE(mp); + mp2->m_next = mp; + mp2 = mp; + } } xfer = (left > mlen) ? mlen : left; if (uiop->uio_segflg == UIO_SYSSPACE) - NFSBCOPY(uiocp, NFSMTOD(mp, caddr_t) + - mbuf_len(mp), xfer); + NFSBCOPY(uiocp, mcp, xfer); else - copyin(uiocp, NFSMTOD(mp, caddr_t) + - mbuf_len(mp), xfer); - mbuf_setlen(mp, mbuf_len(mp) + xfer); + copyin(uiocp, mcp, xfer); + mp->m_len += xfer; left -= xfer; uiocp += xfer; + mcp += xfer; + if ((flag & ND_EXTPG) != 0) { + bextpgsiz -= xfer; + mp->m_ext.ext_pgs->last_pg_len += xfer; + } uiop->uio_offset += xfer; uiop->uio_resid -= xfer; } @@ -199,7 +245,7 @@ nfsm_uiombuflist(struct uio *uiop, int siz, struct mbu siz -= uiosiz; } if (cpp != NULL) - *cpp = NFSMTOD(mp, caddr_t) + mbuf_len(mp); + *cpp = mcp; if (mbp != NULL) *mbp = mp; return (firstmp); Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfs_clkrpc.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsclient/nfs_clkrpc.c Mon Feb 17 21:15:26 2020 (r358054) +++ projects/nfs-over-tls/sys/fs/nfsclient/nfs_clkrpc.c Mon Feb 17 21:29:05 2020 (r358055) @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$"); #include "opt_kgssapi.h" +#include "opt_kern_tls.h" #include @@ -54,6 +55,10 @@ static int nfs_cbproc(struct nfsrv_descript *, u_int32 extern u_long sb_max_adj; extern int nfs_numnfscbd; extern int nfscl_debuglevel; +extern bool nfs_use_ext_pgs; +#ifdef KERN_TLS +extern u_int ktls_maxlen; +#endif /* * NFS client system calls for handling callbacks. @@ -108,6 +113,15 @@ nfscb_program(struct svc_req *rqst, SVCXPRT *xprt) mac_cred_associate_nfsd(nd.nd_cred); #endif #endif + if ((xprt->xp_tls || nfs_use_ext_pgs) && PMAP_HAS_DMAP != 0) { + nd.nd_flag |= ND_EXTPG; + nd.nd_maxextsiz = 16384; +#ifdef KERN_TLS + if (xprt->xp_tls) + nd.nd_maxextsiz = min(TLS_MAX_MSG_SIZE_V10_2, + ktls_maxlen); +#endif + } cacherep = nfs_cbproc(&nd, rqst->rq_xid); } else { NFSMGET(nd.nd_mreq); Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfs_clvfsops.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsclient/nfs_clvfsops.c Mon Feb 17 21:15:26 2020 (r358054) +++ projects/nfs-over-tls/sys/fs/nfsclient/nfs_clvfsops.c Mon Feb 17 21:29:05 2020 (r358055) @@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$"); #include "opt_bootp.h" #include "opt_nfsroot.h" +#include "opt_kern_tls.h" #include #include @@ -116,7 +117,7 @@ static void nfs_decode_args(struct mount *mp, struct n static int mountnfs(struct nfs_args *, struct mount *, struct sockaddr *, char *, u_char *, int, u_char *, int, u_char *, int, struct vnode **, struct ucred *, - struct thread *, int, int, int); + struct thread *, int, int, int, uint32_t); static void nfs_getnlminfo(struct vnode *, uint8_t *, size_t *, struct sockaddr_storage *, int *, off_t *, struct timeval *); @@ -535,7 +536,7 @@ nfs_mountdiskless(char *path, nam = sodupsockaddr((struct sockaddr *)sin, M_WAITOK); if ((error = mountnfs(args, mp, nam, path, NULL, 0, dirpath, dirlen, NULL, 0, vpp, td->td_ucred, td, NFS_DEFAULT_NAMETIMEO, - NFS_DEFAULT_NEGNAMETIMEO, 0)) != 0) { + NFS_DEFAULT_NEGNAMETIMEO, 0, 0)) != 0) { printf("nfs_mountroot: mount %s on /: %d\n", path, error); return (error); } @@ -737,7 +738,7 @@ static const char *nfs_opts[] = { "from", "nfs_args", "resvport", "readahead", "hostname", "timeo", "timeout", "addr", "fh", "nfsv3", "sec", "principal", "nfsv4", "gssname", "allgssname", "dirpath", "minorversion", "nametimeo", "negnametimeo", "nocto", "noncontigwr", - "pnfs", "wcommitsize", "oneopenown", + "pnfs", "wcommitsize", "oneopenown", "tls", NULL }; /* @@ -888,9 +889,11 @@ nfs_mount(struct mount *mp) int dirlen, has_nfs_args_opt, has_nfs_from_opt, krbnamelen, srvkrbnamelen; size_t hstlen; + uint32_t newflag; has_nfs_args_opt = 0; has_nfs_from_opt = 0; + newflag = 0; hst = malloc(MNAMELEN, M_TEMP, M_WAITOK); if (vfs_filteropt(mp->mnt_optnew, nfs_opts)) { error = EINVAL; @@ -974,6 +977,8 @@ nfs_mount(struct mount *mp) args.flags |= NFSMNT_PNFS; if (vfs_getopt(mp->mnt_optnew, "oneopenown", NULL, NULL) == 0) args.flags |= NFSMNT_ONEOPENOWN; + if (vfs_getopt(mp->mnt_optnew, "tls", NULL, NULL) == 0) + newflag |= NFSMNT_TLS; if (vfs_getopt(mp->mnt_optnew, "readdirsize", (void **)&opt, NULL) == 0) { if (opt == NULL) { vfs_mount_error(mp, "illegal readdirsize"); @@ -1328,7 +1333,7 @@ nfs_mount(struct mount *mp) args.fh = nfh; error = mountnfs(&args, mp, nam, hst, krbname, krbnamelen, dirpath, dirlen, srvkrbname, srvkrbnamelen, &vp, td->td_ucred, td, - nametimeo, negnametimeo, minvers); + nametimeo, negnametimeo, minvers, newflag); out: if (!error) { MNT_ILOCK(mp); @@ -1377,7 +1382,7 @@ mountnfs(struct nfs_args *argp, struct mount *mp, stru char *hst, u_char *krbname, int krbnamelen, u_char *dirpath, int dirlen, u_char *srvkrbname, int srvkrbnamelen, struct vnode **vpp, struct ucred *cred, struct thread *td, int nametimeo, int negnametimeo, - int minvers) + int minvers, uint32_t newflag) { struct nfsmount *nmp; struct nfsnode *np; @@ -1396,9 +1401,22 @@ mountnfs(struct nfs_args *argp, struct mount *mp, stru free(nam, M_SONAME); return (0); } else { + /* NFS-over-TLS requires "options KERN_TLS" and a DMAP. */ + if ((newflag & NFSMNT_TLS) != 0) { + error = EINVAL; +#ifdef KERN_TLS + if (PMAP_HAS_DMAP != 0) + error = 0; +#endif + if (error != 0) { + free(nam, M_SONAME); + return (error); + } + } nmp = malloc(sizeof (struct nfsmount) + krbnamelen + dirlen + srvkrbnamelen + 2, M_NEWNFSMNT, M_WAITOK | M_ZERO); + nmp->nm_newflag = newflag; TAILQ_INIT(&nmp->nm_bufq); TAILQ_INIT(&nmp->nm_sess); if (clval == 0) @@ -2002,6 +2020,8 @@ void nfscl_retopts(struct nfsmount *nmp, char *buffer, nfscl_printopt(nmp, nmp->nm_sotype != SOCK_STREAM, ",udp", &buf, &blen); nfscl_printopt(nmp, (nmp->nm_flag & NFSMNT_RESVPORT) != 0, ",resvport", &buf, &blen); + nfscl_printopt(nmp, (nmp->nm_newflag & NFSMNT_TLS) != 0, ",tls", &buf, + &blen); nfscl_printopt(nmp, (nmp->nm_flag & NFSMNT_NOCONN) != 0, ",noconn", &buf, &blen); nfscl_printopt(nmp, (nmp->nm_flag & NFSMNT_SOFT) == 0, ",hard", &buf, From owner-svn-src-projects@freebsd.org Mon Feb 17 21:33:59 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 727B5247E86 for ; Mon, 17 Feb 2020 21:33:59 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48Ly0l04Bbz4Kpn; Mon, 17 Feb 2020 21:33:58 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BD17BD877; Mon, 17 Feb 2020 21:33:58 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01HLXw1J020651; Mon, 17 Feb 2020 21:33:58 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01HLXw1Y020650; Mon, 17 Feb 2020 21:33:58 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202002172133.01HLXw1Y020650@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 17 Feb 2020 21:33:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358056 - projects/nfs-over-tls/usr.sbin/rpctlscd X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/usr.sbin/rpctlscd X-SVN-Commit-Revision: 358056 X-SVN-Commit-Repository: base 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.29 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, 17 Feb 2020 21:33:59 -0000 Author: rmacklem Date: Mon Feb 17 21:33:58 2020 New Revision: 358056 URL: https://svnweb.freebsd.org/changeset/base/358056 Log: Update rpctlscd so that the "-t" option can be used to strip off the 478 bytes of server->client SSL stuff. This is only useful for testing and only until TLS actually can work (it needs receive side KERN_TLS). Modified: projects/nfs-over-tls/usr.sbin/rpctlscd/rpctlscd.c Modified: projects/nfs-over-tls/usr.sbin/rpctlscd/rpctlscd.c ============================================================================== --- projects/nfs-over-tls/usr.sbin/rpctlscd/rpctlscd.c Mon Feb 17 21:29:05 2020 (r358055) +++ projects/nfs-over-tls/usr.sbin/rpctlscd/rpctlscd.c Mon Feb 17 21:33:58 2020 (r358056) @@ -221,20 +221,18 @@ rpctlscd_verbose_out("rpctlsd_connect s=%d\n", s); if (s < 0) return (FALSE); - if (testnossl == 0) { - /* Do a TLS connect handshake. */ - ssl = rpctls_connect(rpctls_ctx, s); - if (ssl == NULL) - rpctlscd_verbose_out("rpctlsd_connect: can't do TLS " - "handshake\n"); - else { - /* Read the 478 bytes of junk off the socket. */ - siz = 478; - ret = 1; - while (siz > 0 && ret > 0) { - ret = recv(s, &buf[478 - siz], siz, 0); - siz -= ret; - } + /* Do a TLS connect handshake. */ + ssl = rpctls_connect(rpctls_ctx, s); + if (ssl == NULL) + rpctlscd_verbose_out("rpctlsd_connect: can't do TLS " + "handshake\n"); + if (testnossl != 0 && ssl != NULL) { + /* Read the 478 bytes of junk off the socket. */ + siz = 478; + ret = 1; + while (siz > 0 && ret > 0) { + ret = recv(s, &buf[478 - siz], siz, 0); + siz -= ret; } } From owner-svn-src-projects@freebsd.org Tue Feb 18 17:59:38 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 81D8D241B05 for ; Tue, 18 Feb 2020 17:59:38 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48MTBy37jgz4GGb; Tue, 18 Feb 2020 17:59:38 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6253623DA3; Tue, 18 Feb 2020 17:59:38 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01IHxcML048747; Tue, 18 Feb 2020 17:59:38 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01IHxcp4048745; Tue, 18 Feb 2020 17:59:38 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002181759.01IHxcp4048745@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Tue, 18 Feb 2020 17:59:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358075 - in projects/clang1000-import: . contrib/ipfilter/man contrib/ipfilter/tools contrib/ncurses contrib/ncurses/doc contrib/ncurses/doc/html contrib/ncurses/form contrib/ncurses/i... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang1000-import: . contrib/ipfilter/man contrib/ipfilter/tools contrib/ncurses contrib/ncurses/doc contrib/ncurses/doc/html contrib/ncurses/form contrib/ncurses/include contrib/ncurses/ma... X-SVN-Commit-Revision: 358075 X-SVN-Commit-Repository: base 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.29 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, 18 Feb 2020 17:59:38 -0000 Author: dim Date: Tue Feb 18 17:59:37 2020 New Revision: 358075 URL: https://svnweb.freebsd.org/changeset/base/358075 Log: Merge ^/head r358049 through r358074. Added: projects/clang1000-import/contrib/ncurses/VERSION - copied unchanged from r358074, head/contrib/ncurses/VERSION projects/clang1000-import/contrib/ncurses/include/Caps-ncurses - copied unchanged from r358074, head/contrib/ncurses/include/Caps-ncurses projects/clang1000-import/contrib/ncurses/man/new_pair.3x - copied unchanged from r358074, head/contrib/ncurses/man/new_pair.3x projects/clang1000-import/contrib/ncurses/man/scr_dump.5 - copied unchanged from r358074, head/contrib/ncurses/man/scr_dump.5 projects/clang1000-import/contrib/ncurses/man/user_caps.5 - copied unchanged from r358074, head/contrib/ncurses/man/user_caps.5 projects/clang1000-import/contrib/ncurses/misc/magic - copied unchanged from r358074, head/contrib/ncurses/misc/magic projects/clang1000-import/contrib/ncurses/ncurses/base/new_pair.c - copied unchanged from r358074, head/contrib/ncurses/ncurses/base/new_pair.c projects/clang1000-import/contrib/ncurses/ncurses/new_pair.h - copied unchanged from r358074, head/contrib/ncurses/ncurses/new_pair.h projects/clang1000-import/contrib/ncurses/ncurses/report_offsets.c - copied unchanged from r358074, head/contrib/ncurses/ncurses/report_offsets.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKuserdefs.sh - copied unchanged from r358074, head/contrib/ncurses/ncurses/tinfo/MKuserdefs.sh projects/clang1000-import/contrib/ncurses/progs/clear_cmd.c - copied unchanged from r358074, head/contrib/ncurses/progs/clear_cmd.c projects/clang1000-import/contrib/ncurses/progs/clear_cmd.h - copied unchanged from r358074, head/contrib/ncurses/progs/clear_cmd.h projects/clang1000-import/contrib/ncurses/progs/reset_cmd.c - copied unchanged from r358074, head/contrib/ncurses/progs/reset_cmd.c projects/clang1000-import/contrib/ncurses/progs/reset_cmd.h - copied unchanged from r358074, head/contrib/ncurses/progs/reset_cmd.h projects/clang1000-import/contrib/ncurses/progs/tparm_type.c - copied unchanged from r358074, head/contrib/ncurses/progs/tparm_type.c projects/clang1000-import/contrib/ncurses/progs/tparm_type.h - copied unchanged from r358074, head/contrib/ncurses/progs/tparm_type.h projects/clang1000-import/contrib/ncurses/progs/tty_settings.c - copied unchanged from r358074, head/contrib/ncurses/progs/tty_settings.c projects/clang1000-import/contrib/ncurses/progs/tty_settings.h - copied unchanged from r358074, head/contrib/ncurses/progs/tty_settings.h Modified: projects/clang1000-import/ObsoleteFiles.inc projects/clang1000-import/UPDATING projects/clang1000-import/contrib/ipfilter/man/ippool.8 projects/clang1000-import/contrib/ipfilter/tools/ippool.c projects/clang1000-import/contrib/ncurses/ANNOUNCE projects/clang1000-import/contrib/ncurses/AUTHORS projects/clang1000-import/contrib/ncurses/COPYING projects/clang1000-import/contrib/ncurses/INSTALL projects/clang1000-import/contrib/ncurses/MANIFEST projects/clang1000-import/contrib/ncurses/Makefile.in projects/clang1000-import/contrib/ncurses/NEWS projects/clang1000-import/contrib/ncurses/README projects/clang1000-import/contrib/ncurses/README.emx projects/clang1000-import/contrib/ncurses/aclocal.m4 projects/clang1000-import/contrib/ncurses/announce.html.in projects/clang1000-import/contrib/ncurses/config.guess projects/clang1000-import/contrib/ncurses/config.sub projects/clang1000-import/contrib/ncurses/configure projects/clang1000-import/contrib/ncurses/configure.in projects/clang1000-import/contrib/ncurses/dist.mk projects/clang1000-import/contrib/ncurses/doc/hackguide.doc projects/clang1000-import/contrib/ncurses/doc/html/NCURSES-Programming-HOWTO.html projects/clang1000-import/contrib/ncurses/doc/html/announce.html projects/clang1000-import/contrib/ncurses/doc/html/hackguide.html projects/clang1000-import/contrib/ncurses/doc/html/ncurses-intro.html projects/clang1000-import/contrib/ncurses/doc/ncurses-intro.doc projects/clang1000-import/contrib/ncurses/form/Makefile.in projects/clang1000-import/contrib/ncurses/form/f_trace.c projects/clang1000-import/contrib/ncurses/form/fld_arg.c projects/clang1000-import/contrib/ncurses/form/fld_attr.c projects/clang1000-import/contrib/ncurses/form/fld_current.c projects/clang1000-import/contrib/ncurses/form/fld_def.c projects/clang1000-import/contrib/ncurses/form/fld_ftchoice.c projects/clang1000-import/contrib/ncurses/form/fld_max.c projects/clang1000-import/contrib/ncurses/form/fld_newftyp.c projects/clang1000-import/contrib/ncurses/form/form.h projects/clang1000-import/contrib/ncurses/form/form.priv.h projects/clang1000-import/contrib/ncurses/form/frm_driver.c projects/clang1000-import/contrib/ncurses/form/frm_hook.c projects/clang1000-import/contrib/ncurses/form/frm_post.c projects/clang1000-import/contrib/ncurses/form/frm_req_name.c projects/clang1000-import/contrib/ncurses/form/fty_generic.c projects/clang1000-import/contrib/ncurses/form/fty_num.c projects/clang1000-import/contrib/ncurses/form/fty_regex.c projects/clang1000-import/contrib/ncurses/form/llib-lform projects/clang1000-import/contrib/ncurses/form/llib-lformt projects/clang1000-import/contrib/ncurses/form/llib-lformtw projects/clang1000-import/contrib/ncurses/form/llib-lformw projects/clang1000-import/contrib/ncurses/include/Caps projects/clang1000-import/contrib/ncurses/include/Caps.aix4 projects/clang1000-import/contrib/ncurses/include/Caps.hpux11 projects/clang1000-import/contrib/ncurses/include/Caps.keys projects/clang1000-import/contrib/ncurses/include/Caps.osf1r5 projects/clang1000-import/contrib/ncurses/include/Caps.uwin projects/clang1000-import/contrib/ncurses/include/MKhashsize.sh projects/clang1000-import/contrib/ncurses/include/MKkey_defs.sh projects/clang1000-import/contrib/ncurses/include/MKncurses_def.sh projects/clang1000-import/contrib/ncurses/include/MKparametrized.sh projects/clang1000-import/contrib/ncurses/include/MKterm.h.awk.in projects/clang1000-import/contrib/ncurses/include/Makefile.in projects/clang1000-import/contrib/ncurses/include/curses.h.in projects/clang1000-import/contrib/ncurses/include/curses.tail projects/clang1000-import/contrib/ncurses/include/curses.wide projects/clang1000-import/contrib/ncurses/include/edit_cfg.sh projects/clang1000-import/contrib/ncurses/include/hashed_db.h projects/clang1000-import/contrib/ncurses/include/nc_alloc.h projects/clang1000-import/contrib/ncurses/include/nc_mingw.h projects/clang1000-import/contrib/ncurses/include/nc_panel.h projects/clang1000-import/contrib/ncurses/include/nc_string.h projects/clang1000-import/contrib/ncurses/include/nc_termios.h projects/clang1000-import/contrib/ncurses/include/nc_tparm.h projects/clang1000-import/contrib/ncurses/include/ncurses_cfg.hin projects/clang1000-import/contrib/ncurses/include/ncurses_defs projects/clang1000-import/contrib/ncurses/include/ncurses_dll.h.in projects/clang1000-import/contrib/ncurses/include/ncurses_mingw.h projects/clang1000-import/contrib/ncurses/include/term_entry.h projects/clang1000-import/contrib/ncurses/include/termcap.h.in projects/clang1000-import/contrib/ncurses/include/tic.h projects/clang1000-import/contrib/ncurses/man/MKada_config.in projects/clang1000-import/contrib/ncurses/man/MKterminfo.sh projects/clang1000-import/contrib/ncurses/man/Makefile.in projects/clang1000-import/contrib/ncurses/man/captoinfo.1m projects/clang1000-import/contrib/ncurses/man/clear.1 projects/clang1000-import/contrib/ncurses/man/curs_add_wch.3x projects/clang1000-import/contrib/ncurses/man/curs_add_wchstr.3x projects/clang1000-import/contrib/ncurses/man/curs_addch.3x projects/clang1000-import/contrib/ncurses/man/curs_addchstr.3x projects/clang1000-import/contrib/ncurses/man/curs_addstr.3x projects/clang1000-import/contrib/ncurses/man/curs_addwstr.3x projects/clang1000-import/contrib/ncurses/man/curs_attr.3x projects/clang1000-import/contrib/ncurses/man/curs_beep.3x projects/clang1000-import/contrib/ncurses/man/curs_bkgd.3x projects/clang1000-import/contrib/ncurses/man/curs_bkgrnd.3x projects/clang1000-import/contrib/ncurses/man/curs_border.3x projects/clang1000-import/contrib/ncurses/man/curs_border_set.3x projects/clang1000-import/contrib/ncurses/man/curs_clear.3x projects/clang1000-import/contrib/ncurses/man/curs_color.3x projects/clang1000-import/contrib/ncurses/man/curs_delch.3x projects/clang1000-import/contrib/ncurses/man/curs_deleteln.3x projects/clang1000-import/contrib/ncurses/man/curs_extend.3x projects/clang1000-import/contrib/ncurses/man/curs_get_wch.3x projects/clang1000-import/contrib/ncurses/man/curs_get_wstr.3x projects/clang1000-import/contrib/ncurses/man/curs_getcchar.3x projects/clang1000-import/contrib/ncurses/man/curs_getch.3x projects/clang1000-import/contrib/ncurses/man/curs_getstr.3x projects/clang1000-import/contrib/ncurses/man/curs_in_wch.3x projects/clang1000-import/contrib/ncurses/man/curs_in_wchstr.3x projects/clang1000-import/contrib/ncurses/man/curs_inch.3x projects/clang1000-import/contrib/ncurses/man/curs_inchstr.3x projects/clang1000-import/contrib/ncurses/man/curs_initscr.3x projects/clang1000-import/contrib/ncurses/man/curs_inopts.3x projects/clang1000-import/contrib/ncurses/man/curs_ins_wch.3x projects/clang1000-import/contrib/ncurses/man/curs_ins_wstr.3x projects/clang1000-import/contrib/ncurses/man/curs_insch.3x projects/clang1000-import/contrib/ncurses/man/curs_insstr.3x projects/clang1000-import/contrib/ncurses/man/curs_instr.3x projects/clang1000-import/contrib/ncurses/man/curs_inwstr.3x projects/clang1000-import/contrib/ncurses/man/curs_kernel.3x projects/clang1000-import/contrib/ncurses/man/curs_legacy.3x projects/clang1000-import/contrib/ncurses/man/curs_memleaks.3x projects/clang1000-import/contrib/ncurses/man/curs_mouse.3x projects/clang1000-import/contrib/ncurses/man/curs_move.3x projects/clang1000-import/contrib/ncurses/man/curs_opaque.3x projects/clang1000-import/contrib/ncurses/man/curs_outopts.3x projects/clang1000-import/contrib/ncurses/man/curs_overlay.3x projects/clang1000-import/contrib/ncurses/man/curs_pad.3x projects/clang1000-import/contrib/ncurses/man/curs_print.3x projects/clang1000-import/contrib/ncurses/man/curs_printw.3x projects/clang1000-import/contrib/ncurses/man/curs_refresh.3x projects/clang1000-import/contrib/ncurses/man/curs_scanw.3x projects/clang1000-import/contrib/ncurses/man/curs_scr_dump.3x projects/clang1000-import/contrib/ncurses/man/curs_scroll.3x projects/clang1000-import/contrib/ncurses/man/curs_slk.3x projects/clang1000-import/contrib/ncurses/man/curs_sp_funcs.3x projects/clang1000-import/contrib/ncurses/man/curs_termattrs.3x projects/clang1000-import/contrib/ncurses/man/curs_termcap.3x projects/clang1000-import/contrib/ncurses/man/curs_terminfo.3x projects/clang1000-import/contrib/ncurses/man/curs_threads.3x projects/clang1000-import/contrib/ncurses/man/curs_touch.3x projects/clang1000-import/contrib/ncurses/man/curs_trace.3x projects/clang1000-import/contrib/ncurses/man/curs_util.3x projects/clang1000-import/contrib/ncurses/man/curs_variables.3x projects/clang1000-import/contrib/ncurses/man/curs_window.3x projects/clang1000-import/contrib/ncurses/man/default_colors.3x projects/clang1000-import/contrib/ncurses/man/define_key.3x projects/clang1000-import/contrib/ncurses/man/form.3x projects/clang1000-import/contrib/ncurses/man/form_cursor.3x projects/clang1000-import/contrib/ncurses/man/form_data.3x projects/clang1000-import/contrib/ncurses/man/form_driver.3x projects/clang1000-import/contrib/ncurses/man/form_field.3x projects/clang1000-import/contrib/ncurses/man/form_field_attributes.3x projects/clang1000-import/contrib/ncurses/man/form_field_buffer.3x projects/clang1000-import/contrib/ncurses/man/form_field_info.3x projects/clang1000-import/contrib/ncurses/man/form_field_just.3x projects/clang1000-import/contrib/ncurses/man/form_field_new.3x projects/clang1000-import/contrib/ncurses/man/form_field_opts.3x projects/clang1000-import/contrib/ncurses/man/form_field_userptr.3x projects/clang1000-import/contrib/ncurses/man/form_field_validation.3x projects/clang1000-import/contrib/ncurses/man/form_fieldtype.3x projects/clang1000-import/contrib/ncurses/man/form_hook.3x projects/clang1000-import/contrib/ncurses/man/form_new.3x projects/clang1000-import/contrib/ncurses/man/form_new_page.3x projects/clang1000-import/contrib/ncurses/man/form_opts.3x projects/clang1000-import/contrib/ncurses/man/form_page.3x projects/clang1000-import/contrib/ncurses/man/form_post.3x projects/clang1000-import/contrib/ncurses/man/form_requestname.3x projects/clang1000-import/contrib/ncurses/man/form_userptr.3x projects/clang1000-import/contrib/ncurses/man/form_variables.3x projects/clang1000-import/contrib/ncurses/man/form_win.3x projects/clang1000-import/contrib/ncurses/man/infocmp.1m projects/clang1000-import/contrib/ncurses/man/infotocap.1m projects/clang1000-import/contrib/ncurses/man/key_defined.3x projects/clang1000-import/contrib/ncurses/man/keybound.3x projects/clang1000-import/contrib/ncurses/man/keyok.3x projects/clang1000-import/contrib/ncurses/man/legacy_coding.3x projects/clang1000-import/contrib/ncurses/man/make_sed.sh projects/clang1000-import/contrib/ncurses/man/man_db.renames projects/clang1000-import/contrib/ncurses/man/manhtml.aliases projects/clang1000-import/contrib/ncurses/man/manhtml.externs projects/clang1000-import/contrib/ncurses/man/menu.3x projects/clang1000-import/contrib/ncurses/man/menu_attributes.3x projects/clang1000-import/contrib/ncurses/man/menu_cursor.3x projects/clang1000-import/contrib/ncurses/man/menu_driver.3x projects/clang1000-import/contrib/ncurses/man/menu_format.3x projects/clang1000-import/contrib/ncurses/man/menu_hook.3x projects/clang1000-import/contrib/ncurses/man/menu_items.3x projects/clang1000-import/contrib/ncurses/man/menu_mark.3x projects/clang1000-import/contrib/ncurses/man/menu_new.3x projects/clang1000-import/contrib/ncurses/man/menu_opts.3x projects/clang1000-import/contrib/ncurses/man/menu_pattern.3x projects/clang1000-import/contrib/ncurses/man/menu_post.3x projects/clang1000-import/contrib/ncurses/man/menu_requestname.3x projects/clang1000-import/contrib/ncurses/man/menu_spacing.3x projects/clang1000-import/contrib/ncurses/man/menu_userptr.3x projects/clang1000-import/contrib/ncurses/man/menu_win.3x projects/clang1000-import/contrib/ncurses/man/mitem_current.3x projects/clang1000-import/contrib/ncurses/man/mitem_name.3x projects/clang1000-import/contrib/ncurses/man/mitem_new.3x projects/clang1000-import/contrib/ncurses/man/mitem_opts.3x projects/clang1000-import/contrib/ncurses/man/mitem_userptr.3x projects/clang1000-import/contrib/ncurses/man/mitem_value.3x projects/clang1000-import/contrib/ncurses/man/mitem_visible.3x projects/clang1000-import/contrib/ncurses/man/ncurses.3x projects/clang1000-import/contrib/ncurses/man/panel.3x projects/clang1000-import/contrib/ncurses/man/resizeterm.3x projects/clang1000-import/contrib/ncurses/man/tabs.1 projects/clang1000-import/contrib/ncurses/man/term.5 projects/clang1000-import/contrib/ncurses/man/term.7 projects/clang1000-import/contrib/ncurses/man/term_variables.3x projects/clang1000-import/contrib/ncurses/man/terminfo.head projects/clang1000-import/contrib/ncurses/man/terminfo.tail projects/clang1000-import/contrib/ncurses/man/tic.1m projects/clang1000-import/contrib/ncurses/man/toe.1m projects/clang1000-import/contrib/ncurses/man/tput.1 projects/clang1000-import/contrib/ncurses/man/tset.1 projects/clang1000-import/contrib/ncurses/man/wresize.3x projects/clang1000-import/contrib/ncurses/menu/Makefile.in projects/clang1000-import/contrib/ncurses/menu/llib-lmenu projects/clang1000-import/contrib/ncurses/menu/llib-lmenut projects/clang1000-import/contrib/ncurses/menu/llib-lmenutw projects/clang1000-import/contrib/ncurses/menu/llib-lmenuw projects/clang1000-import/contrib/ncurses/menu/m_driver.c projects/clang1000-import/contrib/ncurses/menu/m_global.c projects/clang1000-import/contrib/ncurses/menu/m_hook.c projects/clang1000-import/contrib/ncurses/menu/m_item_use.c projects/clang1000-import/contrib/ncurses/menu/m_req_name.c projects/clang1000-import/contrib/ncurses/menu/m_trace.c projects/clang1000-import/contrib/ncurses/menu/m_userptr.c projects/clang1000-import/contrib/ncurses/menu/menu.h projects/clang1000-import/contrib/ncurses/menu/menu.priv.h projects/clang1000-import/contrib/ncurses/misc/Makefile.in projects/clang1000-import/contrib/ncurses/misc/emx.src projects/clang1000-import/contrib/ncurses/misc/gen-pkgconfig.in projects/clang1000-import/contrib/ncurses/misc/ncurses-config.in projects/clang1000-import/contrib/ncurses/misc/run_tic.in projects/clang1000-import/contrib/ncurses/misc/shlib projects/clang1000-import/contrib/ncurses/misc/tdlint projects/clang1000-import/contrib/ncurses/misc/terminfo.src projects/clang1000-import/contrib/ncurses/mk-1st.awk projects/clang1000-import/contrib/ncurses/ncurses/Makefile.in projects/clang1000-import/contrib/ncurses/ncurses/README.IZ projects/clang1000-import/contrib/ncurses/ncurses/SigAction.h projects/clang1000-import/contrib/ncurses/ncurses/base/MKkeyname.awk projects/clang1000-import/contrib/ncurses/ncurses/base/MKlib_gen.sh projects/clang1000-import/contrib/ncurses/ncurses/base/MKunctrl.awk projects/clang1000-import/contrib/ncurses/ncurses/base/define_key.c projects/clang1000-import/contrib/ncurses/ncurses/base/keyok.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_addch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_addstr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_beep.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_bkgd.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_box.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_chgat.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_color.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_colorset.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_dft_fgbg.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_driver.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_endwin.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_erase.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_flash.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_freeall.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_getch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_getstr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_hline.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_inchstr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_initscr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_insch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_insnstr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_instr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_isendwin.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_mouse.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_newterm.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_newwin.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_overlay.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_pad.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_printw.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_restart.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_scanw.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_screen.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_scroll.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_set_term.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkatr_set.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkcolor.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkinit.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkrefr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkset.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_touch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_vline.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_window.c projects/clang1000-import/contrib/ncurses/ncurses/base/resizeterm.c projects/clang1000-import/contrib/ncurses/ncurses/base/safe_sprintf.c projects/clang1000-import/contrib/ncurses/ncurses/base/use_window.c projects/clang1000-import/contrib/ncurses/ncurses/base/wresize.c projects/clang1000-import/contrib/ncurses/ncurses/build.priv.h projects/clang1000-import/contrib/ncurses/ncurses/curses.priv.h projects/clang1000-import/contrib/ncurses/ncurses/fifo_defs.h projects/clang1000-import/contrib/ncurses/ncurses/llib-lncurses projects/clang1000-import/contrib/ncurses/ncurses/llib-lncursest projects/clang1000-import/contrib/ncurses/ncurses/llib-lncursestw projects/clang1000-import/contrib/ncurses/ncurses/llib-lncursesw projects/clang1000-import/contrib/ncurses/ncurses/llib-ltic projects/clang1000-import/contrib/ncurses/ncurses/llib-ltict projects/clang1000-import/contrib/ncurses/ncurses/llib-ltictw projects/clang1000-import/contrib/ncurses/ncurses/llib-lticw projects/clang1000-import/contrib/ncurses/ncurses/llib-ltinfo projects/clang1000-import/contrib/ncurses/ncurses/llib-ltinfot projects/clang1000-import/contrib/ncurses/ncurses/llib-ltinfotw projects/clang1000-import/contrib/ncurses/ncurses/llib-ltinfow projects/clang1000-import/contrib/ncurses/ncurses/modules projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKcaptab.sh projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKcodes.awk projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKfallback.sh projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKkeys_list.sh projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKnames.awk projects/clang1000-import/contrib/ncurses/ncurses/tinfo/access.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/add_tries.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/alloc_entry.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/alloc_ttype.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/captoinfo.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_error.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_expand.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_hash.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_parse.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_scan.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/db_iterator.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/entries.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/free_ttype.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/getenv_num.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/hashed_db.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/home_terminfo.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/init_keytry.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_acs.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_baudrate.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_cur_term.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_data.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_longname.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_napms.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_options.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_print.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_raw.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_setup.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_termcap.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_tgoto.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_ti.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_tparm.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_tputs.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/make_hash.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/make_keys.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/name_match.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/obsolete.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/parse_entry.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/read_entry.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/read_termcap.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/strings.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/tinfo_driver.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/trim_sgr0.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/use_screen.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/write_entry.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_trace.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_traceatr.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_tracebits.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_tracedmp.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_tracemse.c projects/clang1000-import/contrib/ncurses/ncurses/trace/trace_xnames.c projects/clang1000-import/contrib/ncurses/ncurses/trace/visbuf.c projects/clang1000-import/contrib/ncurses/ncurses/tty/MKexpanded.sh projects/clang1000-import/contrib/ncurses/ncurses/tty/hardscroll.c projects/clang1000-import/contrib/ncurses/ncurses/tty/hashmap.c projects/clang1000-import/contrib/ncurses/ncurses/tty/lib_mvcur.c projects/clang1000-import/contrib/ncurses/ncurses/tty/lib_tstp.c projects/clang1000-import/contrib/ncurses/ncurses/tty/lib_twait.c projects/clang1000-import/contrib/ncurses/ncurses/tty/lib_vidattr.c projects/clang1000-import/contrib/ncurses/ncurses/tty/tty_update.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/charable.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_add_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_cchar.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_get_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_get_wstr.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_hline_set.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_in_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_ins_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_inwstr.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_key_name.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_slk_wset.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_unget_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_vid_attr.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_vline_set.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_wacs.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/widechars.c projects/clang1000-import/contrib/ncurses/ncurses/win32con/gettimeofday.c projects/clang1000-import/contrib/ncurses/ncurses/win32con/win_driver.c projects/clang1000-import/contrib/ncurses/panel/Makefile.in projects/clang1000-import/contrib/ncurses/panel/llib-lpanel projects/clang1000-import/contrib/ncurses/panel/llib-lpanelt projects/clang1000-import/contrib/ncurses/panel/llib-lpaneltw projects/clang1000-import/contrib/ncurses/panel/llib-lpanelw projects/clang1000-import/contrib/ncurses/panel/panel.h projects/clang1000-import/contrib/ncurses/panel/panel.priv.h projects/clang1000-import/contrib/ncurses/progs/MKtermsort.sh projects/clang1000-import/contrib/ncurses/progs/Makefile.in projects/clang1000-import/contrib/ncurses/progs/capconvert projects/clang1000-import/contrib/ncurses/progs/clear.c projects/clang1000-import/contrib/ncurses/progs/dump_entry.c projects/clang1000-import/contrib/ncurses/progs/dump_entry.h projects/clang1000-import/contrib/ncurses/progs/infocmp.c projects/clang1000-import/contrib/ncurses/progs/modules projects/clang1000-import/contrib/ncurses/progs/progs.priv.h projects/clang1000-import/contrib/ncurses/progs/tabs.c projects/clang1000-import/contrib/ncurses/progs/tic.c projects/clang1000-import/contrib/ncurses/progs/toe.c projects/clang1000-import/contrib/ncurses/progs/tput.c projects/clang1000-import/contrib/ncurses/progs/tset.c projects/clang1000-import/lib/libpam/modules/pam_login_access/login.access.5 projects/clang1000-import/lib/libpam/modules/pam_login_access/login_access.c projects/clang1000-import/lib/libpam/modules/pam_login_access/pam_login_access.8 projects/clang1000-import/lib/libpam/modules/pam_login_access/pam_login_access.c projects/clang1000-import/lib/libpam/modules/pam_login_access/pam_login_access.h projects/clang1000-import/lib/ncurses/ncurses/Makefile projects/clang1000-import/lib/ncurses/ncurses/ncurses_cfg.h projects/clang1000-import/lib/ncurses/ncurses/termcap.c projects/clang1000-import/share/vt/keymaps/jp.capsctrl.kbd projects/clang1000-import/share/vt/keymaps/jp.kbd projects/clang1000-import/sys/amd64/amd64/pmap.c projects/clang1000-import/sys/arm/allwinner/clkng/aw_clk_mipi.c projects/clang1000-import/sys/fs/ext2fs/ext2_bmap.c projects/clang1000-import/sys/fs/ext2fs/ext2_extern.h projects/clang1000-import/sys/fs/ext2fs/ext2_vnops.c projects/clang1000-import/sys/netinet6/ip6_output.c Directory Properties: projects/clang1000-import/ (props changed) projects/clang1000-import/contrib/ipfilter/ (props changed) projects/clang1000-import/contrib/ncurses/ (props changed) Modified: projects/clang1000-import/ObsoleteFiles.inc ============================================================================== --- projects/clang1000-import/ObsoleteFiles.inc Tue Feb 18 17:55:24 2020 (r358074) +++ projects/clang1000-import/ObsoleteFiles.inc Tue Feb 18 17:59:37 2020 (r358075) @@ -9203,1699 +9203,7 @@ OLD_FILES+=usr/sbin/yppasswdd #OLD_FILES+=usr/lib/aout/gcrt0.o #OLD_FILES+=usr/lib/aout/scrt0.o #OLD_FILES+=usr/lib/aout/sgcrt0.o -OLD_FILES+=usr/bin/sperl5 -OLD_FILES+=usr/bin/perl5.6.0 -OLD_FILES+=usr/bin/sperl5.6.0 -OLD_FILES+=usr/bin/perlbc -OLD_FILES+=usr/bin/perl5.00503 -OLD_FILES+=usr/bin/sperl5.00503 -OLD_FILES+=usr/bin/perlbug -OLD_FILES+=usr/bin/perlcc -OLD_FILES+=usr/bin/perldoc -OLD_FILES+=usr/bin/suidperl OLD_FILES+=usr/lib/pam_ftp.so -OLD_FILES+=usr/libdata/perl/5.00503/CGI/Apache.pm -OLD_FILES+=usr/libdata/perl/5.00503/CGI/Carp.pm -OLD_FILES+=usr/libdata/perl/5.00503/CGI/Cookie.pm -OLD_FILES+=usr/libdata/perl/5.00503/CGI/Fast.pm -OLD_FILES+=usr/libdata/perl/5.00503/CGI/Push.pm -OLD_FILES+=usr/libdata/perl/5.00503/CGI/Switch.pm -OLD_FILES+=usr/libdata/perl/5.00503/CPAN/FirstTime.pm -OLD_FILES+=usr/libdata/perl/5.00503/CPAN/Nox.pm -OLD_FILES+=usr/libdata/perl/5.00503/Class/Struct.pm -OLD_FILES+=usr/libdata/perl/5.00503/Devel/SelfStubber.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Command.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Embed.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Install.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Installed.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Liblist.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/MM_OS2.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/MM_Unix.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/MM_VMS.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/MM_Win32.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/MakeMaker.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Manifest.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Mkbootstrap.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Mksymlists.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/Packlist.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/inst -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/testlib.pm -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/typemap -OLD_FILES+=usr/libdata/perl/5.00503/ExtUtils/xsubpp -OLD_FILES+=usr/libdata/perl/5.00503/File/Spec/Mac.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Spec/OS2.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Spec/Unix.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Spec/VMS.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Spec/Win32.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Basename.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/CheckTree.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Compare.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Copy.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/DosGlob.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Find.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Path.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/Spec.pm -OLD_FILES+=usr/libdata/perl/5.00503/File/stat.pm -OLD_FILES+=usr/libdata/perl/5.00503/Getopt/Long.pm -OLD_FILES+=usr/libdata/perl/5.00503/Getopt/Std.pm -OLD_FILES+=usr/libdata/perl/5.00503/I18N/Collate.pm -OLD_FILES+=usr/libdata/perl/5.00503/IPC/Open2.pm -OLD_FILES+=usr/libdata/perl/5.00503/IPC/Open3.pm -OLD_FILES+=usr/libdata/perl/5.00503/Math/BigFloat.pm -OLD_FILES+=usr/libdata/perl/5.00503/Math/BigInt.pm -OLD_FILES+=usr/libdata/perl/5.00503/Math/Complex.pm -OLD_FILES+=usr/libdata/perl/5.00503/Math/Trig.pm -OLD_FILES+=usr/libdata/perl/5.00503/Net/Ping.pm -OLD_FILES+=usr/libdata/perl/5.00503/Net/hostent.pm -OLD_FILES+=usr/libdata/perl/5.00503/Net/netent.pm -OLD_FILES+=usr/libdata/perl/5.00503/Net/protoent.pm -OLD_FILES+=usr/libdata/perl/5.00503/Net/servent.pm -OLD_FILES+=usr/libdata/perl/5.00503/Pod/Functions.pm -OLD_FILES+=usr/libdata/perl/5.00503/Pod/Html.pm -OLD_FILES+=usr/libdata/perl/5.00503/Pod/Text.pm -OLD_FILES+=usr/libdata/perl/5.00503/Search/Dict.pm -OLD_FILES+=usr/libdata/perl/5.00503/Sys/Hostname.pm -OLD_FILES+=usr/libdata/perl/5.00503/Sys/Syslog.pm -OLD_FILES+=usr/libdata/perl/5.00503/Term/Cap.pm -OLD_FILES+=usr/libdata/perl/5.00503/Term/Complete.pm -OLD_FILES+=usr/libdata/perl/5.00503/Term/ReadLine.pm -OLD_FILES+=usr/libdata/perl/5.00503/Test/Harness.pm -OLD_FILES+=usr/libdata/perl/5.00503/Text/Abbrev.pm -OLD_FILES+=usr/libdata/perl/5.00503/Text/ParseWords.pm -OLD_FILES+=usr/libdata/perl/5.00503/Text/Soundex.pm -OLD_FILES+=usr/libdata/perl/5.00503/Text/Tabs.pm -OLD_FILES+=usr/libdata/perl/5.00503/Text/Wrap.pm -OLD_FILES+=usr/libdata/perl/5.00503/Tie/Array.pm -OLD_FILES+=usr/libdata/perl/5.00503/Tie/Handle.pm -OLD_FILES+=usr/libdata/perl/5.00503/Tie/Hash.pm -OLD_FILES+=usr/libdata/perl/5.00503/Tie/RefHash.pm -OLD_FILES+=usr/libdata/perl/5.00503/Tie/Scalar.pm -OLD_FILES+=usr/libdata/perl/5.00503/Tie/SubstrHash.pm -OLD_FILES+=usr/libdata/perl/5.00503/Time/Local.pm -OLD_FILES+=usr/libdata/perl/5.00503/Time/gmtime.pm -OLD_FILES+=usr/libdata/perl/5.00503/Time/localtime.pm -OLD_FILES+=usr/libdata/perl/5.00503/Time/tm.pm -OLD_FILES+=usr/libdata/perl/5.00503/User/grent.pm -OLD_FILES+=usr/libdata/perl/5.00503/User/pwent.pm -OLD_FILES+=usr/libdata/perl/5.00503/auto/Getopt/Long/GetOptions.al -OLD_FILES+=usr/libdata/perl/5.00503/auto/Getopt/Long/FindOption.al -OLD_FILES+=usr/libdata/perl/5.00503/auto/Getopt/Long/Configure.al -OLD_FILES+=usr/libdata/perl/5.00503/auto/Getopt/Long/config.al -OLD_FILES+=usr/libdata/perl/5.00503/auto/Getopt/Long/Croak.al -OLD_FILES+=usr/libdata/perl/5.00503/auto/Getopt/Long/autosplit.ix -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Deparse.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/CC.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Debug.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Showlex.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/makeliblinks -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Bblock.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/cc_harness -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Bytecode.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Stackobj.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Xref.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Lint.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Asmdata.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Assembler.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Disassembler.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/disassemble -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/assemble -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/Terse.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B/C.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/EXTERN.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/INTERN.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/XSUB.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/XSlock.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/av.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/bytecode.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/byterun.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/cc_runtime.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/config.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/cop.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/cv.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/dosish.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/embed.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/embedvar.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/fakethr.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/form.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/gv.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/handy.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/hv.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/intrpvar.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/iperlsys.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/keywords.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/mg.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/nostdio.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/objXSUB.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/objpp.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/op.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/opcode.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/patchlevel.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/perl.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/perlio.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/perlsdio.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/perlsfio.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/perlvars.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/perly.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/pp.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/pp_proto.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/proto.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/regcomp.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/regexp.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/regnodes.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/scope.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/sv.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/thrdvar.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/thread.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/unixish.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/CORE/util.h -OLD_FILES+=usr/libdata/perl/5.00503/mach/Data/Dumper.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IO/File.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IO/Select.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IO/Socket.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IO/Handle.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IO/Seekable.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IO/Pipe.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IPC/SysV.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IPC/Msg.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IPC/Semaphore.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/B/B.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/B/B.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/B/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DB_File/autosplit.ix -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DB_File/DB_File.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DB_File/DB_File.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DB_File/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Data/Dumper/Dumper.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Data/Dumper/Dumper.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Data/Dumper/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DynaLoader/.exists -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DynaLoader/dl_findfile.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DynaLoader/dl_expandspec.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DynaLoader/dl_find_symbol_anywhere.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DynaLoader/autosplit.ix -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DynaLoader/DynaLoader.a -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/DynaLoader/extralibs.ld -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Fcntl/Fcntl.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Fcntl/Fcntl.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Fcntl/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/IO/IO.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/IO/IO.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/IO/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/IPC/SysV/SysV.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/IPC/SysV/SysV.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/IPC/SysV/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/NDBM_File/NDBM_File.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/NDBM_File/NDBM_File.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/NDBM_File/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Opcode/Opcode.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Opcode/Opcode.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Opcode/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/assert.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/tolower.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/toupper.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/closedir.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/opendir.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/readdir.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/rewinddir.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/errno.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/creat.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fcntl.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getgrgid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getgrnam.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/atan2.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/cos.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/exp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fabs.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/log.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/pow.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/sin.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/sqrt.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getpwnam.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getpwuid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/longjmp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/setjmp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/kill.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/feof.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/siglongjmp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/sigsetjmp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/raise.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/offsetof.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/clearerr.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fclose.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fdopen.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fgetc.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fgets.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fileno.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fopen.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fprintf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fputc.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fputs.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fread.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/freopen.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fscanf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fseek.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/ferror.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fflush.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fgetpos.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fsetpos.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/ftell.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fwrite.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getc.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getchar.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/gets.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/perror.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/printf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/putc.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/putchar.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/puts.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/remove.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/rename.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/rewind.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/scanf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/sprintf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/sscanf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/tmpfile.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/ungetc.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/vfprintf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/vprintf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/vsprintf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/abs.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/atexit.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/atof.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/atoi.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/atol.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/bsearch.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/calloc.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/div.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/exit.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/free.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getenv.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/labs.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/ldiv.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/malloc.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/qsort.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/rand.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/realloc.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/srand.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/system.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/memchr.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/memcmp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/memcpy.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/memmove.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/memset.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strcat.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strchr.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strcmp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strcpy.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strcspn.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strerror.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strlen.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strncat.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strncmp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strncpy.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strpbrk.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strrchr.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strspn.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strstr.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/strtok.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/chmod.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fstat.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/mkdir.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/stat.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/umask.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/wait.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/waitpid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/gmtime.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/localtime.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/time.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/alarm.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/chdir.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/chown.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/execl.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/execle.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/execlp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/execv.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/execve.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/execvp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/fork.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getcwd.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getegid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/geteuid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getgid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getgroups.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getlogin.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getpgrp.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getpid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getppid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/getuid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/isatty.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/link.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/rmdir.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/setbuf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/setgid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/setuid.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/setvbuf.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/sleep.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/unlink.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/utime.al -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/autosplit.ix -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/POSIX.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/POSIX.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/POSIX/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/SDBM_File/SDBM_File.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/SDBM_File/SDBM_File.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/SDBM_File/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Socket/Socket.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Socket/Socket.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Socket/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/attrs/attrs.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/attrs/attrs.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/attrs/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/re/re.so -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/re/re.bs -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/re/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/sdbm/extralibs.ld -OLD_FILES+=usr/libdata/perl/5.00503/mach/auto/Errno/.packlist -OLD_FILES+=usr/libdata/perl/5.00503/mach/Config.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/B.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/O.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/perllocal.pod -OLD_FILES+=usr/libdata/perl/5.00503/mach/DB_File.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/Errno.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/Fcntl.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/IO.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/NDBM_File.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/Safe.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/Opcode.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/ops.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/POSIX.pod -OLD_FILES+=usr/libdata/perl/5.00503/mach/POSIX.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/SDBM_File.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/Socket.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/attrs.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/re.pm -OLD_FILES+=usr/libdata/perl/5.00503/mach/_h2ph_pre.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/a.out.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_ccb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_debug.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_extend.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_periph.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_queue.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_sim.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_xpt.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_xpt_periph.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/cam/cam_xpt_sim.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/aio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/alias.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ar.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/assert.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/bitstring.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/calendar.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/camlib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/com_err.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/com_right.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ctype.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/curses.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/db.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/des.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/devstat.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/dialog.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/dirent.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/disktab.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/dlfcn.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/elf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/err.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/errno.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/eti.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/fcntl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/fetch.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/float.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/floatingpoint.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/fnmatch.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/form.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/fstab.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ftpio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/fts.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/glob.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/gmp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/gnuregex.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/grp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/histedit.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ieeefp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ifaddrs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/inttypes.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/iso646.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/kvm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/libatm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/libdisk.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/libgen.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/libusb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/libutil.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/limits.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/link.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/linker_set.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/locale.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/login_cap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/malloc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/FlexLexer.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/PlotFile.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/SFile.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/_G_config.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/algo.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/algobase.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/alloc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/builtinbuf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/bvector.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/complex.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/defalloc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/deque.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/editbuf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/floatio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/fstream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/function.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/hash_map.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/hash_set.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/hashtable.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/heap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/indstream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/iolibio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/iomanip.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/list.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/iostdio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/iostream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/iostreamP.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/istream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/iterator.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/libio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/libioP.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/map.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/multimap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/multiset.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/new.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/ostream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/pair.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/parsestream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/pfstream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/procbuf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/pthread_alloc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/rope.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/ropeimpl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/set.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/slist.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stack.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stdiostream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_algo.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/tree.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_algobase.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_alloc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_bvector.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_config.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_construct.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_deque.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_function.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_hash_fun.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_hash_map.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_hash_set.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_hashtable.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_heap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_iterator.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_list.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_map.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_multimap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_multiset.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_numeric.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_pair.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_queue.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_raw_storage_iter.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_relops.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_rope.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_set.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_slist.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_stack.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_tempbuf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_tree.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_uninitialized.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stl_vector.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/stream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/streambuf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/strfile.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/strstream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/tempbuf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/type_traits.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/g++/vector.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/math.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/md2.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/md4.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/md5.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/memory.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/menu.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/mp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/mpool.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/mqueue.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ncurses.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ndbm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netdb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nl_types.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nlist.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objformat.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/opie.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/osreldate.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/panel.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/paths.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/pcap-int.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/pcap-namedb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/pcap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/poll.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/pthread.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/pthread_np.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/pwd.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/radlib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ranlib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/regex.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/regexp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/resolv.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ripemd.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/rune.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/runetype.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/sched.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/search.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/semaphore.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/setjmp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/sgtty.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/sha.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/signal.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/skey.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/stab.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/stand.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/stdarg.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/stddef.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/stdio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/stdlib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/strhash.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/string.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/stringlist.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/strings.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/struct.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/sysexits.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/syslog.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/taclib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/tar.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/tcpd.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/term.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/termcap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/termios.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/time.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/timers.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ttyent.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ucontext.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/unctrl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/unistd.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/utime.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/utmp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/values.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/varargs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/vgl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/vis.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/zconf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/zlib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/arpa/ftp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/arpa/inet.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/arpa/nameser.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/arpa/nameser_compat.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/arpa/telnet.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/arpa/tftp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/assertions.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/ctl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/dst.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/eventlib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/heap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/irpmarshall.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/logging.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/memcluster.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/misc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/tree.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/isc/list.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ansi.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/apic.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/apm_bios.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/apm_segments.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/asc_ioctl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/asm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/asmacros.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/asnames.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/atomic.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/bootinfo.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/bus.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/bus_at386.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/bus_memio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/bus_pc98.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/bus_pio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/bus_pio_ind.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/cdk.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/clock.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/comstats.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/console.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/cpu.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/cpufunc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/cputypes.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/cronyx.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/db_machdep.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/dvcfg.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/elf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/endian.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/exec.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/float.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/floatingpoint.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/frame.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/globaldata.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/globals.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/gsc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/i4b_cause.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/i4b_debug.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/i4b_ioctl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/i4b_rbch_ioctl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/i4b_tel_ioctl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/i4b_trace.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ieeefp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/if_wavelan_ieee.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/if_wl_wavelan.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/iic.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/in_cksum.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ioctl_bt848.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ioctl_ctx.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ioctl_fd.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ioctl_meteor.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ipl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/joystick.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/limits.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/lock.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/md_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/mouse.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/mpapic.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/mtpr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/bus_dma.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/npx.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/param.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/pcaudioio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/pcb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/pcb_ext.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/pcvt_ioctl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/perfmon.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/physio_proc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/pmap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/proc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/profile.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/psl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ptrace.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/reg.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/reloc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/resource.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/segments.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/setjmp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/sigframe.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/signal.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/smb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/smp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/smptests.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/soundcard.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/speaker.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/specialreg.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/spigot.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/stdarg.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/sysarch.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/trap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/tss.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/types.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/uc_device.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ucontext.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/ultrasound.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/varargs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/vm86.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/vmparam.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/wtio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/i4b_isppp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/machine/pci_cfgreg.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/msdosfs/bootsect.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/msdosfs/bpb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/msdosfs/denode.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/msdosfs/direntry.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/msdosfs/fat.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/msdosfs/msdosfsmount.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/bpf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/bpf_compat.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/bpfdesc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/bridge.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/ethernet.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/hostcache.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_arp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_atm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_dl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_gif.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_ieee80211.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_llc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_media.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_mib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_ppp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_pppvar.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_slvar.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_sppp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_stf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_tap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_tapvar.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_tun.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/slip.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_tunvar.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_types.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_vlan_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/intrq.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/iso88025.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/net_osdep.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/netisr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/pfkeyv2.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/ppp_comp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/ppp_defs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/radix.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/raw_cb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/route.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/slcompress.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/zlib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_faith.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_arc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/net/if_gre.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/krpc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfsdiskless.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfsm_subs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfsmount.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfsnode.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfsproto.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfsrtt.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfsrvcache.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nfsv2.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/nqnfs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/rpcv2.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nfs/xdr_subs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatalk/aarp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatalk/at.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatalk/at_extern.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatalk/at_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatalk/ddp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatalk/ddp_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatalk/endian.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatalk/phase2.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_cm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_if.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_ioctl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_pcb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_sap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_sigmgr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_stack.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_sys.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/atm_vc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/kern_include.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/port.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netatm/queue.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/netgraph.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_UI.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_async.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_bpf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_bridge.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_cisco.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_echo.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_ether.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_frame_relay.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_hole.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_iface.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_ksocket.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_lmi.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_message.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_mppc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_one2many.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_parse.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_ppp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_pppoe.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_pptpgre.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_rfc1490.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_sample.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_socket.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_socketvar.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_tee.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_tty.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_vjc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_eiface.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_etf.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_device.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_l2tp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netgraph/ng_fec.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/icmp6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/icmp_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/if_atm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/if_ether.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/if_fddi.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/igmp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/igmp_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/in.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/in_gif.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/in_hostcache.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/in_pcb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/in_systm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/in_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_auth.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_compat.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_dummynet.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_ecn.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_encap.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_fil.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_flow.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_frag.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_fw.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_icmp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_mroute.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_nat.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_proxy.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_state.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ipl.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ipprotosw.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/tcp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/tcp_debug.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/tcp_fsm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/tcp_seq.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/tcp_timer.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/tcp_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/tcpip.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/udp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/udp_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_fw2.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet/ip_gre.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ah.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ah6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/esp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/esp6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/icmp6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/in6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/in6_gif.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/in6_ifattach.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/in6_pcb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/in6_prefix.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/in6_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ip6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ip6_ecn.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ip6_fw.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ip6_mroute.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ip6_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ip6protosw.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ipcomp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ipcomp6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ipsec.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/ipsec6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/mld6_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/nd6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/pim6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/pim6_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/scope6_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/tcp6_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/udp6_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/esp_rijndael.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netinet6/raw_ip6.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/ipx.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/ipx_if.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/ipx_ip.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/ipx_pcb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/ipx_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/spx.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/spx_debug.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/spx_timer.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netipx/spx_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netkey/key.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netkey/key_debug.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netkey/key_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netkey/keydb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netkey/keysock.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netnatm/natm.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_cfg.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_conn.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_file.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_lib.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_ncp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_nls.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_rcfile.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_rq.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_sock.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_subr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/ncp_user.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netncp/nwerror.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/idp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/idp_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/ns.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/ns_error.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/ns_if.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/ns_pcb.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/sp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/spidp.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/spp_debug.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/spp_timer.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/netns/spp_var.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ntfs/ntfs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ntfs/ntfs_compr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ntfs/ntfs_ihash.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ntfs/ntfs_inode.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ntfs/ntfs_subr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ntfs/ntfs_vfsops.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/ntfs/ntfsmount.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nwfs/nwfs.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nwfs/nwfs_mount.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nwfs/nwfs_node.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/nwfs/nwfs_subr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/NXConstStr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/Object.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/Protocol.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/encoding.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/hash.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/objc-api.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/objc-list.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/objc.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/runtime.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/sarray.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/thr.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/objc/typedstream.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/openssl/asn1.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/openssl/asn1_mac.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/openssl/bio.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/openssl/blowfish.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/openssl/bn.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/openssl/buffer.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/openssl/cast.ph -OLD_FILES+=usr/libdata/perl/5.00503/mach/openssl/comp.ph *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Wed Feb 19 21:03:08 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6E14F24547D for ; Wed, 19 Feb 2020 21:03:08 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48N9DC6VFbz4VXR; Wed, 19 Feb 2020 21:03:07 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BF055EDCA; Wed, 19 Feb 2020 21:03:07 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01JL37eG030326; Wed, 19 Feb 2020 21:03:07 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01JL37O0030323; Wed, 19 Feb 2020 21:03:07 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002192103.01JL37O0030323@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Wed, 19 Feb 2020 21:03:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358131 - in projects/clang1000-import: . contrib/ncurses contrib/ncurses/doc/html contrib/ncurses/form contrib/ncurses/include contrib/ncurses/man contrib/ncurses/menu contrib/ncurses/... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang1000-import: . contrib/ncurses contrib/ncurses/doc/html contrib/ncurses/form contrib/ncurses/include contrib/ncurses/man contrib/ncurses/menu contrib/ncurses/misc contrib/ncurses/ncur... X-SVN-Commit-Revision: 358131 X-SVN-Commit-Repository: base 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.29 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, 19 Feb 2020 21:03:08 -0000 Author: dim Date: Wed Feb 19 21:03:06 2020 New Revision: 358131 URL: https://svnweb.freebsd.org/changeset/base/358131 Log: Merge ^/head r358075 through r358130. Modified: projects/clang1000-import/.cirrus.yml projects/clang1000-import/UPDATING projects/clang1000-import/contrib/ncurses/ANNOUNCE projects/clang1000-import/contrib/ncurses/AUTHORS projects/clang1000-import/contrib/ncurses/COPYING projects/clang1000-import/contrib/ncurses/INSTALL projects/clang1000-import/contrib/ncurses/MANIFEST projects/clang1000-import/contrib/ncurses/Makefile.in projects/clang1000-import/contrib/ncurses/Makefile.os2 projects/clang1000-import/contrib/ncurses/NEWS projects/clang1000-import/contrib/ncurses/README projects/clang1000-import/contrib/ncurses/README.MinGW projects/clang1000-import/contrib/ncurses/README.emx projects/clang1000-import/contrib/ncurses/TO-DO projects/clang1000-import/contrib/ncurses/VERSION projects/clang1000-import/contrib/ncurses/aclocal.m4 projects/clang1000-import/contrib/ncurses/announce.html.in projects/clang1000-import/contrib/ncurses/configure projects/clang1000-import/contrib/ncurses/configure.in projects/clang1000-import/contrib/ncurses/convert_configure.pl projects/clang1000-import/contrib/ncurses/dist.mk projects/clang1000-import/contrib/ncurses/doc/html/announce.html projects/clang1000-import/contrib/ncurses/doc/html/hackguide.html projects/clang1000-import/contrib/ncurses/doc/html/ncurses-intro.html projects/clang1000-import/contrib/ncurses/form/Makefile.in projects/clang1000-import/contrib/ncurses/form/READ.ME projects/clang1000-import/contrib/ncurses/form/f_trace.c projects/clang1000-import/contrib/ncurses/form/fld_arg.c projects/clang1000-import/contrib/ncurses/form/fld_attr.c projects/clang1000-import/contrib/ncurses/form/fld_current.c projects/clang1000-import/contrib/ncurses/form/fld_def.c projects/clang1000-import/contrib/ncurses/form/fld_dup.c projects/clang1000-import/contrib/ncurses/form/fld_ftchoice.c projects/clang1000-import/contrib/ncurses/form/fld_ftlink.c projects/clang1000-import/contrib/ncurses/form/fld_info.c projects/clang1000-import/contrib/ncurses/form/fld_just.c projects/clang1000-import/contrib/ncurses/form/fld_link.c projects/clang1000-import/contrib/ncurses/form/fld_max.c projects/clang1000-import/contrib/ncurses/form/fld_move.c projects/clang1000-import/contrib/ncurses/form/fld_newftyp.c projects/clang1000-import/contrib/ncurses/form/fld_opts.c projects/clang1000-import/contrib/ncurses/form/fld_pad.c projects/clang1000-import/contrib/ncurses/form/fld_page.c projects/clang1000-import/contrib/ncurses/form/fld_stat.c projects/clang1000-import/contrib/ncurses/form/fld_type.c projects/clang1000-import/contrib/ncurses/form/fld_user.c projects/clang1000-import/contrib/ncurses/form/form.h projects/clang1000-import/contrib/ncurses/form/form.priv.h projects/clang1000-import/contrib/ncurses/form/frm_cursor.c projects/clang1000-import/contrib/ncurses/form/frm_data.c projects/clang1000-import/contrib/ncurses/form/frm_def.c projects/clang1000-import/contrib/ncurses/form/frm_driver.c projects/clang1000-import/contrib/ncurses/form/frm_hook.c projects/clang1000-import/contrib/ncurses/form/frm_opts.c projects/clang1000-import/contrib/ncurses/form/frm_page.c projects/clang1000-import/contrib/ncurses/form/frm_post.c projects/clang1000-import/contrib/ncurses/form/frm_req_name.c projects/clang1000-import/contrib/ncurses/form/frm_scale.c projects/clang1000-import/contrib/ncurses/form/frm_sub.c projects/clang1000-import/contrib/ncurses/form/frm_user.c projects/clang1000-import/contrib/ncurses/form/frm_win.c projects/clang1000-import/contrib/ncurses/form/fty_alnum.c projects/clang1000-import/contrib/ncurses/form/fty_alpha.c projects/clang1000-import/contrib/ncurses/form/fty_enum.c projects/clang1000-import/contrib/ncurses/form/fty_generic.c projects/clang1000-import/contrib/ncurses/form/fty_int.c projects/clang1000-import/contrib/ncurses/form/fty_ipv4.c projects/clang1000-import/contrib/ncurses/form/fty_num.c projects/clang1000-import/contrib/ncurses/form/fty_regex.c projects/clang1000-import/contrib/ncurses/form/headers projects/clang1000-import/contrib/ncurses/form/llib-lform projects/clang1000-import/contrib/ncurses/form/llib-lformt projects/clang1000-import/contrib/ncurses/form/llib-lformtw projects/clang1000-import/contrib/ncurses/form/llib-lformw projects/clang1000-import/contrib/ncurses/form/modules projects/clang1000-import/contrib/ncurses/include/Caps projects/clang1000-import/contrib/ncurses/include/Caps-ncurses projects/clang1000-import/contrib/ncurses/include/Caps.aix4 projects/clang1000-import/contrib/ncurses/include/Caps.hpux11 projects/clang1000-import/contrib/ncurses/include/Caps.keys projects/clang1000-import/contrib/ncurses/include/Caps.osf1r5 projects/clang1000-import/contrib/ncurses/include/Caps.uwin projects/clang1000-import/contrib/ncurses/include/MKhashsize.sh projects/clang1000-import/contrib/ncurses/include/MKkey_defs.sh projects/clang1000-import/contrib/ncurses/include/MKncurses_def.sh projects/clang1000-import/contrib/ncurses/include/MKparametrized.sh projects/clang1000-import/contrib/ncurses/include/MKterm.h.awk.in projects/clang1000-import/contrib/ncurses/include/Makefile.in projects/clang1000-import/contrib/ncurses/include/capdefaults.c projects/clang1000-import/contrib/ncurses/include/curses.h.in projects/clang1000-import/contrib/ncurses/include/edit_cfg.sh projects/clang1000-import/contrib/ncurses/include/hashed_db.h projects/clang1000-import/contrib/ncurses/include/headers projects/clang1000-import/contrib/ncurses/include/nc_alloc.h projects/clang1000-import/contrib/ncurses/include/nc_mingw.h projects/clang1000-import/contrib/ncurses/include/nc_panel.h projects/clang1000-import/contrib/ncurses/include/nc_string.h projects/clang1000-import/contrib/ncurses/include/nc_termios.h projects/clang1000-import/contrib/ncurses/include/nc_tparm.h projects/clang1000-import/contrib/ncurses/include/ncurses_cfg.hin projects/clang1000-import/contrib/ncurses/include/ncurses_defs projects/clang1000-import/contrib/ncurses/include/ncurses_dll.h.in projects/clang1000-import/contrib/ncurses/include/ncurses_mingw.h projects/clang1000-import/contrib/ncurses/include/term_entry.h projects/clang1000-import/contrib/ncurses/include/termcap.h.in projects/clang1000-import/contrib/ncurses/include/tic.h projects/clang1000-import/contrib/ncurses/include/unctrl.h.in projects/clang1000-import/contrib/ncurses/man/MKada_config.in projects/clang1000-import/contrib/ncurses/man/MKncu_config.in projects/clang1000-import/contrib/ncurses/man/MKterminfo.sh projects/clang1000-import/contrib/ncurses/man/Makefile.in projects/clang1000-import/contrib/ncurses/man/captoinfo.1m projects/clang1000-import/contrib/ncurses/man/clear.1 projects/clang1000-import/contrib/ncurses/man/curs_add_wch.3x projects/clang1000-import/contrib/ncurses/man/curs_add_wchstr.3x projects/clang1000-import/contrib/ncurses/man/curs_addch.3x projects/clang1000-import/contrib/ncurses/man/curs_addchstr.3x projects/clang1000-import/contrib/ncurses/man/curs_addstr.3x projects/clang1000-import/contrib/ncurses/man/curs_addwstr.3x projects/clang1000-import/contrib/ncurses/man/curs_attr.3x projects/clang1000-import/contrib/ncurses/man/curs_beep.3x projects/clang1000-import/contrib/ncurses/man/curs_bkgd.3x projects/clang1000-import/contrib/ncurses/man/curs_bkgrnd.3x projects/clang1000-import/contrib/ncurses/man/curs_border.3x projects/clang1000-import/contrib/ncurses/man/curs_border_set.3x projects/clang1000-import/contrib/ncurses/man/curs_clear.3x projects/clang1000-import/contrib/ncurses/man/curs_color.3x projects/clang1000-import/contrib/ncurses/man/curs_delch.3x projects/clang1000-import/contrib/ncurses/man/curs_deleteln.3x projects/clang1000-import/contrib/ncurses/man/curs_extend.3x projects/clang1000-import/contrib/ncurses/man/curs_get_wch.3x projects/clang1000-import/contrib/ncurses/man/curs_get_wstr.3x projects/clang1000-import/contrib/ncurses/man/curs_getcchar.3x projects/clang1000-import/contrib/ncurses/man/curs_getch.3x projects/clang1000-import/contrib/ncurses/man/curs_getstr.3x projects/clang1000-import/contrib/ncurses/man/curs_getyx.3x projects/clang1000-import/contrib/ncurses/man/curs_in_wch.3x projects/clang1000-import/contrib/ncurses/man/curs_in_wchstr.3x projects/clang1000-import/contrib/ncurses/man/curs_inch.3x projects/clang1000-import/contrib/ncurses/man/curs_inchstr.3x projects/clang1000-import/contrib/ncurses/man/curs_initscr.3x projects/clang1000-import/contrib/ncurses/man/curs_inopts.3x projects/clang1000-import/contrib/ncurses/man/curs_ins_wch.3x projects/clang1000-import/contrib/ncurses/man/curs_ins_wstr.3x projects/clang1000-import/contrib/ncurses/man/curs_insch.3x projects/clang1000-import/contrib/ncurses/man/curs_insstr.3x projects/clang1000-import/contrib/ncurses/man/curs_instr.3x projects/clang1000-import/contrib/ncurses/man/curs_inwstr.3x projects/clang1000-import/contrib/ncurses/man/curs_kernel.3x projects/clang1000-import/contrib/ncurses/man/curs_legacy.3x projects/clang1000-import/contrib/ncurses/man/curs_memleaks.3x projects/clang1000-import/contrib/ncurses/man/curs_mouse.3x projects/clang1000-import/contrib/ncurses/man/curs_move.3x projects/clang1000-import/contrib/ncurses/man/curs_opaque.3x projects/clang1000-import/contrib/ncurses/man/curs_outopts.3x projects/clang1000-import/contrib/ncurses/man/curs_overlay.3x projects/clang1000-import/contrib/ncurses/man/curs_pad.3x projects/clang1000-import/contrib/ncurses/man/curs_print.3x projects/clang1000-import/contrib/ncurses/man/curs_printw.3x projects/clang1000-import/contrib/ncurses/man/curs_refresh.3x projects/clang1000-import/contrib/ncurses/man/curs_scanw.3x projects/clang1000-import/contrib/ncurses/man/curs_scr_dump.3x projects/clang1000-import/contrib/ncurses/man/curs_scroll.3x projects/clang1000-import/contrib/ncurses/man/curs_slk.3x projects/clang1000-import/contrib/ncurses/man/curs_sp_funcs.3x projects/clang1000-import/contrib/ncurses/man/curs_termattrs.3x projects/clang1000-import/contrib/ncurses/man/curs_termcap.3x projects/clang1000-import/contrib/ncurses/man/curs_terminfo.3x projects/clang1000-import/contrib/ncurses/man/curs_threads.3x projects/clang1000-import/contrib/ncurses/man/curs_touch.3x projects/clang1000-import/contrib/ncurses/man/curs_trace.3x projects/clang1000-import/contrib/ncurses/man/curs_util.3x projects/clang1000-import/contrib/ncurses/man/curs_variables.3x projects/clang1000-import/contrib/ncurses/man/curs_window.3x projects/clang1000-import/contrib/ncurses/man/default_colors.3x projects/clang1000-import/contrib/ncurses/man/define_key.3x projects/clang1000-import/contrib/ncurses/man/form.3x projects/clang1000-import/contrib/ncurses/man/form_cursor.3x projects/clang1000-import/contrib/ncurses/man/form_data.3x projects/clang1000-import/contrib/ncurses/man/form_driver.3x projects/clang1000-import/contrib/ncurses/man/form_field.3x projects/clang1000-import/contrib/ncurses/man/form_field_attributes.3x projects/clang1000-import/contrib/ncurses/man/form_field_buffer.3x projects/clang1000-import/contrib/ncurses/man/form_field_info.3x projects/clang1000-import/contrib/ncurses/man/form_field_just.3x projects/clang1000-import/contrib/ncurses/man/form_field_new.3x projects/clang1000-import/contrib/ncurses/man/form_field_opts.3x projects/clang1000-import/contrib/ncurses/man/form_field_userptr.3x projects/clang1000-import/contrib/ncurses/man/form_field_validation.3x projects/clang1000-import/contrib/ncurses/man/form_fieldtype.3x projects/clang1000-import/contrib/ncurses/man/form_hook.3x projects/clang1000-import/contrib/ncurses/man/form_new.3x projects/clang1000-import/contrib/ncurses/man/form_new_page.3x projects/clang1000-import/contrib/ncurses/man/form_opts.3x projects/clang1000-import/contrib/ncurses/man/form_page.3x projects/clang1000-import/contrib/ncurses/man/form_post.3x projects/clang1000-import/contrib/ncurses/man/form_requestname.3x projects/clang1000-import/contrib/ncurses/man/form_userptr.3x projects/clang1000-import/contrib/ncurses/man/form_variables.3x projects/clang1000-import/contrib/ncurses/man/form_win.3x projects/clang1000-import/contrib/ncurses/man/infocmp.1m projects/clang1000-import/contrib/ncurses/man/infotocap.1m projects/clang1000-import/contrib/ncurses/man/key_defined.3x projects/clang1000-import/contrib/ncurses/man/keybound.3x projects/clang1000-import/contrib/ncurses/man/keyok.3x projects/clang1000-import/contrib/ncurses/man/legacy_coding.3x projects/clang1000-import/contrib/ncurses/man/make_sed.sh projects/clang1000-import/contrib/ncurses/man/man_db.renames projects/clang1000-import/contrib/ncurses/man/manhtml.aliases projects/clang1000-import/contrib/ncurses/man/manhtml.externs projects/clang1000-import/contrib/ncurses/man/manlinks.sed projects/clang1000-import/contrib/ncurses/man/menu.3x projects/clang1000-import/contrib/ncurses/man/menu_attributes.3x projects/clang1000-import/contrib/ncurses/man/menu_cursor.3x projects/clang1000-import/contrib/ncurses/man/menu_driver.3x projects/clang1000-import/contrib/ncurses/man/menu_format.3x projects/clang1000-import/contrib/ncurses/man/menu_hook.3x projects/clang1000-import/contrib/ncurses/man/menu_items.3x projects/clang1000-import/contrib/ncurses/man/menu_mark.3x projects/clang1000-import/contrib/ncurses/man/menu_new.3x projects/clang1000-import/contrib/ncurses/man/menu_opts.3x projects/clang1000-import/contrib/ncurses/man/menu_pattern.3x projects/clang1000-import/contrib/ncurses/man/menu_post.3x projects/clang1000-import/contrib/ncurses/man/menu_requestname.3x projects/clang1000-import/contrib/ncurses/man/menu_spacing.3x projects/clang1000-import/contrib/ncurses/man/menu_userptr.3x projects/clang1000-import/contrib/ncurses/man/menu_win.3x projects/clang1000-import/contrib/ncurses/man/mitem_current.3x projects/clang1000-import/contrib/ncurses/man/mitem_name.3x projects/clang1000-import/contrib/ncurses/man/mitem_new.3x projects/clang1000-import/contrib/ncurses/man/mitem_opts.3x projects/clang1000-import/contrib/ncurses/man/mitem_userptr.3x projects/clang1000-import/contrib/ncurses/man/mitem_value.3x projects/clang1000-import/contrib/ncurses/man/mitem_visible.3x projects/clang1000-import/contrib/ncurses/man/ncurses.3x projects/clang1000-import/contrib/ncurses/man/new_pair.3x projects/clang1000-import/contrib/ncurses/man/panel.3x projects/clang1000-import/contrib/ncurses/man/resizeterm.3x projects/clang1000-import/contrib/ncurses/man/scr_dump.5 projects/clang1000-import/contrib/ncurses/man/tabs.1 projects/clang1000-import/contrib/ncurses/man/term.5 projects/clang1000-import/contrib/ncurses/man/term.7 projects/clang1000-import/contrib/ncurses/man/term_variables.3x projects/clang1000-import/contrib/ncurses/man/terminfo.head projects/clang1000-import/contrib/ncurses/man/terminfo.tail projects/clang1000-import/contrib/ncurses/man/tic.1m projects/clang1000-import/contrib/ncurses/man/toe.1m projects/clang1000-import/contrib/ncurses/man/tput.1 projects/clang1000-import/contrib/ncurses/man/tset.1 projects/clang1000-import/contrib/ncurses/man/user_caps.5 projects/clang1000-import/contrib/ncurses/man/wresize.3x projects/clang1000-import/contrib/ncurses/menu/Makefile.in projects/clang1000-import/contrib/ncurses/menu/READ.ME projects/clang1000-import/contrib/ncurses/menu/eti.h projects/clang1000-import/contrib/ncurses/menu/headers projects/clang1000-import/contrib/ncurses/menu/llib-lmenu projects/clang1000-import/contrib/ncurses/menu/llib-lmenut projects/clang1000-import/contrib/ncurses/menu/llib-lmenutw projects/clang1000-import/contrib/ncurses/menu/llib-lmenuw projects/clang1000-import/contrib/ncurses/menu/m_attribs.c projects/clang1000-import/contrib/ncurses/menu/m_cursor.c projects/clang1000-import/contrib/ncurses/menu/m_driver.c projects/clang1000-import/contrib/ncurses/menu/m_format.c projects/clang1000-import/contrib/ncurses/menu/m_global.c projects/clang1000-import/contrib/ncurses/menu/m_hook.c projects/clang1000-import/contrib/ncurses/menu/m_item_cur.c projects/clang1000-import/contrib/ncurses/menu/m_item_nam.c projects/clang1000-import/contrib/ncurses/menu/m_item_new.c projects/clang1000-import/contrib/ncurses/menu/m_item_opt.c projects/clang1000-import/contrib/ncurses/menu/m_item_top.c projects/clang1000-import/contrib/ncurses/menu/m_item_use.c projects/clang1000-import/contrib/ncurses/menu/m_item_val.c projects/clang1000-import/contrib/ncurses/menu/m_item_vis.c projects/clang1000-import/contrib/ncurses/menu/m_items.c projects/clang1000-import/contrib/ncurses/menu/m_new.c projects/clang1000-import/contrib/ncurses/menu/m_opts.c projects/clang1000-import/contrib/ncurses/menu/m_pad.c projects/clang1000-import/contrib/ncurses/menu/m_pattern.c projects/clang1000-import/contrib/ncurses/menu/m_post.c projects/clang1000-import/contrib/ncurses/menu/m_req_name.c projects/clang1000-import/contrib/ncurses/menu/m_scale.c projects/clang1000-import/contrib/ncurses/menu/m_spacing.c projects/clang1000-import/contrib/ncurses/menu/m_sub.c projects/clang1000-import/contrib/ncurses/menu/m_trace.c projects/clang1000-import/contrib/ncurses/menu/m_userptr.c projects/clang1000-import/contrib/ncurses/menu/m_win.c projects/clang1000-import/contrib/ncurses/menu/menu.h projects/clang1000-import/contrib/ncurses/menu/menu.priv.h projects/clang1000-import/contrib/ncurses/menu/mf_common.h projects/clang1000-import/contrib/ncurses/menu/modules projects/clang1000-import/contrib/ncurses/misc/Makefile.in projects/clang1000-import/contrib/ncurses/misc/chkdef.cmd projects/clang1000-import/contrib/ncurses/misc/cleantic.cmd projects/clang1000-import/contrib/ncurses/misc/cmpdef.cmd projects/clang1000-import/contrib/ncurses/misc/csort projects/clang1000-import/contrib/ncurses/misc/emx.src projects/clang1000-import/contrib/ncurses/misc/gen-pkgconfig.in projects/clang1000-import/contrib/ncurses/misc/gen_edit.sh projects/clang1000-import/contrib/ncurses/misc/magic projects/clang1000-import/contrib/ncurses/misc/makedef.cmd projects/clang1000-import/contrib/ncurses/misc/makellib projects/clang1000-import/contrib/ncurses/misc/ncurses-config.in projects/clang1000-import/contrib/ncurses/misc/ncurses.supp projects/clang1000-import/contrib/ncurses/misc/run_tic.in projects/clang1000-import/contrib/ncurses/misc/shlib projects/clang1000-import/contrib/ncurses/misc/tdlint projects/clang1000-import/contrib/ncurses/mk-0th.awk projects/clang1000-import/contrib/ncurses/mk-1st.awk projects/clang1000-import/contrib/ncurses/mk-2nd.awk projects/clang1000-import/contrib/ncurses/mk-hdr.awk projects/clang1000-import/contrib/ncurses/ncurses/Makefile.in projects/clang1000-import/contrib/ncurses/ncurses/README projects/clang1000-import/contrib/ncurses/ncurses/README.IZ projects/clang1000-import/contrib/ncurses/ncurses/SigAction.h projects/clang1000-import/contrib/ncurses/ncurses/base/MKkeyname.awk projects/clang1000-import/contrib/ncurses/ncurses/base/MKlib_gen.sh projects/clang1000-import/contrib/ncurses/ncurses/base/MKunctrl.awk projects/clang1000-import/contrib/ncurses/ncurses/base/README projects/clang1000-import/contrib/ncurses/ncurses/base/define_key.c projects/clang1000-import/contrib/ncurses/ncurses/base/key_defined.c projects/clang1000-import/contrib/ncurses/ncurses/base/keybound.c projects/clang1000-import/contrib/ncurses/ncurses/base/keyok.c projects/clang1000-import/contrib/ncurses/ncurses/base/legacy_coding.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_addch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_addstr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_beep.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_bkgd.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_box.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_chgat.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_clear.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_clearok.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_clrbot.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_clreol.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_color.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_colorset.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_delch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_delwin.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_dft_fgbg.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_driver.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_echo.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_endwin.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_erase.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_flash.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_freeall.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_getch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_getstr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_hline.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_immedok.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_inchstr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_initscr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_insch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_insdel.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_insnstr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_instr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_isendwin.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_leaveok.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_mouse.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_move.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_mvwin.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_newterm.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_newwin.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_nl.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_overlay.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_pad.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_printw.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_redrawln.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_refresh.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_restart.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_scanw.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_screen.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_scroll.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_scrollok.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_scrreg.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_set_term.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slk.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkatr_set.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkatrof.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkatron.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkatrset.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkattr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkclear.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkcolor.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkinit.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slklab.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkrefr.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slkset.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_slktouch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_touch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_ungetch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_vline.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_wattroff.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_wattron.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_winch.c projects/clang1000-import/contrib/ncurses/ncurses/base/lib_window.c projects/clang1000-import/contrib/ncurses/ncurses/base/nc_panel.c projects/clang1000-import/contrib/ncurses/ncurses/base/new_pair.c projects/clang1000-import/contrib/ncurses/ncurses/base/resizeterm.c projects/clang1000-import/contrib/ncurses/ncurses/base/safe_sprintf.c projects/clang1000-import/contrib/ncurses/ncurses/base/sigaction.c projects/clang1000-import/contrib/ncurses/ncurses/base/tries.c projects/clang1000-import/contrib/ncurses/ncurses/base/use_window.c projects/clang1000-import/contrib/ncurses/ncurses/base/version.c projects/clang1000-import/contrib/ncurses/ncurses/base/vsscanf.c projects/clang1000-import/contrib/ncurses/ncurses/base/wresize.c projects/clang1000-import/contrib/ncurses/ncurses/build.priv.h projects/clang1000-import/contrib/ncurses/ncurses/curses.priv.h projects/clang1000-import/contrib/ncurses/ncurses/fifo_defs.h projects/clang1000-import/contrib/ncurses/ncurses/llib-lncurses projects/clang1000-import/contrib/ncurses/ncurses/llib-lncursest projects/clang1000-import/contrib/ncurses/ncurses/llib-lncursestw projects/clang1000-import/contrib/ncurses/ncurses/llib-lncursesw projects/clang1000-import/contrib/ncurses/ncurses/llib-ltic projects/clang1000-import/contrib/ncurses/ncurses/llib-ltict projects/clang1000-import/contrib/ncurses/ncurses/llib-ltictw projects/clang1000-import/contrib/ncurses/ncurses/llib-lticw projects/clang1000-import/contrib/ncurses/ncurses/llib-ltinfo projects/clang1000-import/contrib/ncurses/ncurses/llib-ltinfot projects/clang1000-import/contrib/ncurses/ncurses/llib-ltinfotw projects/clang1000-import/contrib/ncurses/ncurses/llib-ltinfow projects/clang1000-import/contrib/ncurses/ncurses/modules projects/clang1000-import/contrib/ncurses/ncurses/new_pair.h projects/clang1000-import/contrib/ncurses/ncurses/report_offsets.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKcaptab.awk projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKcaptab.sh projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKcodes.awk projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKfallback.sh projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKkeys_list.sh projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKnames.awk projects/clang1000-import/contrib/ncurses/ncurses/tinfo/MKuserdefs.sh projects/clang1000-import/contrib/ncurses/ncurses/tinfo/README projects/clang1000-import/contrib/ncurses/ncurses/tinfo/access.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/add_tries.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/alloc_entry.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/alloc_ttype.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/captoinfo.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_error.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_expand.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_hash.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_parse.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/comp_scan.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/db_iterator.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/doalloc.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/entries.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/free_ttype.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/getenv_num.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/hashed_db.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/home_terminfo.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/init_keytry.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_acs.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_baudrate.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_cur_term.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_data.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_has_cap.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_kernel.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_longname.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_napms.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_options.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_print.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_raw.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_setup.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_termcap.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_termname.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_tgoto.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_ti.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_tparm.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_tputs.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/make_hash.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/make_keys.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/name_match.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/obsolete.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/parse_entry.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/read_entry.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/read_termcap.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/strings.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/tinfo_driver.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/trim_sgr0.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/use_screen.c projects/clang1000-import/contrib/ncurses/ncurses/tinfo/write_entry.c projects/clang1000-import/contrib/ncurses/ncurses/trace/README projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_trace.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_traceatr.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_tracebits.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_tracechr.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_tracedmp.c projects/clang1000-import/contrib/ncurses/ncurses/trace/lib_tracemse.c projects/clang1000-import/contrib/ncurses/ncurses/trace/trace_buf.c projects/clang1000-import/contrib/ncurses/ncurses/trace/trace_tries.c projects/clang1000-import/contrib/ncurses/ncurses/trace/trace_xnames.c projects/clang1000-import/contrib/ncurses/ncurses/trace/varargs.c projects/clang1000-import/contrib/ncurses/ncurses/trace/visbuf.c projects/clang1000-import/contrib/ncurses/ncurses/tty/MKexpanded.sh projects/clang1000-import/contrib/ncurses/ncurses/tty/hardscroll.c projects/clang1000-import/contrib/ncurses/ncurses/tty/hashmap.c projects/clang1000-import/contrib/ncurses/ncurses/tty/lib_mvcur.c projects/clang1000-import/contrib/ncurses/ncurses/tty/lib_tstp.c projects/clang1000-import/contrib/ncurses/ncurses/tty/lib_twait.c projects/clang1000-import/contrib/ncurses/ncurses/tty/lib_vidattr.c projects/clang1000-import/contrib/ncurses/ncurses/tty/tty_update.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/charable.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_add_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_box_set.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_cchar.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_erasewchar.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_get_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_get_wstr.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_hline_set.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_in_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_in_wchnstr.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_ins_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_inwstr.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_key_name.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_pecho_wchar.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_slk_wset.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_unget_wch.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_vid_attr.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_vline_set.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_wacs.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/lib_wunctrl.c projects/clang1000-import/contrib/ncurses/ncurses/widechar/widechars.c projects/clang1000-import/contrib/ncurses/ncurses/win32con/gettimeofday.c projects/clang1000-import/contrib/ncurses/ncurses/win32con/wcwidth.c projects/clang1000-import/contrib/ncurses/ncurses/win32con/win_driver.c projects/clang1000-import/contrib/ncurses/panel/Makefile.in projects/clang1000-import/contrib/ncurses/panel/headers projects/clang1000-import/contrib/ncurses/panel/llib-lpanel projects/clang1000-import/contrib/ncurses/panel/llib-lpanelt projects/clang1000-import/contrib/ncurses/panel/llib-lpaneltw projects/clang1000-import/contrib/ncurses/panel/llib-lpanelw projects/clang1000-import/contrib/ncurses/panel/modules projects/clang1000-import/contrib/ncurses/panel/p_above.c projects/clang1000-import/contrib/ncurses/panel/p_below.c projects/clang1000-import/contrib/ncurses/panel/p_bottom.c projects/clang1000-import/contrib/ncurses/panel/p_delete.c projects/clang1000-import/contrib/ncurses/panel/p_hidden.c projects/clang1000-import/contrib/ncurses/panel/p_hide.c projects/clang1000-import/contrib/ncurses/panel/p_move.c projects/clang1000-import/contrib/ncurses/panel/p_new.c projects/clang1000-import/contrib/ncurses/panel/p_replace.c projects/clang1000-import/contrib/ncurses/panel/p_show.c projects/clang1000-import/contrib/ncurses/panel/p_top.c projects/clang1000-import/contrib/ncurses/panel/p_update.c projects/clang1000-import/contrib/ncurses/panel/p_user.c projects/clang1000-import/contrib/ncurses/panel/p_win.c projects/clang1000-import/contrib/ncurses/panel/panel.c projects/clang1000-import/contrib/ncurses/panel/panel.h projects/clang1000-import/contrib/ncurses/panel/panel.priv.h projects/clang1000-import/contrib/ncurses/progs/MKtermsort.sh projects/clang1000-import/contrib/ncurses/progs/Makefile.in projects/clang1000-import/contrib/ncurses/progs/capconvert projects/clang1000-import/contrib/ncurses/progs/clear.c projects/clang1000-import/contrib/ncurses/progs/clear.sh projects/clang1000-import/contrib/ncurses/progs/clear_cmd.c projects/clang1000-import/contrib/ncurses/progs/clear_cmd.h projects/clang1000-import/contrib/ncurses/progs/dump_entry.c projects/clang1000-import/contrib/ncurses/progs/dump_entry.h projects/clang1000-import/contrib/ncurses/progs/infocmp.c projects/clang1000-import/contrib/ncurses/progs/modules projects/clang1000-import/contrib/ncurses/progs/progs.priv.h projects/clang1000-import/contrib/ncurses/progs/reset_cmd.c projects/clang1000-import/contrib/ncurses/progs/reset_cmd.h projects/clang1000-import/contrib/ncurses/progs/tabs.c projects/clang1000-import/contrib/ncurses/progs/tic.c projects/clang1000-import/contrib/ncurses/progs/toe.c projects/clang1000-import/contrib/ncurses/progs/tparm_type.c projects/clang1000-import/contrib/ncurses/progs/tparm_type.h projects/clang1000-import/contrib/ncurses/progs/tput.c projects/clang1000-import/contrib/ncurses/progs/transform.c projects/clang1000-import/contrib/ncurses/progs/tset.c projects/clang1000-import/contrib/ncurses/progs/tty_settings.c projects/clang1000-import/contrib/ncurses/progs/tty_settings.h projects/clang1000-import/lib/libmemstat/memstat_uma.c projects/clang1000-import/lib/libsysdecode/flags.c projects/clang1000-import/lib/libsysdecode/mktables projects/clang1000-import/lib/libsysdecode/sysdecode.h projects/clang1000-import/lib/msun/man/sqrt.3 projects/clang1000-import/lib/ncurses/ncurses/Makefile projects/clang1000-import/lib/ncurses/ncurses/ncurses_cfg.h projects/clang1000-import/release/packages/caroot.ucl projects/clang1000-import/share/man/man4/acpi_battery.4 projects/clang1000-import/share/man/man5/src.conf.5 projects/clang1000-import/share/man/man7/environ.7 projects/clang1000-import/share/mk/src.opts.mk projects/clang1000-import/sys/dev/acpica/acpi_battery.c projects/clang1000-import/sys/dev/acpica/acpi_cmbat.c projects/clang1000-import/sys/dev/acpica/acpi_if.m projects/clang1000-import/sys/dev/acpica/acpi_package.c projects/clang1000-import/sys/dev/acpica/acpi_smbat.c projects/clang1000-import/sys/dev/acpica/acpiio.h projects/clang1000-import/sys/dev/acpica/acpivar.h projects/clang1000-import/sys/dev/cxgbe/common/t4_hw.c projects/clang1000-import/sys/dev/cxgbe/iw_cxgbe/mem.c projects/clang1000-import/sys/dev/cxgbe/t4_main.c projects/clang1000-import/sys/kern/subr_vmem.c projects/clang1000-import/sys/kern/vfs_subr.c projects/clang1000-import/sys/netinet/sctp_bsd_addr.c projects/clang1000-import/sys/netinet/sctp_os_bsd.h projects/clang1000-import/sys/netinet/sctp_output.c projects/clang1000-import/sys/netinet/sctp_usrreq.c projects/clang1000-import/sys/netinet/sctputil.c projects/clang1000-import/sys/netinet6/sctp6_usrreq.c projects/clang1000-import/sys/netpfil/ipfw/ip_dummynet.c projects/clang1000-import/sys/powerpc/aim/slb.c projects/clang1000-import/sys/powerpc/amigaone/cpld.h projects/clang1000-import/sys/powerpc/amigaone/cpld_x5000.c projects/clang1000-import/sys/sys/smr.h projects/clang1000-import/sys/ufs/ffs/ffs_softdep.c projects/clang1000-import/sys/vm/swap_pager.c projects/clang1000-import/sys/vm/uma_core.c projects/clang1000-import/sys/vm/uma_int.h projects/clang1000-import/sys/vm/vm_glue.c projects/clang1000-import/sys/vm/vm_kern.c projects/clang1000-import/sys/vm/vm_page.c projects/clang1000-import/sys/vm/vm_page.h projects/clang1000-import/sys/vm/vm_pager.c projects/clang1000-import/sys/vm/vm_radix.c projects/clang1000-import/sys/vm/vm_radix.h projects/clang1000-import/sys/vm/vm_swapout.c projects/clang1000-import/tests/sys/fs/fusefs/io.cc projects/clang1000-import/tests/sys/net/if_bridge_test.sh projects/clang1000-import/tools/tools/nanobsd/dhcpd/common projects/clang1000-import/tools/tools/nanobsd/embedded/common projects/clang1000-import/usr.bin/kdump/kdump.c projects/clang1000-import/usr.bin/truss/syscall.h projects/clang1000-import/usr.bin/truss/syscalls.c projects/clang1000-import/usr.bin/whereis/pathnames.h projects/clang1000-import/usr.sbin/ac/ac.8 projects/clang1000-import/usr.sbin/acpi/acpiconf/acpiconf.c projects/clang1000-import/usr.sbin/certctl/certctl.sh projects/clang1000-import/usr.sbin/sa/sa.8 Directory Properties: projects/clang1000-import/ (props changed) projects/clang1000-import/contrib/ncurses/ (props changed) Modified: projects/clang1000-import/.cirrus.yml ============================================================================== --- projects/clang1000-import/.cirrus.yml Wed Feb 19 19:58:31 2020 (r358130) +++ projects/clang1000-import/.cirrus.yml Wed Feb 19 21:03:06 2020 (r358131) @@ -9,7 +9,7 @@ env: CIRRUS_CLONE_DEPTH: 1 task: - timeout_in: 90m + timeout_in: 120m install_script: - pkg install -y qemu-devel uefi-edk2-qemu-x86_64 script: Modified: projects/clang1000-import/UPDATING ============================================================================== --- projects/clang1000-import/UPDATING Wed Feb 19 19:58:31 2020 (r358130) +++ projects/clang1000-import/UPDATING Wed Feb 19 21:03:06 2020 (r358131) @@ -32,6 +32,11 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: information about prerequisites and upgrading, if you are not already using clang 3.5.0 or higher. +20200218: + ncurses has been updated to a newer version (6.1-20200118). After an + update some applications using ncurses may results have some rendering + problems and would need to be rebuilt. + 20200217: The size of struct vnet and the magic cookie have changed. Users need to recompile libkvm and all modules using VIMAGE Modified: projects/clang1000-import/contrib/ncurses/ANNOUNCE ============================================================================== --- projects/clang1000-import/contrib/ncurses/ANNOUNCE Wed Feb 19 19:58:31 2020 (r358130) +++ projects/clang1000-import/contrib/ncurses/ANNOUNCE Wed Feb 19 21:03:06 2020 (r358131) @@ -1,4 +1,4 @@ - Announcing ncurses 6.1 + Announcing ncurses 6.2 Overview @@ -17,7 +17,7 @@ Overview * It is used in almost every system based on the Linux kernel (aside from some embedded applications). * It is used as the system curses library on OpenBSD, FreeBSD and - OSX. + MacOS. * It is used in environments such as Cygwin and MinGW. The first of these was EMX on OS/2 Warp. * It is used (though usually not as the system curses) on all of the @@ -26,611 +26,374 @@ Overview * It should work readily on any ANSI/POSIX-conforming unix. The distribution includes the library and support utilities, including - * [1]captoinfo, a termcap conversion tool - * [2]clear, utility for clearing the screen - * [3]infocmp, the terminfo decompiler - * [4]tabs, set tabs on a terminal - * [5]tic, the terminfo compiler - * [6]toe, list (table of) terminfo entries - * [7]tput, utility for retrieving terminal capabilities in shell + * captoinfo, a termcap conversion tool + * clear, utility for clearing the screen + * infocmp, the terminfo decompiler + * tabs, set tabs on a terminal + * tic, the terminfo compiler + * toe, list (table of) terminfo entries + * tput, utility for retrieving terminal capabilities in shell scripts - * [8]tset, to initialize the terminal + * tset, to initialize the terminal Full manual pages are provided for the library and tools. - The ncurses distribution is available at ncurses' [9]homepage: + The ncurses distribution is available at ncurses' homepage: - [10]ftp://ftp.invisible-island.net/ncurses/ or - [11]https://invisible-mirror.net/archives/ncurses/ . + ftp://ftp.invisible-island.net/ncurses/ or + https://invisible-mirror.net/archives/ncurses/ . It is also available via anonymous FTP at the GNU distribution site - [12]ftp://ftp.gnu.org/gnu/ncurses/ . + ftp://ftp.gnu.org/gnu/ncurses/ . Release Notes - These notes are for ncurses 6.1, released January 27, 2018. + These notes are for ncurses 6.2, released February 12, 2020. This release is designed to be source-compatible with ncurses 5.0 - through 6.0; providing extensions to the application binary interface + through 6.1; providing extensions to the application binary interface (ABI). Although the source can still be configured to support the - ncurses 5 ABI, the intent of the release is to provide extensions to - the ncurses 6 ABI: - * improve integration of tput and tset - * provide support for extended numeric capabilities. + ncurses 5 ABI, the reason for the release is to reflect improvements + to the ncurses 6 ABI and the supporting utility programs. There are, of course, numerous other improvements, listed in this announcement. - The release notes also mention some bug-fixes, but are focused on new - features and improvements to existing features since ncurses 6.0 - release. + The most important bug-fixes/improvements dealt with user-defined + capabilities in terminal descriptions. The release notes also mention + some other bug-fixes, but are focused on new features and improvements + to existing features since ncurses 6.1 release. Library improvements New features - The improved integration of tput and tset made only small changes to - the libraries. However, supporting extended numeric capabilities - required a few changes: - * The TERMINAL structure in is now opaque. Doing that - allowed making the structure larger, to hold the extended numeric - data. - A few applications required changes during development of - ncurses 6.1 because those applications misused the members of that - structure, e.g., directly modifying it rather than using - [13]def_prog_mode. - * Having made TERMINAL opaque (and because none of the library - functions use anything except a pointer to TERMINAL), it was - possible to increase the size of the structure, adding to the end. - Existing applications which were linked to the ncurses 6.0 - high-level (ncurses, ncursesw) and low-level (tinfo, tinfo) - libraries should not require re-linking since the binary interface - did not change, nor did the structure offsets with TERMINAL - change. - A few applications use the inner TERMTYPE structure's offsets to - refer to terminfo capabilities within that structure. Again, those - do not require modification because their offsets within TERMINAL - did not change. - * When configured for wide-characters, i.e., "ncursesw" the TERMINAL - structure is extended. - The new data in TERMINAL holds the same information as TERMTYPE, - but with larger numbers ("int" versus "short"). It is named - TERMTYPE2. - The library uses this structure internally in preference to - TERMTYPE, referring to TERMTYPE only to initialize it for - applications that use the capabilities defined in - * When configured for 8-bit (narrow) characters, the TERMTYPE2 - structure is not used. - * The updated application binary interface is 6.1.20171230 (used for - new [14]versioned symbols), although the interface changes were - developed several months previously. + There are several new features: + * O_EDGE_INSERT_STAY tells the form library to optionally delay + cursor movement on a field edge/boundary + * O_INPUT_FIELD extension to form library allows a dynamic field to + shrink if the new limit is smaller than the current field size. + * added exit_curses and exit_terminfo to replace internal symbols + for leak-checking. + * added curses_trace, to replace trace(). - The motivation for making this extension came from noticing that - [15]termcap applications could (though not [16]realistically) use - larger numbers than would fit in 16-bits, and the fact that the number - of color pairs for a 256-color xterm could not be expressed in - terminfo (i.e., 32767 versus 65536). Also, a few terminals support - direct-colors, which could use the extension. - - Generally speaking, applications that use internal details of a - library are unsupported. There was exactly one exception for ncurses: - the tack program used the internal details of TERMINAL, because it - provides an ncurses-specific feature for interactively modifying a - terminfo description and writing the updated description to a - text-file. It was possible to not only separate tack from these - [17]internal details of ncurses, but to generalize it so that the - program works with Unix curses (omitting the ncurses-specific - feature). That was released as [18]tack 1.08 in July 2017. - - While making changes to tack to eliminate its dependency upon ncurses - internals, the publicly-visible details of those internals were - reviewed, and some symbols were moved to private header files, while - others were marked explicitly as ncurses internals. Future releases of - ncurses may eliminate some of those symbols (such as those used by - tack 1.07) because they are neither part of the API or the ABI. - - Using the TERMTYPE2 extended numeric capabilities, it is possible to - support both color pair values and color values past 32767. Taking - compatibility into account, developers readily understand that neither - function signatures nor structure offsets change. Also, existing - functions have to operate with the extended numbers. Most of that work - is internal to the library. For the external interfaces, a hybrid - approach was used: - * X/Open Curses defined function prototypes such as wattr_set with - an unused parameter, for "future" use. After 25 years, the future - is here: ncurses uses the parameter to augment color pair values - as described in the [19]manual page. - * Other functions such as those defining color pairs did not have a - corresponding reserved parameter. For those, ncurses defines - extended versions such as init_extended_pair (versus init_pair), - init_extended_color (versus init_color). - Additionally, to improve performance other changes (and extensions) are provided in this release: - * Several new functions simplify management of large sets of color - pairs: reset_color_pairs, alloc_pair, find_pair and free_pair. - * New "RGB" extension capability for direct-color support is used to - improve performance of color_content. - * The internal colorpair_t is now a struct, eliminating an internal - 8-bit limit on colors - * Allocation for SCREEN's color-pair table starts small, grows on - demand up to the limit given in the terminal description. - * setcchar and getcchar now treat a negative color-pair as an error. + * mouse decoding now handles shift/control/alt logic when decoding + xterm's 1006 mode + * ncurses now defines a limit for wgetnstr, wgetn_wstr when length + is negative or "too large". + * reordered loop-limit checks in winsnstr in case the string has no + terminating null and only the number of characters is used. + * there is now no buffer-size limit when reading the $TERMCAP + variable. + * the $TERMCAP variable may be interpreted as a fallback to a + terminfo entry + * mvcur now decides whether to use hard-tabs, using xt, tbc and hts + as clues. + * extended colors are improved by modifying an internal call to + vid_puts to pass extended color pairs e.g., from tty_update.c and + lib_mvcur.c + * the initialization functions now avoid relying upon persistent + data for the result from getenv + * scrolling is improved: + + a limit check in newline_forces_scroll handles the case where + the row is inside scroll-margins, but not at the end. + + improved loop limits in _nc_scroll_window handle a case where + the scrolled data is a pad which is taller than the window. Other improvements - These are new or revised features: - * modify c++/etip.h.in to accommodate deprecation of throw and - throws in c++17 - * add new function unfocus_current_field - * add option to preserve leading whitespace in form fields - * add a macro for is_linetouched and adjust the function's return - value to make it possible for most applications to check for an - error-return. - * add build-time utility report_offsets to help show when the - various configurations of tinfo library are compatible or not. + These are revised features: + * used "const" in some prototypes rather than NCURSES_CONST where + X/Open Curses was updated to do this, e.g., wscanw, newterm, the + terminfo interface. Also use "const" for consistency in the + termcap interface, which was withdrawn by X/Open Curses in Issue 5 + (2007). As of Issue 7, X/Open Curses still lacks "const" for + certain return values, e.g., keyname. + * modified wbkgd and wbkgrnd to improve compatibility with SVr4 + curses, changing the way the window rendition is updated when the + background character is modified + * improved terminfo write/read by modifying the fourth item of the + extended header to denote the number of valid strings in the + extended string table (see term(5)). + * modified the initialization checks for mouse so that the + xterm+sm+1006 block will work with terminal descriptions not + mentioning xterm. These were done to limit or ultimately deprecate features: - * drop two symbols obsoleted in 2004: _nc_check_termtype, and - _nc_resolve_uses - * move _nc_tracebits, _tracedump and _tracemouse to curses.priv.h, - since they are not part of the suggested ABI6. - * mark some structs in form/menu/panel libraries as potentially - opaque without modifying API/ABI. - * ifdef'd header-file definition of mouse_trafo with - NCURSES_NOMACROS - * remove initialization-check for calling napms in the term-driver - configuration; none is needed. - * modify trace to avoid overwriting existing file + * deprecated safe-sprintf, since the vsnprintf function, which does + what was needed, was standardized long ago. + * marked vwprintw and vwscanw as deprecated; recommend using + vw_printw and vw_scanw, respectively. + * added deprecation warnings for internal functions called by older + versions of tack. + * removed unused _nc_import_termtype2 function. These are improvements to existing features: - * modify make_hash to allow building with address-sanitizer, - assuming that --disable-leaks is configured. - * move SCREEN field for use_tioctl data before the ncursesw fields, - and limit that to the sp-funcs configuration to improve termlib - compatibility - * modify db-iterator: - + ignore zero-length files in db-iterator; these are useful for - instance to suppress $HOME/.terminfo when not wanted. - + modify update_getenv to ensure that environment variables - which are not initially set will be checked later if an - application happens to set them - * modify _nc_outc_wrapper to use the standard output if the screen - was not initialized, rather than returning an error. - * improve checks for low-level terminfo functions when the terminal - has not been initialized. - * modify set_curterm to update ttytype[] data used by longname/p> - * modify _nc_get_screensize to allow for use_env and use_tioctl - state to be per-screen when sp-funcs are configured, better - matching the behavior when using the term-driver configuration. - * remove an early-return from _nc_do_color, which can interfere with - data needed by bkgd when ncurses is configured with extended - colors - * incorporate A_COLOR mask into COLOR_PAIR, in case user application - provides an out-of-range pair number - * modify logic for endwin-state to be able to detect the case where - the screen was never initialized, using that to trigger a flush of - ncurses' buffer for mvcur, e.g., in the sample program dots_mvcur - for the term-driver configuration. + * check parameter of set_escdelay, return ERR if negative. + * check parameter of set_tabsize, return ERR if not greater than + zero + * correct a status-check in _nc_read_tic_entry() so that if reading + a hex/b64 $TERMINFO, and the $TERM does not match, fall-through to + the compiled-in search list. + * amend check for repeat_char to handle a case where setlocale() was + called after initscr + * move macro for is_linetouched inside NCURSES_NOMACROS ifndef. + * use _nc_copy_termtype2 rather than direct assignment in setupterm, + in case it is called repeatedly using fallback terminfo + descriptions + * improve workaround for Solaris wcwidth versus line-drawing + characters + * add checks in repair_subwindows to keep the current position and + scroll-margins inside the resized subwindow. + * correct a buffer-limit in write_entry.c for systems that use + caseless filenames. + * improved build-time utility report_offsets: + + add categories, e.g., "w" for wide-character, "t" for threads + to make the report more readable. Reorganized the structures + reported to make the categories more apparent. + + add NCURSES_GLOBALS and NCURSES_PRESCREEN to report to show + how similar the different libtinfo configurations are. + * modified some header files to ensure that those include necessary + files except for the previously-documented cases + * added some traces in initialization to show whether a fallback + entry is used. + * made minor optimization to reduce calls to _nc_reserve_pairs These are corrections to existing features: - * fixes for writing extended color pairs in putwin. - * modify no-leaks code for lib_cur_term.c to account for the tgetent - cache. - * amend handling of the repeat_char capability in EmitRange to avoid - scope creep: translate the character to the alternate character - set when the alternate character set is enabled, and do not use - repeat_char for characters past 255. - * improve wide-character implementation of myADDNSTR in - frm_driver.c, which was inconsistent with the normal - implementation. - * modify winnstr and winchnstr to return error if the output pointer - is null, as well as adding a null pointer check of the window - pointer for better compatibility with other implementations. - * modify setupterm to save original tty-modes so that erasechar - works as expected. Also modify _nc_setupscreen to avoid redundant - calls to get original tty-modes. - * modify wattr_set and wattr_get to return ERR if win-parameter is - null, as documented. - * correct order of initialization for traces in use_env and - use_tioctl versus first _tracef calls. - * correct parameters for copywin call in _nc_Synchronize_Attributes - * flush the standard output in _nc_flush for the case where SP is - zero, e.g., when called via putp. This fixes a scenario where - "tput flash" did not work after changes in 20130112. - * amend internal use of tputs to consistently use the number of - lines affected, e.g., for insert/delete character operations. - While merging terminfo source early in 1995, several descriptions - used the "*" proportional delay for these operations, prompting a - change in doupdate. - * correct return-value of extended putwin. - * double-width multibyte characters were not counted properly in - winsnstr and wins_nwstr. - * amend fix for _nc_ripoffline from 20091031 to make test/ditto.c - work in threaded configuration. - * modify _nc_viscbuf2 and _tracecchar_t2 to trace wide-characters as - a whole rather than their multibyte equivalents. - * minor fix in wadd_wchnstr to ensure that each cell has nonzero - width. - * move PUTC_INIT calls next to wcrtomb calls, to avoid carry-over of - error status when processing Unicode values which are not mapped. - * add missing assignment in lib_getch.c to make notimeout work + * fix a special case in PutAttrChar where a cell is marked as + alternate-character set, but the terminal does not actually + support the given graphic character. This would happen in an older + terminal such as vt52, which lacks most line-drawing capability. + * corrected flag for "seq" method of db 1.8.5 interface, needed by + toe on some of the BSDs. + * modify comparison in make_hash.c to correct a special case in + collision handling for Caps-hpux11 + * add extended_slk_color{,_sp} symbols to the appropriate + package/*.{map,sym} files + * modify lib_setup to avoid calling pthread_self() without first + verifying that the address is valid, i.e., for weak symbols + * add a couple of broken-linker symbols to the list of versioned + symbols to help with link-time optimization versus weak symbols. Program improvements - While reviewing user feedback, it became apparent that the differences - between [20]reset (an alias for tset) and "tput reset" were confusing: - * one ([21]tset) updated the terminal modes, but used only part of - the terminfo capabilities for initialization, while - * the other ([22]tput) used all of the terminal capabilities while - neglecting the terminal modes. + Several improvements were made to the utility programs: - On further investigation, it turned out that the differences were - largely an accident due to the way those programs had evolved. + clear - This release eliminates the unnecessary differences, using the same - approach for tput's init (initialization), reset and clear operations - as the separate [23]reset and [24]clear programs. Doing this does not - change the command-line options; existing scripts are unaffected. + + improved logic for clearing with the E3 extension, in case + the terminal scrolls content onto its saved-lines before + actually clearing the display, by clearing the saved-lines + after clearing the display - These are the user-visible changes for the three programs (tput, tset - and clear): - * add the terminal-mode parts of "reset" (aka tset) to the "tput - reset" command, making the two almost the same except for - window-size. - * improve tput's check for being called as "init" or "reset" to - allow for transformed names. - * add "clear" as a possible link/alias to tput. - * amend changes for tput to reset tty modes to "sane" if the program - is run as "reset", like tset. Likewise, ensure that tset sends - either reset- or init-strings. - * add -x option to clear/tput to make the E3 extension optional - * add functionality of "tset -w" to tput, like the "-c" feature this - is not optional in tput. - * add options -T and -V to clear command for compatibility with - tput. - * drop long-obsolete "-n" option from tset. - * modify tset's assignment to TERM in its output to reflect the name - by which the terminal description is found, rather than the - primary name. That was an unnecessary part from the initial - conversion of tset from termcap to terminfo. The termcap library - in 4.3BSD did this to avoid using the short 2-character name - * remove a restriction in tput's support for termcap names which - omitted capabilities normally not shown in termcap translations - * add usage message to clear command - * improve usage messages for tset and tput. + infocmp - Other user-visible improvements and new features include: - * modify tic/infocmp display of numeric values to use hexadecimal - when they are "close" to a power of two, making the result more - readable. - * add "-W" option to tic/infocmp to force long strings to wrap. - + This is in addition to the "-w" option which attempts to fit - capabilities into a given line-length. - + If "-f" option splits line, do not further split it with - "-W". - + Begin a new line when adding "use=" after a wrapped line. - * add "-q" option to infocmp to suppress the "Reconstructed from" - comment from the header, and a corresponding option to tic to - suppress all comments from the "tic -I" output. - * Sorted options in usage message for infocmp, to make it simpler to - see unused letters. - * Updated usage message for tic, adding "-0" option. - * add infocmp/tic "-Q" option, which allows one to dump the compiled - form of the terminal entry, in hexadecimal or base64: - + A "b64:" prefix in the TERMINFO variable tells the terminfo - reader to use base64 according to RFC-3548 as well as - RFC-4648 url/filename-safe format. - + A "hex:" prefix tells the terminfo reader to accept - hexadecimal data as generated by "infocmp -0qQ1". + + omit filtering of "OTxx" names which are used for obsolete + capabilities, when the output is sorted by long-names. This + change helps when making a table of the short/long capability + names. - Other less-visible improvements and new features include: - * modify utility headers such as tic.h to make it clearer which are - externals that are used by tack. - * add "reset" to list of programs whose names might change in - manpages due to program-transformation configure options. - * modify "-T" option of clear and tput to call use_tioctl to obtain - the operating system's notion of the screensize if possible. - * add check in tput for init/reset operands to ensure those use a - terminal. - * modify programs clear, tabs, tput and tset to pass the actual tty - file descriptor to setupterm rather than the standard output or - error, making padding work. - * change tset's initialization to allow it to get settings from the - standard input as well as /dev/tty, to be more effective when - output or error are redirected. - * amend check in tput, tabs and clear to allow those to use the - database-only features in cron if a "-T" option gives a suitable - terminal name. - * improve error message from tset/reset when both stderr/stdout are - redirected to a file or pipe. + tic - Several of the less apparent features deal with translation of - terminfo to termcap (and the reverse), with corresponding checks by - tic: - * modify check in fmt_entry to handle a cancelled reset string. Make - similar fixes in other parts of dump_entry.c and tput.c - * correct read of terminfo entry in which all strings are absent or - explicitly cancelled. Before this fix, the result was that all - were treated as only absent. - * modify infocmp to suppress mixture of absent/cancelled - capabilities that would only show as "NULL, NULL", unless the "-q" - option is used, e.g., to show "-, @" or "@, -". - * correct a warning from tic about keys which are the same, to skip - over missing/cancelled values. - * add check in tic for use of bold, etc., video attributes in the - color capabilities, accounting whether the feature is listed in - ncv. - * add check in tic for unnecessary use of "2" to denote a shifted - special key. - * improve check in tic for delays by also warning about beep/flash - when a delay is not embedded, or if those use the VT100 reverse - video escape without using a delay. - * improve checks in trim_sgr0, comp_parse.c and parse_entry.c, for - cancelled string capabilities. - * add check in tic for some syntax errors of delays, as well as use - of proportional delays for non-line capabilities. - * add check in tic for conflict between ritm, rmso, rmul versus - sgr0. - * add check in _nc_parse_entry for invalid entry name, setting the - name to "invalid" to avoid problems storing entries. - * improve _nc_tparm_analyze, using that to extend the checks made by - tic for reporting inconsistencies between the expected number of - parameters for a capability and the actual. - * remove tic warning about "^?" in string capabilities, which was - marked as an extension; however all Unix implementations support - this and X/Open Curses does not address it. On the other hand, - [25]BSD termcap did not support this feature (until the - [26]mid-1990s). - in _nc_infotocap, added a check to ensure that terminfo "^?" is - not written to termcap. - * modify sscanf calls in _nc_infotocap for patterns "%{number}%+%c" - and "%'char'%+%c" to check that the final character is really "c", - avoiding a case in icl6404 which cannot be converted to termcap. - * in _nc_tic_expand and _nc_infotocap, improved string-length check - when deciding whether to use "^X" or "\xxx" format for control - characters, to make the output of tic/infocmp more predictable. - * limited termcap "%d" width to 2 digits on input, and use "%2" in - preference to "%02" on output. - * correct terminfo/termcap conversion of "%02" and "%03" into "%2" - and "%3"; the result repeated the last character. + + added check for consistent alternate character set + capabilities. + + added check for paired indn/rin. + + added check for terminals with parm_dch vs parm_ich. + + added check for the case where setf/setb are given using + different strings, but provide identical results to + setaf/setab. + + corrected check for ich1. + + changed a too-large terminal entry from a fatal error to a + warning. + toe + + + ignores any hex/b64 $TERMINFO value in the list of terminfo + databases. + + tset + + + replace check in reset command for obsolete "pt" capability + using tbc and hts capabilities as clues + + modify reset to allow for tabstops at intervals other than 8. + + change reset's behavior for margins to simply clear + soft-margins if possible, rather than clearing and then + setting them according to the terminal's width. + + tput + + + add "x" to getopt string so that "tput -x clear" works. + + Several changes were made to the generated ncurses*config scripts and + the analogous ".pc" files to reduce differences between the + configurations they report: + * modified the ncurse*-config and pc-files to more closely match for + the -I and -l options. + * filtered out linker-specs from the --libs report. + * amended the ncurses*-config and pc-files to take into account the + rpath hack which differed between those files. + * modified generated ncurses*config and ncurses.pc, ncursesw.pc, + etc., to list helper libraries such as gpm for static linking. + Examples - Along with the library and utilities, many improvements were made to - the [27]ncurses-examples. + Along with the library and utilities, improvements were made to the + ncurses-examples. Most of this activity aimed at improving the + test-packages. A few changes are more generally useful, e.g., for the + main ncurses test-program, and for analyzing traces using the + tracemunch script: + * improve recovery from error when reading command-character in + test/ncurses.c, showing the relevant error message and not exiting + on EINTR. + * improve tracemunch, by keeping track of TERMINAL* values, and if + tracing was first turned on after initialization, attempt to show + distinct screen, window and terminal names anyway. + * modify tracemunch to accept filename parameters in addition to use + as a pipe/filter. + * update tracemunch to work with perl 5.26.2, which changed the + rules for escaping regular expressions. + * add some checks in tracemunch for undefined variables. + * modify TurnOn/TurnOff macros (in lib_vidattr.c and lib_vid_attr.c) + to avoid expansion of "CUR" in trace. - These changes were made to demonstrate new extensions in ncurses: - * add demo_new_pair program, to demonstrate [28]alloc_pair, - [29]find_pair and [30]free_pair functions. - This program iterates over the possible color combinations, - allocating or initializing color pairs. For best results, choose - screen-width dividing evenly into the number of colors. e.g., + There are other new demo/test programs and reusable examples: - 32x64,32x128 256 colors - 24x44,24x88 88 colors - 32x64,24x128 16 colors + color_content + Demonstrate the color_content and extended_color_content + functions. - * add extended_color program, like the older color_set program, but - using the extended color functions, with and without the - SP-functions interface. - * add picsmap program to fill in some testing issues not met by - dots, using this as the third example in a comparison of the - [31]ncurses versus slang libraries. - The program can directly read X bitmap and pixmap files, - displaying a picture. It can read other image files using - ImageMagick's convert program to translate the image into text. - For 16-, 88- and 256-color terminal descriptions, picsmap can load - a palette file which tells it which color palette entries to use. - For direct-colors, the terminal descriptions use the RGB extension - capability. + demo_tabs + A simple demo of tabs in curses. - There are other new example programs and a few scripts: - * add dots_xcurses program to illustrate a different approach used - for extended colors which can be contrasted with dots_curses. - * add list_keys program show function keys for one or more terminal - descriptions. It uses ncurses's convention of modifiers for - special keys, based on xterm. - * add padview program, to compare pads with direct updates in the - view program. - * add sp_tinfo program to exercise the SP-functions extension of the - low-level terminfo library. - * add test-programs for termattrs and term_attrs functions. - * add test_sgr program to exercise all combinations of the sgr - capability. - * add tput-colorcube demo script, imitating xterm's 88- and - 256-color scripts using tput. - * add tput-initc script to demonstrate how tput may be used to - initialize a color palette from a data file. + dump_window + A portable curses screen-dump, used to compare ncurses screen + contents with Solaris. + pair_content + Demonstrate the pair_content and extended_pair_content + functions. + + report_hashing + Check hash-tables used for terminfo and termcap names. + + parse_rgb + Sample implementation of the ncurses RGB extension from + user_caps.5, used in picsmap and savescreen programs. + A variety of improvements were made to existing programs, both new features as well as options added to make the set of programs more consistent. + * add "-l" option to test/background, to dump screen contents in a + form that lets different curses implementations be compared. + * add "@" command to test/ncurses F-test, to allow rapid jump to + different character pages. + * added enum, regex examples to test/demo_forms + * amend Scaled256() macro in test/picsmap.c to cover the full range + 0..1000 + * corrected pathname used in Ada95 sample programs for explain.txt, + to work with test-packages, and used an awk script to split the + resulting pathname when it would be too long for a single line. + * ignore interrupted system-call in test/ncurses's command-line, + e.g., if the terminal were resized. + * improved ifdef's for TABSIZE variable, to help with AIX/HPUX + ports. - The ncurses program is the largest; a proportionately large number of - changes were made to it: - * modify a/A screens to make exiting on an escape character depend - on the start of keypad and timeout modes, to allow better testing - of function-keys. - add "t" toggle for notimeout function. - * modify layout of b/B screens to allow for additional annotation on - the right margin; some terminals with partial support did not - display well. - * modify c/C screens to allow for extended color pairs. - add z/Z zoom feature to make extended color pairs easier to test. - modify test-screens to take advantage of wide screens, reducing - the number of lines used for 88- and 256-colors. - * modify "d" edit-color screen to optionally read xterm color - palette directly from terminal, as well as handling KEY_RESIZE and - screen-repainting with control/L and control/R. - * add examples to "F" screen for WACS_D_PLUS and WACS_T_PLUS. - * improve "g" screen, correcting ifdef which made the legend not - reflect changes to keypad- and scroll-modes. Added check for - return-value of putwin. - * make "s" test easier to understand which subtests are available - add a corresponding "S" wide-character overlap test-screen. - * add "v" screen to show baudrate and other values. - - These changes were made to the other examples: - * modify blue program to use Unicode values for card-glyphs when - available, as well as improving the check for CP437 and CP850. - * improve demo_menus program, allowing mouse-click on the - menu-headers to switch the active menu. This requires a new - extension option O_MOUSE_MENU to tell the menu driver to put mouse - events which do not apply to the active menu back into the queue - so that the application can handle the event. - * correct logic in demo_terminfo program for "-f" option - * modify ditto program to allow $XTERM_PROG environment variable to - override "xterm" as the name of the program to run in the threaded - configuration. - * add several options to the "dots" test-programs. - * modify filter program: - + illustrate an alternative to getnstr, that polls for input - while updating a clock on the right margin as well as - responding to window size-changes. - + adapt logic used in [32]dialog [33]"--keep-tite" option for - filter program as the "-a" option. When set, filter attempts - to suppress the alternate screen. - * modify knight program to provide the "slow" solution for small - screens using "R", noting that Warnsdorf's method is easily done - with "a". - * modify the savescreen program to add test patterns that exercise - 88-, 256-, etc., colors. - * add options to test_arrays, for selecting termcap vs terminfo, - etc. - * modify the view program: - + expand tabs using the ncurses library rather than in the - test-program. - + eliminate the "-n" option by simply reading the whole file. - + implement page up/down commands. - + remove the very old SIGWINCH example; just use KEY_RESIZE. - * improve animation in xmas program by adding a time-delay in - blinkit. - * modify several test-programs which call use_default_colors to - consistently do this only if the "-d" option is given. - * modify the install-rule for ncurses-examples to put the data files - in the data directory, e.g., /usr/share/ncurses-examples. - * modify several test programs to use new popup_msgs function, - adapted from the help-screen used in the edit_field program. - * modify test data for xterm palettes to use the newer - color4/color12 values. - * improve the tracemunch script: - + show screenXX pointers and thread identifiers as names. - + chang address-parameters of add_wch, color_content and - pair_content to dummy parameters. - Terminal database There are several new terminal descriptions: - dumb-emacs-ansi, dvtm, dvtm-256color, fbterm, iterm2, linux-m1 - minitel entries, putty-noapp, viewdata, and vt100+4bsd - building-block. + alacritty, domterm, kitty, mintty, mintty-direct, ms-terminal, + n7900, nsterm-build309, nsterm-direct, screen5, ti703, ti707, + ti703-w, ti707-w vscode, vscode-direct, xterm-mono, xterm.js - xterm+noalt, xterm+titlestack, xterm+alt1049, xterm+alt+title - building blocks and xterm+direct, xterm+indirect, xterm-direct. - from [34]xterm patch #331. - - several other "-direct" descriptions to address the differences of - other terminal emulators versus xterm-direct. - There are many changes to existing terminal descriptions. Some were updates to several descriptions: - * use xterm+sm+1006 in several terminal descriptions which were - validated as supporting the extended mouse feature for their - respective terminal emulators. - * corrected sgr/sgr0 strings in a few cases reported by tic, making - those correspond to the non-sgr settings where they differ, but - otherwise use ECMA-48 consistently. - * add 0.1sec mandatory delay to flash capabilities using the VT100 - reverse-video control + * use ansi+rep in a dozen places + * add rs1 to konsole, mlterm + * improve several flash capabilities with trailing mandatory delays + * drop ich1 from rxvt-basic, Eterm and mlterm to improve + compatibility with old non-curses programs + * add/use xterm+keypad in xterm-new + * use xterm+sl-twm for consistency, nine places + * improve xm example in xterm+x11mouse and xterm+sm_1006. while others affected specific descriptions. These were retested, to - take into account new/undocumented changes by their developers: + take into account changes by their developers: - iterm, minitel, st, viewdata, nsterm + terminator, st - while these are specific fixes based on user reports, or warnings from - tic: + while these are specific fixes based on reviewing documentation, user + reports, or warnings from tic: - [35]ansi building blocks + adds200: - + restored rmir/smir in ansi+idc to better match original - ansiterm+idc, add alias ansiterm + + fix typo - [36]icl6402 + gnome-256color - + corrected missing comma-separator between string capabilities - in icl6402 and m2-nam + + base entry on "gnome", not "vte", for consistency - [37]interix + interix - + updated using tack and SFU with Windows 7 Ultimate. - + used ^? for kdch1 + + trim unnecessary setf/setb - [38]linux + linux-16color - + made linux3.0 entry the default linux entry - + modify linux2.6 entry to improve line-drawing so that the - linux3.0 entry can be used in non-UTF-8 mode - + omitted selection of ISO-8859-1 for G0 in enacs capability - from linux2.6 entry, to avoid conflict with the user-defined - mapping. The reset feature uses ISO-8859-1 in any case. - + modify flash capability for linux and wyse entries to put the - delay between the reverse/normal escapes rather than after - + modify linux-16color to not mask dim, standout or reverse - with the ncv capability + + accommodate Linux console driver incompatibility introduced + in early 2018 - [39]pccon entries + nsterm-256color: - + fixed some inconsistencies in the pccon* entries - + add bold to pccon+sgr+acs and pccon-base - + add keys f12-f124 to pccon+keys + + add nsterm-build309 to replace nsterm-256color, assigning the + latter as an alias of nsterm, to make mouse work with + nsterm-256color - [40]tmux + regent40: - + corrected sgr string, which used screen's "standout" code - rather than the standard code. - + add settings corresponding to xterm-keys option to reflect - upcoming change to make that option "on" by default - + uncanceled Ms + + renumber function-keys to match manual - [41]vt100 + regent60: - + modify vt100 rs2 string to reset vt52 mode and scrolling - regions - + corrected rs2 string for vt100-nam - + made minor fixes for vt100+4bsd, e.g., delay in sgr for - consistency + + add cd (clr_eos) + + corrected acsc + + add shifted function-keys - [42]vte + tvi950: - + moved SGR 24 and 27 from vte-2014 to vte-2012 - + add a few capabilities fixed in recent VTE development + + added function-key definitions to agree with Televideo 950 + manual + + corrected acsc + + remove bogus kf0 + + add bel - [43]xterm + tvi955: - + add rep to xterm-new, available since [44]late 1996. - + modify xterm+256color and xterm+256setaf to use correct - number of color pairs. - + modify rs1 for xterm-16color, xterm-88color and - xterm-256color to reset palette using oc string as in linux - entry. - + add rs1 capability to xterm-256color - + add oc capability to xterm+256color, allowing palette reset - for xterm - + add op to xterm+256setaf - + modify xterm-r5, xterm-r6 and xterm-xf86-v32 to use xterm+kbs - to match [45]xterm #272, reflecting packager's changes - + used ANSI reply for u8 in xterm-new, to reflect vt220-style - responses that could be returned. - + made xterm-pcolor sgr consistent with other capabilities + + fix typo + vi200: + + + add acsc string, including right/down-arrow + + wy50: + + + corrected acsc + + wy50 and wy60: + + + add shifted function-keys as kF1 to kF16 + + xterm+x11hilite: + + + eliminate unused p5 parameter. + A few entries use extensions (user-defined terminal capabilities): - * add rmxx/smxx ECMA-48 strikeout extension to tmux and xterm-basic - * used RGB capability in new *-direct entries to denote direct-color - feature. + * use xterm+sm+1006 (aka "SGR 1006 mouse") for konsole-base and + putty + * add Smol/Rmol user-defined capability to tmux and vte-2018 + * add Smulx user-defined capability to tmux, vte-2018 Documentation @@ -639,273 +402,279 @@ Release Notes * attempts to improve the description of features which users have found confusing * fills in overlooked descriptions of features which were described - in the [46]NEWS file but treated sketchily in manual pages. + in the NEWS file but treated sketchily in manual pages. - In particular, - * Since the underlying features for [47]tset, [48]tput, and - [49]clear have been better integrated, the documentation now - includes information on how those tools evolved. - In addition to explaining the improved integration of the tools, - the manual pages made it easier to see how the tools are similar - and how they are different. - * The addch manual page has additional information on - [50]portability and differences from other implementations. - * The discussion of color-pairs in the attributes manual page is - improved in its [51]history section. - * The documentation of the chtype, cchar_t types and the attribute - values which can be stored in those types, in particular the - [52]history and [53]portability sections of the attributes manual - page, has been improved. - * improve discussion of [54]portability in the mouse manual. - * The pad manual page has a section on the [55]origin and - portability of pads. - * Differences between SVr4 and X/Open Curses soft-keys are discussed - in a new section on [56]portability. - * There are updated/improved notes on portability in the - [57]resizeterm and [58]wresize manual pages. - In addition to providing background information to explain these features and show how they evolved, there are corrections, clarifications, etc.: - * add note in the [59]addch manual about line-drawing when it - depends upon UTF-8. - * improve discussion of line-drawing characters in the [60]add_wch - manual. - * explain in [61]clear's manual page that it writes to the standard - output. - * improve description of [62]endwin. - * improve discussion of field validation in the [63]form driver - manual page. - * clarify the use of wint_t vs wchar_t in [64]get_wstr manual page. - * clarify in the [65]getch manual that the keypad mode affects an - application's ability to read KEY_MOUSE codes, but does not affect - KEY_RESIZE. - trim some obsolete/incorrect wording about EINTR from the getch - manual page - improve manual pages for [66]getch and [67]get_wch to point out - that they might return user-defined values which have no - predefined names in - * improve description of the -R option in the [68]infocmp manual - page - * clarify in the [69]resizeterm manual page how KEY_RESIZE is pushed - onto the input stream. - * document return value of [70]use_extended_names - * document differences in [71]ESCDELAY versus AIX's implementation - in the variables manual page. - * The _nc_free_tinfo function is now documented in the - [72]memory-leaks manual page, because it could be used in tack for - memory-leak checking. - * add a note to the [73]tic manual page about -W versus -f options. - * improve terminfo manual description of [74]terminfo syntax. - improve terminfo manual page discussion of [75]control- and - graphics- characters. *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Thu Feb 20 19:07:36 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D70A22424EF for ; Thu, 20 Feb 2020 19:07:36 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48NkcS0bRnz4MYD; Thu, 20 Feb 2020 19:07:35 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 75ECE2667E; Thu, 20 Feb 2020 19:07:35 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01KJ7Zka022653; Thu, 20 Feb 2020 19:07:35 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01KJ7TXK022608; Thu, 20 Feb 2020 19:07:29 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002201907.01KJ7TXK022608@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Thu, 20 Feb 2020 19:07:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358179 - in projects/clang1000-import: . bin/sh lib/libc/stdlib lib/ncurses/ncurses libexec/rtld-elf/rtld-libc share/man/man4 stand/efi/libefi stand/efi/loader stand/i386/libi386 stand... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang1000-import: . bin/sh lib/libc/stdlib lib/ncurses/ncurses libexec/rtld-elf/rtld-libc share/man/man4 stand/efi/libefi stand/efi/loader stand/i386/libi386 stand/i386/loader stand/libsa ... X-SVN-Commit-Revision: 358179 X-SVN-Commit-Repository: base 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.29 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, 20 Feb 2020 19:07:36 -0000 Author: dim Date: Thu Feb 20 19:07:29 2020 New Revision: 358179 URL: https://svnweb.freebsd.org/changeset/base/358179 Log: Merge ^/head r358131 through r358178. Added: projects/clang1000-import/stand/libsa/smbios.c - copied unchanged from r358166, head/stand/libsa/smbios.c projects/clang1000-import/stand/libsa/smbios.h - copied unchanged from r358166, head/stand/libsa/smbios.h Deleted: projects/clang1000-import/stand/i386/libi386/smbios.c projects/clang1000-import/stand/i386/libi386/smbios.h Modified: projects/clang1000-import/ObsoleteFiles.inc projects/clang1000-import/UPDATING projects/clang1000-import/bin/sh/miscbltin.c projects/clang1000-import/lib/libc/stdlib/realpath.c projects/clang1000-import/lib/ncurses/ncurses/Makefile projects/clang1000-import/libexec/rtld-elf/rtld-libc/Makefile.inc projects/clang1000-import/share/man/man4/Makefile projects/clang1000-import/stand/efi/libefi/efi_driver_utils.c projects/clang1000-import/stand/efi/libefi/efihttp.c projects/clang1000-import/stand/efi/libefi/efinet.c projects/clang1000-import/stand/efi/libefi/efipart.c projects/clang1000-import/stand/efi/libefi/efizfs.c projects/clang1000-import/stand/efi/libefi/handles.c projects/clang1000-import/stand/efi/loader/Makefile projects/clang1000-import/stand/efi/loader/main.c projects/clang1000-import/stand/i386/libi386/Makefile projects/clang1000-import/stand/i386/loader/main.c projects/clang1000-import/stand/libsa/Makefile projects/clang1000-import/stand/libsa/stand.h projects/clang1000-import/sys/bsm/audit_kevents.h projects/clang1000-import/sys/compat/freebsd32/freebsd32_syscall.h projects/clang1000-import/sys/compat/freebsd32/freebsd32_syscalls.c projects/clang1000-import/sys/compat/freebsd32/freebsd32_sysent.c projects/clang1000-import/sys/compat/freebsd32/freebsd32_systrace_args.c projects/clang1000-import/sys/compat/freebsd32/syscalls.master projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/list.h projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/string.h projects/clang1000-import/sys/dev/ath/if_ath.c projects/clang1000-import/sys/dev/ath/if_ath_rx.c projects/clang1000-import/sys/dev/ath/if_ath_rx_edma.c projects/clang1000-import/sys/dev/pci/pcireg.h projects/clang1000-import/sys/dev/virtio/mmio/virtio_mmio.c projects/clang1000-import/sys/kern/init_sysent.c projects/clang1000-import/sys/kern/kern_exec.c projects/clang1000-import/sys/kern/kern_sig.c projects/clang1000-import/sys/kern/subr_syscall.c projects/clang1000-import/sys/kern/subr_trap.c projects/clang1000-import/sys/kern/syscalls.c projects/clang1000-import/sys/kern/syscalls.master projects/clang1000-import/sys/kern/systrace_args.c projects/clang1000-import/sys/kern/vfs_cache.c projects/clang1000-import/sys/netinet/sctp_constants.h projects/clang1000-import/sys/netinet6/ip6_output.c projects/clang1000-import/sys/security/audit/audit_bsm.c projects/clang1000-import/sys/sys/param.h projects/clang1000-import/sys/sys/signalvar.h projects/clang1000-import/sys/sys/syscall.h projects/clang1000-import/sys/sys/syscall.mk projects/clang1000-import/sys/sys/sysproto.h projects/clang1000-import/sys/vm/vm_radix.c projects/clang1000-import/sys/vm/vnode_pager.c projects/clang1000-import/usr.bin/truss/syscalls.c projects/clang1000-import/usr.sbin/pciconf/cap.c projects/clang1000-import/usr.sbin/pciconf/pciconf.c projects/clang1000-import/usr.sbin/services_mkdb/services_mkdb.c Directory Properties: projects/clang1000-import/ (props changed) Modified: projects/clang1000-import/ObsoleteFiles.inc ============================================================================== --- projects/clang1000-import/ObsoleteFiles.inc Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/ObsoleteFiles.inc Thu Feb 20 19:07:29 2020 (r358179) @@ -273,6 +273,12 @@ OLD_DIRS+=usr/lib/clang/9.0.1/lib/freebsd OLD_DIRS+=usr/lib/clang/9.0.1/lib OLD_DIRS+=usr/lib/clang/9.0.1 +# 20200220: Upgrade of ncurses, shlib bumped to version 9 +OLD_LIBS+=lib/libncurses.so.8 +OLD_LIBS+=lib/libncursesw.so.8 +OLD_LIBS+=usr/lib32/libncurses.so.8 +OLD_LIBS+=usr/lib32/libncursesw.so.8 + # 20200206: Remove elf2aout OLD_FILES+=usr/bin/elf2aout OLD_FILES+=usr/share/man/man1/elf2aout.1.gz Modified: projects/clang1000-import/UPDATING ============================================================================== --- projects/clang1000-import/UPDATING Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/UPDATING Thu Feb 20 19:07:29 2020 (r358179) @@ -32,10 +32,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: information about prerequisites and upgrading, if you are not already using clang 3.5.0 or higher. -20200218: - ncurses has been updated to a newer version (6.1-20200118). After an - update some applications using ncurses may results have some rendering - problems and would need to be rebuilt. +20200220: + ncurses has been updated to a newer version (6.1-20200118). Given the ABI + has changed, users will have to rebuild all the ports that are linked to + ncurses. 20200217: The size of struct vnet and the magic cookie have changed. Modified: projects/clang1000-import/bin/sh/miscbltin.c ============================================================================== --- projects/clang1000-import/bin/sh/miscbltin.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/bin/sh/miscbltin.c Thu Feb 20 19:07:29 2020 (r358179) @@ -66,10 +66,79 @@ __FBSDID("$FreeBSD$"); #undef eflag +#define READ_BUFLEN 1024 +struct fdctx { + int fd; + size_t off; /* offset in buf */ + size_t buflen; + char *ep; /* tail pointer */ + char buf[READ_BUFLEN]; +}; + +static void fdctx_init(int, struct fdctx *); +static void fdctx_destroy(struct fdctx *); +static ssize_t fdgetc(struct fdctx *, char *); int readcmd(int, char **); int umaskcmd(int, char **); int ulimitcmd(int, char **); +static void +fdctx_init(int fd, struct fdctx *fdc) +{ + off_t cur; + + /* Check if fd is seekable. */ + cur = lseek(fd, 0, SEEK_CUR); + *fdc = (struct fdctx){ + .fd = fd, + .buflen = (cur != -1) ? READ_BUFLEN : 1, + .ep = &fdc->buf[0], /* No data */ + }; +} + +static ssize_t +fdgetc(struct fdctx *fdc, char *c) +{ + ssize_t nread; + + if (&fdc->buf[fdc->off] == fdc->ep) { + nread = read(fdc->fd, fdc->buf, fdc->buflen); + if (nread > 0) { + fdc->off = 0; + fdc->ep = fdc->buf + nread; + } else + return (nread); + } + *c = fdc->buf[fdc->off++]; + + return (1); +} + +static void +fdctx_destroy(struct fdctx *fdc) +{ + size_t residue; + + if (fdc->buflen > 1) { + /* + * Reposition the file offset. Here is the layout of buf: + * + * | off + * v + * |*****************|-------| + * buf ep buf+buflen + * |<- residue ->| + * + * off: current character + * ep: offset just after read(2) + * residue: length for reposition + */ + residue = (fdc->ep - fdc->buf) - fdc->off; + if (residue > 0) + (void) lseek(fdc->fd, -residue, SEEK_CUR); + } +} + /* * The read builtin. The -r option causes backslashes to be treated like * ordinary characters. @@ -108,6 +177,7 @@ readcmd(int argc __unused, char **argv __unused) fd_set ifds; ssize_t nread; int sig; + struct fdctx fdctx; rflag = 0; prompt = NULL; @@ -173,8 +243,9 @@ readcmd(int argc __unused, char **argv __unused) backslash = 0; STARTSTACKSTR(p); lastnonifs = lastnonifsws = -1; + fdctx_init(STDIN_FILENO, &fdctx); for (;;) { - nread = read(STDIN_FILENO, &c, 1); + nread = fdgetc(&fdctx, &c); if (nread == -1) { if (errno == EINTR) { sig = pendingsig; @@ -260,6 +331,7 @@ readcmd(int argc __unused, char **argv __unused) STARTSTACKSTR(p); lastnonifs = lastnonifsws = -1; } + fdctx_destroy(&fdctx); STACKSTRNUL(p); /* Modified: projects/clang1000-import/lib/libc/stdlib/realpath.c ============================================================================== --- projects/clang1000-import/lib/libc/stdlib/realpath.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/lib/libc/stdlib/realpath.c Thu Feb 20 19:07:29 2020 (r358179) @@ -42,14 +42,19 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include "un-namespace.h" +#include "libc_private.h" +extern int __realpathat(int fd, const char *path, char *buf, size_t size, + int flags); + /* * Find the real name of path, by removing all ".", ".." and symlink * components. Returns (resolved) on success, or (NULL) on failure, * in which case the path which caused trouble is left in (resolved). */ -static char * +static char * __noinline realpath1(const char *path, char *resolved) { struct stat sb; @@ -222,6 +227,10 @@ realpath(const char * __restrict path, char * __restri m = resolved = malloc(PATH_MAX); if (resolved == NULL) return (NULL); + } + if (__getosreldate() >= 1300080) { + if (__realpathat(AT_FDCWD, path, resolved, PATH_MAX, 0) == 0) + return (resolved); } res = realpath1(path, resolved); if (res == NULL) Modified: projects/clang1000-import/lib/ncurses/ncurses/Makefile ============================================================================== --- projects/clang1000-import/lib/ncurses/ncurses/Makefile Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/lib/ncurses/ncurses/Makefile Thu Feb 20 19:07:29 2020 (r358179) @@ -13,7 +13,7 @@ MK_MAN=no .include "${.CURDIR:H}/config.mk" LIB= ncurses${LIB_SUFFIX} -SHLIB_MAJOR= 8 +SHLIB_MAJOR= 9 NO_LINT= @@ -292,7 +292,6 @@ CLEANFILES= ${GENSRCS} ${GENHDRS} keys.list make_hash make_keys MKterm.h.awk comp_captab.c curses.head CFLAGS+= -DFREEBSD_NATIVE -DTERMIOS -CFLAGS.lib_freeall.c+= -Wno-missing-prototypes # Installed HEADERS= curses.h term.h termcap.h unctrl.h Modified: projects/clang1000-import/libexec/rtld-elf/rtld-libc/Makefile.inc ============================================================================== --- projects/clang1000-import/libexec/rtld-elf/rtld-libc/Makefile.inc Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/libexec/rtld-elf/rtld-libc/Makefile.inc Thu Feb 20 19:07:29 2020 (r358179) @@ -49,7 +49,7 @@ _libc_other_objects= sigsetjmp lstat stat fstat fstata sysarch __sysctl issetugid __getcwd utrace \ thr_self thr_kill pread mmap lseek _exit _fstat _fstatat _fstatfs \ getdirentries _getdirentries _close _fcntl _open _openat _read \ - _sigprocmask _write readlink _setjmp setjmp setjmperr + _sigprocmask _write readlink __realpathat _setjmp setjmp setjmperr # Finally add additional architecture-dependent libc dependencies Modified: projects/clang1000-import/share/man/man4/Makefile ============================================================================== --- projects/clang1000-import/share/man/man4/Makefile Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/share/man/man4/Makefile Thu Feb 20 19:07:29 2020 (r358179) @@ -192,6 +192,7 @@ MAN= aac.4 \ ${_hv_vmbus.4} \ ${_hv_vss.4} \ hwpmc.4 \ + ${_hwpstate_intel.4} \ iavf.4 \ ichsmb.4 \ ${_ichwd.4} \ @@ -787,6 +788,7 @@ _hv_storvsc.4= hv_storvsc.4 _hv_utils.4= hv_utils.4 _hv_vmbus.4= hv_vmbus.4 _hv_vss.4= hv_vss.4 +_hwpstate_intel.4= hwpstate_intel.4 _i8254.4= i8254.4 _ichwd.4= ichwd.4 _if_bxe.4= if_bxe.4 Modified: projects/clang1000-import/stand/efi/libefi/efi_driver_utils.c ============================================================================== --- projects/clang1000-import/stand/efi/libefi/efi_driver_utils.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/efi/libefi/efi_driver_utils.c Thu Feb 20 19:07:29 2020 (r358179) @@ -52,6 +52,8 @@ connect_controllers(EFI_GUID *filter) } handles = malloc(hsize); + if (handles == NULL) + return (EFI_OUT_OF_RESOURCES); nhandles = hsize / sizeof(EFI_HANDLE); status = BS->LocateHandle(ByProtocol, filter, NULL, Modified: projects/clang1000-import/stand/efi/libefi/efihttp.c ============================================================================== --- projects/clang1000-import/stand/efi/libefi/efihttp.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/efi/libefi/efihttp.c Thu Feb 20 19:07:29 2020 (r358179) @@ -701,6 +701,8 @@ efihttp_fs_seek(struct open_file *f, off_t offset, int return (0); if (where == SEEK_SET && fh->offset < offset) { buf = malloc(1500); + if (buf == NULL) + return (ENOMEM); res = offset - fh->offset; while (res > 0) { err = _efihttp_fs_read(f, buf, min(1500, res), &res2); Modified: projects/clang1000-import/stand/efi/libefi/efinet.c ============================================================================== --- projects/clang1000-import/stand/efi/libefi/efinet.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/efi/libefi/efinet.c Thu Feb 20 19:07:29 2020 (r358179) @@ -371,6 +371,8 @@ efinet_dev_init() status = BS->LocateHandle(ByProtocol, &sn_guid, NULL, &sz, NULL); if (status == EFI_BUFFER_TOO_SMALL) { handles = (EFI_HANDLE *)malloc(sz); + if (handles == NULL) + return (ENOMEM); status = BS->LocateHandle(ByProtocol, &sn_guid, NULL, &sz, handles); if (EFI_ERROR(status)) Modified: projects/clang1000-import/stand/efi/libefi/efipart.c ============================================================================== --- projects/clang1000-import/stand/efi/libefi/efipart.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/efi/libefi/efipart.c Thu Feb 20 19:07:29 2020 (r358179) @@ -363,6 +363,8 @@ efipart_inithandles(void) status = BS->LocateHandle(ByProtocol, &blkio_guid, 0, &sz, hin); if (status == EFI_BUFFER_TOO_SMALL) { hin = malloc(sz); + if (hin == NULL) + return (ENOMEM); status = BS->LocateHandle(ByProtocol, &blkio_guid, 0, &sz, hin); if (EFI_ERROR(status)) Modified: projects/clang1000-import/stand/efi/libefi/efizfs.c ============================================================================== --- projects/clang1000-import/stand/efi/libefi/efizfs.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/efi/libefi/efizfs.c Thu Feb 20 19:07:29 2020 (r358179) @@ -86,9 +86,11 @@ insert_zfs(EFI_HANDLE handle, uint64_t guid) zfsinfo_t *zi; zi = malloc(sizeof(zfsinfo_t)); - zi->zi_handle = handle; - zi->zi_pool_guid = guid; - STAILQ_INSERT_TAIL(&zfsinfo, zi, zi_link); + if (zi != NULL) { + zi->zi_handle = handle; + zi->zi_pool_guid = guid; + STAILQ_INSERT_TAIL(&zfsinfo, zi, zi_link); + } } void Modified: projects/clang1000-import/stand/efi/libefi/handles.c ============================================================================== --- projects/clang1000-import/stand/efi/libefi/handles.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/efi/libefi/handles.c Thu Feb 20 19:07:29 2020 (r358179) @@ -52,6 +52,8 @@ efi_register_handles(struct devsw *sw, EFI_HANDLE *han nentries += count; sz = nentries * sizeof(struct entry); entry = (entry == NULL) ? malloc(sz) : realloc(entry, sz); + if (entry == NULL) + return (ENOMEM); for (unit = 0; idx < nentries; idx++, unit++) { entry[idx].handle = handles[unit]; if (aliases != NULL) Modified: projects/clang1000-import/stand/efi/loader/Makefile ============================================================================== --- projects/clang1000-import/stand/efi/loader/Makefile Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/efi/loader/Makefile Thu Feb 20 19:07:29 2020 (r358179) @@ -22,7 +22,6 @@ SRCS= autoload.c \ framebuffer.c \ main.c \ self_reloc.c \ - smbios.c \ vers.c CFLAGS+= -I${.CURDIR}/../loader @@ -45,8 +44,6 @@ CWARNFLAGS.main.c+= -Wno-format .PATH: ${.CURDIR}/../loader .PATH: ${.CURDIR}/../loader/arch/${MACHINE} -# For smbios.c XXX need to abstract properly -.PATH: ${BOOTSRC}/i386/libi386 .include "${.CURDIR}/../loader/arch/${MACHINE}/Makefile.inc" CFLAGS+= -I${.CURDIR} @@ -56,18 +53,6 @@ CFLAGS+= -I${EFISRC}/include/${MACHINE} CFLAGS+= -I${SYSDIR}/contrib/dev/acpica/include CFLAGS+= -I${BOOTSRC}/i386/libi386 CFLAGS+= -DEFI - -.if !defined(BOOT_HIDE_SERIAL_NUMBERS) -# Export serial numbers, UUID, and asset tag from loader. -CFLAGS+= -DSMBIOS_SERIAL_NUMBERS -.if defined(BOOT_LITTLE_ENDIAN_UUID) -# Use little-endian UUID format as defined in SMBIOS 2.6. -CFLAGS+= -DSMBIOS_LITTLE_ENDIAN_UUID -.elif defined(BOOT_NETWORK_ENDIAN_UUID) -# Use network-endian UUID format for backward compatibility. -CFLAGS+= -DSMBIOS_NETWORK_ENDIAN_UUID -.endif -.endif .if defined(HAVE_FDT) && ${MK_FDT} != "no" .include "${BOOTSRC}/fdt.mk" Modified: projects/clang1000-import/stand/efi/loader/main.c ============================================================================== --- projects/clang1000-import/stand/efi/loader/main.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/efi/loader/main.c Thu Feb 20 19:07:29 2020 (r358179) @@ -852,7 +852,11 @@ read_loader_env(const char *name, char *def_fn, bool o } } - +caddr_t +ptov(uintptr_t x) +{ + return ((caddr_t)x); +} EFI_STATUS main(int argc, CHAR16 *argv[]) Modified: projects/clang1000-import/stand/i386/libi386/Makefile ============================================================================== --- projects/clang1000-import/stand/i386/libi386/Makefile Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/i386/libi386/Makefile Thu Feb 20 19:07:29 2020 (r358179) @@ -9,7 +9,7 @@ SRCS= bio.c biosacpi.c biosdisk.c biosmem.c biospnp.c comconsole.c devicename.c elf32_freebsd.c \ elf64_freebsd.c multiboot.c multiboot_tramp.S relocater_tramp.S \ i386_copy.c i386_module.c nullconsole.c pxe.c pxetramp.S \ - smbios.c time.c vidconsole.c amd64_tramp.S spinconsole.c + time.c vidconsole.c amd64_tramp.S spinconsole.c .PATH: ${ZFSSRC} SRCS+= devicename_stubs.c CFLAGS+= -I${ZFSSRC} @@ -26,18 +26,6 @@ CFLAGS+= -DCOMSPEED=${BOOT_COMCONSOLE_SPEED} .ifdef(BOOT_BIOSDISK_DEBUG) # Make the disk code more talkative CFLAGS+= -DDISK_DEBUG -.endif - -.if !defined(BOOT_HIDE_SERIAL_NUMBERS) -# Export serial numbers, UUID, and asset tag from loader. -CFLAGS+= -DSMBIOS_SERIAL_NUMBERS -.if defined(BOOT_LITTLE_ENDIAN_UUID) -# Use little-endian UUID format as defined in SMBIOS 2.6. -CFLAGS+= -DSMBIOS_LITTLE_ENDIAN_UUID -.elif defined(BOOT_NETWORK_ENDIAN_UUID) -# Use network-endian UUID format for backward compatibility. -CFLAGS+= -DSMBIOS_NETWORK_ENDIAN_UUID -.endif .endif # terminal emulation Modified: projects/clang1000-import/stand/i386/loader/main.c ============================================================================== --- projects/clang1000-import/stand/i386/loader/main.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/i386/loader/main.c Thu Feb 20 19:07:29 2020 (r358179) @@ -45,7 +45,7 @@ __FBSDID("$FreeBSD$"); #include "bootstrap.h" #include "common/bootargs.h" #include "libi386/libi386.h" -#include "libi386/smbios.h" +#include #include "btxv86.h" #ifdef LOADER_ZFS_SUPPORT @@ -85,6 +85,12 @@ extern char end[]; static void *heap_top; static void *heap_bottom; + +caddr_t +ptov(uintptr_t x) +{ + return (PTOV(x)); +} int main(void) Modified: projects/clang1000-import/stand/libsa/Makefile ============================================================================== --- projects/clang1000-import/stand/libsa/Makefile Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/libsa/Makefile Thu Feb 20 19:07:29 2020 (r358179) @@ -137,6 +137,20 @@ CLEANFILES+= ${SAFE_INCS} ${STAND_H_INC} ${OTHER_INC} SRCS+= closeall.c dev.c ioctl.c nullfs.c stat.c \ fstat.c close.c lseek.c open.c read.c write.c readdir.c +# SMBios routines +SRCS+= smbios.c +.if !defined(BOOT_HIDE_SERIAL_NUMBERS) +# Export serial numbers, UUID, and asset tag from loader. +CFLAGS.smbios.c+= -DSMBIOS_SERIAL_NUMBERS +.if defined(BOOT_LITTLE_ENDIAN_UUID) +# Use little-endian UUID format as defined in SMBIOS 2.6. +CFLAGS.smbios.c+= -DSMBIOS_LITTLE_ENDIAN_UUID +.elif defined(BOOT_NETWORK_ENDIAN_UUID) +# Use network-endian UUID format for backward compatibility. +CFLAGS.smbios.c+= -DSMBIOS_NETWORK_ENDIAN_UUID +.endif +.endif + # network routines SRCS+= arp.c ether.c ip.c inet_ntoa.c in_cksum.c net.c udp.c netif.c rpc.c Copied: projects/clang1000-import/stand/libsa/smbios.c (from r358166, head/stand/libsa/smbios.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang1000-import/stand/libsa/smbios.c Thu Feb 20 19:07:29 2020 (r358179, copy of r358166, head/stand/libsa/smbios.c) @@ -0,0 +1,447 @@ +/*- + * Copyright (c) 2005-2009 Jung-uk Kim + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#define PTOV(x) ptov(x) + +/* + * Detect SMBIOS and export information about the SMBIOS into the + * environment. + * + * System Management BIOS Reference Specification, v2.6 Final + * http://www.dmtf.org/standards/published_documents/DSP0134_2.6.0.pdf + */ + +/* + * 2.1.1 SMBIOS Structure Table Entry Point + * + * "On non-EFI systems, the SMBIOS Entry Point structure, described below, can + * be located by application software by searching for the anchor-string on + * paragraph (16-byte) boundaries within the physical memory address range + * 000F0000h to 000FFFFFh. This entry point encapsulates an intermediate anchor + * string that is used by some existing DMI browsers." + */ +#define SMBIOS_START 0xf0000 +#define SMBIOS_LENGTH 0x10000 +#define SMBIOS_STEP 0x10 +#define SMBIOS_SIG "_SM_" +#define SMBIOS_DMI_SIG "_DMI_" + +#define SMBIOS_GET8(base, off) (*(uint8_t *)((base) + (off))) +#define SMBIOS_GET16(base, off) (*(uint16_t *)((base) + (off))) +#define SMBIOS_GET32(base, off) (*(uint32_t *)((base) + (off))) + +#define SMBIOS_GETLEN(base) SMBIOS_GET8(base, 0x01) +#define SMBIOS_GETSTR(base) ((base) + SMBIOS_GETLEN(base)) + +struct smbios_attr { + int probed; + caddr_t addr; + size_t length; + size_t count; + int major; + int minor; + int ver; + const char* bios_vendor; + const char* maker; + const char* product; + uint32_t enabled_memory; + uint32_t old_enabled_memory; + uint8_t enabled_sockets; + uint8_t populated_sockets; +}; + +static struct smbios_attr smbios; + +static uint8_t +smbios_checksum(const caddr_t addr, const uint8_t len) +{ + uint8_t sum; + int i; + + for (sum = 0, i = 0; i < len; i++) + sum += SMBIOS_GET8(addr, i); + return (sum); +} + +static caddr_t +smbios_sigsearch(const caddr_t addr, const uint32_t len) +{ + caddr_t cp; + + /* Search on 16-byte boundaries. */ + for (cp = addr; cp < addr + len; cp += SMBIOS_STEP) + if (strncmp(cp, SMBIOS_SIG, 4) == 0 && + smbios_checksum(cp, SMBIOS_GET8(cp, 0x05)) == 0 && + strncmp(cp + 0x10, SMBIOS_DMI_SIG, 5) == 0 && + smbios_checksum(cp + 0x10, 0x0f) == 0) + return (cp); + return (NULL); +} + +static const char* +smbios_getstring(caddr_t addr, const int offset) +{ + caddr_t cp; + int i, idx; + + idx = SMBIOS_GET8(addr, offset); + if (idx != 0) { + cp = SMBIOS_GETSTR(addr); + for (i = 1; i < idx; i++) + cp += strlen(cp) + 1; + return cp; + } + return (NULL); +} + +static void +smbios_setenv(const char *name, caddr_t addr, const int offset) +{ + const char* val; + + val = smbios_getstring(addr, offset); + if (val != NULL) + setenv(name, val, 1); +} + +#ifdef SMBIOS_SERIAL_NUMBERS + +#define UUID_SIZE 16 +#define UUID_TYPE uint32_t +#define UUID_STEP sizeof(UUID_TYPE) +#define UUID_ALL_BITS (UUID_SIZE / UUID_STEP) +#define UUID_GET(base, off) (*(UUID_TYPE *)((base) + (off))) + +static void +smbios_setuuid(const char *name, const caddr_t addr, const int ver) +{ + char uuid[37]; + int byteorder, i, ones, zeros; + UUID_TYPE n; + uint32_t f1; + uint16_t f2, f3; + + for (i = 0, ones = 0, zeros = 0; i < UUID_SIZE; i += UUID_STEP) { + n = UUID_GET(addr, i) + 1; + if (zeros == 0 && n == 0) + ones++; + else if (ones == 0 && n == 1) + zeros++; + else + break; + } + + if (ones != UUID_ALL_BITS && zeros != UUID_ALL_BITS) { + /* + * 3.3.2.1 System UUID + * + * "Although RFC 4122 recommends network byte order for all + * fields, the PC industry (including the ACPI, UEFI, and + * Microsoft specifications) has consistently used + * little-endian byte encoding for the first three fields: + * time_low, time_mid, time_hi_and_version. The same encoding, + * also known as wire format, should also be used for the + * SMBIOS representation of the UUID." + * + * Note: We use network byte order for backward compatibility + * unless SMBIOS version is 2.6+ or little-endian is forced. + */ +#if defined(SMBIOS_LITTLE_ENDIAN_UUID) + byteorder = LITTLE_ENDIAN; +#elif defined(SMBIOS_NETWORK_ENDIAN_UUID) + byteorder = BIG_ENDIAN; +#else + byteorder = ver < 0x0206 ? BIG_ENDIAN : LITTLE_ENDIAN; +#endif + if (byteorder != LITTLE_ENDIAN) { + f1 = ntohl(SMBIOS_GET32(addr, 0)); + f2 = ntohs(SMBIOS_GET16(addr, 4)); + f3 = ntohs(SMBIOS_GET16(addr, 6)); + } else { + f1 = le32toh(SMBIOS_GET32(addr, 0)); + f2 = le16toh(SMBIOS_GET16(addr, 4)); + f3 = le16toh(SMBIOS_GET16(addr, 6)); + } + sprintf(uuid, + "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + f1, f2, f3, SMBIOS_GET8(addr, 8), SMBIOS_GET8(addr, 9), + SMBIOS_GET8(addr, 10), SMBIOS_GET8(addr, 11), + SMBIOS_GET8(addr, 12), SMBIOS_GET8(addr, 13), + SMBIOS_GET8(addr, 14), SMBIOS_GET8(addr, 15)); + setenv(name, uuid, 1); + } +} + +#undef UUID_SIZE +#undef UUID_TYPE +#undef UUID_STEP +#undef UUID_ALL_BITS +#undef UUID_GET + +#endif + +static caddr_t +smbios_parse_table(const caddr_t addr) +{ + caddr_t cp; + int proc, size, osize, type; + + type = SMBIOS_GET8(addr, 0); /* 3.1.2 Structure Header Format */ + switch(type) { + case 0: /* 3.3.1 BIOS Information (Type 0) */ + smbios_setenv("smbios.bios.vendor", addr, 0x04); + smbios_setenv("smbios.bios.version", addr, 0x05); + smbios_setenv("smbios.bios.reldate", addr, 0x08); + break; + + case 1: /* 3.3.2 System Information (Type 1) */ + smbios_setenv("smbios.system.maker", addr, 0x04); + smbios_setenv("smbios.system.product", addr, 0x05); + smbios_setenv("smbios.system.version", addr, 0x06); +#ifdef SMBIOS_SERIAL_NUMBERS + smbios_setenv("smbios.system.serial", addr, 0x07); + smbios_setuuid("smbios.system.uuid", addr + 0x08, smbios.ver); +#endif + if (smbios.major > 2 || + (smbios.major == 2 && smbios.minor >= 4)) { + smbios_setenv("smbios.system.sku", addr, 0x19); + smbios_setenv("smbios.system.family", addr, 0x1a); + } + break; + + case 2: /* 3.3.3 Base Board (or Module) Information (Type 2) */ + smbios_setenv("smbios.planar.maker", addr, 0x04); + smbios_setenv("smbios.planar.product", addr, 0x05); + smbios_setenv("smbios.planar.version", addr, 0x06); +#ifdef SMBIOS_SERIAL_NUMBERS + smbios_setenv("smbios.planar.serial", addr, 0x07); + smbios_setenv("smbios.planar.tag", addr, 0x08); +#endif + smbios_setenv("smbios.planar.location", addr, 0x0a); + break; + + case 3: /* 3.3.4 System Enclosure or Chassis (Type 3) */ + smbios_setenv("smbios.chassis.maker", addr, 0x04); + smbios_setenv("smbios.chassis.version", addr, 0x06); +#ifdef SMBIOS_SERIAL_NUMBERS + smbios_setenv("smbios.chassis.serial", addr, 0x07); + smbios_setenv("smbios.chassis.tag", addr, 0x08); +#endif + break; + + case 4: /* 3.3.5 Processor Information (Type 4) */ + /* + * Offset 18h: Processor Status + * + * Bit 7 Reserved, must be 0 + * Bit 6 CPU Socket Populated + * 1 - CPU Socket Populated + * 0 - CPU Socket Unpopulated + * Bit 5:3 Reserved, must be zero + * Bit 2:0 CPU Status + * 0h - Unknown + * 1h - CPU Enabled + * 2h - CPU Disabled by User via BIOS Setup + * 3h - CPU Disabled by BIOS (POST Error) + * 4h - CPU is Idle, waiting to be enabled + * 5-6h - Reserved + * 7h - Other + */ + proc = SMBIOS_GET8(addr, 0x18); + if ((proc & 0x07) == 1) + smbios.enabled_sockets++; + if ((proc & 0x40) != 0) + smbios.populated_sockets++; + break; + + case 6: /* 3.3.7 Memory Module Information (Type 6, Obsolete) */ + /* + * Offset 0Ah: Enabled Size + * + * Bit 7 Bank connection + * 1 - Double-bank connection + * 0 - Single-bank connection + * Bit 6:0 Size (n), where 2**n is the size in MB + * 7Dh - Not determinable (Installed Size only) + * 7Eh - Module is installed, but no memory + * has been enabled + * 7Fh - Not installed + */ + osize = SMBIOS_GET8(addr, 0x0a) & 0x7f; + if (osize > 0 && osize < 22) + smbios.old_enabled_memory += 1 << (osize + 10); + break; + + case 17: /* 3.3.18 Memory Device (Type 17) */ + /* + * Offset 0Ch: Size + * + * Bit 15 Granularity + * 1 - Value is in kilobytes units + * 0 - Value is in megabytes units + * Bit 14:0 Size + */ + size = SMBIOS_GET16(addr, 0x0c); + if (size != 0 && size != 0xffff) + smbios.enabled_memory += (size & 0x8000) != 0 ? + (size & 0x7fff) : (size << 10); + break; + + default: /* skip other types */ + break; + } + + /* Find structure terminator. */ + cp = SMBIOS_GETSTR(addr); + while (SMBIOS_GET16(cp, 0) != 0) + cp++; + + return (cp + 2); +} + +static caddr_t +smbios_find_struct(int type) +{ + caddr_t dmi; + size_t i; + + if (smbios.addr == NULL) + return (NULL); + + for (dmi = smbios.addr, i = 0; + dmi < smbios.addr + smbios.length && i < smbios.count; i++) { + if (SMBIOS_GET8(dmi, 0) == type) + return dmi; + /* Find structure terminator. */ + dmi = SMBIOS_GETSTR(dmi); + while (SMBIOS_GET16(dmi, 0) != 0) + dmi++; + dmi += 2; + } + + return (NULL); +} + +static void +smbios_probe(const caddr_t addr) +{ + caddr_t saddr, info; + uintptr_t paddr; + + if (smbios.probed) + return; + smbios.probed = 1; + + /* Search signatures and validate checksums. */ + saddr = smbios_sigsearch(addr ? addr : PTOV(SMBIOS_START), + SMBIOS_LENGTH); + if (saddr == NULL) + return; + + smbios.length = SMBIOS_GET16(saddr, 0x16); /* Structure Table Length */ + paddr = SMBIOS_GET32(saddr, 0x18); /* Structure Table Address */ + smbios.count = SMBIOS_GET16(saddr, 0x1c); /* No of SMBIOS Structures */ + smbios.ver = SMBIOS_GET8(saddr, 0x1e); /* SMBIOS BCD Revision */ + + if (smbios.ver != 0) { + smbios.major = smbios.ver >> 4; + smbios.minor = smbios.ver & 0x0f; + if (smbios.major > 9 || smbios.minor > 9) + smbios.ver = 0; + } + if (smbios.ver == 0) { + smbios.major = SMBIOS_GET8(saddr, 0x06);/* SMBIOS Major Version */ + smbios.minor = SMBIOS_GET8(saddr, 0x07);/* SMBIOS Minor Version */ + } + smbios.ver = (smbios.major << 8) | smbios.minor; + smbios.addr = PTOV(paddr); + + /* Get system information from SMBIOS */ + info = smbios_find_struct(0x00); + if (info != NULL) { + smbios.bios_vendor = smbios_getstring(info, 0x04); + } + info = smbios_find_struct(0x01); + if (info != NULL) { + smbios.maker = smbios_getstring(info, 0x04); + smbios.product = smbios_getstring(info, 0x05); + } +} + +void +smbios_detect(const caddr_t addr) +{ + char buf[16]; + caddr_t dmi; + size_t i; + + smbios_probe(addr); + if (smbios.addr == NULL) + return; + + for (dmi = smbios.addr, i = 0; + dmi < smbios.addr + smbios.length && i < smbios.count; i++) + dmi = smbios_parse_table(dmi); + + sprintf(buf, "%d.%d", smbios.major, smbios.minor); + setenv("smbios.version", buf, 1); + if (smbios.enabled_memory > 0 || smbios.old_enabled_memory > 0) { + sprintf(buf, "%u", smbios.enabled_memory > 0 ? + smbios.enabled_memory : smbios.old_enabled_memory); + setenv("smbios.memory.enabled", buf, 1); + } + if (smbios.enabled_sockets > 0) { + sprintf(buf, "%u", smbios.enabled_sockets); + setenv("smbios.socket.enabled", buf, 1); + } + if (smbios.populated_sockets > 0) { + sprintf(buf, "%u", smbios.populated_sockets); + setenv("smbios.socket.populated", buf, 1); + } +} + +static int +smbios_match_str(const char* s1, const char* s2) +{ + return (s1 == NULL || (s2 != NULL && !strcmp(s1, s2))); +} + +int +smbios_match(const char* bios_vendor, const char* maker, + const char* product) +{ + /* XXXRP currently, only called from non-EFI. */ + smbios_probe(NULL); + return (smbios_match_str(bios_vendor, smbios.bios_vendor) && + smbios_match_str(maker, smbios.maker) && + smbios_match_str(product, smbios.product)); +} Copied: projects/clang1000-import/stand/libsa/smbios.h (from r358166, head/stand/libsa/smbios.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang1000-import/stand/libsa/smbios.h Thu Feb 20 19:07:29 2020 (r358179, copy of r358166, head/stand/libsa/smbios.h) @@ -0,0 +1,34 @@ +/*- + * Copyright (c) 2015 Rui Paulo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ +#ifndef _SMBIOS_H_ +#define _SMBIOS_H_ + +void smbios_detect(const caddr_t); +int smbios_match(const char *, const char *, const char *); + +#endif /* _SMBIOS_H_ */ Modified: projects/clang1000-import/stand/libsa/stand.h ============================================================================== --- projects/clang1000-import/stand/libsa/stand.h Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/stand/libsa/stand.h Thu Feb 20 19:07:29 2020 (r358179) @@ -452,4 +452,9 @@ const char *x86_hypervisor(void); #define reallocf(x, y) Reallocf(x, y, NULL, 0) #endif +/* + * va <-> pa routines. MD code must supply. + */ +caddr_t ptov(uintptr_t); + #endif /* STAND_H */ Modified: projects/clang1000-import/sys/bsm/audit_kevents.h ============================================================================== --- projects/clang1000-import/sys/bsm/audit_kevents.h Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/sys/bsm/audit_kevents.h Thu Feb 20 19:07:29 2020 (r358179) @@ -657,6 +657,7 @@ #define AUE_LGETUUID 43261 /* CADETS. */ #define AUE_EXECVEAT 43262 /* FreeBSD/Linux. */ #define AUE_SHMRENAME 43263 /* FreeBSD-specific. */ +#define AUE_REALPATHAT 43264 /* FreeBSD-specific. */ /* * Darwin BSM uses a number of AUE_O_* definitions, which are aliased to the Modified: projects/clang1000-import/sys/compat/freebsd32/freebsd32_syscall.h ============================================================================== --- projects/clang1000-import/sys/compat/freebsd32/freebsd32_syscall.h Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/sys/compat/freebsd32/freebsd32_syscall.h Thu Feb 20 19:07:29 2020 (r358179) @@ -500,4 +500,5 @@ #define FREEBSD32_SYS_shm_open2 571 #define FREEBSD32_SYS_shm_rename 572 #define FREEBSD32_SYS_sigfastblock 573 -#define FREEBSD32_SYS_MAXSYSCALL 574 +#define FREEBSD32_SYS___realpathat 574 +#define FREEBSD32_SYS_MAXSYSCALL 575 Modified: projects/clang1000-import/sys/compat/freebsd32/freebsd32_syscalls.c ============================================================================== --- projects/clang1000-import/sys/compat/freebsd32/freebsd32_syscalls.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/sys/compat/freebsd32/freebsd32_syscalls.c Thu Feb 20 19:07:29 2020 (r358179) @@ -610,4 +610,5 @@ const char *freebsd32_syscallnames[] = { "shm_open2", /* 571 = shm_open2 */ "shm_rename", /* 572 = shm_rename */ "sigfastblock", /* 573 = sigfastblock */ + "__realpathat", /* 574 = __realpathat */ }; Modified: projects/clang1000-import/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- projects/clang1000-import/sys/compat/freebsd32/freebsd32_sysent.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/sys/compat/freebsd32/freebsd32_sysent.c Thu Feb 20 19:07:29 2020 (r358179) @@ -663,4 +663,5 @@ struct sysent freebsd32_sysent[] = { { AS(shm_open2_args), (sy_call_t *)sys_shm_open2, AUE_SHMOPEN, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 571 = shm_open2 */ { AS(shm_rename_args), (sy_call_t *)sys_shm_rename, AUE_SHMRENAME, NULL, 0, 0, 0, SY_THR_STATIC }, /* 572 = shm_rename */ { AS(sigfastblock_args), (sy_call_t *)sys_sigfastblock, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 573 = sigfastblock */ + { AS(__realpathat_args), (sy_call_t *)sys___realpathat, AUE_REALPATHAT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 574 = __realpathat */ }; Modified: projects/clang1000-import/sys/compat/freebsd32/freebsd32_systrace_args.c ============================================================================== --- projects/clang1000-import/sys/compat/freebsd32/freebsd32_systrace_args.c Thu Feb 20 17:26:08 2020 (r358178) +++ projects/clang1000-import/sys/compat/freebsd32/freebsd32_systrace_args.c Thu Feb 20 19:07:29 2020 (r358179) @@ -3363,6 +3363,17 @@ systrace_args(int sysnum, void *params, uint64_t *uarg *n_args = 2; break; } + /* __realpathat */ + case 574: { + struct __realpathat_args *p = params; + iarg[0] = p->fd; /* int */ + uarg[1] = (intptr_t) p->path; /* const char * */ + uarg[2] = (intptr_t) p->buf; /* char * */ + uarg[3] = p->size; /* size_t */ + iarg[4] = p->flags; /* int */ + *n_args = 5; + break; + } default: *n_args = 0; break; @@ -9062,6 +9073,28 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d break; }; break; + /* __realpathat */ + case 574: + switch(ndx) { + case 0: + p = "int"; + break; + case 1: + p = "userland const char *"; + break; + case 2: + p = "userland char *"; + break; + case 3: + p = "size_t"; + break; + case 4: + p = "int"; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Sat Feb 22 09:58:16 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 15D1F2569DC for ; Sat, 22 Feb 2020 09:58:16 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48PkKh07jFz4nxv; Sat, 22 Feb 2020 09:58:16 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EBCCF21B5E; Sat, 22 Feb 2020 09:58:15 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 01M9wF1Q036083; Sat, 22 Feb 2020 09:58:15 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 01M9wBuX036063; Sat, 22 Feb 2020 09:58:11 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202002220958.01M9wBuX036063@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 22 Feb 2020 09:58:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r358239 - in projects/clang1000-import: . bin/sh lib/libc/sys lib/libfetch sys/cam/scsi sys/compat/linuxkpi/common/include/linux sys/compat/linuxkpi/common/src sys/conf sys/dev/acpica s... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang1000-import: . bin/sh lib/libc/sys lib/libfetch sys/cam/scsi sys/compat/linuxkpi/common/include/linux sys/compat/linuxkpi/common/src sys/conf sys/dev/acpica sys/dev/ath sys/dev/ath/at... X-SVN-Commit-Revision: 358239 X-SVN-Commit-Repository: base 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.29 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, 22 Feb 2020 09:58:16 -0000 Author: dim Date: Sat Feb 22 09:58:11 2020 New Revision: 358239 URL: https://svnweb.freebsd.org/changeset/base/358239 Log: Merge r358179 through r358238. PR: 244251 Added: projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/shmem_fs.h - copied unchanged from r358238, head/sys/compat/linuxkpi/common/include/linux/shmem_fs.h projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_shmemfs.c - copied unchanged from r358238, head/sys/compat/linuxkpi/common/src/linux_shmemfs.c Modified: projects/clang1000-import/UPDATING projects/clang1000-import/bin/sh/miscbltin.c projects/clang1000-import/lib/libc/sys/truncate.2 projects/clang1000-import/lib/libfetch/common.c projects/clang1000-import/sys/cam/scsi/scsi_da.c projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/fs.h projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_page.c projects/clang1000-import/sys/conf/files projects/clang1000-import/sys/dev/acpica/acpi_lid.c projects/clang1000-import/sys/dev/ath/ah_osdep.c projects/clang1000-import/sys/dev/ath/ath_rate/sample/sample.c projects/clang1000-import/sys/dev/ath/if_ath_sysctl.c projects/clang1000-import/sys/dev/mlx5/mlx5_ib/mlx5_ib.h projects/clang1000-import/sys/dev/mlx5/mlx5_ib/mlx5_ib_cong.c projects/clang1000-import/sys/dev/otus/if_otus.c projects/clang1000-import/sys/kern/subr_compressor.c projects/clang1000-import/sys/kern/subr_smr.c projects/clang1000-import/sys/kern/subr_trap.c projects/clang1000-import/sys/kern/vfs_lookup.c projects/clang1000-import/sys/modules/linuxkpi/Makefile projects/clang1000-import/sys/net80211/ieee80211_alq.c projects/clang1000-import/sys/net80211/ieee80211_amrr.c projects/clang1000-import/sys/net80211/ieee80211_freebsd.c projects/clang1000-import/sys/net80211/ieee80211_ht.c projects/clang1000-import/sys/net80211/ieee80211_hwmp.c projects/clang1000-import/sys/net80211/ieee80211_mesh.c projects/clang1000-import/sys/net80211/ieee80211_rssadapt.c projects/clang1000-import/sys/net80211/ieee80211_superg.c projects/clang1000-import/sys/netgraph/ng_socket.c projects/clang1000-import/sys/netinet/ip_carp.c projects/clang1000-import/sys/netpfil/pf/if_pfsync.c projects/clang1000-import/sys/netpfil/pf/pf.c projects/clang1000-import/sys/powerpc/booke/pmap.c projects/clang1000-import/sys/security/audit/audit.h projects/clang1000-import/sys/security/audit/audit_arg.c projects/clang1000-import/sys/security/audit/audit_bsm_klib.c projects/clang1000-import/sys/security/audit/audit_private.h projects/clang1000-import/sys/sys/_smr.h projects/clang1000-import/sys/sys/param.h projects/clang1000-import/sys/sys/smr.h projects/clang1000-import/sys/vm/uma_core.c projects/clang1000-import/sys/x86/x86/identcpu.c projects/clang1000-import/tools/bsdbox/Makefile.base projects/clang1000-import/usr.bin/dtc/dtc.cc projects/clang1000-import/usr.sbin/bhyve/iov.c projects/clang1000-import/usr.sbin/bhyve/iov.h projects/clang1000-import/usr.sbin/bhyve/net_backends.c projects/clang1000-import/usr.sbin/bhyve/net_backends.h projects/clang1000-import/usr.sbin/bhyve/pci_virtio_net.c projects/clang1000-import/usr.sbin/iostat/iostat.c projects/clang1000-import/usr.sbin/pstat/pstat.c Directory Properties: projects/clang1000-import/ (props changed) Modified: projects/clang1000-import/UPDATING ============================================================================== --- projects/clang1000-import/UPDATING Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/UPDATING Sat Feb 22 09:58:11 2020 (r358239) @@ -33,7 +33,7 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: using clang 3.5.0 or higher. 20200220: - ncurses has been updated to a newer version (6.1-20200118). Given the ABI + ncurses has been updated to a newer version (6.2-20200215). Given the ABI has changed, users will have to rebuild all the ports that are linked to ncurses. Modified: projects/clang1000-import/bin/sh/miscbltin.c ============================================================================== --- projects/clang1000-import/bin/sh/miscbltin.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/bin/sh/miscbltin.c Sat Feb 22 09:58:11 2020 (r358239) @@ -117,7 +117,7 @@ fdgetc(struct fdctx *fdc, char *c) static void fdctx_destroy(struct fdctx *fdc) { - size_t residue; + off_t residue; if (fdc->buflen > 1) { /* Modified: projects/clang1000-import/lib/libc/sys/truncate.2 ============================================================================== --- projects/clang1000-import/lib/libc/sys/truncate.2 Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/lib/libc/sys/truncate.2 Sat Feb 22 09:58:11 2020 (r358239) @@ -28,7 +28,7 @@ .\" @(#)truncate.2 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd May 4, 2015 +.Dd January 24, 2020 .Dt TRUNCATE 2 .Os .Sh NAME @@ -160,6 +160,9 @@ system calls appeared in These calls should be generalized to allow ranges of bytes in a file to be discarded. .Pp -Use of +Historically, the use of .Fn truncate -to extend a file is not portable. +or +.Fn ftruncate +to extend a file was not portable, but this behavior became required in +.St -p1003.1-2008 . Modified: projects/clang1000-import/lib/libfetch/common.c ============================================================================== --- projects/clang1000-import/lib/libfetch/common.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/lib/libfetch/common.c Sat Feb 22 09:58:11 2020 (r358239) @@ -677,6 +677,7 @@ fetch_connect(const char *host, int port, int af, int if (sockshost) if (!fetch_socks5_init(conn, host, port, verbose)) goto fail; + free(sockshost); if (cais != NULL) freeaddrinfo(cais); if (sais != NULL) @@ -686,7 +687,10 @@ syserr: fetch_syserr(); fail: free(sockshost); - if (sd >= 0) + /* Fully close if it was opened; otherwise just don't leak the fd. */ + if (conn != NULL) + fetch_close(conn); + else if (sd >= 0) close(sd); if (cais != NULL) freeaddrinfo(cais); Modified: projects/clang1000-import/sys/cam/scsi/scsi_da.c ============================================================================== --- projects/clang1000-import/sys/cam/scsi/scsi_da.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/cam/scsi/scsi_da.c Sat Feb 22 09:58:11 2020 (r358239) @@ -342,7 +342,7 @@ struct da_softc { LIST_HEAD(, ccb_hdr) pending_ccbs; int refcount; /* Active xpt_action() calls */ da_state state; - da_flags flags; + u_int flags; da_quirks quirks; int minimum_cmd_size; int error_inject; @@ -2335,11 +2335,11 @@ dasysctlinit(void *context, int pending) "Flags for drive"); SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "rotating", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, - &softc->flags, DA_FLAG_ROTATING, dabitsysctl, "I", + &softc->flags, (u_int)DA_FLAG_ROTATING, dabitsysctl, "I", "Rotating media *DEPRECATED* gone in FreeBSD 14"); SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "unmapped_io", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, - &softc->flags, DA_FLAG_UNMAPPEDIO, dabitsysctl, "I", + &softc->flags, (u_int)DA_FLAG_UNMAPPEDIO, dabitsysctl, "I", "Unmapped I/O support *DEPRECATED* gone in FreeBSD 14"); #ifdef CAM_TEST_FAILURE @@ -2619,11 +2619,11 @@ dadeletemethodchoose(struct da_softc *softc, da_delete static int dabitsysctl(SYSCTL_HANDLER_ARGS) { - int flags = (intptr_t)arg1; - int test = arg2; + u_int *flags = arg1; + u_int test = arg2; int tmpout, error; - tmpout = !!(flags & test); + tmpout = !!(*flags & test); error = SYSCTL_OUT(req, &tmpout, sizeof(tmpout)); if (error || !req->newptr) return (error); Modified: projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/fs.h ============================================================================== --- projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/fs.h Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/fs.h Sat Feb 22 09:58:11 2020 (r358239) @@ -302,25 +302,4 @@ call_mmap(struct linux_file *file, struct vm_area_stru return (file->f_op->mmap(file, vma)); } -/* Shared memory support */ -unsigned long linux_invalidate_mapping_pages(vm_object_t, pgoff_t, pgoff_t); -struct page *linux_shmem_read_mapping_page_gfp(vm_object_t, int, gfp_t); -struct linux_file *linux_shmem_file_setup(const char *, loff_t, unsigned long); -void linux_shmem_truncate_range(vm_object_t, loff_t, loff_t); - -#define invalidate_mapping_pages(...) \ - linux_invalidate_mapping_pages(__VA_ARGS__) - -#define shmem_read_mapping_page(...) \ - linux_shmem_read_mapping_page_gfp(__VA_ARGS__, 0) - -#define shmem_read_mapping_page_gfp(...) \ - linux_shmem_read_mapping_page_gfp(__VA_ARGS__) - -#define shmem_file_setup(...) \ - linux_shmem_file_setup(__VA_ARGS__) - -#define shmem_truncate_range(...) \ - linux_shmem_truncate_range(__VA_ARGS__) - #endif /* _LINUX_FS_H_ */ Copied: projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/shmem_fs.h (from r358238, head/sys/compat/linuxkpi/common/include/linux/shmem_fs.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang1000-import/sys/compat/linuxkpi/common/include/linux/shmem_fs.h Sat Feb 22 09:58:11 2020 (r358239, copy of r358238, head/sys/compat/linuxkpi/common/include/linux/shmem_fs.h) @@ -0,0 +1,55 @@ +/*- + * Copyright (c) 2010 Isilon Systems, Inc. + * Copyright (c) 2010 iX Systems, Inc. + * Copyright (c) 2010 Panasas, Inc. + * Copyright (c) 2013-2018 Mellanox Technologies, Ltd. + * 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 unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ +#ifndef _LINUX_SHMEM_FS_H_ +#define _LINUX_SHMEM_FS_H_ + +/* Shared memory support */ +unsigned long linux_invalidate_mapping_pages(vm_object_t, pgoff_t, pgoff_t); +struct page *linux_shmem_read_mapping_page_gfp(vm_object_t, int, gfp_t); +struct linux_file *linux_shmem_file_setup(const char *, loff_t, unsigned long); +void linux_shmem_truncate_range(vm_object_t, loff_t, loff_t); + +#define invalidate_mapping_pages(...) \ + linux_invalidate_mapping_pages(__VA_ARGS__) + +#define shmem_read_mapping_page(...) \ + linux_shmem_read_mapping_page_gfp(__VA_ARGS__, 0) + +#define shmem_read_mapping_page_gfp(...) \ + linux_shmem_read_mapping_page_gfp(__VA_ARGS__) + +#define shmem_file_setup(...) \ + linux_shmem_file_setup(__VA_ARGS__) + +#define shmem_truncate_range(...) \ + linux_shmem_truncate_range(__VA_ARGS__) + +#endif /* _LINUX_SHMEM_FS_H_ */ Modified: projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_page.c ============================================================================== --- projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_page.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_page.c Sat Feb 22 09:58:11 2020 (r358239) @@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include void si_meminfo(struct sysinfo *si) @@ -274,87 +275,4 @@ int is_vmalloc_addr(const void *addr) { return (vtoslab((vm_offset_t)addr & ~UMA_SLAB_MASK) != NULL); -} - -struct page * -linux_shmem_read_mapping_page_gfp(vm_object_t obj, int pindex, gfp_t gfp) -{ - vm_page_t page; - int rv; - - if ((gfp & GFP_NOWAIT) != 0) - panic("GFP_NOWAIT is unimplemented"); - - VM_OBJECT_WLOCK(obj); - rv = vm_page_grab_valid(&page, obj, pindex, VM_ALLOC_NORMAL | - VM_ALLOC_NOBUSY | VM_ALLOC_WIRED); - VM_OBJECT_WUNLOCK(obj); - if (rv != VM_PAGER_OK) - return (ERR_PTR(-EINVAL)); - return (page); -} - -struct linux_file * -linux_shmem_file_setup(const char *name, loff_t size, unsigned long flags) -{ - struct fileobj { - struct linux_file file __aligned(sizeof(void *)); - struct vnode vnode __aligned(sizeof(void *)); - }; - struct fileobj *fileobj; - struct linux_file *filp; - struct vnode *vp; - int error; - - fileobj = kzalloc(sizeof(*fileobj), GFP_KERNEL); - if (fileobj == NULL) { - error = -ENOMEM; - goto err_0; - } - filp = &fileobj->file; - vp = &fileobj->vnode; - - filp->f_count = 1; - filp->f_vnode = vp; - filp->f_shmem = vm_pager_allocate(OBJT_DEFAULT, NULL, size, - VM_PROT_READ | VM_PROT_WRITE, 0, curthread->td_ucred); - if (filp->f_shmem == NULL) { - error = -ENOMEM; - goto err_1; - } - return (filp); -err_1: - kfree(filp); -err_0: - return (ERR_PTR(error)); -} - -static vm_ooffset_t -linux_invalidate_mapping_pages_sub(vm_object_t obj, vm_pindex_t start, - vm_pindex_t end, int flags) -{ - int start_count, end_count; - - VM_OBJECT_WLOCK(obj); - start_count = obj->resident_page_count; - vm_object_page_remove(obj, start, end, flags); - end_count = obj->resident_page_count; - VM_OBJECT_WUNLOCK(obj); - return (start_count - end_count); -} - -unsigned long -linux_invalidate_mapping_pages(vm_object_t obj, pgoff_t start, pgoff_t end) -{ - - return (linux_invalidate_mapping_pages_sub(obj, start, end, OBJPR_CLEANONLY)); -} - -void -linux_shmem_truncate_range(vm_object_t obj, loff_t lstart, loff_t lend) -{ - vm_pindex_t start = OFF_TO_IDX(lstart + PAGE_SIZE - 1); - vm_pindex_t end = OFF_TO_IDX(lend + 1); - - (void) linux_invalidate_mapping_pages_sub(obj, start, end, 0); } Copied: projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_shmemfs.c (from r358238, head/sys/compat/linuxkpi/common/src/linux_shmemfs.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang1000-import/sys/compat/linuxkpi/common/src/linux_shmemfs.c Sat Feb 22 09:58:11 2020 (r358239, copy of r358238, head/sys/compat/linuxkpi/common/src/linux_shmemfs.c) @@ -0,0 +1,128 @@ +/*- + * Copyright (c) 2010 Isilon Systems, Inc. + * Copyright (c) 2016 Matthew Macy (mmacy@mattmacy.io) + * Copyright (c) 2017 Mellanox Technologies, Ltd. + * 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 unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +struct page * +linux_shmem_read_mapping_page_gfp(vm_object_t obj, int pindex, gfp_t gfp) +{ + vm_page_t page; + int rv; + + if ((gfp & GFP_NOWAIT) != 0) + panic("GFP_NOWAIT is unimplemented"); + + VM_OBJECT_WLOCK(obj); + rv = vm_page_grab_valid(&page, obj, pindex, VM_ALLOC_NORMAL | + VM_ALLOC_NOBUSY | VM_ALLOC_WIRED); + VM_OBJECT_WUNLOCK(obj); + if (rv != VM_PAGER_OK) + return (ERR_PTR(-EINVAL)); + return (page); +} + +struct linux_file * +linux_shmem_file_setup(const char *name, loff_t size, unsigned long flags) +{ + struct fileobj { + struct linux_file file __aligned(sizeof(void *)); + struct vnode vnode __aligned(sizeof(void *)); + }; + struct fileobj *fileobj; + struct linux_file *filp; + struct vnode *vp; + int error; + + fileobj = kzalloc(sizeof(*fileobj), GFP_KERNEL); + if (fileobj == NULL) { + error = -ENOMEM; + goto err_0; + } + filp = &fileobj->file; + vp = &fileobj->vnode; + + filp->f_count = 1; + filp->f_vnode = vp; + filp->f_shmem = vm_pager_allocate(OBJT_DEFAULT, NULL, size, + VM_PROT_READ | VM_PROT_WRITE, 0, curthread->td_ucred); + if (filp->f_shmem == NULL) { + error = -ENOMEM; + goto err_1; + } + return (filp); +err_1: + kfree(filp); +err_0: + return (ERR_PTR(error)); +} + +static vm_ooffset_t +linux_invalidate_mapping_pages_sub(vm_object_t obj, vm_pindex_t start, + vm_pindex_t end, int flags) +{ + int start_count, end_count; + + VM_OBJECT_WLOCK(obj); + start_count = obj->resident_page_count; + vm_object_page_remove(obj, start, end, flags); + end_count = obj->resident_page_count; + VM_OBJECT_WUNLOCK(obj); + return (start_count - end_count); +} + +unsigned long +linux_invalidate_mapping_pages(vm_object_t obj, pgoff_t start, pgoff_t end) +{ + + return (linux_invalidate_mapping_pages_sub(obj, start, end, OBJPR_CLEANONLY)); +} + +void +linux_shmem_truncate_range(vm_object_t obj, loff_t lstart, loff_t lend) +{ + vm_pindex_t start = OFF_TO_IDX(lstart + PAGE_SIZE - 1); + vm_pindex_t end = OFF_TO_IDX(lend + 1); + + (void) linux_invalidate_mapping_pages_sub(obj, start, end, 0); +} Modified: projects/clang1000-import/sys/conf/files ============================================================================== --- projects/clang1000-import/sys/conf/files Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/conf/files Sat Feb 22 09:58:11 2020 (r358239) @@ -4476,6 +4476,8 @@ compat/linuxkpi/common/src/linux_rcu.c optional compa compile-with "${LINUXKPI_C} -I$S/contrib/ck/include" compat/linuxkpi/common/src/linux_schedule.c optional compat_linuxkpi \ compile-with "${LINUXKPI_C}" +compat/linuxkpi/common/src/linux_shmemfs.c optional compat_linuxkpi \ + compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_slab.c optional compat_linuxkpi \ compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_usb.c optional compat_linuxkpi usb \ Modified: projects/clang1000-import/sys/dev/acpica/acpi_lid.c ============================================================================== --- projects/clang1000-import/sys/dev/acpica/acpi_lid.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/dev/acpica/acpi_lid.c Sat Feb 22 09:58:11 2020 (r358239) @@ -124,13 +124,16 @@ acpi_lid_attach(device_t dev) if (acpi_parse_prw(sc->lid_handle, &prw) == 0) AcpiEnableGpe(prw.gpe_handle, prw.gpe_bit); + /* Get the initial lid status, ignore failures */ + (void) acpi_GetInteger(sc->lid_handle, "_LID", &sc->lid_status); + /* * Export the lid status */ SYSCTL_ADD_INT(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "state", CTLFLAG_RD, &sc->lid_status, 0, - "Device set to wake the system"); + "Device state (0 = closed, 1 = open)"); return (0); } @@ -144,6 +147,13 @@ acpi_lid_suspend(device_t dev) static int acpi_lid_resume(device_t dev) { + struct acpi_lid_softc *sc; + + sc = device_get_softc(dev); + + /* Get lid status after resume, ignore failures */ + (void) acpi_GetInteger(sc->lid_handle, "_LID", &sc->lid_status); + return (0); } Modified: projects/clang1000-import/sys/dev/ath/ah_osdep.c ============================================================================== --- projects/clang1000-import/sys/dev/ath/ah_osdep.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/dev/ath/ah_osdep.c Sat Feb 22 09:58:11 2020 (r358239) @@ -93,8 +93,9 @@ extern void DO_HALDEBUG(struct ath_hal *ah, u_int mask #endif /* AH_DEBUG */ /* NB: put this here instead of the driver to avoid circular references */ -SYSCTL_NODE(_hw, OID_AUTO, ath, CTLFLAG_RD, 0, "Atheros driver parameters"); -static SYSCTL_NODE(_hw_ath, OID_AUTO, hal, CTLFLAG_RD, 0, +SYSCTL_NODE(_hw, OID_AUTO, ath, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, + "Atheros driver parameters"); +static SYSCTL_NODE(_hw_ath, OID_AUTO, hal, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "Atheros HAL parameters"); #ifdef AH_DEBUG @@ -236,8 +237,10 @@ sysctl_hw_ath_hal_log(SYSCTL_HANDLER_ARGS) else return (ath_hal_setlogging(enable)); } -SYSCTL_PROC(_hw_ath_hal, OID_AUTO, alq, CTLTYPE_INT|CTLFLAG_RW, - 0, 0, sysctl_hw_ath_hal_log, "I", "Enable HAL register logging"); +SYSCTL_PROC(_hw_ath_hal, OID_AUTO, alq, + CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, + 0, 0, sysctl_hw_ath_hal_log, "I", + "Enable HAL register logging"); SYSCTL_INT(_hw_ath_hal, OID_AUTO, alq_size, CTLFLAG_RW, &ath_hal_alq_qsize, 0, "In-memory log size (#records)"); SYSCTL_INT(_hw_ath_hal, OID_AUTO, alq_lost, CTLFLAG_RW, Modified: projects/clang1000-import/sys/dev/ath/ath_rate/sample/sample.c ============================================================================== --- projects/clang1000-import/sys/dev/ath/ath_rate/sample/sample.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/dev/ath/ath_rate/sample/sample.c Sat Feb 22 09:58:11 2020 (r358239) @@ -1364,17 +1364,17 @@ ath_rate_sysctlattach(struct ath_softc *sc, struct sam struct sysctl_oid *tree = device_get_sysctl_tree(sc->sc_dev); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "smoothing_rate", CTLTYPE_INT | CTLFLAG_RW, ssc, 0, - ath_rate_sysctl_smoothing_rate, "I", + "smoothing_rate", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, + ssc, 0, ath_rate_sysctl_smoothing_rate, "I", "sample: smoothing rate for avg tx time (%%)"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "sample_rate", CTLTYPE_INT | CTLFLAG_RW, ssc, 0, - ath_rate_sysctl_sample_rate, "I", + "sample_rate", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, + ssc, 0, ath_rate_sysctl_sample_rate, "I", "sample: percent air time devoted to sampling new rates (%%)"); /* XXX max_successive_failures, stale_failure_timeout, min_switch */ SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "sample_stats", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_rate_sysctl_stats, "I", "sample: print statistics"); + "sample_stats", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, + sc, 0, ath_rate_sysctl_stats, "I", "sample: print statistics"); } struct ath_ratectrl * Modified: projects/clang1000-import/sys/dev/ath/if_ath_sysctl.c ============================================================================== --- projects/clang1000-import/sys/dev/ath/if_ath_sysctl.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/dev/ath/if_ath_sysctl.c Sat Feb 22 09:58:11 2020 (r358239) @@ -786,16 +786,17 @@ ath_sysctl_alq_attach(struct ath_softc *sc) struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev); struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree); - tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "alq", CTLFLAG_RD, - NULL, "Atheros ALQ logging parameters"); + tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "alq", + CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, + "Atheros ALQ logging parameters"); child = SYSCTL_CHILDREN(tree); SYSCTL_ADD_STRING(ctx, child, OID_AUTO, "filename", CTLFLAG_RW, sc->sc_alq.sc_alq_filename, 0, "ALQ filename"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "enable", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_alq_log, "I", ""); + "enable", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_alq_log, "I", ""); SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "debugmask", CTLFLAG_RW, &sc->sc_alq.sc_alq_debug, 0, @@ -831,21 +832,21 @@ ath_sysctlattach(struct ath_softc *sc) "control debugging KTR"); #endif /* ATH_DEBUG_ALQ */ SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "slottime", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_slottime, "I", "802.11 slot time (us)"); + "slottime", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_slottime, "I", "802.11 slot time (us)"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "acktimeout", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_acktimeout, "I", "802.11 ACK timeout (us)"); + "acktimeout", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_acktimeout, "I", "802.11 ACK timeout (us)"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "ctstimeout", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_ctstimeout, "I", "802.11 CTS timeout (us)"); + "ctstimeout", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_ctstimeout, "I", "802.11 CTS timeout (us)"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "softled", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_softled, "I", "enable/disable software LED support"); + "softled", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_softled, "I", "enable/disable software LED support"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "ledpin", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_ledpin, "I", "GPIO pin connected to LED"); + "ledpin", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_ledpin, "I", "GPIO pin connected to LED"); SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "ledon", CTLFLAG_RW, &sc->sc_ledon, 0, "setting to turn LED on"); @@ -854,8 +855,8 @@ ath_sysctlattach(struct ath_softc *sc) "idle time for inactivity LED (ticks)"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "hardled", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_hardled, "I", "enable/disable hardware LED support"); + "hardled", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_hardled, "I", "enable/disable hardware LED support"); /* XXX Laziness - configure pins, then flip hardled off/on */ SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "led_net_pin", CTLFLAG_RW, &sc->sc_led_net_pin, 0, @@ -865,61 +866,61 @@ ath_sysctlattach(struct ath_softc *sc) "MAC Power LED pin, or -1 to disable"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "txantenna", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_txantenna, "I", "antenna switch"); + "txantenna", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_txantenna, "I", "antenna switch"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "rxantenna", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_rxantenna, "I", "default/rx antenna"); + "rxantenna", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_rxantenna, "I", "default/rx antenna"); if (ath_hal_hasdiversity(ah)) SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "diversity", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_diversity, "I", "antenna diversity"); + "diversity", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, + sc, 0, ath_sysctl_diversity, "I", "antenna diversity"); sc->sc_txintrperiod = ATH_TXINTR_PERIOD; SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "txintrperiod", CTLFLAG_RW, &sc->sc_txintrperiod, 0, "tx descriptor batching"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "diag", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_diag, "I", "h/w diagnostic control"); + "diag", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_diag, "I", "h/w diagnostic control"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "tpscale", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_tpscale, "I", "tx power scaling"); + "tpscale", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_tpscale, "I", "tx power scaling"); if (ath_hal_hastpc(ah)) { SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "tpc", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_tpc, "I", "enable/disable per-packet TPC"); + "tpc", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_tpc, "I", "enable/disable per-packet TPC"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "tpack", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_tpack, "I", "tx power for ack frames"); + "tpack", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, + 0, ath_sysctl_tpack, "I", "tx power for ack frames"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "tpcts", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_tpcts, "I", "tx power for cts frames"); + "tpcts", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, + 0, ath_sysctl_tpcts, "I", "tx power for cts frames"); } if (ath_hal_hasrfsilent(ah)) { SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "rfsilent", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_rfsilent, "I", "h/w RF silent config"); + "rfsilent", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, + sc, 0, ath_sysctl_rfsilent, "I", "h/w RF silent config"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "rfkill", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_rfkill, "I", "enable/disable RF kill switch"); + "rfkill", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, + 0, ath_sysctl_rfkill, "I", "enable/disable RF kill switch"); } SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "txagg", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_txagg, "I", ""); + "txagg", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_txagg, "I", ""); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "forcebstuck", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_forcebstuck, "I", ""); + "forcebstuck", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, + 0, ath_sysctl_forcebstuck, "I", ""); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "hangcheck", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_hangcheck, "I", ""); + "hangcheck", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, + ath_sysctl_hangcheck, "I", ""); if (ath_hal_hasintmit(ah)) { SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "intmit", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_intmit, "I", "interference mitigation"); + "intmit", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, + 0, ath_sysctl_intmit, "I", "interference mitigation"); } sc->sc_monpass = HAL_RXERR_DECRYPT | HAL_RXERR_MIC; SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, @@ -989,8 +990,8 @@ ath_sysctlattach(struct ath_softc *sc) "superframe", CTLFLAG_RD, &sc->sc_tdmabintval, 0, "TDMA calculated super frame"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "setcca", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_setcca, "I", "enable CCA control"); + "setcca", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, + sc, 0, ath_sysctl_setcca, "I", "enable CCA control"); } #endif @@ -1028,7 +1029,8 @@ ath_sysctl_stats_attach_rxphyerr(struct ath_softc *sc, int i; char sn[8]; - tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx_phy_err", CTLFLAG_RD, NULL, "Per-code RX PHY Errors"); + tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx_phy_err", + CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Per-code RX PHY Errors"); child = SYSCTL_CHILDREN(tree); for (i = 0; i < 64; i++) { snprintf(sn, sizeof(sn), "%d", i); @@ -1047,7 +1049,7 @@ ath_sysctl_stats_attach_intr(struct ath_softc *sc, char sn[8]; tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "sync_intr", - CTLFLAG_RD, NULL, "Sync interrupt statistics"); + CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Sync interrupt statistics"); child = SYSCTL_CHILDREN(tree); for (i = 0; i < 32; i++) { snprintf(sn, sizeof(sn), "%d", i); @@ -1065,12 +1067,12 @@ ath_sysctl_stats_attach(struct ath_softc *sc) /* Create "clear" node */ SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "clear_stats", CTLTYPE_INT | CTLFLAG_RW, sc, 0, - ath_sysctl_clearstats, "I", "clear stats"); + "clear_stats", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, + 0, ath_sysctl_clearstats, "I", "clear stats"); /* Create stats node */ - tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD, - NULL, "Statistics"); + tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", + CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Statistics"); child = SYSCTL_CHILDREN(tree); /* This was generated from if_athioctl.h */ @@ -1315,8 +1317,8 @@ ath_sysctl_hal_attach(struct ath_softc *sc) struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev); struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree); - tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "hal", CTLFLAG_RD, - NULL, "Atheros HAL parameters"); + tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "hal", + CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Atheros HAL parameters"); child = SYSCTL_CHILDREN(tree); sc->sc_ah->ah_config.ah_debug = 0; Modified: projects/clang1000-import/sys/dev/mlx5/mlx5_ib/mlx5_ib.h ============================================================================== --- projects/clang1000-import/sys/dev/mlx5/mlx5_ib/mlx5_ib.h Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/dev/mlx5/mlx5_ib/mlx5_ib.h Sat Feb 22 09:58:11 2020 (r358239) @@ -650,9 +650,13 @@ struct mlx5_ib_congestion { struct sysctl_ctx_list ctx; struct sx lock; struct delayed_work dwork; - u64 arg [0]; - MLX5_IB_CONG_PARAMS(MLX5_IB_STATS_VAR) - MLX5_IB_CONG_STATS(MLX5_IB_STATS_VAR) + union { + u64 arg[1]; + struct { + MLX5_IB_CONG_PARAMS(MLX5_IB_STATS_VAR) + MLX5_IB_CONG_STATS(MLX5_IB_STATS_VAR) + }; + }; }; struct mlx5_ib_dev { Modified: projects/clang1000-import/sys/dev/mlx5/mlx5_ib/mlx5_ib_cong.c ============================================================================== --- projects/clang1000-import/sys/dev/mlx5/mlx5_ib/mlx5_ib_cong.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/dev/mlx5/mlx5_ib/mlx5_ib_cong.c Sat Feb 22 09:58:11 2020 (r358239) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2013-2015, Mellanox Technologies, Ltd. All rights reserved. + * Copyright (c) 2013-2020, Mellanox Technologies, Ltd. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -37,7 +37,9 @@ static const char *mlx5_ib_cong_stats_desc[] = { MLX5_IB_CONG_STATS(MLX5_IB_STATS_DESC) }; -#define MLX5_IB_INDEX(field) (__offsetof(struct mlx5_ib_congestion, field) / sizeof(u64)) +#define MLX5_IB_INDEX(field) ( \ + (__offsetof(struct mlx5_ib_congestion, field) - \ + __offsetof(struct mlx5_ib_congestion, arg[0])) / sizeof(u64)) #define MLX5_IB_FLD_MAX(type, field) ((1ULL << __mlx5_bit_sz(type, field)) - 1ULL) #define MLX5_IB_SET_CLIPPED(type, ptr, field, var) do { \ /* rangecheck */ \ Modified: projects/clang1000-import/sys/dev/otus/if_otus.c ============================================================================== --- projects/clang1000-import/sys/dev/otus/if_otus.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/dev/otus/if_otus.c Sat Feb 22 09:58:11 2020 (r358239) @@ -75,7 +75,8 @@ __FBSDID("$FreeBSD$"); #include "if_otusreg.h" static int otus_debug = 0; -static SYSCTL_NODE(_hw_usb, OID_AUTO, otus, CTLFLAG_RW, 0, "USB otus"); +static SYSCTL_NODE(_hw_usb, OID_AUTO, otus, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, + "USB otus"); SYSCTL_INT(_hw_usb_otus, OID_AUTO, debug, CTLFLAG_RWTUN, &otus_debug, 0, "Debug level"); #define OTUS_DEBUG_XMIT 0x00000001 Modified: projects/clang1000-import/sys/kern/subr_compressor.c ============================================================================== --- projects/clang1000-import/sys/kern/subr_compressor.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/kern/subr_compressor.c Sat Feb 22 09:58:11 2020 (r358239) @@ -117,6 +117,13 @@ gz_init(size_t maxiosize, int level) s->gz_stream.next_in = Z_NULL; s->gz_stream.avail_in = 0; + if (level != Z_DEFAULT_COMPRESSION) { + if (level < Z_BEST_SPEED) + level = Z_BEST_SPEED; + else if (level > Z_BEST_COMPRESSION) + level = Z_BEST_COMPRESSION; + } + error = deflateInit2(&s->gz_stream, level, Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); if (error != 0) Modified: projects/clang1000-import/sys/kern/subr_smr.c ============================================================================== --- projects/clang1000-import/sys/kern/subr_smr.c Sat Feb 22 04:49:32 2020 (r358238) +++ projects/clang1000-import/sys/kern/subr_smr.c Sat Feb 22 09:58:11 2020 (r358239) @@ -41,6 +41,8 @@ __FBSDID("$FreeBSD$"); #include /* + * Global Unbounded Sequences (GUS) + * * This is a novel safe memory reclamation technique inspired by * epoch based reclamation from Samy Al Bahra's concurrency kit which * in turn was based on work described in: @@ -53,7 +55,8 @@ __FBSDID("$FreeBSD$"); * This is not an implementation of hazard pointers or related * techniques. The term safe memory reclamation is used as a * generic descriptor for algorithms that defer frees to avoid - * use-after-free errors with lockless datastructures. + * use-after-free errors with lockless datastructures or as + * a mechanism to detect quiescence for writer synchronization. * * The basic approach is to maintain a monotonic write sequence * number that is updated on some application defined granularity. @@ -67,7 +70,7 @@ __FBSDID("$FreeBSD$"); * a global write clock that is used to mark memory on free. * * The write and read sequence numbers can be thought of as a two - * handed clock with readers always advancing towards writers. SMR + * handed clock with readers always advancing towards writers. GUS * maintains the invariant that all readers can safely access memory * that was visible at the time they loaded their copy of the sequence * number. Periodically the read sequence or hand is polled and @@ -80,9 +83,12 @@ __FBSDID("$FreeBSD$"); * A stored sequence number that falls outside of this range has expired * and needs no scan to reclaim. * - * A notable distinction between this SMR and Epoch, qsbr, rcu, etc. is + * A notable distinction between GUS and Epoch, qsbr, rcu, etc. is * that advancing the sequence number is decoupled from detecting its - * observation. This results in a more granular assignment of sequence + * observation. That is to say, the delta between read and write + * sequence numbers is not bound. This can be thought of as a more + * generalized form of epoch which requires them at most one step + * apart. This results in a more granular assignment of sequence * numbers even as read latencies prohibit all or some expiration. * It also allows writers to advance the sequence number and save the * poll for expiration until a later time when it is likely to @@ -164,60 +170,145 @@ static uma_zone_t smr_zone; #define SMR_SEQ_MAX_ADVANCE SMR_SEQ_MAX_DELTA / 2 #endif +/* + * The grace period for lazy (tick based) SMR. + * + * Hardclock is responsible for advancing ticks on a single CPU while every + * CPU receives a regular clock interrupt. The clock interrupts are flushing + * the store buffers and any speculative loads that may violate our invariants. + * Because these interrupts are not synchronized we must wait one additional + * tick in the future to be certain that all processors have had their state + * synchronized by an interrupt. + * + * This assumes that the clock interrupt will only be delayed by other causes + * that will flush the store buffer or prevent access to the section protected + * data. For example, an idle processor, or an system management interrupt, + * or a vm exit. + * + * We must wait one additional tick if we are around the wrap condition + * because the write seq will move forward by two with one interrupt. + */ +#define SMR_LAZY_GRACE 2 +#define SMR_LAZY_GRACE_MAX (SMR_LAZY_GRACE + 1) + +/* + * The maximum sequence number ahead of wr_seq that may still be valid. The + * sequence may not be advanced on write for lazy or deferred SMRs. In this + * case poll needs to attempt to forward the sequence number if the goal is + * within wr_seq + SMR_SEQ_ADVANCE. + */ +#define SMR_SEQ_ADVANCE MAX(SMR_SEQ_INCR, SMR_LAZY_GRACE_MAX) + static SYSCTL_NODE(_debug, OID_AUTO, smr, CTLFLAG_RW, NULL, "SMR Stats"); static counter_u64_t advance = EARLY_COUNTER; -SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, advance, CTLFLAG_RD, &advance, ""); +SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, advance, CTLFLAG_RW, &advance, ""); static counter_u64_t advance_wait = EARLY_COUNTER; -SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, advance_wait, CTLFLAG_RD, &advance_wait, ""); +SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, advance_wait, CTLFLAG_RW, &advance_wait, ""); static counter_u64_t poll = EARLY_COUNTER; -SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, poll, CTLFLAG_RD, &poll, ""); +SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, poll, CTLFLAG_RW, &poll, ""); static counter_u64_t poll_scan = EARLY_COUNTER; -SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, poll_scan, CTLFLAG_RD, &poll_scan, ""); +SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, poll_scan, CTLFLAG_RW, &poll_scan, ""); +static counter_u64_t poll_fail = EARLY_COUNTER; +SYSCTL_COUNTER_U64(_debug_smr, OID_AUTO, poll_fail, CTLFLAG_RW, &poll_fail, ""); - /* - * Advance the write sequence and return the new value for use as the - * wait goal. This guarantees that any changes made by the calling - * thread prior to this call will be visible to all threads after - * rd_seq meets or exceeds the return value. + * Advance a lazy write sequence number. These move forward at the rate of + * ticks. Grace is two ticks in the future. lazy write sequence numbers can + * be even but not SMR_SEQ_INVALID so we pause time for a tick when we wrap. * - * This function may busy loop if the readers are roughly 1 billion - * sequence numbers behind the writers. + * This returns the _current_ write sequence number. The lazy goal sequence + * number is SMR_LAZY_GRACE ticks ahead. */ -smr_seq_t -smr_advance(smr_t smr) +static smr_seq_t +smr_lazy_advance(smr_t smr, smr_shared_t s) { - smr_shared_t s; - smr_seq_t goal, s_rd_seq; + smr_seq_t s_rd_seq, s_wr_seq, goal; + int t; + CRITICAL_ASSERT(curthread); + /* - * It is illegal to enter while in an smr section. + * Load s_wr_seq prior to ticks to ensure that the thread that + * observes the largest value wins. */ - SMR_ASSERT_NOT_ENTERED(smr); + s_wr_seq = atomic_load_acq_int(&s->s_wr_seq); /* - * Modifications not done in a smr section need to be visible - * before advancing the seq. + * We must not allow a zero tick value. We go back in time one tick + * and advance the grace period forward one tick around zero. */ - atomic_thread_fence_rel(); + t = ticks; + if (t == SMR_SEQ_INVALID) + t--; /* - * Load the current read seq before incrementing the goal so - * we are guaranteed it is always < goal. + * The most probable condition that the update already took place. */ - s = zpcpu_get(smr)->c_shared; - s_rd_seq = atomic_load_acq_int(&s->s_rd_seq); + if (__predict_true(t == s_wr_seq)) + goto out; /* - * Increment the shared write sequence by 2. Since it is - * initialized to 1 this means the only valid values are - * odd and an observed value of 0 in a particular CPU means - * it is not currently in a read section. + * After long idle periods the read sequence may fall too far + * behind write. Prevent poll from ever seeing this condition + * by updating the stale rd_seq. This assumes that there can + * be no valid section 2bn ticks old. The rd_seq update must + * be visible before wr_seq to avoid races with other advance + * callers. */ - goal = atomic_fetchadd_int(&s->s_wr_seq, SMR_SEQ_INCR) + SMR_SEQ_INCR; + s_rd_seq = atomic_load_int(&s->s_rd_seq); + if (SMR_SEQ_GT(s_rd_seq, t)) + atomic_cmpset_rel_int(&s->s_rd_seq, s_rd_seq, t); + + /* + * Release to synchronize with the wr_seq load above. Ignore + * cmpset failures from simultaneous updates. + */ + atomic_cmpset_rel_int(&s->s_wr_seq, s_wr_seq, t); counter_u64_add(advance, 1); + /* If we lost either update race another thread did it. */ + s_wr_seq = t; +out: + goal = s_wr_seq + SMR_LAZY_GRACE; + /* Skip over the SMR_SEQ_INVALID tick. */ + if (goal < SMR_LAZY_GRACE) + goal++; + return (goal); +} +/* + * Increment the shared write sequence by 2. Since it is initialized + * to 1 this means the only valid values are odd and an observed value + * of 0 in a particular CPU means it is not currently in a read section. + */ +static smr_seq_t +smr_shared_advance(smr_shared_t s) +{ + + return (atomic_fetchadd_int(&s->s_wr_seq, SMR_SEQ_INCR) + SMR_SEQ_INCR); +} + +/* + * Advance the write sequence number for a normal smr section. If the + * write sequence is too far behind the read sequence we have to poll *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***