202702 Commits

Author SHA1 Message Date
truckman
031a6dfccc MFC r300240
Change net.inet.tcp.ecn.enable sysctl mib from a binary off/on
control to a three way setting.
  0 - Totally disable ECN. (no change)
  1 - Enable ECN if incoming connections request it.  Outgoing
      connections will request ECN.  (no change from present != 0 setting)
  2 - Enable ECN if incoming connections request it.  Outgoing
      conections will not request ECN.

Change the default value of net.inet.tcp.ecn.enable from 0 to 2.

Linux version 2.4.20 and newer, Solaris, and Mac OS X 10.5 and newer have
similar capabilities.  The actual values above match Linux, and the default
matches the current Linux default.

Reviewed by:	eadler
Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D6386
2016-06-20 19:00:47 +00:00
kib
25fbd81576 MFC r301853:
Do not access pv_table array for fictitious pages.
2016-06-20 09:15:03 +00:00
kib
50fadd8544 MFC r301851:
Explicitely initialize sw_alloc_sx.
2016-06-20 09:06:50 +00:00
cy
0ebe946eca MFC r300259:
Enable the two ip_frag tuneables. The code is there but the two
  ip_frag tuneables aren't registered in the ipf_tuners linked list.
  This commmit enables the two existing ip_frag tuneables by registering
  them.

MFC r300260:

  Remove extraneous blank line.
2016-06-19 00:39:23 +00:00
jilles
ff13a7445b MFC r301076: Fix typo ESRC -> ESRCH in pthread man pages. 2016-06-18 13:44:10 +00:00
jilles
9e91116bda MFC r300970: Remove non-history libkse references and fix typo
"PTHREAD_PROCESSES_PRIVATE".
2016-06-18 13:42:33 +00:00
ed
2c8f72f180 MFC r300998:
Add missing va_list to <wchar.h>.

  It looks like va_list should always be defined when XSI is enabled. It
  moved over to the POSIX base in the 2008 edition.
2016-06-18 12:46:50 +00:00
ed
7432e0a6e1 MFC r301406:
Don't test for INKERNEL to check whether we're in kernel space.

  It turns out that <machine/param.h> actually defines a macro under this
  name, even when we're not in kernelspace. This causes us to suppress
  some macro definitions that are used by userspace apps.

PR:		210026
Reported by:	jbeich@
2016-06-18 12:44:14 +00:00
emaste
98e19437bc MFC r300231: elf_common.h: add section header flag and dynamic types
SHF_COMPRESSED	section contains compressed data
DT_TLSDESC_PLT	Location of PLT entry for TLS descriptor resolver calls
DT_TLSDESC_GOT	Location of GOT entry used by resolver PLT entry
2016-06-18 01:23:38 +00:00
mm
c11d326853 MFC r299529,r299540,r299576,r299896:
r299529,r299540:
Update libarchive to 3.2.0

New features:
- new bsdcat command-line utility
- LZ4 compression (in src only via external utility from ports)
- Warc format support
- 'Raw' format writer
- Zip: Support archives >4GB, entries >4GB
- Zip: Support encrypting and decrypting entries
- Zip: Support experimental streaming extension
- Identify encrypted entries in several formats
- New --clear-nochange-flags option to bsdtar tries to remove noschg and
  similar flags before deleting files
- New --ignore-zeros option to bsdtar to handle concatenated tar archives
- Use multi-threaded LZMA decompression if liblzma supports it
- Expose version info for libraries used by libarchive

r299576,r299896:
Fix broken cpio behavior.

Relnotes:	yes
2016-06-17 22:40:10 +00:00
arybchik
6497d87fb0 MFC r301607
sfxge(4): host byte order is required for IP ID in TSO descriptors

Submitted by:   Artem V. Andreev <Artem.Andreev at oktetlabs.ru>
Sponsored by:   Solarflare Communications, Inc.
2016-06-17 09:07:27 +00:00
arybchik
352358eb69 MFC r301604
sfxge(4): cleanup: add missing probes to ef10_nvram_segment_write_tlv

