IFC @ r245542
This commit is contained in:
commit
9ad6525193
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/projects/bhyve/; revision=245569
@ -38,6 +38,13 @@
|
||||
# xargs -n1 | sort | uniq -d;
|
||||
# done
|
||||
|
||||
# 20130116: removed long unused directories for .1aout section manpages
|
||||
OLD_FILES+=usr/share/man/en.ISO8859-1/man1aout
|
||||
OLD_FILES+=usr/share/man/en.UTF-8/man1aout
|
||||
OLD_DIRS+=usr/share/man/man1aout
|
||||
OLD_DIRS+=usr/share/man/cat1aout
|
||||
OLD_DIRS+=usr/share/man/en.ISO8859-1/cat1aout
|
||||
OLD_DIRS+=usr/share/man/en.UTF-8/cat1aout
|
||||
# 20121230: libdisk removed
|
||||
OLD_FILES+=usr/share/man/man3/libdisk.3.gz usr/include/libdisk.h
|
||||
OLD_FILES+=usr/lib/libdisk.a usr/lib32/libdisk.a
|
||||
|
12
bin/cp/cp.c
12
bin/cp/cp.c
@ -98,30 +98,28 @@ main(int argc, char *argv[])
|
||||
{
|
||||
struct stat to_stat, tmp_stat;
|
||||
enum op type;
|
||||
int Hflag, Lflag, Pflag, ch, fts_options, r, have_trailing_slash;
|
||||
int Hflag, Lflag, ch, fts_options, r, have_trailing_slash;
|
||||
char *target;
|
||||
|
||||
fts_options = FTS_NOCHDIR | FTS_PHYSICAL;
|
||||
Hflag = Lflag = Pflag = 0;
|
||||
Hflag = Lflag = 0;
|
||||
while ((ch = getopt(argc, argv, "HLPRafilnprvx")) != -1)
|
||||
switch (ch) {
|
||||
case 'H':
|
||||
Hflag = 1;
|
||||
Lflag = Pflag = 0;
|
||||
Lflag = 0;
|
||||
break;
|
||||
case 'L':
|
||||
Lflag = 1;
|
||||
Hflag = Pflag = 0;
|
||||
Hflag = 0;
|
||||
break;
|
||||
case 'P':
|
||||
Pflag = 1;
|
||||
Hflag = Lflag = 0;
|
||||
break;
|
||||
case 'R':
|
||||
Rflag = 1;
|
||||
break;
|
||||
case 'a':
|
||||
Pflag = 1;
|
||||
pflag = 1;
|
||||
Rflag = 1;
|
||||
Hflag = Lflag = 0;
|
||||
@ -146,7 +144,7 @@ main(int argc, char *argv[])
|
||||
break;
|
||||
case 'r':
|
||||
rflag = Lflag = 1;
|
||||
Hflag = Pflag = 0;
|
||||
Hflag = 0;
|
||||
break;
|
||||
case 'v':
|
||||
vflag = 1;
|
||||
|
@ -29,8 +29,13 @@
|
||||
{ "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
|
||||
|
||||
#undef SUBTARGET_EXTRA_ASM_SPEC
|
||||
#ifdef TARGET_ARM_EABI
|
||||
#define SUBTARGET_EXTRA_ASM_SPEC \
|
||||
"%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=4} %{fpic|fpie:-k} %{fPIC|fPIE:-k}"
|
||||
#else
|
||||
#define SUBTARGET_EXTRA_ASM_SPEC \
|
||||
"-matpcs %{fpic|fpie:-k} %{fPIC|fPIE:-k}"
|
||||
#endif
|
||||
|
||||
/* Default to full FPA if -mhard-float is specified. */
|
||||
#undef SUBTARGET_ASM_FLOAT_SPEC
|
||||
@ -61,8 +66,25 @@
|
||||
#define TARGET_ENDIAN_DEFAULT 0
|
||||
#endif
|
||||
|
||||
#ifdef TARGET_ARM_EABI
|
||||
/* We default to a soft-float ABI so that binaries can run on all
|
||||
target hardware. */
|
||||
#undef TARGET_DEFAULT_FLOAT_ABI
|
||||
#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT
|
||||
|
||||
#undef ARM_DEFAULT_ABI
|
||||
#define ARM_DEFAULT_ABI ARM_ABI_AAPCS_LINUX
|
||||
|
||||
#undef TARGET_OS_CPP_BUILTINS
|
||||
#define TARGET_OS_CPP_BUILTINS() \
|
||||
do \
|
||||
{ \
|
||||
FBSD_TARGET_OS_CPP_BUILTINS(); \
|
||||
TARGET_BPABI_CPP_BUILTINS(); \
|
||||
} \
|
||||
while (false)
|
||||
#else
|
||||
/* Default it to use ATPCS with soft-VFP. */
|
||||
#undef TARGET_DEFAULT
|
||||
#define TARGET_DEFAULT \
|
||||
(MASK_APCS_FRAME \
|
||||
| TARGET_ENDIAN_DEFAULT)
|
||||
@ -70,6 +92,10 @@
|
||||
#undef ARM_DEFAULT_ABI
|
||||
#define ARM_DEFAULT_ABI ARM_ABI_ATPCS
|
||||
|
||||
#undef FPUTYPE_DEFAULT
|
||||
#define FPUTYPE_DEFAULT FPUTYPE_VFP
|
||||
#endif
|
||||
|
||||
/* Define the actual types of some ANSI-mandated types.
|
||||
Needs to agree with <machine/ansi.h>. GCC defaults come from c-decl.c,
|
||||
c-common.c, and config/<arch>/<arch>.h. */
|
||||
@ -134,5 +160,3 @@ do \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#undef FPUTYPE_DEFAULT
|
||||
#define FPUTYPE_DEFAULT FPUTYPE_VFP
|
||||
|
@ -756,8 +756,6 @@
|
||||
/set uname=man
|
||||
cat1
|
||||
..
|
||||
cat1aout
|
||||
..
|
||||
cat2
|
||||
..
|
||||
cat3
|
||||
@ -795,8 +793,6 @@
|
||||
en.ISO8859-1 uname=root
|
||||
cat1
|
||||
..
|
||||
cat1aout
|
||||
..
|
||||
cat2
|
||||
..
|
||||
cat3
|
||||
@ -835,8 +831,6 @@
|
||||
en.UTF-8 uname=root
|
||||
cat1
|
||||
..
|
||||
cat1aout
|
||||
..
|
||||
cat2
|
||||
..
|
||||
cat3
|
||||
@ -913,8 +907,6 @@
|
||||
..
|
||||
man1
|
||||
..
|
||||
man1aout
|
||||
..
|
||||
man2
|
||||
..
|
||||
man3
|
||||
|
@ -509,7 +509,7 @@ jail_handle_ips_option()
|
||||
esac
|
||||
case "${_type}" in
|
||||
inet) ;;
|
||||
inet6) ;;
|
||||
inet6) ipv6_address_count=$((ipv6_address_count + 1)) ;;
|
||||
*) warn "Could not determine address family. Not going" \
|
||||
"to ${_action} address '${_addr}' for ${_jail}."
|
||||
continue
|
||||
@ -546,6 +546,7 @@ jail_ips()
|
||||
esac
|
||||
|
||||
# Handle addresses.
|
||||
ipv6_address_count=0
|
||||
jail_handle_ips_option ${_action} "${_ip}"
|
||||
# Handle jail_xxx_ip_multi<N>
|
||||
alias=0
|
||||
@ -558,6 +559,12 @@ jail_ips()
|
||||
;;
|
||||
esac
|
||||
done
|
||||
case ${ipv6_address_count} in
|
||||
0) ;;
|
||||
*) # Sleep 1 second to let DAD complete before starting services.
|
||||
sleep 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
jail_prestart()
|
||||
|
@ -24,6 +24,10 @@ CFLAGS+= -I${GCCLIB}/include -I${GCCDIR}/config -I${GCCDIR} -I. \
|
||||
CRTS_CFLAGS= -DCRTSTUFFS_O -DSHARED ${PICFLAG}
|
||||
MKDEP= -DCRT_BEGIN
|
||||
|
||||
.if ${TARGET_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
|
||||
CFLAGS+= -DTARGET_ARM_EABI
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "ia64"
|
||||
BEGINSRC= crtbegin.asm
|
||||
ENDSRC= crtend.asm
|
||||
|
@ -15,6 +15,10 @@ MK_SSP= no
|
||||
|
||||
.include "${.CURDIR}/../../usr.bin/cc/Makefile.tgt"
|
||||
|
||||
.if ${TARGET_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
|
||||
CFLAGS+= -DTARGET_ARM_EABI
|
||||
.endif
|
||||
|
||||
.if ${TARGET_CPUARCH} == "mips"
|
||||
LIB= gcc
|
||||
.endif
|
||||
@ -55,10 +59,13 @@ LIB2FUNCS+= _fixuns${mode}si
|
||||
.endfor
|
||||
|
||||
# Likewise double-word routines.
|
||||
.if ${TARGET_CPUARCH} != "arm" || ${MK_ARM_EABI} == "no"
|
||||
# These are implemented in an ARM specific file but will not be filtered out
|
||||
.for mode in sf df xf tf
|
||||
LIB2FUNCS+= _fix${mode}di _fixuns${mode}di
|
||||
LIB2FUNCS+= _floatdi${mode} _floatundi${mode}
|
||||
.endfor
|
||||
.endif
|
||||
|
||||
LIB2ADD = $(LIB2FUNCS_EXTRA)
|
||||
LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
|
||||
@ -115,15 +122,14 @@ CFLAGS+= -fheinous-gnu-extensions
|
||||
|
||||
LIB1ASMSRC = lib1funcs.asm
|
||||
LIB1ASMFUNCS = _dvmd_tls _bb_init_func
|
||||
LIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c
|
||||
.if ${MK_ARM_EABI} != "no"
|
||||
LIB1ASMFUNCS+= _addsubdf3 _addsubsf3 _cmpdf2 _cmpsf2 _fixdfsi _fixsfsi \
|
||||
_fixunsdfsi _fixunsdfsi _muldivdf3 _muldivsf3 _udivsi3
|
||||
|
||||
# Not now
|
||||
#LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func
|
||||
#LIB1ASMFUNCS+= _call_via_rX _interwork_call_via_rX \
|
||||
# _lshrdi3 _ashrdi3 _ashldi3 \
|
||||
# _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
|
||||
# _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
|
||||
# _fixsfsi _fixunssfsi _floatdidf _floatdisf
|
||||
LIB2ADDEH = unwind-arm.c libunwind.S pr-support.c unwind-c.c
|
||||
.else
|
||||
LIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c
|
||||
.endif
|
||||
.endif
|
||||
|
||||
.if ${TARGET_CPUARCH} == mips
|
||||
@ -329,6 +335,9 @@ CLEANFILES += cs-*.h option*
|
||||
SHLIB_MKMAP = ${GCCDIR}/mkmap-symver.awk
|
||||
SHLIB_MKMAP_OPTS =
|
||||
SHLIB_MAPFILES = ${GCCDIR}/libgcc-std.ver
|
||||
.if ${TARGET_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
|
||||
SHLIB_MAPFILES += ${GCCDIR}/config/arm/libgcc-bpabi.ver
|
||||
.endif
|
||||
VERSION_MAP = libgcc.map
|
||||
|
||||
libgcc.map: ${SHLIB_MKMAP} ${SHLIB_MAPFILES} ${SOBJS} ${OBJS:R:S/$/.So/}
|
||||
|
@ -15,6 +15,11 @@ CFLAGS+= -DIN_GCC -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED
|
||||
CFLAGS+= -D_PTHREADS -DGTHREAD_USE_WEAK
|
||||
CFLAGS+= -I${.CURDIR}/../../usr.bin/cc/cc_tools \
|
||||
-I${GCCLIB}/include -I${GCCDIR}/config -I${GCCDIR} -I.
|
||||
|
||||
.if ${TARGET_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
|
||||
CFLAGS+= -DTARGET_ARM_EABI
|
||||
.endif
|
||||
|
||||
#
|
||||
# Library members defined in libgcov.c.
|
||||
# Defined in libgcov.c, included only in gcov library
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
GCCVER= 4.2
|
||||
GCCDIR= ${.CURDIR}/../../../contrib/gcc
|
||||
GCCLIB= ${.CURDIR}/../../../contrib/gcclibs
|
||||
@ -14,7 +16,7 @@ LIB= stdc++
|
||||
SHLIB_MAJOR= 6
|
||||
|
||||
CFLAGS+= -DIN_GLIBCPP_V3 -DHAVE_CONFIG_H
|
||||
.if ${MACHINE_CPUARCH} == "arm"
|
||||
.if ${MACHINE_CPUARCH} == "arm" && ${MK_ARM_EABI} == "no"
|
||||
CFLAGS+= -D_GLIBCXX_SJLJ_EXCEPTIONS=1
|
||||
.endif
|
||||
CFLAGS+= -I${.CURDIR} -I${SUPDIR} -I${GCCDIR} -I${SRCDIR}/include
|
||||
@ -594,7 +596,13 @@ gthr-default.h: ${GCCDIR}/gthr-posix.h
|
||||
|
||||
CLEANFILES+= ${THRHDRS}
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
|
||||
unwind.h: ${GCCDIR}/config/arm/unwind-arm.h
|
||||
.else
|
||||
unwind.h: ${GCCDIR}/unwind-generic.h
|
||||
.endif
|
||||
|
||||
unwind.h:
|
||||
ln -sf ${.ALLSRC} ${.TARGET}
|
||||
|
||||
SRCS+= unwind.h
|
||||
|
@ -26,6 +26,10 @@ CSTD?= gnu89
|
||||
CFLAGS+= -DCROSS_COMPILE
|
||||
.endif
|
||||
|
||||
.if ${TARGET_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
|
||||
CFLAGS+= -DTARGET_ARM_EABI
|
||||
.endif
|
||||
|
||||
.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb"
|
||||
CFLAGS += -DTARGET_ENDIAN_DEFAULT=MASK_BIG_END
|
||||
.endif
|
||||
|
@ -1,5 +1,8 @@
|
||||
# $FreeBSD$
|
||||
|
||||
NO_MAN=
|
||||
.include <bsd.own.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
.include "../Makefile.fe"
|
||||
|
||||
@ -7,7 +10,6 @@
|
||||
|
||||
PROG= c++filt
|
||||
SRCS= cp-demangle.c
|
||||
NO_MAN=
|
||||
|
||||
CFLAGS+= -DSTANDALONE_DEMANGLER -DVERSION=\"$(GCC_VERSION)\"
|
||||
|
||||
|
@ -1,9 +1,10 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include "../Makefile.inc"
|
||||
NO_MAN=
|
||||
.include <bsd.own.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
|
||||
.PATH: ${GCCDIR}
|
||||
|
||||
PROG= cc1
|
||||
|
@ -1,9 +1,10 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include "../Makefile.inc"
|
||||
NO_MAN=
|
||||
.include <bsd.own.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
|
||||
.PATH: ${GCCDIR}/cp ${GCCDIR}
|
||||
|
||||
PROG= cc1plus
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
.include "../Makefile.ver"
|
||||
|
||||
|
@ -51,6 +51,9 @@ TARGET_INC+= ${GCC_CPU}/elf.h
|
||||
.endif
|
||||
.if ${TARGET_CPUARCH} == "arm"
|
||||
TARGET_INC+= ${GCC_CPU}/aout.h
|
||||
.if ${MK_ARM_EABI} != "no"
|
||||
TARGET_INC+= ${GCC_CPU}/bpabi.h
|
||||
.endif
|
||||
.endif
|
||||
.if ${TARGET_ARCH} == "powerpc64"
|
||||
TARGET_INC+= ${GCC_CPU}/biarch64.h
|
||||
@ -349,7 +352,13 @@ gthr-default.h: ${GCCDIR}/gthr-posix.h
|
||||
|
||||
GENSRCS+= gthr-default.h
|
||||
|
||||
.if ${TARGET_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
|
||||
unwind.h: ${GCCDIR}/config/arm/unwind-arm.h
|
||||
.else
|
||||
unwind.h: ${GCCDIR}/unwind-generic.h
|
||||
.endif
|
||||
|
||||
unwind.h:
|
||||
ln -sf ${.ALLSRC} ${.TARGET}
|
||||
|
||||
GENSRCS+= unwind.h
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
.include "../Makefile.ver"
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
.include "../Makefile.ver"
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
|
||||
INCSDIR=${INCLUDEDIR}/gcc/${GCCVER}
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
# Use our headers in preference to ones from ../cc_tools.
|
||||
CFLAGS+= -I${.CURDIR} -I.
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
# Use our headers in preference to ones from ../cc_tools.
|
||||
CFLAGS+= -I${.CURDIR} -I.
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
#
|
||||
# Make sure we will pick up our config.h file first, not the one from
|
||||
# cc_tools.
|
||||
|
@ -24,7 +24,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd September 13, 2012
|
||||
.Dd January 16, 2013
|
||||
.Dt GRAID 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -274,7 +274,6 @@ complete it there.
|
||||
Do not run GEOM RAID class on migrating volumes under pain of possible data
|
||||
corruption!
|
||||
.Sh 2TiB BARRIERS
|
||||
Promise metadata format does not support disks above 2TiB.
|
||||
NVIDIA metadata format does not support volumes above 2TiB.
|
||||
.Sh SYSCTL VARIABLES
|
||||
The following
|
||||
|
@ -38,6 +38,10 @@ DPADD+= ${LIBGSSAPI} ${LIBKRB5} ${LIBHX509} ${LIBASN1} ${LIBCOM_ERR} ${LIBMD} ${
|
||||
LDADD+= -lgssapi -lkrb5 -lhx509 -lasn1 -lcom_err -lmd -lroken
|
||||
.endif
|
||||
|
||||
.if ${MK_OPENSSH_NONE_CIPHER} != "no"
|
||||
CFLAGS+= -DNONE_CIPHER_ENABLED
|
||||
.endif
|
||||
|
||||
NO_LINT=
|
||||
|
||||
DPADD+= ${LIBCRYPTO} ${LIBCRYPT}
|
||||
|
@ -25,6 +25,10 @@ DPADD+= ${LIBGSSAPI}
|
||||
LDADD+= -lgssapi
|
||||
.endif
|
||||
|
||||
.if ${MK_OPENSSH_NONE_CIPHER} != "no"
|
||||
CFLAGS+= -DNONE_CIPHER_ENABLED
|
||||
.endif
|
||||
|
||||
DPADD+= ${LIBCRYPT} ${LIBCRYPTO}
|
||||
LDADD+= -lcrypt -lcrypto
|
||||
|
||||
|
@ -40,6 +40,10 @@ DPADD+= ${LIBGSSAPI_KRB5} ${LIBGSSAPI} ${LIBKRB5} ${LIBASN1}
|
||||
LDADD+= -lgssapi_krb5 -lgssapi -lkrb5 -lasn1
|
||||
.endif
|
||||
|
||||
.if ${MK_OPENSSH_NONE_CIPHER} != "no"
|
||||
CFLAGS+= -DNONE_CIPHER_ENABLED
|
||||
.endif
|
||||
|
||||
DPADD+= ${LIBCRYPTO} ${LIBCRYPT}
|
||||
LDADD+= -lcrypto -lcrypt
|
||||
|
||||
|
@ -62,7 +62,7 @@ MROFF_CMD?= groff -Tascii -mtty-char -man -t
|
||||
MCOMPRESS_CMD?= ${COMPRESS_CMD}
|
||||
MCOMPRESS_EXT?= ${COMPRESS_EXT}
|
||||
|
||||
SECTIONS= 1 1aout 2 3 4 5 6 7 8 9
|
||||
SECTIONS= 1 2 3 4 5 6 7 8 9
|
||||
.SUFFIXES: ${SECTIONS:S/^/./g}
|
||||
|
||||
# Backwards compatibility.
|
||||
|
@ -343,6 +343,7 @@ __DEFAULT_YES_OPTIONS = \
|
||||
ZONEINFO
|
||||
|
||||
__DEFAULT_NO_OPTIONS = \
|
||||
ARM_EABI \
|
||||
BIND_IDN \
|
||||
BIND_LARGE_FILE \
|
||||
BIND_LIBS \
|
||||
@ -360,6 +361,7 @@ __DEFAULT_NO_OPTIONS = \
|
||||
NMTREE \
|
||||
NAND \
|
||||
OFED \
|
||||
OPENSSH_NONE_CIPHER \
|
||||
SHARED_TOOLCHAIN
|
||||
|
||||
#
|
||||
|
@ -95,8 +95,7 @@ ${PROG}: ${OBJS}
|
||||
.if ${MK_MAN} != "no" && !defined(MAN) && \
|
||||
!defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \
|
||||
!defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \
|
||||
!defined(MAN7) && !defined(MAN8) && !defined(MAN9) && \
|
||||
!defined(MAN1aout)
|
||||
!defined(MAN7) && !defined(MAN8) && !defined(MAN9)
|
||||
MAN= ${PROG}.1
|
||||
MAN1= ${MAN}
|
||||
.endif
|
||||
|
@ -21,7 +21,7 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Portions Copyright 2011 Martin Matuska <mm@FreeBSD.org>
|
||||
* Copyright (c) 2012 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2013 by Delphix. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <sys/zfs_context.h>
|
||||
@ -33,7 +33,76 @@
|
||||
#include <sys/callb.h>
|
||||
|
||||
/*
|
||||
* Pool-wide transaction groups.
|
||||
* ZFS Transaction Groups
|
||||
* ----------------------
|
||||
*
|
||||
* ZFS transaction groups are, as the name implies, groups of transactions
|
||||
* that act on persistent state. ZFS asserts consistency at the granularity of
|
||||
* these transaction groups. Each successive transaction group (txg) is
|
||||
* assigned a 64-bit consecutive identifier. There are three active
|
||||
* transaction group states: open, quiescing, or syncing. At any given time,
|
||||
* there may be an active txg associated with each state; each active txg may
|
||||
* either be processing, or blocked waiting to enter the next state. There may
|
||||
* be up to three active txgs, and there is always a txg in the open state
|
||||
* (though it may be blocked waiting to enter the quiescing state). In broad
|
||||
* strokes, transactions — operations that change in-memory structures — are
|
||||
* accepted into the txg in the open state, and are completed while the txg is
|
||||
* in the open or quiescing states. The accumulated changes are written to
|
||||
* disk in the syncing state.
|
||||
*
|
||||
* Open
|
||||
*
|
||||
* When a new txg becomes active, it first enters the open state. New
|
||||
* transactions — updates to in-memory structures — are assigned to the
|
||||
* currently open txg. There is always a txg in the open state so that ZFS can
|
||||
* accept new changes (though the txg may refuse new changes if it has hit
|
||||
* some limit). ZFS advances the open txg to the next state for a variety of
|
||||
* reasons such as it hitting a time or size threshold, or the execution of an
|
||||
* administrative action that must be completed in the syncing state.
|
||||
*
|
||||
* Quiescing
|
||||
*
|
||||
* After a txg exits the open state, it enters the quiescing state. The
|
||||
* quiescing state is intended to provide a buffer between accepting new
|
||||
* transactions in the open state and writing them out to stable storage in
|
||||
* the syncing state. While quiescing, transactions can continue their
|
||||
* operation without delaying either of the other states. Typically, a txg is
|
||||
* in the quiescing state very briefly since the operations are bounded by
|
||||
* software latencies rather than, say, slower I/O latencies. After all
|
||||
* transactions complete, the txg is ready to enter the next state.
|
||||
*
|
||||
* Syncing
|
||||
*
|
||||
* In the syncing state, the in-memory state built up during the open and (to
|
||||
* a lesser degree) the quiescing states is written to stable storage. The
|
||||
* process of writing out modified data can, in turn modify more data. For
|
||||
* example when we write new blocks, we need to allocate space for them; those
|
||||
* allocations modify metadata (space maps)... which themselves must be
|
||||
* written to stable storage. During the sync state, ZFS iterates, writing out
|
||||
* data until it converges and all in-memory changes have been written out.
|
||||
* The first such pass is the largest as it encompasses all the modified user
|
||||
* data (as opposed to filesystem metadata). Subsequent passes typically have
|
||||
* far less data to write as they consist exclusively of filesystem metadata.
|
||||
*
|
||||
* To ensure convergence, after a certain number of passes ZFS begins
|
||||
* overwriting locations on stable storage that had been allocated earlier in
|
||||
* the syncing state (and subsequently freed). ZFS usually allocates new
|
||||
* blocks to optimize for large, continuous, writes. For the syncing state to
|
||||
* converge however it must complete a pass where no new blocks are allocated
|
||||
* since each allocation requires a modification of persistent metadata.
|
||||
* Further, to hasten convergence, after a prescribed number of passes, ZFS
|
||||
* also defers frees, and stops compressing.
|
||||
*
|
||||
* In addition to writing out user data, we must also execute synctasks during
|
||||
* the syncing context. A synctask is the mechanism by which some
|
||||
* administrative activities work such as creating and destroying snapshots or
|
||||
* datasets. Note that when a synctask is initiated it enters the open txg,
|
||||
* and ZFS then pushes that txg as quickly as possible to completion of the
|
||||
* syncing state in order to reduce the latency of the administrative
|
||||
* activity. To complete the syncing state, ZFS writes out a new uberblock,
|
||||
* the root of the tree of blocks that comprise all state stored on the ZFS
|
||||
* pool. Finally, if there is a quiesced txg waiting, we signal that it can
|
||||
* now transition to the syncing state.
|
||||
*/
|
||||
|
||||
static void txg_sync_thread(void *arg);
|
||||
|
@ -647,18 +647,18 @@ struct adapter {
|
||||
#define TXQ_LOCK_ASSERT_OWNED(txq) EQ_LOCK_ASSERT_OWNED(&(txq)->eq)
|
||||
#define TXQ_LOCK_ASSERT_NOTOWNED(txq) EQ_LOCK_ASSERT_NOTOWNED(&(txq)->eq)
|
||||
|
||||
#define for_each_txq(pi, iter, txq) \
|
||||
txq = &pi->adapter->sge.txq[pi->first_txq]; \
|
||||
for (iter = 0; iter < pi->ntxq; ++iter, ++txq)
|
||||
#define for_each_rxq(pi, iter, rxq) \
|
||||
rxq = &pi->adapter->sge.rxq[pi->first_rxq]; \
|
||||
for (iter = 0; iter < pi->nrxq; ++iter, ++rxq)
|
||||
#define for_each_ofld_txq(pi, iter, ofld_txq) \
|
||||
ofld_txq = &pi->adapter->sge.ofld_txq[pi->first_ofld_txq]; \
|
||||
for (iter = 0; iter < pi->nofldtxq; ++iter, ++ofld_txq)
|
||||
#define for_each_ofld_rxq(pi, iter, ofld_rxq) \
|
||||
ofld_rxq = &pi->adapter->sge.ofld_rxq[pi->first_ofld_rxq]; \
|
||||
for (iter = 0; iter < pi->nofldrxq; ++iter, ++ofld_rxq)
|
||||
#define for_each_txq(pi, iter, q) \
|
||||
q = &pi->adapter->sge.txq[pi->first_txq]; \
|
||||
for (iter = 0; iter < pi->ntxq; ++iter, ++q)
|
||||
#define for_each_rxq(pi, iter, q) \
|
||||
q = &pi->adapter->sge.rxq[pi->first_rxq]; \
|
||||
for (iter = 0; iter < pi->nrxq; ++iter, ++q)
|
||||
#define for_each_ofld_txq(pi, iter, q) \
|
||||
q = &pi->adapter->sge.ofld_txq[pi->first_ofld_txq]; \
|
||||
for (iter = 0; iter < pi->nofldtxq; ++iter, ++q)
|
||||
#define for_each_ofld_rxq(pi, iter, q) \
|
||||
q = &pi->adapter->sge.ofld_rxq[pi->first_ofld_rxq]; \
|
||||
for (iter = 0; iter < pi->nofldrxq; ++iter, ++q)
|
||||
|
||||
/* One for errors, one for firmware events */
|
||||
#define T4_EXTRA_INTR 2
|
||||
|
@ -5492,12 +5492,56 @@ t4_ioctl(struct cdev *dev, unsigned long cmd, caddr_t data, int fflag,
|
||||
rc = read_i2c(sc, (struct t4_i2c_data *)data);
|
||||
break;
|
||||
case CHELSIO_T4_CLEAR_STATS: {
|
||||
int i;
|
||||
u_int port_id = *(uint32_t *)data;
|
||||
struct port_info *pi;
|
||||
|
||||
if (port_id >= sc->params.nports)
|
||||
return (EINVAL);
|
||||
|
||||
/* MAC stats */
|
||||
t4_clr_port_stats(sc, port_id);
|
||||
|
||||
pi = sc->port[port_id];
|
||||
if (pi->flags & PORT_INIT_DONE) {
|
||||
struct sge_rxq *rxq;
|
||||
struct sge_txq *txq;
|
||||
struct sge_wrq *wrq;
|
||||
|
||||
for_each_rxq(pi, i, rxq) {
|
||||
#if defined(INET) || defined(INET6)
|
||||
rxq->lro.lro_queued = 0;
|
||||
rxq->lro.lro_flushed = 0;
|
||||
#endif
|
||||
rxq->rxcsum = 0;
|
||||
rxq->vlan_extraction = 0;
|
||||
}
|
||||
|
||||
for_each_txq(pi, i, txq) {
|
||||
txq->txcsum = 0;
|
||||
txq->tso_wrs = 0;
|
||||
txq->vlan_insertion = 0;
|
||||
txq->imm_wrs = 0;
|
||||
txq->sgl_wrs = 0;
|
||||
txq->txpkt_wrs = 0;
|
||||
txq->txpkts_wrs = 0;
|
||||
txq->txpkts_pkts = 0;
|
||||
txq->no_dmamap = 0;
|
||||
txq->no_desc = 0;
|
||||
}
|
||||
|
||||
#ifdef TCP_OFFLOAD
|
||||
/* nothing to clear for each ofld_rxq */
|
||||
|
||||
for_each_ofld_txq(pi, i, wrq) {
|
||||
wrq->tx_wrs = 0;
|
||||
wrq->no_desc = 0;
|
||||
}
|
||||
#endif
|
||||
wrq = &sc->sge.ctrlq[pi->port_id];
|
||||
wrq->tx_wrs = 0;
|
||||
wrq->no_desc = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -84,7 +84,7 @@ struct promise_raid_conf {
|
||||
struct promise_raid_disk disk; /* This subdisk info. */
|
||||
uint32_t disk_offset; /* Subdisk offset. */
|
||||
uint32_t disk_sectors; /* Subdisk size */
|
||||
uint32_t rebuild_lba; /* Rebuild position. */
|
||||
uint32_t disk_rebuild; /* Rebuild position. */
|
||||
uint16_t generation; /* Generation number. */
|
||||
uint8_t status; /* Volume status. */
|
||||
#define PROMISE_S_VALID 0x01
|
||||
@ -123,7 +123,18 @@ struct promise_raid_conf {
|
||||
uint32_t magic_4;
|
||||
uint32_t magic_5;
|
||||
uint32_t total_sectors_high;
|
||||
uint32_t filler3[324];
|
||||
uint8_t magic_6;
|
||||
uint8_t sector_size;
|
||||
uint16_t magic_7;
|
||||
uint32_t magic_8[31];
|
||||
uint32_t backup_time;
|
||||
uint16_t magic_9;
|
||||
uint32_t disk_offset_high;
|
||||
uint32_t disk_sectors_high;
|
||||
uint32_t disk_rebuild_high;
|
||||
uint16_t magic_10;
|
||||
uint32_t magic_11[3];
|
||||
uint32_t filler3[284];
|
||||
uint32_t checksum;
|
||||
} __packed;
|
||||
|
||||
@ -191,7 +202,7 @@ g_raid_md_promise_print(struct promise_raid_conf *meta)
|
||||
meta->disk.device, meta->disk.id);
|
||||
printf("disk_offset %u\n", meta->disk_offset);
|
||||
printf("disk_sectors %u\n", meta->disk_sectors);
|
||||
printf("rebuild_lba %u\n", meta->rebuild_lba);
|
||||
printf("disk_rebuild %u\n", meta->disk_rebuild);
|
||||
printf("generation %u\n", meta->generation);
|
||||
printf("status 0x%02x\n", meta->status);
|
||||
printf("type %u\n", meta->type);
|
||||
@ -217,6 +228,11 @@ g_raid_md_promise_print(struct promise_raid_conf *meta)
|
||||
printf("magic_4 0x%08x\n", meta->magic_4);
|
||||
printf("magic_5 0x%08x\n", meta->magic_5);
|
||||
printf("total_sectors_high 0x%08x\n", meta->total_sectors_high);
|
||||
printf("sector_size %u\n", meta->sector_size);
|
||||
printf("backup_time %d\n", meta->backup_time);
|
||||
printf("disk_offset_high 0x%08x\n", meta->disk_offset_high);
|
||||
printf("disk_sectors_high 0x%08x\n", meta->disk_sectors_high);
|
||||
printf("disk_rebuild_high 0x%08x\n", meta->disk_rebuild_high);
|
||||
printf("=================================================\n");
|
||||
}
|
||||
|
||||
@ -244,9 +260,9 @@ promise_meta_find_disk(struct promise_raid_conf *meta, uint64_t id)
|
||||
|
||||
static int
|
||||
promise_meta_unused_range(struct promise_raid_conf **metaarr, int nsd,
|
||||
uint32_t sectors, uint32_t *off, uint32_t *size)
|
||||
off_t sectors, off_t *off, off_t *size)
|
||||
{
|
||||
uint32_t coff, csize;
|
||||
off_t coff, csize, tmp;
|
||||
int i, j;
|
||||
|
||||
sectors -= 131072;
|
||||
@ -257,10 +273,10 @@ promise_meta_unused_range(struct promise_raid_conf **metaarr, int nsd,
|
||||
i = 0;
|
||||
while (1) {
|
||||
for (j = 0; j < nsd; j++) {
|
||||
if (metaarr[j]->disk_offset >= coff) {
|
||||
csize = MIN(csize,
|
||||
metaarr[j]->disk_offset - coff);
|
||||
}
|
||||
tmp = ((off_t)metaarr[j]->disk_offset_high << 32) +
|
||||
metaarr[j]->disk_offset;
|
||||
if (tmp >= coff)
|
||||
csize = MIN(csize, tmp - coff);
|
||||
}
|
||||
if (csize > *size) {
|
||||
*off = coff;
|
||||
@ -268,7 +284,10 @@ promise_meta_unused_range(struct promise_raid_conf **metaarr, int nsd,
|
||||
}
|
||||
if (i >= nsd)
|
||||
break;
|
||||
coff = metaarr[i]->disk_offset + metaarr[i]->disk_sectors;
|
||||
coff = ((off_t)metaarr[i]->disk_offset_high << 32) +
|
||||
metaarr[i]->disk_offset +
|
||||
((off_t)metaarr[i]->disk_sectors_high << 32) +
|
||||
metaarr[i]->disk_sectors;
|
||||
csize = sectors - coff;
|
||||
i++;
|
||||
};
|
||||
@ -369,6 +388,26 @@ promise_meta_read(struct g_consumer *cp, struct promise_raid_conf **metaarr)
|
||||
return (subdisks);
|
||||
}
|
||||
|
||||
/* Remove filler garbage from fields used in newer metadata. */
|
||||
if (meta->disk_offset_high == 0x8b8c8d8e &&
|
||||
meta->disk_sectors_high == 0x8788898a &&
|
||||
meta->disk_rebuild_high == 0x83848586) {
|
||||
meta->disk_offset_high = 0;
|
||||
meta->disk_sectors_high = 0;
|
||||
if (meta->disk_rebuild == UINT32_MAX)
|
||||
meta->disk_rebuild_high = UINT32_MAX;
|
||||
else
|
||||
meta->disk_rebuild_high = 0;
|
||||
if (meta->total_sectors_high == 0x15161718) {
|
||||
meta->total_sectors_high = 0;
|
||||
meta->backup_time = 0;
|
||||
if (meta->rebuild_lba64 == 0x2122232425262728)
|
||||
meta->rebuild_lba64 = UINT64_MAX;
|
||||
}
|
||||
}
|
||||
if (meta->sector_size < 1 || meta->sector_size > 8)
|
||||
meta->sector_size = 1;
|
||||
|
||||
/* Save this part and look for next. */
|
||||
*metaarr = meta;
|
||||
metaarr++;
|
||||
@ -386,8 +425,9 @@ promise_meta_write(struct g_consumer *cp,
|
||||
struct g_provider *pp;
|
||||
struct promise_raid_conf *meta;
|
||||
char *buf;
|
||||
off_t off, size;
|
||||
int error, i, subdisk, fake;
|
||||
uint32_t checksum, *ptr, off, size;
|
||||
uint32_t checksum, *ptr;
|
||||
|
||||
pp = cp->provider;
|
||||
subdisk = 0;
|
||||
@ -409,9 +449,12 @@ promise_meta_write(struct g_consumer *cp,
|
||||
meta->disk.flags = PROMISE_F_ONLINE | PROMISE_F_VALID;
|
||||
meta->disk.number = 0xff;
|
||||
arc4rand(&meta->disk.id, sizeof(meta->disk.id), 0);
|
||||
meta->disk_offset = off;
|
||||
meta->disk_sectors = size;
|
||||
meta->rebuild_lba = UINT32_MAX;
|
||||
meta->disk_offset_high = off >> 32;
|
||||
meta->disk_offset = (uint32_t)off;
|
||||
meta->disk_sectors_high = size >> 32;
|
||||
meta->disk_sectors = (uint32_t)size;
|
||||
meta->disk_rebuild_high = UINT32_MAX;
|
||||
meta->disk_rebuild = UINT32_MAX;
|
||||
fake = 1;
|
||||
}
|
||||
if (meta != NULL) {
|
||||
@ -464,6 +507,7 @@ static int
|
||||
promise_meta_write_spare(struct g_consumer *cp)
|
||||
{
|
||||
struct promise_raid_conf *meta;
|
||||
off_t tmp;
|
||||
int error;
|
||||
|
||||
meta = malloc(sizeof(*meta), M_MD_PROMISE, M_WAITOK | M_ZERO);
|
||||
@ -473,9 +517,11 @@ promise_meta_write_spare(struct g_consumer *cp)
|
||||
meta->disk.flags = PROMISE_F_SPARE | PROMISE_F_ONLINE | PROMISE_F_VALID;
|
||||
meta->disk.number = 0xff;
|
||||
arc4rand(&meta->disk.id, sizeof(meta->disk.id), 0);
|
||||
meta->disk_sectors = cp->provider->mediasize / cp->provider->sectorsize;
|
||||
meta->disk_sectors -= 131072;
|
||||
meta->rebuild_lba = UINT32_MAX;
|
||||
tmp = cp->provider->mediasize / cp->provider->sectorsize - 131072;
|
||||
meta->disk_sectors_high = tmp >> 32;
|
||||
meta->disk_sectors = (uint32_t)tmp;
|
||||
meta->disk_rebuild_high = UINT32_MAX;
|
||||
meta->disk_rebuild = UINT32_MAX;
|
||||
error = promise_meta_write(cp, &meta, 1);
|
||||
free(meta, M_MD_PROMISE);
|
||||
return (error);
|
||||
@ -617,9 +663,8 @@ g_raid_md_promise_start_disk(struct g_raid_disk *disk, int sdn,
|
||||
struct g_raid_md_promise_perdisk *pd;
|
||||
struct g_raid_md_promise_pervolume *pv;
|
||||
struct promise_raid_conf *meta;
|
||||
off_t size;
|
||||
off_t eoff, esize, size;
|
||||
int disk_pos, md_disk_pos, i, resurrection = 0;
|
||||
uint32_t eoff, esize;
|
||||
|
||||
sc = disk->d_softc;
|
||||
pd = (struct g_raid_md_promise_perdisk *)disk->d_md_data;
|
||||
@ -729,8 +774,10 @@ g_raid_md_promise_start_disk(struct g_raid_disk *disk, int sdn,
|
||||
sd->sd_offset = (off_t)eoff * 512;
|
||||
sd->sd_size = (off_t)esize * 512;
|
||||
} else {
|
||||
sd->sd_offset = (off_t)pd->pd_meta[sdn]->disk_offset * 512;
|
||||
sd->sd_size = (off_t)pd->pd_meta[sdn]->disk_sectors * 512;
|
||||
sd->sd_offset = (((off_t)pd->pd_meta[sdn]->disk_offset_high
|
||||
<< 32) + pd->pd_meta[sdn]->disk_offset) * 512;
|
||||
sd->sd_size = (((off_t)pd->pd_meta[sdn]->disk_sectors_high
|
||||
<< 32) + pd->pd_meta[sdn]->disk_sectors) * 512;
|
||||
}
|
||||
|
||||
if (resurrection) {
|
||||
@ -749,7 +796,8 @@ g_raid_md_promise_start_disk(struct g_raid_disk *disk, int sdn,
|
||||
sd->sd_rebuild_pos = 0;
|
||||
else {
|
||||
sd->sd_rebuild_pos =
|
||||
(off_t)pd->pd_meta[sdn]->rebuild_lba * 512;
|
||||
(((off_t)pd->pd_meta[sdn]->disk_rebuild_high << 32) +
|
||||
pd->pd_meta[sdn]->disk_rebuild) * 512;
|
||||
}
|
||||
} else if (!(meta->disks[md_disk_pos].flags & PROMISE_F_ONLINE)) {
|
||||
/* Rebuilding disk. */
|
||||
@ -875,13 +923,15 @@ g_raid_md_promise_start(struct g_raid_volume *vol)
|
||||
vol->v_disks_count = meta->total_disks;
|
||||
vol->v_mediasize = (off_t)meta->total_sectors * 512; //ZZZ
|
||||
if (meta->total_sectors_high < 256) /* If value looks sane. */
|
||||
vol->v_mediasize |=
|
||||
vol->v_mediasize +=
|
||||
((off_t)meta->total_sectors_high << 32) * 512; //ZZZ
|
||||
vol->v_sectorsize = 512; //ZZZ
|
||||
vol->v_sectorsize = 512 * meta->sector_size;
|
||||
for (i = 0; i < vol->v_disks_count; i++) {
|
||||
sd = &vol->v_subdisks[i];
|
||||
sd->sd_offset = (off_t)meta->disk_offset * 512; //ZZZ
|
||||
sd->sd_size = (off_t)meta->disk_sectors * 512; //ZZZ
|
||||
sd->sd_offset = (((off_t)meta->disk_offset_high << 32) +
|
||||
meta->disk_offset) * 512;
|
||||
sd->sd_size = (((off_t)meta->disk_sectors_high << 32) +
|
||||
meta->disk_sectors) * 512;
|
||||
}
|
||||
g_raid_start_volume(vol);
|
||||
|
||||
@ -1213,9 +1263,8 @@ g_raid_md_ctl_promise(struct g_raid_md_object *md,
|
||||
const char *nodename, *verb, *volname, *levelname, *diskname;
|
||||
char *tmp;
|
||||
int *nargs, *force;
|
||||
off_t size, sectorsize, strip;
|
||||
off_t esize, offs[PROMISE_MAX_DISKS], size, sectorsize, strip;
|
||||
intmax_t *sizearg, *striparg;
|
||||
uint32_t offs[PROMISE_MAX_DISKS], esize;
|
||||
int numdisks, i, len, level, qual;
|
||||
int error;
|
||||
|
||||
@ -1323,13 +1372,6 @@ g_raid_md_ctl_promise(struct g_raid_md_object *md,
|
||||
cp->private = disk;
|
||||
g_topology_unlock();
|
||||
|
||||
if (pp->mediasize / pp->sectorsize > UINT32_MAX) {
|
||||
gctl_error(req,
|
||||
"Disk '%s' is too big.", diskname);
|
||||
error = -8;
|
||||
break;
|
||||
}
|
||||
|
||||
g_raid_get_disk_info(disk);
|
||||
|
||||
/* Reserve some space for metadata. */
|
||||
@ -1394,10 +1436,6 @@ g_raid_md_ctl_promise(struct g_raid_md_object *md,
|
||||
gctl_error(req, "Size too small.");
|
||||
return (-13);
|
||||
}
|
||||
if (size > 0xffffffffllu * sectorsize) {
|
||||
gctl_error(req, "Size too big.");
|
||||
return (-14);
|
||||
}
|
||||
|
||||
/* We have all we need, create things: volume, ... */
|
||||
pv = malloc(sizeof(*pv), M_MD_PROMISE, M_WAITOK | M_ZERO);
|
||||
@ -1629,14 +1667,6 @@ g_raid_md_ctl_promise(struct g_raid_md_object *md,
|
||||
pp = cp->provider;
|
||||
g_topology_unlock();
|
||||
|
||||
if (pp->mediasize / pp->sectorsize > UINT32_MAX) {
|
||||
gctl_error(req,
|
||||
"Disk '%s' is too big.", diskname);
|
||||
g_raid_kill_consumer(sc, cp);
|
||||
error = -8;
|
||||
break;
|
||||
}
|
||||
|
||||
pd = malloc(sizeof(*pd), M_MD_PROMISE, M_WAITOK | M_ZERO);
|
||||
|
||||
disk = g_raid_create_disk(sc);
|
||||
@ -1733,9 +1763,9 @@ g_raid_md_write_promise(struct g_raid_md_object *md, struct g_raid_volume *tvol,
|
||||
vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E)
|
||||
meta->array_width /= 2;
|
||||
meta->array_number = vol->v_global_id;
|
||||
meta->total_sectors = vol->v_mediasize / vol->v_sectorsize;
|
||||
meta->total_sectors_high =
|
||||
(vol->v_mediasize / vol->v_sectorsize) >> 32;
|
||||
meta->total_sectors = vol->v_mediasize / 512;
|
||||
meta->total_sectors_high = (vol->v_mediasize / 512) >> 32;
|
||||
meta->sector_size = vol->v_sectorsize / 512;
|
||||
meta->cylinders = meta->total_sectors / (255 * 63) - 1;
|
||||
meta->heads = 254;
|
||||
meta->sectors = 63;
|
||||
@ -1828,15 +1858,24 @@ g_raid_md_write_promise(struct g_raid_md_object *md, struct g_raid_volume *tvol,
|
||||
pd->pd_meta[j] = promise_meta_copy(meta);
|
||||
pd->pd_meta[j]->disk = meta->disks[pos];
|
||||
pd->pd_meta[j]->disk.number = pos;
|
||||
pd->pd_meta[j]->disk_offset_high =
|
||||
(sd->sd_offset / 512) >> 32;
|
||||
pd->pd_meta[j]->disk_offset = sd->sd_offset / 512;
|
||||
pd->pd_meta[j]->disk_sectors_high =
|
||||
(sd->sd_size / 512) >> 32;
|
||||
pd->pd_meta[j]->disk_sectors = sd->sd_size / 512;
|
||||
if (sd->sd_state == G_RAID_SUBDISK_S_REBUILD) {
|
||||
pd->pd_meta[j]->rebuild_lba =
|
||||
pd->pd_meta[j]->disk_rebuild_high =
|
||||
(sd->sd_rebuild_pos / 512) >> 32;
|
||||
pd->pd_meta[j]->disk_rebuild =
|
||||
sd->sd_rebuild_pos / 512;
|
||||
} else if (sd->sd_state < G_RAID_SUBDISK_S_REBUILD)
|
||||
pd->pd_meta[j]->rebuild_lba = 0;
|
||||
else
|
||||
pd->pd_meta[j]->rebuild_lba = UINT32_MAX;
|
||||
} else if (sd->sd_state < G_RAID_SUBDISK_S_REBUILD) {
|
||||
pd->pd_meta[j]->disk_rebuild_high = 0;
|
||||
pd->pd_meta[j]->disk_rebuild = 0;
|
||||
} else {
|
||||
pd->pd_meta[j]->disk_rebuild_high = UINT32_MAX;
|
||||
pd->pd_meta[j]->disk_rebuild = UINT32_MAX;
|
||||
}
|
||||
pd->pd_updated = 1;
|
||||
}
|
||||
}
|
||||
|
@ -124,7 +124,8 @@ g_raid_tr_update_state_concat(struct g_raid_volume *vol)
|
||||
* Some metadata modules may not know CONCAT volume
|
||||
* mediasize until all disks connected. Recalculate.
|
||||
*/
|
||||
if (G_RAID_VOLUME_S_ALIVE(s) &&
|
||||
if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT &&
|
||||
G_RAID_VOLUME_S_ALIVE(s) &&
|
||||
!G_RAID_VOLUME_S_ALIVE(vol->v_state)) {
|
||||
size = 0;
|
||||
for (i = 0; i < vol->v_disks_count; i++) {
|
||||
|
2
tools/build/options/WITH_ARM_EABI
Normal file
2
tools/build/options/WITH_ARM_EABI
Normal file
@ -0,0 +1,2 @@
|
||||
.\" $FreeBSD$
|
||||
Set the ARM ABI to EABI.
|
9
tools/build/options/WITH_OPENSSH_NONE_CIPHER
Normal file
9
tools/build/options/WITH_OPENSSH_NONE_CIPHER
Normal file
@ -0,0 +1,9 @@
|
||||
.\" $FreeBSD$
|
||||
Set to include the "None" cipher support in OpenSSH and its libraries.
|
||||
Additional adjustments may need to be done to system configuration
|
||||
files, such as
|
||||
.Xr sshd_config 5 ,
|
||||
to enable this cipher.
|
||||
Please see
|
||||
.Pa /usr/src/crypto/openssh/README.hpn
|
||||
for full details.
|
@ -955,7 +955,7 @@ set_filter(uint32_t idx, int argc, const char *argv[])
|
||||
t.fs.mask.vnic = mask;
|
||||
t.fs.val.vnic_vld = 1;
|
||||
t.fs.mask.vnic_vld = 1;
|
||||
} else if (!parse_val_mask("vlan", args, &val, &mask)) {
|
||||
} else if (!parse_val_mask("ivlan", args, &val, &mask)) {
|
||||
t.fs.val.vlan = val;
|
||||
t.fs.mask.vlan = mask;
|
||||
t.fs.val.vlan_vld = 1;
|
||||
@ -1047,10 +1047,17 @@ set_filter(uint32_t idx, int argc, const char *argv[])
|
||||
t.fs.newvlan = VLAN_REWRITE;
|
||||
} else if (argv[start_arg + 1][0] == '+') {
|
||||
t.fs.newvlan = VLAN_INSERT;
|
||||
} else if (isdigit(argv[start_arg + 1][0]) &&
|
||||
!parse_val_mask("vlan", args, &val, &mask)) {
|
||||
t.fs.val.vlan = val;
|
||||
t.fs.mask.vlan = mask;
|
||||
t.fs.val.vlan_vld = 1;
|
||||
t.fs.mask.vlan_vld = 1;
|
||||
} else {
|
||||
warnx("unknown vlan parameter \"%s\"; must"
|
||||
" be one of \"none\", \"=<vlan>\" or"
|
||||
" \"+<vlan>\"", argv[start_arg + 1]);
|
||||
" be one of \"none\", \"=<vlan>\", "
|
||||
" \"+<vlan>\", or \"<vlan>\"",
|
||||
argv[start_arg + 1]);
|
||||
return (EINVAL);
|
||||
}
|
||||
if (t.fs.newvlan == VLAN_REWRITE ||
|
||||
|
@ -12,9 +12,9 @@
|
||||
import sys
|
||||
|
||||
def usage():
|
||||
print >>sys.stderr, "notescheck <path>"
|
||||
print >>sys.stderr
|
||||
print >>sys.stderr, "Where 'path' is a path to a kernel source tree."
|
||||
print("notescheck <path>", file=sys.stderr)
|
||||
print(file=sys.stderr)
|
||||
print("Where 'path' is a path to a kernel source tree.", file=sys.stderr)
|
||||
|
||||
# These files are used to determine if a path is a valid kernel source tree.
|
||||
requiredfiles = ['conf/files', 'conf/options', 'conf/NOTES']
|
||||
@ -62,9 +62,9 @@ def set_type(self, type):
|
||||
self.type = type
|
||||
self.type_location = location
|
||||
elif self.type != type:
|
||||
print "WARN: Attempt to change type of %s from %s to %s%s" % \
|
||||
(self.name, self.type, type, location)
|
||||
print " Previous type set%s" % (self.type_location)
|
||||
print("WARN: Attempt to change type of %s from %s to %s%s" % \
|
||||
(self.name, self.type, type, location))
|
||||
print(" Previous type set%s" % (self.type_location))
|
||||
|
||||
def add_define(self, platform):
|
||||
self.defines.add(platform)
|
||||
@ -93,8 +93,8 @@ def warn(self):
|
||||
if global_platform in self.defines:
|
||||
# If the device is defined globally ans is never tested, whine.
|
||||
if len(self.tests) == 0:
|
||||
print 'WARN: %s is defined globally but never tested' % \
|
||||
(self.title())
|
||||
print('WARN: %s is defined globally but never tested' % \
|
||||
(self.title()))
|
||||
return
|
||||
|
||||
# If the device is defined globally and is tested on
|
||||
@ -106,25 +106,25 @@ def warn(self):
|
||||
|
||||
# If a device is defined globally but is only tested on a
|
||||
# single MD platform, then whine about this.
|
||||
print 'WARN: %s is defined globally but only tested in %s NOTES' % \
|
||||
(self.title(), format_set(self.tests))
|
||||
print('WARN: %s is defined globally but only tested in %s NOTES' % \
|
||||
(self.title(), format_set(self.tests)))
|
||||
return
|
||||
|
||||
# If an option or device is never tested, whine.
|
||||
if len(self.tests) == 0:
|
||||
print 'WARN: %s is defined in %s but never tested' % \
|
||||
(self.title(), format_set(self.defines))
|
||||
print('WARN: %s is defined in %s but never tested' % \
|
||||
(self.title(), format_set(self.defines)))
|
||||
return
|
||||
|
||||
# The set of MD platforms where this option is defined, but not tested.
|
||||
notest = self.defines - self.tests
|
||||
if len(notest) != 0:
|
||||
print 'WARN: %s is not tested in %s NOTES' % \
|
||||
(self.title(), format_set(notest))
|
||||
print('WARN: %s is not tested in %s NOTES' % \
|
||||
(self.title(), format_set(notest)))
|
||||
return
|
||||
|
||||
print 'ERROR: bad state for %s: defined in %s, tested in %s' % \
|
||||
(self.title(), format_set(self.defines), format_set(self.tests))
|
||||
print('ERROR: bad state for %s: defined in %s, tested in %s' % \
|
||||
(self.title(), format_set(self.defines), format_set(self.tests)))
|
||||
|
||||
# This class maintains a dictionary of options keyed by name.
|
||||
class Options:
|
||||
@ -143,7 +143,7 @@ def find(self, name):
|
||||
|
||||
# Warn about inconsistencies
|
||||
def warn(self):
|
||||
keys = self.options.keys()
|
||||
keys = list(self.options.keys())
|
||||
keys.sort()
|
||||
for key in keys:
|
||||
option = self.options[key]
|
||||
@ -158,11 +158,11 @@ def find_platforms(tree):
|
||||
platforms = []
|
||||
for file in glob.glob(tree + '*/conf/NOTES'):
|
||||
if not file.startswith(tree):
|
||||
print >>sys.stderr, "Bad MD NOTES file %s" %(file)
|
||||
print("Bad MD NOTES file %s" %(file), file=sys.stderr)
|
||||
sys.exit(1)
|
||||
platforms.append(file[len(tree):].split('/')[0])
|
||||
if global_platform in platforms:
|
||||
print >>sys.stderr, "Found MD NOTES file for global platform"
|
||||
print("Found MD NOTES file for global platform", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
return platforms
|
||||
|
||||
@ -224,7 +224,7 @@ def tokenize(line):
|
||||
# will contain 'number of quotes' + 1 entries, so it should have
|
||||
# an odd number of entries.
|
||||
if len(groups) % 2 == 0:
|
||||
print >>sys.stderr, "Failed to tokenize: %s%s" (line, location)
|
||||
print("Failed to tokenize: %s%s" (line, location), file=sys.stderr)
|
||||
return []
|
||||
|
||||
# String split all the "odd" groups since they are not quoted strings.
|
||||
@ -256,7 +256,7 @@ def parse_files_line(line, platform):
|
||||
|
||||
# Remaining lines better be optional or mandatory lines.
|
||||
if words[1] != 'optional' and words[1] != 'mandatory':
|
||||
print >>sys.stderr, "Invalid files line: %s%s" % (line, location)
|
||||
print("Invalid files line: %s%s" % (line, location), file=sys.stderr)
|
||||
|
||||
# Drop the first two words and begin parsing keywords and devices.
|
||||
skip = False
|
||||
@ -334,7 +334,7 @@ def main(argv=None):
|
||||
tree = tree + '/'
|
||||
for file in requiredfiles:
|
||||
if not os.path.exists(tree + file):
|
||||
print>> sys.stderr, "Kernel source tree missing %s" % (file)
|
||||
print("Kernel source tree missing %s" % (file), file=sys.stderr)
|
||||
return 1
|
||||
|
||||
platforms = find_platforms(tree)
|
||||
|
@ -84,7 +84,7 @@ environment variable.
|
||||
.It Fl S Ar mansect
|
||||
Restricts manual sections searched to the specified colon delimited list.
|
||||
Defaults to
|
||||
.Dq Li 1:1aout:8:2:3:n:4:5:6:7:9:l .
|
||||
.Dq Li 1:8:2:3:n:4:5:6:7:9:l .
|
||||
Overrides the
|
||||
.Ev MANSECT
|
||||
environment variable.
|
||||
|
@ -945,7 +945,7 @@ STTY=/bin/stty
|
||||
SYSCTL=/sbin/sysctl
|
||||
|
||||
debug=0
|
||||
man_default_sections='1:1aout:8:2:3:n:4:5:6:7:9:l'
|
||||
man_default_sections='1:8:2:3:n:4:5:6:7:9:l'
|
||||
man_default_path='/usr/share/man:/usr/share/openssl/man:/usr/local/man'
|
||||
cattool='/usr/bin/zcat -f'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user