aboutsummaryrefslogtreecommitdiff
path: root/stand
Commit message (Collapse)AuthorAgeFilesLines
* interp_lua: fix bogus indentation, NFCKyle Evans2020-02-121-5/+5
| | | | Notes: svn path=/head/; revision=357828
* lualoader: disable autoboot on high-level interpreter errorsKyle Evans2020-02-121-0/+1
| | | | | | | | | | | | | | If we hit an error at this level, we are almost certainly not in any kind of sane state where autoboot can do the right thing. Instead of letting it try and probably failing, disable autoboot so they immediately get kicked into a loader prompt for manual remediation/diagnosis. Reviewed by: tsoome MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D23611 Notes: svn path=/head/; revision=357827
* followup on r357497: clean obsolete comment and use shift instead of ↵Toomas Soome2020-02-051-6/+7
| | | | | | | | | | | multiplication Based on illumos review feedback: leftover comment, but also have consistent block size calculation and add missing else leg to if statement. Notes: svn path=/head/; revision=357571
* zfsboot: vdev_read_pad2 does allocate buffer with wrong sizeToomas Soome2020-02-051-1/+1
| | | | | | | | | | | | vdev_read_pad2() does read VDEV_PAD_SIZE of data, and will copy size bytes of it, hence, we need buffer of VDEV_PAD_SIZE bytes. Issue introduced in r357497. Reported by: se Notes: svn path=/head/; revision=357569
* vdev_read_pad2: freeing wrong pointerToomas Soome2020-02-051-1/+1
| | | | | | | | | | Shoud free previously allocated tmp buffer instead. Issue introduced in r357497. Reported by: rpokala Notes: svn path=/head/; revision=357567
* loader: rewrite zfs reader zap code to use mallocToomas Soome2020-02-042-170/+293
| | | | | | | | | | First step on removing zfs_alloc. Reviewed by: delphij Differential Revision: https://reviews.freebsd.org/D23433 Notes: svn path=/head/; revision=357497
* Remove sparc64 support from the boot loader.Warner Losh2020-02-0318-2580/+2
| | | | | | | Remove all the sparc64 specific bits, both files and ifdefs. Notes: svn path=/head/; revision=357454
* loader: bc_add can not use any other probes than ah=0x4bToomas Soome2020-02-031-50/+97
| | | | | | | | | | | | | CD boot is broken for some systems since bioscd and biosdisk merge. The issue is that we can not use anything else than int 13 ah=0x4b to query cd information. The patch does restore the same probe as was originally used in bioscd.c. Additionally extra buffer padding is used to avoid memory corruption caused by some systems. PR: 234031 Reported by: ultramage and others MFC after: 1 day Notes: svn path=/head/; revision=357442
* Work around assembler error from clang 10.0.0 in gptboot:Dimitry Andric2020-01-281-1/+1
| | | | | | | | | | | | | | stand/i386/gptboot/gptldr.S:141:3: error: value of 36878 is too large for field of 2 bytes. jmp MEM_JMP # Start BTX ^ Use the same construct as in stand/i386/boot2/boot1.S, which ensures the jump distance does not become too large. MFC after: 3 days Notes: svn path=/projects/clang1000-import/; revision=357231
* lua: add modules.loaded hookKyle Evans2020-01-251-2/+5
| | | | | | | | | | | | | | | | | | | | | | This may be used for the local module to hook in and load any additional modules that it wants, since it can't modify the modules table internal to config. We may consider adding API to do so at a later time, but I suspect it will be more complicated to use with little return. status is captured but ignored for the purpose of loading the hook. status will be false if *any* module failed to load, but we typically don't let that halt the boot so there's no reason to let it halt hooks. Some vendors or setups may have expected fails that would be actively thwarted by checking it. We may, at a later date, consider adding an API for letting non-config modules check which modules have successfully (or not) loaded in case an unexpected failure *should* halt whatever they are doing. MFC after: 3 days Notes: svn path=/head/; revision=357104
* loader.lua: re-arrange to load local.lua *after* config loadingKyle Evans2020-01-251-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | The major problem with the current ordering is that loader.conf may contain all of the magic we need to actually setup the console, so loading local.lua prior to that can make it excessively difficult and annoying to debug (whoops, sorry Ravi & Warner). The new ordering has some implications, but I suspect they are a non-issue. The first is that it's no longer possible for the local module to inject any logic prior to loading config -- I suspect no one has relied on this. The second implication is that the config.loaded hook is now useless, as the local module will always be included after that hook would have fired. For config.loaded, I will opt to leave it in, just in case we add an early point for local lua to get injected or in case one wants to schedule some deferred logic in a custom loader.lua. The overhead of having it if no hooks will be invoked is relatively minimal. Diagnosed by: imp Reported by: imp, rpokala (most likely) MFC after: 3 days Notes: svn path=/head/; revision=357103
* Fix build of stand/usb .Hans Petter Selasky2020-01-231-1/+3
| | | | | | | | MFC after: 1 week Sponsored by: Mellanox Technologies Notes: svn path=/head/; revision=357041
* Add support for Hygon Dhyana Family 18h processor.Konstantin Belousov2020-01-211-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As a new x86 CPU vendor, Chengdu Haiguang IC Design Co., Ltd (Hygon) is a joint venture between AMD and Haiguang Information Technology Co., Ltd., aims at providing x86 processors for China server market. The first generation Hygon processor(Dhyana) shares most architecture with AMD's family 17h, but with different CPU vendor ID("HygonGenuine") and PCI vendor ID(0x1d94) and family series number 18h(Hygon negotiated with AMD to confirm that only Hygon use family 18h). To enable Hygon Dhyana support in FreeBSD, add new definitions HYGON_VENDOR_ID("HygonGenuine") and X86_VENDOR_HYGON(0x1d94) to identify Hygon Dhyana CPU. Initialize the CPU features(topology, local APIC ext, MSI, TSC, hwpstate, MCA, DEBUG_CTL, etc) for amd64 and i386 mode by sharing the code path of AMD family 17h. The changes have been applied on FreeBSD 13.0-CURRENT and tested successfully on Hygon Dhyana processor. References: [1] Linux kernel patches for Hygon Dhyana, merged in 4.20: https://git.kernel.org/tip/c9661c1e80b609cd038db7c908e061f0535804ef [2] MSR and CPUID definition: https://www.amd.com/system/files/TechDocs/54945_PPR_Family_17h_Models_00h-0Fh.pdf Submitted by: Pu Wen <puwen@hygon.cn> MFC after: 1 week Differential revision: https://reviews.freebsd.org/D23163 Notes: svn path=/head/; revision=356940
* [PowerPC] Fix 32-bit ubldr calling conventionBrandon Bergren2020-01-191-4/+9
| | | | | | | | | | | | | | | | | | | Due to the way u-boot for 32-bit powerpc is compiled, the interrupt code assumes that the GOT pointer (r30) on u-boot is always intact. When making syscalls to u-boot, ensure that we have restored r30 like we found it before we enable interrupts to prevent u-boot from crashing if a timer interrupt was pending. This fixes ubldr on e500 qemu (assuming you have recompiled qemu's u-boot with API support!) Reviewed by: jhibbits Sponsored by: Tag1 Consulting, Inc. Differential Revision: https://reviews.freebsd.org/D23258 Notes: svn path=/head/; revision=356878
* Backout 356693. The libsa malloc does provide necessary alignment andToomas Soome2020-01-134-4/+4
| | | | | | | | memalign by 4 will reduce alignment for some platforms. Thanks for Ian for pointing this out. Notes: svn path=/head/; revision=356700
* loader: allocate properly aligned buffer for network packetToomas Soome2020-01-134-4/+4
| | | | | | | | | Use memalign(4, size) to ensure we have properly aligned buffer. MFC after: 2 weeks Notes: svn path=/head/; revision=356693
* loader: bioscd probe can get sector size 0Toomas Soome2020-01-091-2/+4
| | | | | | | | | | With buggy BIOS, it may happen we get sector size reported 0 for cd, and then the default 512 is used, which is quite wrong. PR: 238749 Notes: svn path=/head/; revision=356570
* stand/fdt: Scale blob size better as overlays applyKyle Evans2020-01-093-9/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, our overlay blob will grow to include the size of the complete overlay blob we're applying. This doesn't scale very well with a lot of overlays- they tend to include a lot of overhead, and they will generally only add a fraction of their total size to the blob they're being applied to. To combat this, pack the blob as we apply new overlays and keep track of how many overlays we've applied. Only ubldr has any fixups to be applied after overlays, so we only need to re-pad the blob in ubldr. Presumably the allocation won't fail since we just did a lot worse in trying to apply overlays and succeeded. I have no intention of removing the padding in make_dtb.sh. There might be an argument to be had over whether it should be configurable, since ubldr *is* the only loader that actually has fixups to be applied and we can do this at runtime, but I'm not too concerned about this. This diff has been sitting in Phabricator for a year and a half, but I've decided to flush it as it does make sure that we're scaling the blob appropriately and leave room at the end for fixups in case of some freak circumstance where applying overlays leaves us with a blob of insufficient size. Reviewed by: gonzo (a long time ago) MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D14133 Notes: svn path=/head/; revision=356538
* loader: update zfsimpl.c from illumos review suggestionsToomas Soome2020-01-061-15/+23
| | | | | | | | | Add extra comments and update error handling. MFH: 1 week Notes: svn path=/head/; revision=356424
* Move stand/ofw/libofw to stand/libofw.Brandon Bergren2020-01-0219-13/+6
| | | | | | | | | | | | | | | Since rS330365, there has been no particular reason for libofw to be in a subdirectory of ofw. Move libofw up a level to make it fit in better with the other top level libraries. Also add a LIBOFWSRC to stand/defs.mk to match what all the other libraries are doing. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D23000 Notes: svn path=/head/; revision=356266
* [PowerPC64] Use ld.bfd to build LIB32 and STAND - when using llvmJustin Hibbits2019-12-241-0/+4
| | | | | | | | | | | | | | | | | | | | | | | Summary: This patch is to support ongoing work for replacing "GCC/BFD" by "CLANG/LLD" on target PowerPC64 [1], by proposing a way to specify and/or locate a secondary ld.bfd linker. This is necessary as LLD currently doesn't support PowerPC 32 bits, so we keep using BFD for the 32 bit stuff on PowePC64(LIB32 compatibility and STAND/slof/loader.) - creates LD_BFD variable pointing to ld.bfd - use LD_BFD as linker for LIB32/compat - Default behavior for other platforms aren't changed. [1] https://wiki.freebsd.org/powerpc/llvm-elfv2 Submitted by: alfredo.junior_eldorado.org.br Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D20261 Notes: svn path=/head/; revision=356054
* In gptboot, don't assume a partition number is a single digit, 1-9. GPTIan Lepore2019-12-221-3/+5
| | | | | | | | | | | partitions can have 128 partitions, so parse contiguous digits and then validate that the number is between 1-128 inclusive. I'm not sure 128 is a hard limit in the GPT standard, but it's the common number in use, and it's a better upper limit than 9. Notes: svn path=/head/; revision=356031
* Move all sources from the llvm project into contrib/llvm-project.Dimitry Andric2019-12-202-3/+3
| | | | | | | | | | | | | This uses the new layout of the upstream repository, which was recently migrated to GitHub, and converted into a "monorepo". That is, most of the earlier separate sub-projects with their own branches and tags were consolidated into one top-level directory, and are now branched and tagged together. Updating the vendor area to match this layout is next. Notes: svn path=/head/; revision=355940
* loader.efi: efi_readkey_ex needs to key despite the shift status or toggle ↵Toomas Soome2019-12-171-4/+8
| | | | | | | | | | | | | | | | | | status From UEFI specification 2.8, page 434: "It should also be noted that certain input devices may not be able to produce shift or toggle state information, and in those cases the high order bit in the respective Toggle and Shift state fields should not be active." But we still need to check for ScanCode and UnicodeChar. PR: 242660 Reported by: Trond Endrestol MFC after: 1 week Notes: svn path=/head/; revision=355844
* Use symbolic names for int13 callsWarner Losh2019-12-162-25/+43
| | | | | | | | | For all the INT13 calls, use symbolic names instead of magic numbers. This makes it easier to understand what the code is doing w/o a trip to google to find what these numbers mean. Notes: svn path=/head/; revision=355825
* loader: rewrite zfs vdev initializationToomas Soome2019-12-151-260/+437
| | | | | | | | | | | | | | | | In some cases the pool discovery will get stuck in infinite loop while setting up the vdev children. To fix, we split the vdev setup into two parts, first we create vdevs based on configuration we do get from pool label, then, we process pool config from MOS and update the pool config if needed. Testing done: confirm previously hung loader is not hung any more. MFC after: 1 week Notes: svn path=/head/; revision=355786
* loader: zfsimpl.c cstyle cleanupToomas Soome2019-12-151-117/+139
| | | | | | | | | No functional changes intended. MFC after: 1 week Notes: svn path=/head/; revision=355773
* zfs boot: fix a crash in a rarely taken path in fzap_lookupAndriy Gapon2019-12-131-4/+2
| | | | | | | | | | | | | | | | | Instead of passing NULL to fzap_name_equal and crashing, just return ENOENT. This happened when higher bits of a hash of the searched key (its hash prefix) matched a hash prefix of some key in the ZAP, but the full hash value of the searched key did not match any key in the ZAP. I observerved this problem when loader tried to look up "features_for_read" in a particular old pool that predates pool features. MFC after: 2 weeks Sponsored by: Panzura Notes: svn path=/head/; revision=355736
* loader: cd9660_open() warn: is 'buf' large enough for 'struct ↵Toomas Soome2019-12-132-5/+7
| | | | | | | | | | | | | | | | iso_primary_descriptor'? We do allocate amount of memory (void * or char *), and then assign this buffer to struct iso_primary_descriptor *vd. Make sure we do allocate enough bytes. In fact we do allocate enough, but it is good idea to make sure this really is so. MFC after: 1 week Notes: svn path=/head/; revision=355713
* loader: clean up devopen and devclose a bitToomas Soome2019-12-131-3/+2
| | | | | | | | | | devopen should undo setup of f->f_dev in case of error. devclose can just call free(). MFC after: 1 week Notes: svn path=/head/; revision=355703
* loader: vdisk dereference after freeToomas Soome2019-12-131-2/+2
| | | | | | | | | print out the information and then free the memory used. MFC after: 1 week Notes: svn path=/head/; revision=355702
* stand: liblua: drop default buffer size to 128Kyle Evans2019-12-121-5/+1
| | | | | | | | | | | | | | | | Lua allocates LUAL_BUFFERSIZE buffers on the stack for various string functions (string.format, string.gsub) -- this works out to be somewhat significant and not necessary, based on how we use string operations. Dropping it risks having to allocate per call to format/gsub, but this is not the case for our usage. This simply stops allocating 8K buffers on the stack when luaL_Buffer is used. Reviewed by: imp MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D22500 Notes: svn path=/head/; revision=355640
* Update Makefile.depend filesSimon J. Gerraty2019-12-113-5/+18
| | | | | | | | | | | | | Update a bunch of Makefile.depend files as a result of adding Makefile.depend.options files Reviewed by: bdrewery MFC after: 1 week Sponsored by: Juniper Networks Differential Revision: https://reviews.freebsd.org/D22494 Notes: svn path=/head/; revision=355617
* powerpc: Use builtins for fls/flslJustin Hibbits2019-12-081-1/+0
| | | | | | | | | | | | | | Summary: There's no need to use the fallback fls() and flsl() libkern functions when the PowerISA includes instructions that already do the bulk of the work. Take advantage of this through the GCC builtins __builtin_clz() and __builtin_clzl(). Reviewed by: luporl Differential Revision: https://reviews.freebsd.org/D22340 Notes: svn path=/head/; revision=355521
* loader.efi: print ImageBase so we know where we areToomas Soome2019-12-061-0/+1
| | | | | | | Output a bit of debugging aid. Notes: svn path=/head/; revision=355441
* Regularize my copyright noticeWarner Losh2019-12-047-10/+7
| | | | | | | | | | | | o Remove All Rights Reserved from my notices o imp@FreeBSD.org everywhere o regularize punctiation, eliminate date ranges o Make sure that it's clear that I don't claim All Rights reserved by listing All Rights Reserved on same line as other copyright holders (but not me). Other such holders are also listed last where it's clear. Notes: svn path=/head/; revision=355394
* loader: clean up efipart filter expressionsToomas Soome2019-12-041-12/+11
| | | | | | | Small cleanup based on illumos review. Notes: svn path=/head/; revision=355392
* lualoader: correct a typo from r354247Kyle Evans2019-12-031-1/+1
| | | | | | | | | | | | | | r354247 converted try_include to lfs + dofile with the loader.lua_path added just before. Fortunately, there was a hardcoded /boot/lua fallback in case loader.lua_path wasn't being set yet- I typo'd it as loader.lua_paths. Fix the typo. X-MFC-With: r354247 MFC after: 3 days Notes: svn path=/head/; revision=355349
* loader: ReadKeyStrokeEx may return partial keystrokesToomas Soome2019-12-031-3/+4
| | | | | | | | | | | In some systems we can receive no scancode nor unicodechar values. PR: 240760 Reported by: Ariel Millennium Thornton MFC after: 1 week Notes: svn path=/head/; revision=355347
* loader.efi: fix cd boot for cisco C220M3Toomas Soome2019-12-021-0/+17
| | | | | | | | Reported by: Chris Ross MFC after: 1w Notes: svn path=/head/; revision=355308
* loader.efi: efipart needs better support detecting nested partitionsToomas Soome2019-11-304-251/+300
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Just as disks can have nested partitions, the same happens with cd devices, so we need to detect device paths and make sure we will not mix the handles. To address this: we fetch handle array and create linked list of block devices. we walk the list and detect parent devices and set children pd_parent. for {fd, cd, hd}, we walk device list and pick up our devices and store to corresponding list. We make sure we store parent device first. For sorting we use 3 steps: We check for floppy, we check for cd and then everything else must be hd. In general, it seems the floppy devices have no parent. CD can have both parents and children (multiple boot entries, partitions from the hybrid disk image). Tested by: cross+freebsd@distal.com on Cisco UCS systems, C200 series (C220M5, C240M4). Also on MBP with UEFI 1.10 Reported by: Chriss Ross MFC after: 1w Differential Revision: https://reviews.freebsd.org/D22553 Notes: svn path=/head/; revision=355224
* Also turn of teken for RB_MULTIPLEWarner Losh2019-11-281-2/+10
| | | | | | | | | | | | | RB_MULTIPLE without RB_SERIAL set is valid, and means 'Video first, then serial' to the kernel (so kernel messages go to both, but /etc/rc uses video console (this should be fixed, btw, but another day)). Check for RB_MULTIPLE as well as RB_SERIAL where we want to to serial things. This means we'll use the old code for emulation in these situations, which is likely best since we're outputing to both and the old code is ligher weight allowing both to keep up w/o weird scrolling things. Notes: svn path=/head/; revision=355168
* Remove comment. We're just going to the next node here.Warner Losh2019-11-281-1/+1
| | | | Notes: svn path=/head/; revision=355167
* Support kernels larger than EFI_STAGING_SIZE in loader.efiAndrew Turner2019-11-271-3/+64
| | | | | | | | | | | | | With a very large kernel or module the staging area may be too small to hold it. When this is the case try to allocate more space before failing in the efi copyin/copyout/readin functions. Reviewed by: imp, tsoome Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D22569 Notes: svn path=/head/; revision=355132
* MFV r354382,r354385: 10601 10757 Pool allocation classesAndriy Gapon2019-11-211-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | illumos/illumos-gate@663207adb1669640c01c5ec6949ce78fd806efae https://github.com/illumos/illumos-gate/commit/663207adb1669640c01c5ec6949ce78fd806efae 10601 Pool allocation classes https://www.illumos.org/issues/10601 illumos port of ZoL Pool allocation classes. Includes at least these two commits: 441709695 Pool allocation classes misplacing small file blocks cc99f275a Pool allocation classes 10757 Add -gLp to zpool subcommands for alt vdev names https://www.illumos.org/issues/10757 Port from ZoL of d2f3e292d Add -gLp to zpool subcommands for alt vdev names Note that a subsequent ZoL commit changed -p to -P a77f29f93 Change full path subcommand flag from -p to -P Portions contributed by: Jerry Jelinek <jerry.jelinek@joyent.com> Portions contributed by: Håkan Johansson <f96hajo@chalmers.se> Portions contributed by: Richard Yao <ryao@gentoo.org> Portions contributed by: Chunwei Chen <david.chen@nutanix.com> Portions contributed by: loli10K <ezomori.nozomu@gmail.com> Author: Don Brady <don.brady@delphix.com> 11541 allocation_classes feature must be enabled to add log device illumos/illumos-gate@c1064fd7ce62fe763a4475e9988ffea3b22137de https://github.com/illumos/illumos-gate/commit/c1064fd7ce62fe763a4475e9988ffea3b22137de https://www.illumos.org/issues/11541 After the allocation_classes feature was integrated, one can no longer add a log device to a pool unless that feature is enabled. There is an explicit check for this, but it is unnecessary in the case of log devices, so we should handle this better instead of forcing the feature to be enabled. Author: Jerry Jelinek <jerry.jelinek@joyent.com> FreeBSD notes. I faithfully added the new -g, -L, -P flags, but only -g does something: vdev GUIDs are displayed instead of device names. -L, resolve symlinks, and -P, display full disk paths, do nothing at the moment. The use of special vdevs is backward compatible for read-only access, so root pools should be bootable, but exercise caution. MFC after: 4 weeks Notes: svn path=/head/; revision=354941
* Add flua to the base system, install to /usr/libexecKyle Evans2019-11-185-377/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | FreeBSDlua ("flua") is a FreeBSD-private lua, flavored with whatever extensions we need for base system operations. We currently support a subset of lfs and lposix that are used in the rewrite of makesyscall.sh into lua, added in r354786. flua is intentionally written such that one can install standard lua and some set of lua modules from ports and achieve the same effect. linit_flua is a copy of linit.c from contrib/lua with lfs and lposix added in. This is similar to what we do in stand/. linit.c has been renamed to make it clear that this has flua-specific bits. luaconf has been slightly obfuscated to make extensions more difficult. Part of the problem is that flua is already hard enough to use as a bootstrap tool because it's not in PATH- attempting to do extension loading would require a special bootstrap version of flua with paths changed to protect the innocent. src.lua.mk has been added to make it easy for in-tree stuff to find flua, whether it's bootstrap-flua or relying on PATH frobbing by Makefile.inc1. Reviewed by: brooks, emaste (both earlier version), imp Differential Revision: https://reviews.freebsd.org/D21893 Notes: svn path=/head/; revision=354833
* loader: remove unused variable from efipart.cToomas Soome2019-11-161-1/+1
| | | | Notes: svn path=/head/; revision=354766
* loader: add support for hybrid PMBR for GPT partition tableToomas Soome2019-11-151-14/+9
| | | | | | | | | | | | | | | | | | | | Note hybrid table is nor really UEFI specification compliant. Sample hybrid partition table: > ::mbr Format: unknown Signature: 0xaa55 (valid) UniqueMBRDiskSignature: 0 PART TYPE ACTIVE STARTCHS ENDCHS SECTOR NUMSECT 0 EFI_PMBR:0xee 0 1023/254/63 1023/254/63 1 409639 1 0xff 0 1023/254/63 1023/254/63 409640 978508408 2 FDISK_EXT_WIN:0xc 0 1023/254/63 1023/254/63 978918048 31250000 3 0xff 0 1023/254/63 1023/254/63 1010168048 32 > Notes: svn path=/head/; revision=354746
* loader: r354415 did miss to sort subpaths below the partitionsToomas Soome2019-11-151-5/+23
| | | | | | | Tested on actual system (MBP with UEFI 1.10). Notes: svn path=/head/; revision=354743
* Logging improvements to loader::nfsRavi Pokala2019-11-131-3/+4
| | | | | | | | | | | | | Include the server IP address when logging nfs_open(), add a few missing "\n"s, and correct a typo. Reviewed by: kevans MFC after: 2 weeks Sponsored by: Panasas Differential Revision: https://reviews.freebsd.org/D22346 Notes: svn path=/head/; revision=354673