Submitted by:   Andy Moreton <amoreton at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
2016-06-17 09:06:30 +00:00
arybchik
df435f6276 MFC r301495
sfxge(4): update TX vFIFO ULL tag location to avoid merge conflict

Sponsored by:   Solarflare Communications, Inc.
2016-06-17 09:05:26 +00:00
arybchik
a857d6a400 MFC r301427
sfxge(4): allow firmware to auto-configure event queues on Medford

On Medford, licenses are required to enable RX and event cut through and to
disable RX batching. To avoid the need for the driver to make decisions based on
the licensing state, the MC_CMD_INIT_EVQ has been extended to allow us to leave
the decision to the firmware. If the adapter is licensed for low-latency use,
the firmware will choose the optimal settings for latency, otherwise it will use
the best settings for throughput.

For Huntington we still need to choose the settings ourselves.

Submitted by:   Mark Spender <mspender at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
Differential Revision:  https://reviews.freebsd.org/D6717
2016-06-17 09:04:06 +00:00
arybchik
d199b46bf4 MFC r301309
sfxge(4): always be ready to receive batched events

When the low-latency firmware variant is running, it is reported as not
being capable of batching RX events, but it can still do so if the
FORCE_EV_MERGING flag is set on an RXQ.  Therefore we need to handle
batched RX events even if the capability isn't set.

If this bug is fixed in the firmware such that the capability is set
even when running the low-latency firmware variant, it will almost
always be reported so I don't think we lose much by removing the check.

Submitted by:   Mark Spender <mspender at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
Differential Revision:  https://reviews.freebsd.org/D6705
2016-06-17 09:02:51 +00:00
arybchik
0d2b23ac59 MFC r301308
sfxge(4): add helper to compute timer quantum

This also adjusts the timer values used to match the Linux net
driver implementation:
a) non-zero time intervals should result in at least one quantum
b) timer load/reload values are only zero biased for Falcon/Siena

Submitted by:   Andy Moreton <amoreton at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
Differential Revision:  https://reviews.freebsd.org/D6704
2016-06-17 09:01:11 +00:00
arybchik
5934149c07 MFC r301237
sfxge(4): support EVQ timer workaround via MCDI

Submitted by:   Andy Moreton <amoreton at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
Differential Revision:  https://reviews.freebsd.org/6675
2016-06-17 08:59:08 +00:00
arybchik
c63e769e2f MFC r301127
sfxge(4): cleanup: remove unused variables in common code

Submitted by:   Andy Moreton <amoreton at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
2016-06-17 08:57:52 +00:00
arybchik
3377d43989 MFC r301125
sfxge(4): cleanup: add missing space after if keyword

Sponsored by:   Solarflare Communications, Inc.
2016-06-17 08:56:47 +00:00
arybchik
29789adab9 MFC r301122
sfxge(4): set moderation in efx_ev_qcreate

This simplifies setting an initial interrupt moderation value, and
avoids most calls to evx_ev_qmoderate from contexts where MCDI is
not allowed (MCDI is need for an EVQ timer workaround in a later patch).

Submitted by:   Andy Moreton <amoreton at solarflare.com>
Reviewed by:    gnn
Sponsored by:   Solarflare Communications, Inc.
Differential Revision:  https://reviews.freebsd.org/D6673
2016-06-17 08:56:01 +00:00
arybchik
4dbc029ab0 MFC r301061
sfxge(4): regenerate MCDI headers from firmwaresrc .yml

Sponsored by:   Solarflare Communications, Inc.
2016-06-17 08:54:43 +00:00
cy
c886d4e3e0 MFC r301773 & r301775:
Clarify the wording to be more accurate.
2016-06-17 02:48:57 +00:00
pfg
52c8ba989a MFC r301291:
libiberty: prevent integer overflow.

Take care of very old bug leading to heap-buffer overflow by
processing certain file headers via bfd binary.

