Date: Thu, 23 Jun 2016 21:50:52 +0000 (UTC) From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r302158 - in projects/vnet: . cddl/lib/libavl cddl/lib/libctf cddl/lib/libnvpair cddl/lib/libumem cddl/lib/libuutil etc/defaults lib/libusb sys/cddl/contrib/opensolaris/uts/common/fs/zf... Message-ID: <201606232150.u5NLoqgR060802@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bz Date: Thu Jun 23 21:50:52 2016 New Revision: 302158 URL: https://svnweb.freebsd.org/changeset/base/302158 Log: MfH @r302157 merged the initial pf/pflog/pfsync changes Sponsored by: The FreeBSD Foundation Modified: projects/vnet/UPDATING projects/vnet/cddl/lib/libavl/Makefile projects/vnet/cddl/lib/libctf/Makefile projects/vnet/cddl/lib/libnvpair/Makefile projects/vnet/cddl/lib/libumem/Makefile projects/vnet/cddl/lib/libuutil/Makefile projects/vnet/etc/defaults/rc.conf projects/vnet/lib/libusb/Makefile projects/vnet/lib/libusb/libusb.3 projects/vnet/lib/libusb/libusb.h projects/vnet/lib/libusb/libusb10.c projects/vnet/lib/libusb/libusb10.h projects/vnet/lib/libusb/libusb10_io.c projects/vnet/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c projects/vnet/sys/dev/mlx5/mlx5_core/mlx5_vport.c projects/vnet/sys/geom/geom_disk.c projects/vnet/sys/geom/geom_disk.h projects/vnet/sys/kern/uipc_shm.c projects/vnet/sys/net/if_var.h projects/vnet/sys/net/pfvar.h projects/vnet/sys/netinet/in_pcb.h projects/vnet/sys/netinet/sctp_usrreq.c projects/vnet/sys/netinet/sctputil.c projects/vnet/sys/netinet/tcp_subr.c projects/vnet/sys/netinet6/sctp6_usrreq.c projects/vnet/sys/netpfil/pf/pf.c projects/vnet/sys/netpfil/pf/pf_if.c projects/vnet/sys/sys/param.h projects/vnet/sys/sys/socketvar.h projects/vnet/sys/vm/vm_page.c projects/vnet/sys/vm/vm_page.h projects/vnet/sys/x86/acpica/acpi_wakeup.c projects/vnet/tools/tools/makeroot/makeroot.sh projects/vnet/usr.sbin/bsdinstall/partedit/partedit_x86.c Directory Properties: projects/vnet/ (props changed) projects/vnet/cddl/ (props changed) projects/vnet/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/vnet/UPDATING ============================================================================== --- projects/vnet/UPDATING Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/UPDATING Thu Jun 23 21:50:52 2016 (r302158) @@ -31,6 +31,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11 disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20160622: + The libc stub for the pipe(2) system call has been replaced with + a wrapper which calls the pipe2(2) system call and the pipe(2) is now + only implemented by the kernels which include "options + COMPAT_FREEBSD10" in their config file (this is the default). + Users should ensure that this option is enabled in their kernel + or upgrade userspace to r302092 before upgrading their kernel. + 20160527: CAM will now strip leading spaces from SCSI disks' serial numbers. This will effect users who create UFS filesystems on SCSI disks using Modified: projects/vnet/cddl/lib/libavl/Makefile ============================================================================== --- projects/vnet/cddl/lib/libavl/Makefile Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/cddl/lib/libavl/Makefile Thu Jun 23 21:50:52 2016 (r302158) @@ -4,7 +4,7 @@ LIB= avl SRCS= avl.c -WARNS?= 0 +WARNS?= 3 CFLAGS+= -I${.CURDIR}/../../../sys/cddl/compat/opensolaris CFLAGS+= -I${.CURDIR}/../../../sys/cddl/contrib/opensolaris/uts/common Modified: projects/vnet/cddl/lib/libctf/Makefile ============================================================================== --- projects/vnet/cddl/lib/libctf/Makefile Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/cddl/lib/libctf/Makefile Thu Jun 23 21:50:52 2016 (r302158) @@ -18,7 +18,7 @@ SRCS= ctf_create.c \ ctf_util.c MAN= ctf.5 -WARNS?= 0 +WARNS?= 2 CFLAGS+= -DCTF_OLD_VERSIONS CFLAGS+= -I${.CURDIR}/../../../sys/cddl/compat/opensolaris \ Modified: projects/vnet/cddl/lib/libnvpair/Makefile ============================================================================== --- projects/vnet/cddl/lib/libnvpair/Makefile Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/cddl/lib/libnvpair/Makefile Thu Jun 23 21:50:52 2016 (r302158) @@ -12,7 +12,7 @@ SRCS= libnvpair.c \ opensolaris_nvpair.c \ opensolaris_nvpair_alloc_fixed.c -WARNS?= 0 +WARNS?= 1 CFLAGS+= -I${.CURDIR}/../../../cddl/compat/opensolaris/include CFLAGS+= -I${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libzpool/common CFLAGS+= -I${.CURDIR}/../../../sys/cddl/compat/opensolaris Modified: projects/vnet/cddl/lib/libumem/Makefile ============================================================================== --- projects/vnet/cddl/lib/libumem/Makefile Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/cddl/lib/libumem/Makefile Thu Jun 23 21:50:52 2016 (r302158) @@ -4,7 +4,7 @@ LIB= umem SRCS= umem.c -WARNS?= 0 +WARNS?= 3 CFLAGS+= -I${.CURDIR}/../../../cddl/compat/opensolaris/lib/libumem .include <bsd.lib.mk> Modified: projects/vnet/cddl/lib/libuutil/Makefile ============================================================================== --- projects/vnet/cddl/lib/libuutil/Makefile Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/cddl/lib/libuutil/Makefile Thu Jun 23 21:50:52 2016 (r302158) @@ -15,7 +15,7 @@ SRCS= avl.c \ uu_pname.c \ uu_strtoint.c -WARNS?= 0 +WARNS?= 1 CFLAGS+= -DNATIVE_BUILD CFLAGS+= -I${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libuutil/common CFLAGS+= -I${.CURDIR}/../../../sys/cddl/compat/opensolaris Modified: projects/vnet/etc/defaults/rc.conf ============================================================================== --- projects/vnet/etc/defaults/rc.conf Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/etc/defaults/rc.conf Thu Jun 23 21:50:52 2016 (r302158) @@ -741,3 +741,9 @@ if [ -z "${source_rc_confs_defined}" ]; done } fi + +# Allow vendors to override FreeBSD defaults in /etc/default/rc.conf +# without the need to carefully manage /etc/rc.conf. +if [ -r /etc/defaults/vendor.conf ]; then + . /etc/defaults/vendor.conf +fi Modified: projects/vnet/lib/libusb/Makefile ============================================================================== --- projects/vnet/lib/libusb/Makefile Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/lib/libusb/Makefile Thu Jun 23 21:50:52 2016 (r302158) @@ -120,8 +120,12 @@ MLINKS += libusb.3 libusb_get_ss_usb_dev MLINKS += libusb.3 libusb_free_ss_usb_device_capability_descriptor.3 MLINKS += libusb.3 libusb_get_container_id_descriptor.3 MLINKS += libusb.3 libusb_free_container_id_descriptor.3 +MLINKS += libusb.3 libusb_alloc_streams.3 +MLINKS += libusb.3 libusb_free_streams.3 MLINKS += libusb.3 libusb_alloc_transfer.3 MLINKS += libusb.3 libusb_free_transfer.3 +MLINKS += libusb.3 libusb_transfer_set_stream_id.3 +MLINKS += libusb.3 libusb_transfer_get_stream_id.3 MLINKS += libusb.3 libusb_submit_transfer.3 MLINKS += libusb.3 libusb_cancel_transfer.3 MLINKS += libusb.3 libusb_control_transfer.3 Modified: projects/vnet/lib/libusb/libusb.3 ============================================================================== --- projects/vnet/lib/libusb/libusb.3 Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/lib/libusb/libusb.3 Thu Jun 23 21:50:52 2016 (r302158) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 22, 2016 +.Dd June 23, 2016 .Dt LIBUSB 3 .Os .Sh NAME @@ -521,6 +521,29 @@ if the transfer timed out, LIBUSB_ERROR_ supported, LIBUSB_ERROR_OVERFLOW if the device offered more data, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a LIBUSB_ERROR code on other failure. +.Sh USB STREAMS SUPPORT +.Ft int +.Fn libusb_alloc_streams "libusb_device_handle *dev" "uint32_t num_streams" "unsigned char *endpoints" "int num_endpoints" +This function verifies that the given number of streams using the +given number of endpoints is allowed and allocates the resources +needed to use so-called USB streams. +Currently only a single stream per endpoint is supported to simplify +the internals of LibUSB. +This function returns 0 on success or a LIBUSB_ERROR code on failure. +.Pp +.Ft int +.Fn libusb_free_streams "libusb_device_handle *dev" "unsigned char *endpoints" "int num_endpoints" +This function release resources needed for streams usage. +Returns 0 on success or a LIBUSB_ERROR code on failure. +.Pp +.Ft void +.Fn libusb_transfer_set_stream_id "struct libusb_transfer *transfer" "uint32_t stream_id" +This function sets the stream ID for the given USB transfer. +.Pp +.Ft uint32_t +.Fn libusb_transfer_get_stream_id "struct libusb_transfer *transfer" +This function returns the stream ID for the given USB transfer. +If no stream ID is used a value of zero is returned. .Sh USB EVENTS .Ft int .Fn libusb_try_lock_events "libusb_context *ctx" Modified: projects/vnet/lib/libusb/libusb.h ============================================================================== --- projects/vnet/lib/libusb/libusb.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/lib/libusb/libusb.h Thu Jun 23 21:50:52 2016 (r302158) @@ -561,6 +561,13 @@ typedef int (*libusb_hotplug_callback_fn int libusb_hotplug_register_callback(libusb_context *ctx, libusb_hotplug_event events, libusb_hotplug_flag flags, int vendor_id, int product_id, int dev_class, libusb_hotplug_callback_fn cb_fn, void *user_data, libusb_hotplug_callback_handle *handle); void libusb_hotplug_deregister_callback(libusb_context *ctx, libusb_hotplug_callback_handle handle); +/* Streams support */ + +int libusb_alloc_streams(libusb_device_handle *dev, uint32_t num_streams, unsigned char *endpoints, int num_endpoints); +int libusb_free_streams(libusb_device_handle *dev, unsigned char *endpoints, int num_endpoints); +void libusb_transfer_set_stream_id(struct libusb_transfer *transfer, uint32_t stream_id); +uint32_t libusb_transfer_get_stream_id(struct libusb_transfer *transfer); + #if 0 { /* indent fix */ #endif Modified: projects/vnet/lib/libusb/libusb10.c ============================================================================== --- projects/vnet/lib/libusb/libusb10.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/lib/libusb/libusb10.c Thu Jun 23 21:50:52 2016 (r302158) @@ -1403,7 +1403,8 @@ found: maxframe = libusb10_get_maxframe(pdev, uxfer); /* make sure the transfer is opened */ - err = libusb20_tr_open(pxfer0, buffsize, maxframe, endpoint); + err = libusb20_tr_open_stream(pxfer0, buffsize, maxframe, + endpoint, sxfer->stream_id); if (err && (err != LIBUSB20_ERROR_BUSY)) { goto failure; } Modified: projects/vnet/lib/libusb/libusb10.h ============================================================================== --- projects/vnet/lib/libusb/libusb10.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/lib/libusb/libusb10.h Thu Jun 23 21:50:52 2016 (r302158) @@ -69,6 +69,7 @@ struct libusb_super_transfer { uint8_t *curr_data; uint32_t rem_len; uint32_t last_len; + uint32_t stream_id; uint8_t state; #define LIBUSB_SUPER_XFER_ST_NONE 0 #define LIBUSB_SUPER_XFER_ST_PEND 1 Modified: projects/vnet/lib/libusb/libusb10_io.c ============================================================================== --- projects/vnet/lib/libusb/libusb10_io.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/lib/libusb/libusb10_io.c Thu Jun 23 21:50:52 2016 (r302158) @@ -767,3 +767,48 @@ libusb_fill_iso_transfer(struct libusb_t transfer->callback = callback; } +int +libusb_alloc_streams(libusb_device_handle *dev, uint32_t num_streams, + unsigned char *endpoints, int num_endpoints) +{ + if (num_streams > 1) + return (LIBUSB_ERROR_INVALID_PARAM); + return (0); +} + +int +libusb_free_streams(libusb_device_handle *dev, unsigned char *endpoints, int num_endpoints) +{ + + return (0); +} + +void +libusb_transfer_set_stream_id(struct libusb_transfer *transfer, uint32_t stream_id) +{ + struct libusb_super_transfer *sxfer; + + if (transfer == NULL) + return; + + sxfer = (struct libusb_super_transfer *)( + ((uint8_t *)transfer) - sizeof(*sxfer)); + + /* set stream ID */ + sxfer->stream_id = stream_id; +} + +uint32_t +libusb_transfer_get_stream_id(struct libusb_transfer *transfer) +{ + struct libusb_super_transfer *sxfer; + + if (transfer == NULL) + return (0); + + sxfer = (struct libusb_super_transfer *)( + ((uint8_t *)transfer) - sizeof(*sxfer)); + + /* get stream ID */ + return (sxfer->stream_id); +} Modified: projects/vnet/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- projects/vnet/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Thu Jun 23 21:50:52 2016 (r302158) @@ -1430,6 +1430,7 @@ static int getzfsvfs(const char *dsname, zfsvfs_t **zfvp) { objset_t *os; + vfs_t *vfsp; int error; error = dmu_objset_hold(dsname, FTAG, &os); @@ -1443,19 +1444,21 @@ getzfsvfs(const char *dsname, zfsvfs_t * mutex_enter(&os->os_user_ptr_lock); *zfvp = dmu_objset_get_user(os); if (*zfvp) { -#ifdef illumos - VFS_HOLD((*zfvp)->z_vfs); -#else - if (vfs_busy((*zfvp)->z_vfs, 0) != 0) { - *zfvp = NULL; - error = SET_ERROR(ESRCH); - } -#endif + vfsp = (*zfvp)->z_vfs; + vfs_ref(vfsp); } else { error = SET_ERROR(ESRCH); } mutex_exit(&os->os_user_ptr_lock); dmu_objset_rele(os, FTAG); + if (error == 0) { + error = vfs_busy(vfsp, 0); + vfs_rel(vfsp); + if (error != 0) { + *zfvp = NULL; + error = SET_ERROR(ESRCH); + } + } return (error); } Modified: projects/vnet/sys/dev/mlx5/mlx5_core/mlx5_vport.c ============================================================================== --- projects/vnet/sys/dev/mlx5/mlx5_core/mlx5_vport.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/dev/mlx5/mlx5_core/mlx5_vport.c Thu Jun 23 21:50:52 2016 (r302158) @@ -71,7 +71,7 @@ static int mlx5_query_nic_vport_context( int mlx5_vport_alloc_q_counter(struct mlx5_core_dev *mdev, int *counter_set_id) { u32 in[MLX5_ST_SZ_DW(alloc_q_counter_in)]; - u32 out[MLX5_ST_SZ_DW(alloc_q_counter_in)]; + u32 out[MLX5_ST_SZ_DW(alloc_q_counter_out)]; int err; memset(in, 0, sizeof(in)); Modified: projects/vnet/sys/geom/geom_disk.c ============================================================================== --- projects/vnet/sys/geom/geom_disk.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/geom/geom_disk.c Thu Jun 23 21:50:52 2016 (r302158) @@ -670,7 +670,7 @@ g_disk_create(void *arg, int flag) g_topology_assert(); dp = arg; - mtx_lock(&dp->d_mtx); + mtx_pool_lock(mtxpool_sleep, dp); dp->d_init_level = DISK_INIT_START; /* @@ -678,12 +678,12 @@ g_disk_create(void *arg, int flag) * call the user's callback to tell him we've cleaned things up. */ if (dp->d_goneflag != 0) { - mtx_unlock(&dp->d_mtx); + mtx_pool_unlock(mtxpool_sleep, dp); if (dp->d_gone != NULL) dp->d_gone(dp); return; } - mtx_unlock(&dp->d_mtx); + mtx_pool_unlock(mtxpool_sleep, dp); sc = g_malloc(sizeof(*sc), M_WAITOK | M_ZERO); mtx_init(&sc->start_mtx, "g_disk_start", NULL, MTX_DEF); @@ -721,7 +721,7 @@ g_disk_create(void *arg, int flag) dp->d_geom = gp; g_error_provider(pp, 0); - mtx_lock(&dp->d_mtx); + mtx_pool_lock(mtxpool_sleep, dp); dp->d_init_level = DISK_INIT_DONE; /* @@ -729,11 +729,11 @@ g_disk_create(void *arg, int flag) * process for it. */ if (dp->d_goneflag != 0) { - mtx_unlock(&dp->d_mtx); + mtx_pool_unlock(mtxpool_sleep, dp); g_wither_provider(pp, ENXIO); return; } - mtx_unlock(&dp->d_mtx); + mtx_pool_unlock(mtxpool_sleep, dp); } @@ -786,8 +786,6 @@ g_disk_destroy(void *ptr, int flag) g_wither_geom(gp, ENXIO); } - mtx_destroy(&dp->d_mtx); - g_free(dp); } @@ -852,9 +850,6 @@ disk_create(struct disk *dp, int version DEVSTAT_TYPE_DIRECT, DEVSTAT_PRIORITY_MAX); dp->d_geom = NULL; - snprintf(dp->d_mtx_name, sizeof(dp->d_mtx_name), "%s%ddlk", - dp->d_name, dp->d_unit); - mtx_init(&dp->d_mtx, dp->d_mtx_name, NULL, MTX_DEF); dp->d_init_level = DISK_INIT_NONE; g_disk_ident_adjust(dp->d_ident, sizeof(dp->d_ident)); @@ -878,7 +873,7 @@ disk_gone(struct disk *dp) struct g_geom *gp; struct g_provider *pp; - mtx_lock(&dp->d_mtx); + mtx_pool_lock(mtxpool_sleep, dp); dp->d_goneflag = 1; /* @@ -897,10 +892,10 @@ disk_gone(struct disk *dp) * has not been fully setup in any case. */ if (dp->d_init_level < DISK_INIT_DONE) { - mtx_unlock(&dp->d_mtx); + mtx_pool_unlock(mtxpool_sleep, dp); return; } - mtx_unlock(&dp->d_mtx); + mtx_pool_unlock(mtxpool_sleep, dp); gp = dp->d_geom; if (gp != NULL) { Modified: projects/vnet/sys/geom/geom_disk.h ============================================================================== --- projects/vnet/sys/geom/geom_disk.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/geom/geom_disk.h Thu Jun 23 21:50:52 2016 (r302158) @@ -72,8 +72,6 @@ struct disk { struct devstat *d_devstat; int d_goneflag; int d_destroyed; - struct mtx d_mtx; - char d_mtx_name[24]; disk_init_level d_init_level; /* Shared fields */ Modified: projects/vnet/sys/kern/uipc_shm.c ============================================================================== --- projects/vnet/sys/kern/uipc_shm.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/kern/uipc_shm.c Thu Jun 23 21:50:52 2016 (r302158) @@ -295,14 +295,14 @@ shm_read(struct file *fp, struct uio *ui int error; shmfd = fp->f_data; - foffset_lock_uio(fp, uio, flags); - rl_cookie = rangelock_rlock(&shmfd->shm_rl, uio->uio_offset, - uio->uio_offset + uio->uio_resid, &shmfd->shm_mtx); #ifdef MAC error = mac_posixshm_check_read(active_cred, fp->f_cred, shmfd); if (error) return (error); #endif + foffset_lock_uio(fp, uio, flags); + rl_cookie = rangelock_rlock(&shmfd->shm_rl, uio->uio_offset, + uio->uio_offset + uio->uio_resid, &shmfd->shm_mtx); error = uiomove_object(shmfd->shm_object, shmfd->shm_size, uio); rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); foffset_unlock_uio(fp, uio, flags); Modified: projects/vnet/sys/net/if_var.h ============================================================================== --- projects/vnet/sys/net/if_var.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/net/if_var.h Thu Jun 23 21:50:52 2016 (r302158) @@ -311,6 +311,8 @@ struct ifnet { * that structure can be enhanced without changing the kernel * binary interface. */ + void *if_pspare[4]; /* packet pacing / general use */ + int if_ispare[4]; /* packet pacing / general use */ }; /* for compatibility with other BSDs */ Modified: projects/vnet/sys/net/pfvar.h ============================================================================== --- projects/vnet/sys/net/pfvar.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/net/pfvar.h Thu Jun 23 21:50:52 2016 (r302158) @@ -835,7 +835,6 @@ typedef int pflog_packet_t(struct pfi_ki struct pf_ruleset *, struct pf_pdesc *, int); extern pflog_packet_t *pflog_packet_ptr; -#define V_pf_end_threads VNET(pf_end_threads) #endif /* _KERNEL */ #define PFSYNC_FLAG_SRCNODE 0x04 Modified: projects/vnet/sys/netinet/in_pcb.h ============================================================================== --- projects/vnet/sys/netinet/in_pcb.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/netinet/in_pcb.h Thu Jun 23 21:50:52 2016 (r302158) @@ -202,10 +202,10 @@ struct inpcb { u_char inp_ip_minttl; /* (i) minimum TTL or drop */ uint32_t inp_flowid; /* (x) flow id / queue id */ u_int inp_refcount; /* (i) refcount */ - void *inp_pspare[5]; /* (x) route caching / general use */ + void *inp_pspare[5]; /* (x) packet pacing / general use */ uint32_t inp_flowtype; /* (x) M_HASHTYPE value */ uint32_t inp_rss_listen_bucket; /* (x) overridden RSS listen bucket */ - u_int inp_ispare[4]; /* (x) route caching / user cookie / + u_int inp_ispare[4]; /* (x) packet pacing / user cookie / * general use */ /* Local and foreign ports, local and foreign addr. */ Modified: projects/vnet/sys/netinet/sctp_usrreq.c ============================================================================== --- projects/vnet/sys/netinet/sctp_usrreq.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/netinet/sctp_usrreq.c Thu Jun 23 21:50:52 2016 (r302158) @@ -291,8 +291,7 @@ sctp_ctlinput(int cmd, struct sockaddr * SCTP_DEFAULT_VRFID); if ((stcb != NULL) && (net != NULL) && - (inp != NULL) && - (inp->sctp_socket != NULL)) { + (inp != NULL)) { /* Check the verification tag */ if (ntohl(sh->v_tag) != 0) { /* Modified: projects/vnet/sys/netinet/sctputil.c ============================================================================== --- projects/vnet/sys/netinet/sctputil.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/netinet/sctputil.c Thu Jun 23 21:50:52 2016 (r302158) @@ -5274,8 +5274,14 @@ restart_nosblocks: } } } - if ((so->so_rcv.sb_cc <= held_length) && block_allowed) { - /* we need to wait for data */ + if (so->so_rcv.sb_cc <= held_length) { + if (so->so_error) { + error = so->so_error; + if ((in_flags & MSG_PEEK) == 0) { + so->so_error = 0; + } + goto out; + } if ((so->so_rcv.sb_cc == 0) && ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) || (inp->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL))) { @@ -5306,51 +5312,18 @@ restart_nosblocks: goto out; } } - error = sbwait(&so->so_rcv); - if (error) { - goto out; - } - held_length = 0; - goto restart_nosblocks; - } else if (so->so_rcv.sb_cc == 0) { - if (so->so_error) { - error = so->so_error; - if ((in_flags & MSG_PEEK) == 0) - so->so_error = 0; - } else { - if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) || - (inp->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL)) { - if ((inp->sctp_flags & SCTP_PCB_FLAGS_CONNECTED) == 0) { - /* - * For active open side clear flags - * for re-use passive open is - * blocked by connect. - */ - if (inp->sctp_flags & SCTP_PCB_FLAGS_WAS_ABORTED) { - /* - * You were aborted, passive - * side always hits here - */ - SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTPUTIL, ECONNRESET); - error = ECONNRESET; - } - so->so_state &= ~(SS_ISCONNECTING | - SS_ISDISCONNECTING | - SS_ISCONFIRMING | - SS_ISCONNECTED); - if (error == 0) { - if ((inp->sctp_flags & SCTP_PCB_FLAGS_WAS_CONNECTED) == 0) { - SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTPUTIL, ENOTCONN); - error = ENOTCONN; - } - } - goto out; - } + if (block_allowed) { + error = sbwait(&so->so_rcv); + if (error) { + goto out; } + held_length = 0; + goto restart_nosblocks; + } else { SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTPUTIL, EWOULDBLOCK); error = EWOULDBLOCK; + goto out; } - goto out; } if (hold_sblock == 1) { SOCKBUF_UNLOCK(&so->so_rcv); @@ -6965,8 +6938,7 @@ sctp_recv_icmp_tunneled_packet(int cmd, SCTP_DEFAULT_VRFID); if ((stcb != NULL) && (net != NULL) && - (inp != NULL) && - (inp->sctp_socket != NULL)) { + (inp != NULL)) { /* Check the UDP port numbers */ if ((udp->uh_dport != net->port) || (udp->uh_sport != htons(SCTP_BASE_SYSCTL(sctp_udp_tunneling_port)))) { @@ -7092,8 +7064,7 @@ sctp_recv_icmp6_tunneled_packet(int cmd, &inp, &net, 1, SCTP_DEFAULT_VRFID); if ((stcb != NULL) && (net != NULL) && - (inp != NULL) && - (inp->sctp_socket != NULL)) { + (inp != NULL)) { /* Check the UDP port numbers */ if ((udp.uh_dport != net->port) || (udp.uh_sport != htons(SCTP_BASE_SYSCTL(sctp_udp_tunneling_port)))) { Modified: projects/vnet/sys/netinet/tcp_subr.c ============================================================================== --- projects/vnet/sys/netinet/tcp_subr.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/netinet/tcp_subr.c Thu Jun 23 21:50:52 2016 (r302158) @@ -738,12 +738,14 @@ tcp_destroy(void *unused __unused) * up, which means, we should be past the tcp_discardcb() calls. * Sleep to let all tcpcb timers really disappear and cleanup. */ - do { - pause("tcpdes", hz/10); + for (;;) { INP_LIST_RLOCK(&V_tcbinfo); n = V_tcbinfo.ipi_count; INP_LIST_RUNLOCK(&V_tcbinfo); - } while (n != 0); + if (n == 0) + break; + pause("tcpdes", hz / 10); + } tcp_hc_destroy(); syncache_destroy(); tcp_tw_destroy(); Modified: projects/vnet/sys/netinet6/sctp6_usrreq.c ============================================================================== --- projects/vnet/sys/netinet6/sctp6_usrreq.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/netinet6/sctp6_usrreq.c Thu Jun 23 21:50:52 2016 (r302158) @@ -341,8 +341,7 @@ sctp6_ctlinput(int cmd, struct sockaddr &inp, &net, 1, SCTP_DEFAULT_VRFID); if ((stcb != NULL) && (net != NULL) && - (inp != NULL) && - (inp->sctp_socket != NULL)) { + (inp != NULL)) { /* Check the verification tag */ if (ntohl(sh.v_tag) != 0) { /* Modified: projects/vnet/sys/netpfil/pf/pf.c ============================================================================== --- projects/vnet/sys/netpfil/pf/pf.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/netpfil/pf/pf.c Thu Jun 23 21:50:52 2016 (r302158) @@ -1436,6 +1436,7 @@ pf_purge_thread(void *unused __unused) CURVNET_SET(vnet_iter); if (pf_end_threads) { + pf_end_threads++; wakeup(pf_purge_thread); kproc_exit(0); } Modified: projects/vnet/sys/netpfil/pf/pf_if.c ============================================================================== --- projects/vnet/sys/netpfil/pf/pf_if.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/netpfil/pf/pf_if.c Thu Jun 23 21:50:52 2016 (r302158) @@ -802,7 +802,7 @@ pfi_attach_ifnet_event(void *arg __unuse CURVNET_SET(ifp->if_vnet); if (V_pf_vnet_active == 0) { - /* Avoid teardown race in the least expensie way. */ + /* Avoid teardown race in the least expensive way. */ CURVNET_RESTORE(); return; } @@ -825,7 +825,7 @@ pfi_detach_ifnet_event(void *arg __unuse CURVNET_SET(ifp->if_vnet); if (V_pf_vnet_active == 0) { - /* Avoid teardown race in the least expensie way. */ + /* Avoid teardown race in the least expensive way. */ CURVNET_RESTORE(); return; } @@ -848,7 +848,7 @@ pfi_attach_group_event(void *arg , struc CURVNET_SET((struct vnet *)arg); if (V_pf_vnet_active == 0) { - /* Avoid teardown race in the least expensie way. */ + /* Avoid teardown race in the least expensive way. */ CURVNET_RESTORE(); return; } @@ -863,7 +863,7 @@ pfi_change_group_event(void *arg, char * CURVNET_SET((struct vnet *)arg); if (V_pf_vnet_active == 0) { - /* Avoid teardown race in the least expensie way. */ + /* Avoid teardown race in the least expensive way. */ CURVNET_RESTORE(); return; } @@ -887,7 +887,7 @@ pfi_detach_group_event(void *arg, struct CURVNET_SET((struct vnet *)arg); if (V_pf_vnet_active == 0) { - /* Avoid teardown race in the least expensie way. */ + /* Avoid teardown race in the least expensive way. */ CURVNET_RESTORE(); return; } @@ -908,7 +908,7 @@ pfi_ifaddr_event(void *arg __unused, str CURVNET_SET(ifp->if_vnet); if (V_pf_vnet_active == 0) { - /* Avoid teardown race in the least expensie way. */ + /* Avoid teardown race in the least expensive way. */ CURVNET_RESTORE(); return; } Modified: projects/vnet/sys/sys/param.h ============================================================================== --- projects/vnet/sys/sys/param.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/sys/param.h Thu Jun 23 21:50:52 2016 (r302158) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1100118 /* Master, propagated to newvers */ +#define __FreeBSD_version 1100120 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, Modified: projects/vnet/sys/sys/socketvar.h ============================================================================== --- projects/vnet/sys/sys/socketvar.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/sys/socketvar.h Thu Jun 23 21:50:52 2016 (r302158) @@ -126,6 +126,9 @@ struct socket { */ int so_fibnum; /* routing domain for this socket */ uint32_t so_user_cookie; + + void *so_pspare[2]; /* packet pacing / general use */ + int so_ispare[2]; /* packet pacing / general use */ }; /* Modified: projects/vnet/sys/vm/vm_page.c ============================================================================== --- projects/vnet/sys/vm/vm_page.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/vm/vm_page.c Thu Jun 23 21:50:52 2016 (r302158) @@ -760,17 +760,36 @@ vm_page_trysbusy(vm_page_t m) } static void +vm_page_xunbusy_locked(vm_page_t m) +{ + + vm_page_assert_xbusied(m); + vm_page_assert_locked(m); + + atomic_store_rel_int(&m->busy_lock, VPB_UNBUSIED); + /* There is a waiter, do wakeup() instead of vm_page_flash(). */ + wakeup(m); +} + +static void vm_page_xunbusy_maybelocked(vm_page_t m) { bool lockacq; vm_page_assert_xbusied(m); + /* + * Fast path for unbusy. If it succeeds, we know that there + * are no waiters, so we do not need a wakeup. + */ + if (atomic_cmpset_rel_int(&m->busy_lock, VPB_SINGLE_EXCLUSIVER, + VPB_UNBUSIED)) + return; + lockacq = !mtx_owned(vm_page_lockptr(m)); if (lockacq) vm_page_lock(m); - vm_page_flash(m); - atomic_store_rel_int(&m->busy_lock, VPB_UNBUSIED); + vm_page_xunbusy_locked(m); if (lockacq) vm_page_unlock(m); } @@ -788,8 +807,7 @@ vm_page_xunbusy_hard(vm_page_t m) vm_page_assert_xbusied(m); vm_page_lock(m); - atomic_store_rel_int(&m->busy_lock, VPB_UNBUSIED); - wakeup(m); + vm_page_xunbusy_locked(m); vm_page_unlock(m); } Modified: projects/vnet/sys/vm/vm_page.h ============================================================================== --- projects/vnet/sys/vm/vm_page.h Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/vm/vm_page.h Thu Jun 23 21:50:52 2016 (r302158) @@ -552,6 +552,7 @@ void vm_page_lock_assert_KBI(vm_page_t m (m)); \ } while (0) +/* Note: page m's lock must not be owned by the caller. */ #define vm_page_xunbusy(m) do { \ if (!atomic_cmpset_rel_int(&(m)->busy_lock, \ VPB_SINGLE_EXCLUSIVER, VPB_UNBUSIED)) \ Modified: projects/vnet/sys/x86/acpica/acpi_wakeup.c ============================================================================== --- projects/vnet/sys/x86/acpica/acpi_wakeup.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/sys/x86/acpica/acpi_wakeup.c Thu Jun 23 21:50:52 2016 (r302158) @@ -322,7 +322,7 @@ acpi_alloc_wakeup_handler(void) * page-aligned. */ wakeaddr = contigmalloc((ACPI_PAGETABLES + 1) * PAGE_SIZE, M_DEVBUF, - M_WAITOK, 0x500, 0xa0000, PAGE_SIZE, 0ul); + M_NOWAIT, 0x500, 0xa0000, PAGE_SIZE, 0ul); if (wakeaddr == NULL) { printf("%s: can't alloc wake memory\n", __func__); return (NULL); Modified: projects/vnet/tools/tools/makeroot/makeroot.sh ============================================================================== --- projects/vnet/tools/tools/makeroot/makeroot.sh Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/tools/tools/makeroot/makeroot.sh Thu Jun 23 21:50:52 2016 (r302158) @@ -238,5 +238,9 @@ if [ -n "${SIZE}" ]; then SIZEFLAG="-s ${SIZE}" fi +# Zero out subsecond component of time= keywords as they are currently not +# supported by makefs +sed -i '' -E 's/(time=[0-9]*)\.[0-9]*/\1.0/' ${manifest} + cd ${BSDROOT}; makefs ${DUPFLAG} -N ${DBDIR} ${SIZEFLAG} ${BFLAG} \ -t ffs ${LABELFLAG} -f 256 ${IMGFILE} ${manifest} Modified: projects/vnet/usr.sbin/bsdinstall/partedit/partedit_x86.c ============================================================================== --- projects/vnet/usr.sbin/bsdinstall/partedit/partedit_x86.c Thu Jun 23 21:42:43 2016 (r302157) +++ projects/vnet/usr.sbin/bsdinstall/partedit/partedit_x86.c Thu Jun 23 21:50:52 2016 (r302158) @@ -99,7 +99,7 @@ bootpart_size(const char *scheme) if (strcmp(x86_bootmethod(), "BIOS") == 0) return (512*1024); else - return (800*1024); + return (200*1024*1024); return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606232150.u5NLoqgR060802>