PR:		200888
Obtained from:	OpenBSD
2016-06-17 02:29:55 +00:00
sephe
60d0f449f7 MFC 298039,298042
298039
    hyperv/vmbus: Put multi-channel offer logging under bootverbose

    Suggested by:       Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

298042
    hyperv/hn: Hide ring to channel linkage message under bootverbose

    Suggested by:       Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
2016-06-16 06:34:12 +00:00
sephe
d0a921b0bc hyperv/hn: ifnet TSO configuration is available on 10-stable.
Sponsored by:	Microsoft OSTC
2016-06-16 06:26:09 +00:00
sephe
9a7e3e2b65 MFC 297809,297810,297811
297809
    hyperv/hn: Cap default # of rings to 8.

    8 gives the best performance in both Azure and local Hyper-V on both
    10Ge and 40Ge. More rings are still allowed by manual configuration.

    Reviewed by:        Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5879

297810
    hyperv/hn: By default enable multiple TX/RX rings, aka vRSS.

    Reviewed by:        Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5880

297811
    hyperv/hn: Remove unnecessary NULL checks

    Submitted by:       Jun Su <junsu microsoft com>
    Reviewed by:        sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5905
2016-06-16 05:24:00 +00:00
sephe
18225d8f93 MFC 297636,297800,297801,297805,297807,297808
297636
    hyperv: Typo in r297634

    Noticed by: hiren
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

297800
    hyperv/vmbus: Nuke unused function

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

297801
    hyperv/vmbus: Get rid of max_leaf detection; this is actually not used.

    It will be replaced by a new one.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

297805
    hyperv: Break long line

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

297807
    hyperv: Print more features

    And add comment about the MSR features.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

297808
    hyperv: Define macro for Hyper-V interface

    Suggested by:       rpokala
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
2016-06-16 05:12:28 +00:00
sephe
53328344ab MFC 297334
vt: Use textmode when we're running on hypervisors

    The graphic mode is noticeably slow on hypervisors, especially
    on Hyper-V (1 second to each line).

    Submitted by:       Dexuan Cui <decui microsoft com>
    Reviewed by:        kib, sephe, royger (early loader version)
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5739
2016-06-16 04:32:11 +00:00
sephe
4efa252739 MFC 297265
tcp/lro: Return TCP_LRO_NO_ENTRIES if we are short of LRO entries.

    So that callers could react accordingly.

    Reviewed by:        gallatin (no objection)
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5695
2016-06-16 04:21:27 +00:00
sephe
cb4c1de089 MFC 297220
hyperv/utils: Allow hint to disable individual utility

    Reviewed by:        kib, Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5714
2016-06-16 03:25:26 +00:00
sephe
6a585fbdca MFC 297180,297181,297182
297180
    hyperv/hn: Reduce TCP segment aggregation limit for multiple RX rings

    This mainly used to improve ACK timeliness when multiple RX rings
    are enabled.

    This value gives the best performance in both Azure and Hyper-V
    environment, w/ both 10Ge and 40Ge using non-{INVARIANTS,WITNESS}
    kernel.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5691

297181
    hyperv/hn: Factor out hn_set_lro_lenlim()

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5692

297182
    hyperv/hn: When short of mbufs on the RX path, don't spam the console.

    Instead, increase the IQDROPS counter.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5693
2016-06-16 03:16:43 +00:00
sephe
300587787c MFC 297142,297143,297176,297177,297178,297221
297142
    hyperv: Factor out snprinf_hv_guid()

    Submitted by:       Ju Sun <junsu microsoft com>
    Reviewed by:        Dexuan Cui <decui microsoft com>, sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5651

297143
    hyperv/vmbus: Implement bus_child_pnpinfo_str method

    Submitted by:       Jun Su <junsu microsoft com>
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5669

297176
    hyperv/evttimer: Use an independent message slot so that it can work

    Using the same message slot as the other types of the messages has
    the side effect that the event timer message could be deferred to
    the swi threads to run (lacking of trapframe and the original code
    didn't even handle that, so the event timer was actually broken).

    As of this commit we use an independent message slot for event timer,
    so that we could handle all of event timer messages in the interrupt
    handler directly.  Note, the message slot for event timer is still
    bind to the same interrupt vector as the other types of messages.

    Submitted by:       Jun Su <junsu microsoft com>
    Reviewed by:        sephe
    Discussed with: Jun Su <junsu microsoft com>, Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5696

297177
    hyperv/vmbus: Use taskqueue_fast for non-performance critical messages

    This gets rid of the per-cpu SWIs.

    Submitted by:       Jun Su <junsu microsoft com>
    Reviewed by:        Dexuan Cui <decui microsoft com>, sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5215

297178
    hyperv/vmbus: Remove NULL check for taskqueue_create_fast(M_WAITOK)

    Submitted by:       Jun Su <junsu microsoft com>
    Reviewed by:        Dexuan Cui <decui microsoft com>, sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5215

297221
    hyperv/vmbus: Create per-cpu fast taskqueue for msg handling

    Using one taskqueue does not work, since the EOM MSR must be written
    on the msg's owner CPU.

    Noticed by: Jun Su <junsu microsoft com>
    Discussed with:     Jun Su <junsu microsoft com>, Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
2016-06-16 03:04:16 +00:00
sephe
2fae5018b1 MFC 296379,296380,296381,296593,296594,296595
296379
    hyperv/hn: Add multiple channel support, a.k.a. vRSS

    Each channel contains one RX ring and one TX ring.  And we
    try to distribute the channels to different evenly.

    Note: Currently we don't have enough information to extract
    the RSS type and RSS hash value from the received packets.

    This greatly improves the TX/RX performance for 8 virtual CPU
    Hyper-V over 10Ge: it can max out 10Ge for TCP when multiple
    RX/TX rings are enabled.

    This almost doubles the TX/RX performance for locally connected
    Hyper-Vs: was 6Gbps w/ 128 TCP streams, now 11Gbps w/ multiple
    RX/TX rings enabled.

    It is not enabled by default; it will be switched on after more
    tests.

    Collaborated with:  Hongjiang Zhang <honzhan microsoft com>
    MFC after:  2 week
    Sponsored by:       Microsoft OSTC

296380
    hyperv/hn: Pass channel to send done callbacks.

    Mainly to strigent the data packet send done check.

    MFC after:  2 weeks
    Sponsored by:       Microsoft OSTC

296381
    hyperv/hn: Add per-TX ring stats for # of transmitted packets

    MFC after:  2 weeks
    Sponsored by:       Microsoft OSTC

296593
    hyperv/hn: Move if_initname to an earlier place

    So that functions shared w/ attach path could use if_printf().

    While I'm here, remove unnecessary if_dunit and if_dname assignment.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5576

296594
    hyperv/hn: Factor out hn_channel_attach

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5577

296595
    hyperv/hn: Make the # of TX rings configurable.

    Rename the tunables to avoid confusion.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5578
2016-06-16 02:48:18 +00:00
sephe
e10381a633 MFC 297802,297803(297481),297804
297802
    hyperv: Identify Hyper-V features and recommends properly

    Features bits will be used to detect devices, e.g. timers, which
    do not have corresponding event channels.

    Submitted by:       Jun Su <junsu microsoft com>
    Reviewed by:        sephe, Dexuan Cui <decui microsoft com>
    Rearranged by:      sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

279803(297481)
    hyperv: Register Hyper-V timer early enough for TSC freq calibration

    The i8254 simulation in Hyper-V is kinda broken and is not available
    in Generation 2 Hyper-V VMs, so Hyper-V timer must be registered early
    enough so that it can be used to do the TSC freq calibration.

    This fixes the notorious warning like this:
    calcru: runtime went backwards from 50 usec to 25 usec for pid 0 (kernel)

    Submitted by:       Dexuan Cui <decui microsoft com>
    Reviewed by:        kib, sephe
    Tested by:  kib, sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5778

    =================

    hyperv: Resurrect r297481

    This time we make sure that the TIME_REF_COUNT MSR exists.

    Submitted by:       Jun Su <junsu microsoft com>
    Reviewed by:        sephe, Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

297804
    hyperv: Declare hyperv_{features,recommends} properly

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
2016-06-16 01:57:16 +00:00
vangyzen
9c6df47b0b MFC r301532
newsyslog: Eliminate unnecessary sleep(10) when -R and -s are specified

After going through the signal work list, during which do_sigwork()
is called and essentially does nothing because -s and -R were
specified on the command line, newsyslog will sleep for 10 seconds
as the (verbose) code says: "Pause 10 seconds to allow daemon(s)
to close log file(s)".

However, the man page verbiage for -R (and -s) seems quite clear
that this sleep() is unnecessary because the daemon was expected
to have already closed the log file before calling newsyslog.

PR:		210020
Submitted by:	David A. Bright <david_a_bright@dell.com>
Sponsored by:	Dell Inc.
2016-06-15 14:11:49 +00:00
sephe
adcbd6078c MFC 297635
hyperv/vmbus: Use default mtx for channel message queue

    First of all sema_post() can't be called w/ spinlock, and the channel
    message queue processing is not on hot code path, i.e. spinlock is not
    necessary.

    Submitted by:       Jun Su <junsu microsoft com>
    Reviewed by:        sephe, Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5812
2016-06-15 09:52:01 +00:00
sephe
9dcee9004f MFC 297219
hyperv/vmbus: use a better retry method in hv_vmbus_post_message()

    Most often, hv_vmbus_post_message() doesn't fail.  However, it fails
    intermittently when GPADLs of large shared memory is to be established
    with the host, e.g. on the hn(4) attach path: a GPADL of 15MB sendbuf
    is created, for which lots of messages will be flooded to the host.
    The host side tries to throttle the message rate by returning
    HV_STATUS_INSUFFICIENT_BUFFERS.

    Before this commit, we do several retries for failed messages, but the
    delay between each retry is pretty/too low, which will cause sporadic
    message posting failure.  We now use large delay (>=1ms) between each
    retry to fix the message posting failure.

    Submitted by:       Dexuan Cui <decui microsoft com>
    Reviewed by:        sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5715
2016-06-15 09:39:41 +00:00
truckman
ea478cdf17 MFC r301596
Don't leak olinep if malloc() fails.

If malloc() fails to allocate linep, then free olinep (if it exists)
before returning to avoid a memory leak.

Reported by:	Coverity
CID:		1016716
Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D6755
2016-06-15 06:42:30 +00:00
truckman
f4be65f8e0 MFC r301592
Don't leak addrinfo if ai->ai_addrlen <= minsiz test fails.

If the ai->ai_addrlen <= minsiz test fails, then freeaddrinfo()
does not get called to free the memory just allocated by getaddrinfo().
Fix by moving ai->ai_addrlen <= minsiz to a separate nested if
block, and keep freeaddrinfo() in the outer block so that freeaddrinfo()
will be called whenever getaddrinfo() succeeds.

Reported by:	Coverity
CID:		1273652
Reviewed by:	ume
Differential Revision:	https://reviews.freebsd.org/D6756
2016-06-15 06:40:30 +00:00
truckman
c77fcd4fd3 MFC r301582
Explicitly NUL terminate the buffer filled by fread().

The fix in r300649 was not sufficient to convince Coverity that the
buffer was NUL terminated, even with the buffer pre-zeroed.  Swap
the size and nmemb arguments to fread() so that a valid lenght is
returned, which we can use to terminate the string in the buffer
at the correct location.  This should also quiet the complaint about
the return value of fread() not being checked.

Reported by:	Coverity
CID:		1019054, 1009614
Secur3ty:
Sponsore dby:
2016-06-15 06:33:40 +00:00
sephe
c2353f9c1e MFC 296293,296296,296297,296305
296293
    hyperv/hn: Pass channel to hv_nv_on_receive_completion()

    While I'm here, staticize this function.

    Submitted by:       Hongjiang Zhang <honzhan microsoft com>
    Modified by:        sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

296296
    hyperv/hn: Make read buffer per-channel

    Submitted by:       Hongjiang Zhang <honzhan microsoft com>
    Reorganized by:     sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

296297
    hyperv/hn: Fix typo in comment

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

296305
    hyperv/hn: Make # of rings configurable

    And since the host may not being able to allocate the # of rings
    requested by us, save the # of rings allocated by the host in the
    ring_inuse counters; use ring_inuse counters for run time operation.

    This paves the way for the upcoming vRSS support.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
2016-06-15 06:32:00 +00:00
truckman
6d64f4d6b9 MFC r299484, r301574
r299484 | cem | 2016-05-11 15:04:28 -0700 (Wed, 11 May 2016) | 13 lines

random(6): Fix double-close

In the case where a file lacks a trailing newline, there is some "evil" code to
reverse goto the tokenizing code ("make_token") for the final token in the
file.  In this case, 'fd' is closed more than once.  Use a negative sentinel
value to guard close(2), preventing the double close.

Ideally, this code would be restructured to avoid this ugly construction.

r301574 | truckman | 2016-06-07 19:14:05 -0700 (Tue, 07 Jun 2016) | 15 lines

Fix a (false positive?) Argument cannot be negative coverity defect.

Rather than guarding close(fd) with an fd >= 0 test and setting fd
to -1 when it is closed to avoid a potential double-close, just
move the close() call after the conditional "goto make_token".  This
moves the close() call totally outside the loop to avoid the
possibility of calling it twice.  This should also prevent a Coverity
warning about checking fd for validity after it was previously passed
to read().

Reported by:	Coverity
CID:		1006123, 1355335
2016-06-15 06:27:43 +00:00
sephe
d7c7919b61 MFC 296291,301109
296291
    hyperv/chan: Factor out the vcpu setting

    And use it for cpu0 assignment; it does not sound right to assume that
    cpu0 maps to vcpu0.  And this factored out function will be exposed to
    drivers, if driver specific CPU binding is needed, e.g. hn(4).

    Move default cpu select after saving channel offer message. This makes
    sure that all useful information of the channel has been setup.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5504

301109
    hyperv/channel: Only cpu0 is supported as channel target cpu on WIN7

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
2016-06-15 06:08:05 +00:00
sephe
d15b14a0bc MFC 296181,296184,296187,296188,296252,296253,296289,296290
296181
    hyperv/channel: Add debug sysctl nodes for channel indices

    It would serve as a debug tool, if the shared buffer ring's indices
    stopped updating.

    Submitted by:       HongJiang Zhang <honzhan microsoft com>
    Reviewed by:        sephe, Jun Su <junsu microsoft com>
    Modified by:        sephe
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5402

296184
    hyperv/hn: Switch to if_transmit by default after r296178

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5485

296187
    hyperv/hn: Utilize mbuf flowid

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5488

296188
    hyperv/channel: Add sysctl node for channel owner cpu

    And add sysctl node for sub-channel's channel id.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5489

296252
    hyperv/hn: Set hash per-packet-info for each packet transmission

    So that the host could dispatch the TX done back to this TX ring's
    owner channel

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5498

296253
    hyperv/channel: Nuke useless stack variable

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5499

296289
    hyperv/chan: Add sysctl node to check whether monitor is allocated or not

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5502

296290
    hyperv/chan: Function renaming; no functional change

    The renamed function create a sysctl tree for channel, and many
    non-statistics nodes exists, so don't claim it only adds sysctl
    nodes for statistics.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5503
2016-06-15 05:57:06 +00:00
sephe
9b1cd87720 MFC 296180,297634
296180
    hyperv: Use proper fence function to keep store-load order for msgs

    sfence only makes sure about the store-store order, which is not
    sufficient here.  Use atomic_thread_fence_seq_cst() as suggested
    jhb and kib (a locked op in the nutshell, which should have the

    Reviewed by:        jhb, kib, Jun Su <junsu microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5436

297634
    hyperv: Use mb() instead of atomic_thread_fence_seq_cst()

    Since atomic_thread_fence_seq_cst() will become compiler fence on UP kernel.

    Reviewed by:        kib, Dexuan Cui <decui microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5852
2016-06-15 05:31:35 +00:00
sephe
6bb446b900 MFC 296178
buf_ring/drbr: Add buf_ring_peek_clear_sc and use it in drbr_peek

    Unlike buf_ring_peek, it only supports single consumer mode, and it
    clears the cons_head if DEBUG_BUFRING/INVARIANTS is defined.

    The normal use case of drbr_peek for network drivers is:

    m = drbr_peek(br);
    err = hw_spec_encap(&m); /* could m_defrag/m_collapse */
    (*)
    if (err) {
        if (m == NULL)
            drbr_advance(br);
        else
            drbr_putback(br, m);
        /* break the loop */
    }
    drbr_advance(br);

    The race is:
    If hw_spec_encap() m_defrag or m_collapse the mbuf, i.e. the old mbuf
    was freed, or like the Hyper-V's network driver, that transmission-
    done does not even require the TX lock; then on the other CPU at the
    (*) time, the freed mbuf could be recycled and being drbr_enqueue even
    before the current CPU had the chance to call drbr_{advance,putback}.
    This triggers a panic in drbr_enqueue duplicated element check, if
    DEBUG_BUFRING/INVARIANTS is defined.

    Use buf_ring_peek_clear_sc() in drbr_peek() to fix the above race.

    This change is a NO-OP, if neither DEBUG_BUFRING nor INVARIANTS are
    defined.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5416
2016-06-15 05:16:37 +00:00
sephe
5cf8affbc8 MFC 296083,296084,296085,296086,296087,296088,296089
296083
    hyperv: Remove useless channel inbound_lock

    It serves no purpose.

    Reviewed by:        Hongjiang Zhang <honzhan microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5450

296084
    hyperv: Always set device for channels

    And unregister hv_device only for primary channels, who own the hv_device.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5451

296085
    hyperv/hn: Pass channel as the channel callback argument

    This is the preamble to pass channel back to hn(4) upon TX/RX done.

    Reviewed by:        Hongjiang Zhang <honzhan microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5452

296086
    hyperv/hn: Pass channel to TX/RX done

    This is preamble to associate the TX/RX rings to their channel.

    While I'm here, revoke unused netvsc_recv_rollup.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5453

296087
    hyperv/hn: Associate TX/RX ring with channel

    This fixes the TX/RX ring selection for TX/RX done.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5454

296088
    hyperv/hn: Remove the useless num_outstanding_sends

    We rely on taskqueue draining now.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5456

296089
    hyperv/hn: Make transmission path channel aware

    Chimney sending buffer still needs conversion, which will be done
    along with the upcoming vRSS support.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5457
2016-06-15 03:48:55 +00:00
sephe
60076eed87 MFC 296022,296024,296076
296022
    hyperv/hn: Implement ifnet.if_transmit method

    It will be turned on by default later.

    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5415

296024
    hyperv/hn: Hold the TX ring lock then drain TX desc buf_ring

    Reported by:        Hongxiong Xian <v-hoxian microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC

296076
    hyperv: Use atomic_fetchadd_int to get GPADL id.

    Reviewed by:        Hongjiang Zhang <honzhan microsoft com>
    MFC after:  1 week
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5439
2016-06-15 03:17:05 +00:00
jamie
397ec06345 MFC r301764:
Fix a vnode leak when giving a child jail a too-long path when
  debug.disablefullpath=1.
2016-06-15 01:59:55 +00:00
jamie
b19195f812 MFC r301760:
Re-order some jail parameter reading to prevent a vnode leak.
2016-06-15 01:58:54 +00:00