From owner-svn-src-head@freebsd.org Sun Mar 19 00:22:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4C05AD083A7; Sun, 19 Mar 2017 00:22:15 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2653D1E04; Sun, 19 Mar 2017 00:22:15 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J0MEwk015945; Sun, 19 Mar 2017 00:22:14 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J0MDhq015941; Sun, 19 Mar 2017 00:22:13 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201703190022.v2J0MDhq015941@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Sun, 19 Mar 2017 00:22:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315522 - in head: contrib/binutils/ld/emulparams sys/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 00:22:15 -0000 Author: emaste Date: Sun Mar 19 00:22:13 2017 New Revision: 315522 URL: https://svnweb.freebsd.org/changeset/base/315522 Log: use INT3 instead of NOP for x86 binary padding We should never end up executing the inter-function padding, so we are better off faulting than silently carrying on to whatever function happens to be next. Note that LLD will soon do this by default (although it currently pads with zeros). Reviewed by: dim, kib MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D10047 Modified: head/contrib/binutils/ld/emulparams/elf_i386.sh head/contrib/binutils/ld/emulparams/elf_x86_64.sh head/sys/conf/ldscript.amd64 head/sys/conf/ldscript.i386 Modified: head/contrib/binutils/ld/emulparams/elf_i386.sh ============================================================================== --- head/contrib/binutils/ld/emulparams/elf_i386.sh Sat Mar 18 23:59:50 2017 (r315521) +++ head/contrib/binutils/ld/emulparams/elf_i386.sh Sun Mar 19 00:22:13 2017 (r315522) @@ -6,7 +6,7 @@ COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE NONPAGED_TEXT_START_ADDR=0x08048000 ARCH=i386 MACHINE= -NOP=0x90909090 +NOP=0xCCCCCCCC TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes Modified: head/contrib/binutils/ld/emulparams/elf_x86_64.sh ============================================================================== --- head/contrib/binutils/ld/emulparams/elf_x86_64.sh Sat Mar 18 23:59:50 2017 (r315521) +++ head/contrib/binutils/ld/emulparams/elf_x86_64.sh Sun Mar 19 00:22:13 2017 (r315522) @@ -7,7 +7,7 @@ COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE NONPAGED_TEXT_START_ADDR=0x400000 ARCH="i386:x86-64" MACHINE= -NOP=0x90909090 +NOP=0xCCCCCCCC TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes Modified: head/sys/conf/ldscript.amd64 ============================================================================== --- head/sys/conf/ldscript.amd64 Sat Mar 18 23:59:50 2017 (r315521) +++ head/sys/conf/ldscript.amd64 Sun Mar 19 00:22:13 2017 (r315522) @@ -56,7 +56,7 @@ SECTIONS .init : { KEEP (*(.init)) - } =0x90909090 + } =0xCCCCCCCC .plt : { *(.plt) } .text : { @@ -64,11 +64,11 @@ SECTIONS KEEP (*(.text.*personality*)) /* .gnu.warning sections are handled specially by elf32.em. */ *(.gnu.warning) - } =0x90909090 + } =0xCCCCCCCC .fini : { KEEP (*(.fini)) - } =0x90909090 + } =0xCCCCCCCC PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); Modified: head/sys/conf/ldscript.i386 ============================================================================== --- head/sys/conf/ldscript.i386 Sat Mar 18 23:59:50 2017 (r315521) +++ head/sys/conf/ldscript.i386 Sun Mar 19 00:22:13 2017 (r315522) @@ -44,7 +44,7 @@ SECTIONS .init : { KEEP (*(.init)) - } =0x90909090 + } =0xCCCCCCCC .plt : { *(.plt) } .text : { @@ -52,11 +52,11 @@ SECTIONS KEEP (*(.text.*personality*)) /* .gnu.warning sections are handled specially by elf32.em. */ *(.gnu.warning) - } =0x90909090 + } =0xCCCCCCCC .fini : { KEEP (*(.fini)) - } =0x90909090 + } =0xCCCCCCCC PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); From owner-svn-src-head@freebsd.org Sun Mar 19 00:26:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 59F4AD0843B for ; Sun, 19 Mar 2017 00:26:05 +0000 (UTC) (envelope-from ian@freebsd.org) Received: from outbound1a.eu.mailhop.org (outbound1a.eu.mailhop.org [52.58.109.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E010F1FDB for ; Sun, 19 Mar 2017 00:26:04 +0000 (UTC) (envelope-from ian@freebsd.org) X-MHO-User: 9ad6c8df-0c3a-11e7-b96d-2378c10e3beb X-Report-Abuse-To: https://support.duocircle.com/support/solutions/articles/5000540958-duocircle-standard-smtp-abuse-information X-Originating-IP: 73.78.92.27 X-Mail-Handler: DuoCircle Outbound SMTP Received: from ilsoft.org (unknown [73.78.92.27]) by outbound1.eu.mailhop.org (Halon) with ESMTPSA id 9ad6c8df-0c3a-11e7-b96d-2378c10e3beb; Sun, 19 Mar 2017 00:25:51 +0000 (UTC) Received: from rev (rev [172.22.42.240]) by ilsoft.org (8.15.2/8.15.2) with ESMTP id v2J0PodW012525; Sat, 18 Mar 2017 18:25:50 -0600 (MDT) (envelope-from ian@freebsd.org) Message-ID: <1489883150.40576.222.camel@freebsd.org> Subject: Re: svn commit: r315522 - in head: contrib/binutils/ld/emulparams sys/conf From: Ian Lepore To: Ed Maste , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Date: Sat, 18 Mar 2017 18:25:50 -0600 In-Reply-To: <201703190022.v2J0MDhq015941@repo.freebsd.org> References: <201703190022.v2J0MDhq015941@repo.freebsd.org> Content-Type: text/plain; charset="ISO-8859-1" X-Mailer: Evolution 3.18.5.1 FreeBSD GNOME Team Port Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 00:26:05 -0000 On Sun, 2017-03-19 at 00:22 +0000, Ed Maste wrote: > Author: emaste > Date: Sun Mar 19 00:22:13 2017 > New Revision: 315522 > URL: https://svnweb.freebsd.org/changeset/base/315522 > > Log: >   use INT3 instead of NOP for x86 binary padding >    >   We should never end up executing the inter-function padding, so we >   are better off faulting than silently carrying on to whatever > function >   happens to be next. >    >   Note that LLD will soon do this by default (although it currently > pads >   with zeros). >    >   Reviewed by: dim, kib >   MFC after: 1 month >   Sponsored by: The FreeBSD Foundation >   Differential Revision: https://reviews.freebsd.org/D10047 > > Modified: >   head/contrib/binutils/ld/emulparams/elf_i386.sh >   head/contrib/binutils/ld/emulparams/elf_x86_64.sh >   head/sys/conf/ldscript.amd64 >   head/sys/conf/ldscript.i386 > > Modified: head/contrib/binutils/ld/emulparams/elf_i386.sh > ===================================================================== > ========= > --- head/contrib/binutils/ld/emulparams/elf_i386.sh Sat Mar 18 > 23:59:50 2017 (r315521) > +++ head/contrib/binutils/ld/emulparams/elf_i386.sh Sun Mar 19 > 00:22:13 2017 (r315522) > @@ -6,7 +6,7 @@ COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE >  NONPAGED_TEXT_START_ADDR=0x08048000 >  ARCH=i386 >  MACHINE= > -NOP=0x90909090 > +NOP=0xCCCCCCCC I have always wondered why the arm ldscript pads with 0x90.  I don't know if I feel any better now, knowing that it's because that's an x86 nop instruction. :) -- Ian From owner-svn-src-head@freebsd.org Sun Mar 19 00:27:09 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 594E4D084A3; Sun, 19 Mar 2017 00:27:09 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 19E4F112C; Sun, 19 Mar 2017 00:27:09 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J0R8sY018259; Sun, 19 Mar 2017 00:27:08 GMT (envelope-from jhb@FreeBSD.org) Received: (from jhb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J0R8NI018257; Sun, 19 Mar 2017 00:27:08 GMT (envelope-from jhb@FreeBSD.org) Message-Id: <201703190027.v2J0R8NI018257@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhb set sender to jhb@FreeBSD.org using -f From: John Baldwin Date: Sun, 19 Mar 2017 00:27:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315523 - head/usr.bin/truss X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 00:27:09 -0000 Author: jhb Date: Sun Mar 19 00:27:07 2017 New Revision: 315523 URL: https://svnweb.freebsd.org/changeset/base/315523 Log: Add a Sizet type for 'size_t' values and use it instead of Int. Various size_t arguments were previously decoded as Int values instead which would have truncated values above 2^31 on 64-bit systems. Modified: head/usr.bin/truss/syscall.h head/usr.bin/truss/syscalls.c Modified: head/usr.bin/truss/syscall.h ============================================================================== --- head/usr.bin/truss/syscall.h Sun Mar 19 00:22:13 2017 (r315522) +++ head/usr.bin/truss/syscall.h Sun Mar 19 00:27:07 2017 (r315523) @@ -46,7 +46,7 @@ enum Argtype { None = 1, Hex, Octal, Int LinuxSockArgs, Umtxop, Atfd, Atflags, Timespec2, Accessmode, Long, Sysarch, ExecArgs, ExecEnv, PipeFds, QuadHex, Utrace, IntArray, Pipe2, CapFcntlRights, Fadvice, FileFlags, Flockop, Getfsstatmode, Kldsymcmd, - Kldunloadflags, + Kldunloadflags, Sizet, CloudABIAdvice, CloudABIClockID, ClouduABIFDSFlags, CloudABIFDStat, CloudABIFileStat, CloudABIFileType, Modified: head/usr.bin/truss/syscalls.c ============================================================================== --- head/usr.bin/truss/syscalls.c Sun Mar 19 00:22:13 2017 (r315522) +++ head/usr.bin/truss/syscalls.c Sun Mar 19 00:27:07 2017 (r315523) @@ -231,16 +231,16 @@ static struct syscall decoded_syscalls[] { .name = "mknodat", .ret_type = 1, .nargs = 4, .args = { { Atfd, 0 }, { Name, 1 }, { Octal, 2 }, { Int, 3 } } }, { .name = "mmap", .ret_type = 1, .nargs = 6, - .args = { { Ptr, 0 }, { Int, 1 }, { Mprot, 2 }, { Mmapflags, 3 }, + .args = { { Ptr, 0 }, { Sizet, 1 }, { Mprot, 2 }, { Mmapflags, 3 }, { Int, 4 }, { QuadHex, 5 } } }, { .name = "modfind", .ret_type = 1, .nargs = 1, .args = { { Name | IN, 0 } } }, { .name = "mount", .ret_type = 1, .nargs = 4, .args = { { Name, 0 }, { Name, 1 }, { Int, 2 }, { Ptr, 3 } } }, { .name = "mprotect", .ret_type = 1, .nargs = 3, - .args = { { Ptr, 0 }, { Int, 1 }, { Mprot, 2 } } }, + .args = { { Ptr, 0 }, { Sizet, 1 }, { Mprot, 2 } } }, { .name = "munmap", .ret_type = 1, .nargs = 2, - .args = { { Ptr, 0 }, { Int, 1 } } }, + .args = { { Ptr, 0 }, { Sizet, 1 } } }, { .name = "nanosleep", .ret_type = 1, .nargs = 1, .args = { { Timespec, 0 } } }, { .name = "open", .ret_type = 1, .nargs = 3, @@ -264,14 +264,14 @@ static struct syscall decoded_syscalls[] { .name = "procctl", .ret_type = 1, .nargs = 4, .args = { { Idtype, 0 }, { Quad, 1 }, { Procctl, 2 }, { Ptr, 3 } } }, { .name = "read", .ret_type = 1, .nargs = 3, - .args = { { Int, 0 }, { BinString | OUT, 1 }, { Int, 2 } } }, + .args = { { Int, 0 }, { BinString | OUT, 1 }, { Sizet, 2 } } }, { .name = "readlink", .ret_type = 1, .nargs = 3, - .args = { { Name, 0 }, { Readlinkres | OUT, 1 }, { Int, 2 } } }, + .args = { { Name, 0 }, { Readlinkres | OUT, 1 }, { Sizet, 2 } } }, { .name = "readlinkat", .ret_type = 1, .nargs = 4, .args = { { Atfd, 0 }, { Name, 1 }, { Readlinkres | OUT, 2 }, - { Int, 3 } } }, + { Sizet, 3 } } }, { .name = "recvfrom", .ret_type = 1, .nargs = 6, - .args = { { Int, 0 }, { BinString | OUT, 1 }, { Int, 2 }, { Hex, 3 }, + .args = { { Int, 0 }, { BinString | OUT, 1 }, { Sizet, 2 }, { Hex, 3 }, { Sockaddr | OUT, 4 }, { Ptr | OUT, 5 } } }, { .name = "rename", .ret_type = 1, .nargs = 2, .args = { { Name, 0 }, { Name, 1 } } }, @@ -285,7 +285,7 @@ static struct syscall decoded_syscalls[] .args = { { Int, 0 }, { Fd_set, 1 }, { Fd_set, 2 }, { Fd_set, 3 }, { Timeval, 4 } } }, { .name = "sendto", .ret_type = 1, .nargs = 6, - .args = { { Int, 0 }, { BinString | IN, 1 }, { Int, 2 }, { Hex, 3 }, + .args = { { Int, 0 }, { BinString | IN, 1 }, { Sizet, 2 }, { Hex, 3 }, { Sockaddr | IN, 4 }, { Ptr | IN, 5 } } }, { .name = "setitimer", .ret_type = 1, .nargs = 3, .args = { { Int, 0 }, { Itimerval, 1 }, { Itimerval | OUT, 2 } } }, @@ -355,7 +355,7 @@ static struct syscall decoded_syscalls[] .args = { { Idtype, 0 }, { Quad, 1 }, { ExitStatus | OUT, 2 }, { Waitoptions, 3 }, { Rusage | OUT, 4 }, { Ptr, 5 } } }, { .name = "write", .ret_type = 1, .nargs = 3, - .args = { { Int, 0 }, { BinString | IN, 1 }, { Int, 2 } } }, + .args = { { Int, 0 }, { BinString | IN, 1 }, { Sizet, 2 } } }, /* Linux ABI */ { .name = "linux_access", .ret_type = 1, .nargs = 2, @@ -374,7 +374,7 @@ static struct syscall decoded_syscalls[] { .name = "linux_open", .ret_type = 1, .nargs = 3, .args = { { Name, 0 }, { Hex, 1 }, { Octal, 2 } } }, { .name = "linux_readlink", .ret_type = 1, .nargs = 3, - .args = { { Name, 0 }, { Name | OUT, 1 }, { Int, 2 } } }, + .args = { { Name, 0 }, { Name | OUT, 1 }, { Sizet, 2 } } }, { .name = "linux_socketcall", .ret_type = 1, .nargs = 2, .args = { { Int, 0 }, { LinuxSockArgs, 1 } } }, { .name = "linux_stat64", .ret_type = 1, .nargs = 2, @@ -1167,6 +1167,9 @@ print_arg(struct syscall_args *sc, unsig case Long: fprintf(fp, "%ld", args[sc->offset]); break; + case Sizet: + fprintf(fp, "%zu", (size_t)args[sc->offset]); + break; case Name: { /* NULL-terminated string. */ char *tmp2; From owner-svn-src-head@freebsd.org Sun Mar 19 00:30:20 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4A512D08620; Sun, 19 Mar 2017 00:30:20 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-it0-x233.google.com (mail-it0-x233.google.com [IPv6:2607:f8b0:4001:c0b::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 143231363; Sun, 19 Mar 2017 00:30:20 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: by mail-it0-x233.google.com with SMTP id g138so63004516itb.0; Sat, 18 Mar 2017 17:30:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=EBxuRNJNbUigFwudBls3RFkMXK/KQTgvmxCXolKEXoY=; b=LdxVN8UKUShM20Oi4U0GdwLgOi000Ht0coJSlfJ5z/E557XoXZTv7Rq+hdVE3OKBYz l51sW9mjMN8vrmgL8zB+VTLwkwx72s4XB78nSJrB7KfKLZRgm4YF9cMH1MqiLHq647ib rExJByeHX7RlCEtHpRcN6VKUV9hBxX5oHZNOmocH+X4LHVj8mYZPv/d7NUMejvaTtvkK 1OCNFgI6SWHJgxxoPw1s6DKDtl9oL5EkQ1O2huoLm5OGxbMvmURbkmzz8X4l/RPPAkpk pDiqEGsLLVWlk0DfJ+t8f0C3yNp29m7qvQOUoTUovaGwE6ls1xo5lR25xo/TsLI1OaIk Qjhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=EBxuRNJNbUigFwudBls3RFkMXK/KQTgvmxCXolKEXoY=; b=qIpfN9j0SGXtI18CKnOVDL1tWEDwGMzMNntNl8f+b+30+gpi1aW5oO/JzmLOH+6GD1 lqVkhGhV0hNZ0aQzkz9PSALLcZeLqZ3w62LqMsKcqNHsO97mejHaD45Vgegda0HEcEEY an4JqLAKJWQH7wU1ydjcTHTBwQUyptH065nAPLCiK83k4uG4TpDhRQY05cIiZznHh1oW U+8MgdgvjISn8zAQVR9q/+DbMxtbIw59V3uOjm/szCfk15tfPz/JMR3qtZQnthIZHq5/ Br0ErB0kDzVZLGMFpuPJCMcUOyP23XfNmncczelB6d0dFUl9D7Vgjk4V1jqP7iONDpwI nhjw== X-Gm-Message-State: AFeK/H2NfywqhzL5ajln9l7Z0jOyfrJKF3I4N/jHsdNLcZkroEWHvHHRTyLZeLyjE81owAnRExyu5YDQi2JtBw== X-Received: by 10.36.80.213 with SMTP id m204mr4137580itb.105.1489883418930; Sat, 18 Mar 2017 17:30:18 -0700 (PDT) MIME-Version: 1.0 Sender: carpeddiem@gmail.com Received: by 10.107.30.209 with HTTP; Sat, 18 Mar 2017 17:29:58 -0700 (PDT) In-Reply-To: <1489883150.40576.222.camel@freebsd.org> References: <201703190022.v2J0MDhq015941@repo.freebsd.org> <1489883150.40576.222.camel@freebsd.org> From: Ed Maste Date: Sat, 18 Mar 2017 20:29:58 -0400 X-Google-Sender-Auth: HY4lzZGDY3tVYkPMN8qTmv0B4Wc Message-ID: Subject: Re: svn commit: r315522 - in head: contrib/binutils/ld/emulparams sys/conf To: Ian Lepore Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 00:30:20 -0000 On 18 March 2017 at 20:25, Ian Lepore wrote: > > I have always wondered why the arm ldscript pads with 0x90. I don't > know if I feel any better now, knowing that it's because that's an x86 > nop instruction. :) Heh! We used to pad the amd64, i386, and arm64 EFI loaders with 0x00300000010070000002000001000400, which is some ia64 instruction sequence :-) The arm padding ought to be switched to a breakpoint instruction or some other trap or guaranteed illegal instruction. From owner-svn-src-head@freebsd.org Sun Mar 19 00:31:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E4775D0878B; Sun, 19 Mar 2017 00:31:22 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9B9C31778; Sun, 19 Mar 2017 00:31:22 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J0VLav021288; Sun, 19 Mar 2017 00:31:21 GMT (envelope-from jhb@FreeBSD.org) Received: (from jhb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J0VLrM021286; Sun, 19 Mar 2017 00:31:21 GMT (envelope-from jhb@FreeBSD.org) Message-Id: <201703190031.v2J0VLrM021286@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhb set sender to jhb@FreeBSD.org using -f From: John Baldwin Date: Sun, 19 Mar 2017 00:31:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315524 - head/usr.bin/truss X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 00:31:23 -0000 Author: jhb Date: Sun Mar 19 00:31:21 2017 New Revision: 315524 URL: https://svnweb.freebsd.org/changeset/base/315524 Log: Decode arguments to madvise(). Modified: head/usr.bin/truss/syscall.h head/usr.bin/truss/syscalls.c Modified: head/usr.bin/truss/syscall.h ============================================================================== --- head/usr.bin/truss/syscall.h Sun Mar 19 00:27:07 2017 (r315523) +++ head/usr.bin/truss/syscall.h Sun Mar 19 00:31:21 2017 (r315524) @@ -46,7 +46,7 @@ enum Argtype { None = 1, Hex, Octal, Int LinuxSockArgs, Umtxop, Atfd, Atflags, Timespec2, Accessmode, Long, Sysarch, ExecArgs, ExecEnv, PipeFds, QuadHex, Utrace, IntArray, Pipe2, CapFcntlRights, Fadvice, FileFlags, Flockop, Getfsstatmode, Kldsymcmd, - Kldunloadflags, Sizet, + Kldunloadflags, Sizet, Madvice, CloudABIAdvice, CloudABIClockID, ClouduABIFDSFlags, CloudABIFDStat, CloudABIFileStat, CloudABIFileType, Modified: head/usr.bin/truss/syscalls.c ============================================================================== --- head/usr.bin/truss/syscalls.c Sun Mar 19 00:27:07 2017 (r315523) +++ head/usr.bin/truss/syscalls.c Sun Mar 19 00:31:21 2017 (r315524) @@ -218,6 +218,8 @@ static struct syscall decoded_syscalls[] .args = { { Name | IN, 0 }, { Stat | OUT, 1 } } }, { .name = "lutimes", .ret_type = 1, .nargs = 2, .args = { { Name | IN, 0 }, { Timeval2 | IN, 1 } } }, + { .name = "madvise", .ret_type = 1, .nargs = 3, + .args = { { Ptr, 0 }, { Sizet, 1 }, { Madvice, 2 } } }, { .name = "mkdir", .ret_type = 1, .nargs = 2, .args = { { Name, 0 }, { Octal, 1 } } }, { .name = "mkdirat", .ret_type = 1, .nargs = 3, @@ -1907,6 +1909,9 @@ print_arg(struct syscall_args *sc, unsig print_integer_arg(sysdecode_kldunload_flags, fp, args[sc->offset]); break; + case Madvice: + print_integer_arg(sysdecode_madvice, fp, args[sc->offset]); + break; case CloudABIAdvice: fputs(xlookup(cloudabi_advice, args[sc->offset]), fp); From owner-svn-src-head@freebsd.org Sun Mar 19 00:36:30 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9719AD08B65; Sun, 19 Mar 2017 00:36:30 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 644C81EC3; Sun, 19 Mar 2017 00:36:30 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J0aTGS023294; Sun, 19 Mar 2017 00:36:29 GMT (envelope-from jhb@FreeBSD.org) Received: (from jhb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J0aTk9023293; Sun, 19 Mar 2017 00:36:29 GMT (envelope-from jhb@FreeBSD.org) Message-Id: <201703190036.v2J0aTk9023293@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhb set sender to jhb@FreeBSD.org using -f From: John Baldwin Date: Sun, 19 Mar 2017 00:36:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315525 - head/usr.bin/truss X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 00:36:30 -0000 Author: jhb Date: Sun Mar 19 00:36:29 2017 New Revision: 315525 URL: https://svnweb.freebsd.org/changeset/base/315525 Log: Improve decoding of last arguments to ioctl() and sendto(). Decode the last argument to ioctl() as a pointer rather than an int. Eventually this could use 'int' for the _IOWINT() case and pointers for all others. The last argument to sendto() is a socklen_t value, not a pointer. Modified: head/usr.bin/truss/syscalls.c Modified: head/usr.bin/truss/syscalls.c ============================================================================== --- head/usr.bin/truss/syscalls.c Sun Mar 19 00:31:21 2017 (r315524) +++ head/usr.bin/truss/syscalls.c Sun Mar 19 00:36:29 2017 (r315525) @@ -177,7 +177,7 @@ static struct syscall decoded_syscalls[] { .name = "gettimeofday", .ret_type = 1, .nargs = 2, .args = { { Timeval | OUT, 0 }, { Ptr, 1 } } }, { .name = "ioctl", .ret_type = 1, .nargs = 3, - .args = { { Int, 0 }, { Ioctl, 1 }, { Hex, 2 } } }, + .args = { { Int, 0 }, { Ioctl, 1 }, { Ptr, 2 } } }, { .name = "kevent", .ret_type = 1, .nargs = 6, .args = { { Int, 0 }, { Kevent, 1 }, { Int, 2 }, { Kevent | OUT, 3 }, { Int, 4 }, { Timespec, 5 } } }, @@ -288,7 +288,7 @@ static struct syscall decoded_syscalls[] { Timeval, 4 } } }, { .name = "sendto", .ret_type = 1, .nargs = 6, .args = { { Int, 0 }, { BinString | IN, 1 }, { Sizet, 2 }, { Hex, 3 }, - { Sockaddr | IN, 4 }, { Ptr | IN, 5 } } }, + { Sockaddr | IN, 4 }, { Int | IN, 5 } } }, { .name = "setitimer", .ret_type = 1, .nargs = 3, .args = { { Int, 0 }, { Itimerval, 1 }, { Itimerval | OUT, 2 } } }, { .name = "setrlimit", .ret_type = 1, .nargs = 2, From owner-svn-src-head@freebsd.org Sun Mar 19 00:51:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EF0D6D08FD2; Sun, 19 Mar 2017 00:51:15 +0000 (UTC) (envelope-from vangyzen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BC2BD1893; Sun, 19 Mar 2017 00:51:15 +0000 (UTC) (envelope-from vangyzen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J0pEoR028534; Sun, 19 Mar 2017 00:51:14 GMT (envelope-from vangyzen@FreeBSD.org) Received: (from vangyzen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J0pDW9028513; Sun, 19 Mar 2017 00:51:13 GMT (envelope-from vangyzen@FreeBSD.org) Message-Id: <201703190051.v2J0pDW9028513@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: vangyzen set sender to vangyzen@FreeBSD.org using -f From: Eric van Gyzen Date: Sun, 19 Mar 2017 00:51:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315526 - in head: contrib/netbsd-tests/lib/libc/sys include lib/libc/include lib/libc/sys lib/libc/tests/sys lib/libthr/thread share/man/man3 sys/compat/freebsd32 sys/kern sys/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 00:51:16 -0000 Author: vangyzen Date: Sun Mar 19 00:51:12 2017 New Revision: 315526 URL: https://svnweb.freebsd.org/changeset/base/315526 Log: Add clock_nanosleep() Add a clock_nanosleep() syscall, as specified by POSIX. Make nanosleep() a wrapper around it. Attach the clock_nanosleep test from NetBSD. Adjust it for the FreeBSD behavior of updating rmtp only when interrupted by a signal. I believe this to be POSIX-compliant, since POSIX mentions the rmtp parameter only in the paragraph about EINTR. This is also what Linux does. (NetBSD updates rmtp unconditionally.) Copy the whole nanosleep.2 man page from NetBSD because it is complete and closely resembles the POSIX description. Edit, polish, and reword it a bit, being sure to keep any relevant text from the FreeBSD page. Reviewed by: kib, ngie, jilles MFC after: 3 weeks Relnotes: yes Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10020 Added: head/lib/libc/sys/clock_nanosleep.c - copied, changed from r315525, head/lib/libc/sys/nanosleep.c Modified: head/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c head/include/time.h head/lib/libc/include/libc_private.h head/lib/libc/include/namespace.h head/lib/libc/include/un-namespace.h head/lib/libc/sys/Makefile.inc head/lib/libc/sys/Symbol.map head/lib/libc/sys/interposing_table.c head/lib/libc/sys/nanosleep.2 head/lib/libc/tests/sys/Makefile head/lib/libthr/thread/thr_private.h head/lib/libthr/thread/thr_syscalls.c head/share/man/man3/pthread_testcancel.3 head/sys/compat/freebsd32/freebsd32_misc.c head/sys/compat/freebsd32/syscalls.master head/sys/kern/kern_time.c head/sys/kern/syscalls.master head/sys/sys/syscallsubr.h Modified: head/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c ============================================================================== --- head/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c Sun Mar 19 00:36:29 2017 (r315525) +++ head/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c Sun Mar 19 00:51:12 2017 (r315526) @@ -46,7 +46,11 @@ ATF_TC_BODY(clock_nanosleep_remain, tc) rqtp.tv_sec = 0; rqtp.tv_nsec = 0; rmtp.tv_sec = -1; rmtp.tv_nsec = -1; ATF_REQUIRE(clock_nanosleep(CLOCK_REALTIME, 0, &rqtp, &rmtp) == 0); +#ifdef __FreeBSD__ + ATF_CHECK(rmtp.tv_sec == -1 && rmtp.tv_nsec == -1); +#else ATF_CHECK(rmtp.tv_sec == 0 && rmtp.tv_nsec == 0); +#endif ATF_REQUIRE(clock_gettime(CLOCK_REALTIME, &rqtp) == 0); rmtp.tv_sec = -1; rmtp.tv_nsec = -1; Modified: head/include/time.h ============================================================================== --- head/include/time.h Sun Mar 19 00:36:29 2017 (r315525) +++ head/include/time.h Sun Mar 19 00:51:12 2017 (r315526) @@ -169,12 +169,12 @@ void tzset(void); int clock_getres(clockid_t, struct timespec *); int clock_gettime(clockid_t, struct timespec *); int clock_settime(clockid_t, const struct timespec *); -/* XXX missing: clock_nanosleep() */ int nanosleep(const struct timespec *, struct timespec *); #endif /* __POSIX_VISIBLE >= 199309 */ #if __POSIX_VISIBLE >= 200112 int clock_getcpuclockid(pid_t, clockid_t *); +int clock_nanosleep(clockid_t, int, const struct timespec *, struct timespec *); #endif #if __POSIX_VISIBLE >= 199506 Modified: head/lib/libc/include/libc_private.h ============================================================================== --- head/lib/libc/include/libc_private.h Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libc/include/libc_private.h Sun Mar 19 00:51:12 2017 (r315526) @@ -229,6 +229,7 @@ enum { INTERPOS_ppoll, INTERPOS_map_stacks_exec, INTERPOS_fdatasync, + INTERPOS_clock_nanosleep, INTERPOS_MAX }; @@ -318,6 +319,8 @@ int __sys_aio_suspend(const struct aioc int __sys_accept(int, struct sockaddr *, __socklen_t *); int __sys_accept4(int, struct sockaddr *, __socklen_t *, int); int __sys_clock_gettime(__clockid_t, struct timespec *ts); +int __sys_clock_nanosleep(__clockid_t, int, + const struct timespec *, struct timespec *); int __sys_close(int); int __sys_connect(int, const struct sockaddr *, __socklen_t); int __sys_fcntl(int, int, ...); Modified: head/lib/libc/include/namespace.h ============================================================================== --- head/lib/libc/include/namespace.h Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libc/include/namespace.h Sun Mar 19 00:51:12 2017 (r315526) @@ -56,6 +56,7 @@ #define bind _bind #define __cap_get_fd ___cap_get_fd #define __cap_set_fd ___cap_set_fd +#define clock_nanosleep _clock_nanosleep #define close _close #define connect _connect #define dup _dup Modified: head/lib/libc/include/un-namespace.h ============================================================================== --- head/lib/libc/include/un-namespace.h Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libc/include/un-namespace.h Sun Mar 19 00:51:12 2017 (r315526) @@ -37,6 +37,7 @@ #undef bind #undef __cap_get_fd #undef __cap_set_fd +#undef clock_nanosleep #undef close #undef connect #undef dup Modified: head/lib/libc/sys/Makefile.inc ============================================================================== --- head/lib/libc/sys/Makefile.inc Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libc/sys/Makefile.inc Sun Mar 19 00:51:12 2017 (r315526) @@ -45,6 +45,7 @@ INTERPOSED = \ accept \ accept4 \ aio_suspend \ + clock_nanosleep \ close \ connect \ fcntl \ @@ -360,6 +361,7 @@ MLINKS+=chown.2 fchown.2 \ chown.2 lchown.2 MLINKS+=clock_gettime.2 clock_getres.2 \ clock_gettime.2 clock_settime.2 +MLINKS+=nanosleep.2 clock_nanosleep.2 MLINKS+=cpuset.2 cpuset_getid.2 \ cpuset.2 cpuset_setid.2 MLINKS+=cpuset_getaffinity.2 cpuset_setaffinity.2 Modified: head/lib/libc/sys/Symbol.map ============================================================================== --- head/lib/libc/sys/Symbol.map Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libc/sys/Symbol.map Sun Mar 19 00:51:12 2017 (r315526) @@ -399,6 +399,7 @@ FBSD_1.4 { }; FBSD_1.5 { + clock_nanosleep; fdatasync; }; @@ -511,6 +512,7 @@ FBSDprivate_1.0 { __sys_clock_getres; _clock_gettime; __sys_clock_gettime; + __sys_clock_nanosleep; _clock_settime; __sys_clock_settime; _close; Copied and modified: head/lib/libc/sys/clock_nanosleep.c (from r315525, head/lib/libc/sys/nanosleep.c) ============================================================================== --- head/lib/libc/sys/nanosleep.c Sun Mar 19 00:36:29 2017 (r315525, copy source) +++ head/lib/libc/sys/clock_nanosleep.c Sun Mar 19 00:51:12 2017 (r315526) @@ -1,4 +1,5 @@ /* + * Copyright (c) 2017 Eric van Gyzen * Copyright (c) 2014 The FreeBSD Foundation. * All rights reserved. * @@ -37,13 +38,16 @@ __FBSDID("$FreeBSD$"); #include #include "libc_private.h" -__weak_reference(__sys_nanosleep, __nanosleep); +__weak_reference(__sys_clock_nanosleep, __clock_nanosleep); -#pragma weak nanosleep +#pragma weak clock_nanosleep int -nanosleep(const struct timespec *rqtp, struct timespec *rmtp) +clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, + struct timespec *rmtp) { - return (((int (*)(const struct timespec *, struct timespec *)) - __libc_interposing[INTERPOS_nanosleep])(rqtp, rmtp)); + return (((int (*)(clockid_t, int, const struct timespec *, + struct timespec *)) + __libc_interposing[INTERPOS_clock_nanosleep])(clock_id, flags, + rqtp, rmtp)); } Modified: head/lib/libc/sys/interposing_table.c ============================================================================== --- head/lib/libc/sys/interposing_table.c Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libc/sys/interposing_table.c Sun Mar 19 00:51:12 2017 (r315526) @@ -80,6 +80,7 @@ interpos_func_t __libc_interposing[INTER SLOT(ppoll, __sys_ppoll), SLOT(map_stacks_exec, __libc_map_stacks_exec), SLOT(fdatasync, __sys_fdatasync), + SLOT(clock_nanosleep, __sys_clock_nanosleep), }; #undef SLOT Modified: head/lib/libc/sys/nanosleep.2 ============================================================================== --- head/lib/libc/sys/nanosleep.2 Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libc/sys/nanosleep.2 Sun Mar 19 00:51:12 2017 (r315526) @@ -1,5 +1,4 @@ -.\" $OpenBSD: nanosleep.2,v 1.1 1997/04/20 20:56:20 tholo Exp $ -.\" $NetBSD: nanosleep.2,v 1.1 1997/04/17 18:12:02 jtc Exp $ +.\" $NetBSD: nanosleep.2,v 1.23 2016/11/14 10:40:59 wiz Exp $ .\" .\" Copyright (c) 1986, 1991, 1993 .\" The Regents of the University of California. All rights reserved. @@ -31,51 +30,136 @@ .\" @(#)sleep.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd April 17, 1997 +.Dd March 17, 2017 .Dt NANOSLEEP 2 .Os .Sh NAME .Nm nanosleep -.Nd suspend process execution for an interval measured in nanoseconds +.Nd high resolution sleep .Sh LIBRARY .Lb libc .Sh SYNOPSIS .In time.h .Ft int -.Fn nanosleep "const struct timespec *rqtp" "struct timespec *rmtp" +.Fo clock_nanosleep +.Fa "clockid_t clock_id" +.Fa "int flags" +.Fa "const struct timespec *rqtp" +.Fa "struct timespec *rmtp" +.Fc +.Ft int +.Fo nanosleep +.Fa "const struct timespec *rqtp" +.Fa "struct timespec *rmtp" +.Fc .Sh DESCRIPTION -The -.Fn nanosleep -system call -causes the calling thread to sleep until the time interval specified by +If the +.Dv TIMER_ABSTIME +flag is not set in the +.Fa flags +argument, then +.Fn clock_nanosleep +suspends execution of the calling thread until either the +time interval specified by the +.Fa rqtp +argument has elapsed, +or a signal is delivered to the calling process and its +action is to invoke a signal-catching function or to terminate the +process. +The clock used to measure the time is specified by the +.Fa clock_id +argument. +.Pp +If the +.Dv TIMER_ABSTIME +flag is set in the +.Fa flags +argument, then +.Fn clock_nanosleep +suspends execution of the calling thread until either the value +of the clock specified by the +.Fa clock_id +argument reaches the absolute time specified by the +.Fa rqtp +argument, +or a signal is delivered to the calling process and its +action is to invoke a signal-catching function or to terminate the +process. +If, at the time of the call, the time value specified by .Fa rqtp -has elapsed. -An unmasked signal will -cause it to terminate the sleep early, regardless of the +is less than or equal to the time value of the specified clock, then +.Fn clock_nanosleep +returns immediately and the calling thread is not suspended. +.Pp +The suspension time may be longer than requested due to the +scheduling of other activity by the system. +An unmasked signal will terminate the sleep early, regardless of the .Dv SA_RESTART value on the interrupting signal. -.Sh RETURN VALUES -If the +The +.Fa rqtp +and +.Fa rmtp +arguments can point to the same object. +.Pp +The following +.Fa clock_id +values are supported: +.Pp +.Bl -item -compact -offset indent +.It +CLOCK_MONOTONIC +.It +CLOCK_MONOTONIC_FAST +.It +CLOCK_MONOTONIC_PRECISE +.It +CLOCK_REALTIME +.It +CLOCK_REALTIME_FAST +.It +CLOCK_REALTIME_PRECISE +.It +CLOCK_SECOND +.It +CLOCK_UPTIME +.It +CLOCK_UPTIME_FAST +.It +CLOCK_UPTIME_PRECISE +.El +.Pp +The .Fn nanosleep -system call returns because the requested time has elapsed, the value -returned will be zero. +function behaves like +.Fn clock_nanosleep +with a +.Fa clock_id +argument of +.Dv CLOCK_REALTIME +and without the +.Dv TIMER_ABSTIME +flag in the +.Fa flags +argument. +.Sh RETURN VALUES +These functions return zero when the requested time has elapsed. .Pp -If the +If these functions return for any other reason, then +.Fn clock_nanosleep +will directly return the error number, and .Fn nanosleep -system call returns due to the delivery of a signal, the value returned -will be -1, and the global variable +will return \-1 with the global variable .Va errno -will be set to indicate the interruption. -If +set to indicate the error. +If a relative sleep is interrupted by a signal and .Fa rmtp is -.No non- Ns Dv NULL , +.Pf non- Dv NULL , the timespec structure it references is updated to contain the unslept amount (the request time minus the time actually slept). .Sh ERRORS -The -.Fn nanosleep -system call fails if: +These functions can fail with the following errors. .Bl -tag -width Er .It Bq Er EFAULT Either @@ -85,27 +169,32 @@ or points to memory that is not a valid part of the process address space. .It Bq Er EINTR -The -.Fn nanosleep -system call -was interrupted by the delivery of a signal. +The function was interrupted by the delivery of a signal. .It Bq Er EINVAL The .Fa rqtp -argument -specified a nanosecond value less than zero +argument specified a nanosecond value less than zero or greater than or equal to 1000 million. -.It Bq Er ENOSYS +.It Bq Er EINVAL The -.Fn nanosleep -system call -is not supported by this implementation. +.Fa flags +argument contained an invalid flag. +.It Bq Er EINVAL +The +.Fa clock_id +argument was +.Dv CLOCK_THREAD_CPUTIME_ID +or an unrecognized value. +.It Bq Er ENOTSUP +The +.Fa clock_id +argument was valid but not supported by this implementation of +.Fn clock_nanosleep . .El .Sh SEE ALSO -.Xr sigsuspend 2 , +.Xr clock_gettime 2 , +.Xr sigaction 2 , .Xr sleep 3 .Sh STANDARDS -The -.Fn nanosleep -system call conforms to -.St -p1003.1b-93 . +These functions conform to +.St -p1003.1-2008 . Modified: head/lib/libc/tests/sys/Makefile ============================================================================== --- head/lib/libc/tests/sys/Makefile Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libc/tests/sys/Makefile Sun Mar 19 00:51:12 2017 (r315526) @@ -12,6 +12,7 @@ NETBSD_ATF_TESTS_C+= access_test NETBSD_ATF_TESTS_C+= bind_test NETBSD_ATF_TESTS_C+= chroot_test NETBSD_ATF_TESTS_C+= clock_gettime_test +NETBSD_ATF_TESTS_C+= clock_nanosleep_test NETBSD_ATF_TESTS_C+= connect_test NETBSD_ATF_TESTS_C+= dup_test NETBSD_ATF_TESTS_C+= fsync_test Modified: head/lib/libthr/thread/thr_private.h ============================================================================== --- head/lib/libthr/thread/thr_private.h Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libthr/thread/thr_private.h Sun Mar 19 00:51:12 2017 (r315526) @@ -865,6 +865,8 @@ int __sys_sigwaitinfo(const sigset_t *se /* #include */ #ifdef _TIME_H_ +int __sys_clock_nanosleep(clockid_t, int, const struct timespec *, + struct timespec *); int __sys_nanosleep(const struct timespec *, struct timespec *); #endif Modified: head/lib/libthr/thread/thr_syscalls.c ============================================================================== --- head/lib/libthr/thread/thr_syscalls.c Sun Mar 19 00:36:29 2017 (r315525) +++ head/lib/libthr/thread/thr_syscalls.c Sun Mar 19 00:51:12 2017 (r315526) @@ -260,6 +260,22 @@ __thr_msync(void *addr, size_t len, int } static int +__thr_clock_nanosleep(clockid_t clock_id, int flags, + const struct timespec *time_to_sleep, struct timespec *time_remaining) +{ + struct pthread *curthread; + int ret; + + curthread = _get_curthread(); + _thr_cancel_enter(curthread); + ret = __sys_clock_nanosleep(clock_id, flags, time_to_sleep, + time_remaining); + _thr_cancel_leave(curthread, 1); + + return (ret); +} + +static int __thr_nanosleep(const struct timespec *time_to_sleep, struct timespec *time_remaining) { @@ -668,6 +684,7 @@ __thr_interpose_libc(void) SLOT(ppoll); SLOT(map_stacks_exec); SLOT(fdatasync); + SLOT(clock_nanosleep); #undef SLOT *(__libc_interposing_slot( INTERPOS__pthread_mutex_init_calloc_cb)) = Modified: head/share/man/man3/pthread_testcancel.3 ============================================================================== --- head/share/man/man3/pthread_testcancel.3 Sun Mar 19 00:36:29 2017 (r315525) +++ head/share/man/man3/pthread_testcancel.3 Sun Mar 19 00:51:12 2017 (r315526) @@ -1,5 +1,5 @@ .\" $FreeBSD$ -.Dd February 17, 2017 +.Dd March 18, 2017 .Dt PTHREAD_TESTCANCEL 3 .Os .Sh NAME @@ -105,6 +105,7 @@ functions: .It Fn accept4 .It Fn aio_suspend .It Fn connect +.It Fn clock_nanosleep .It Fn close .It Fn creat .It Fn fcntl Modified: head/sys/compat/freebsd32/freebsd32_misc.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_misc.c Sun Mar 19 00:36:29 2017 (r315525) +++ head/sys/compat/freebsd32/freebsd32_misc.c Sun Mar 19 00:51:12 2017 (r315526) @@ -129,6 +129,8 @@ CTASSERT(sizeof(struct sigaction32) == 2 static int freebsd32_kevent_copyout(void *arg, struct kevent *kevp, int count); static int freebsd32_kevent_copyin(void *arg, struct kevent *kevp, int count); +static int freebsd32_user_clock_nanosleep(struct thread *td, clockid_t clock_id, + int flags, const struct timespec32 *ua_rqtp, struct timespec32 *ua_rmtp); void freebsd32_rusage_out(const struct rusage *s, struct rusage32 *s32) @@ -2226,28 +2228,48 @@ ofreebsd32_sigstack(struct thread *td, int freebsd32_nanosleep(struct thread *td, struct freebsd32_nanosleep_args *uap) { + + return (freebsd32_user_clock_nanosleep(td, CLOCK_REALTIME, + TIMER_RELTIME, uap->rqtp, uap->rmtp)); +} + +int +freebsd32_clock_nanosleep(struct thread *td, + struct freebsd32_clock_nanosleep_args *uap) +{ + int error; + + error = freebsd32_user_clock_nanosleep(td, uap->clock_id, uap->flags, + uap->rqtp, uap->rmtp); + return (kern_posix_error(td, error)); +} + +static int +freebsd32_user_clock_nanosleep(struct thread *td, clockid_t clock_id, + int flags, const struct timespec32 *ua_rqtp, struct timespec32 *ua_rmtp) +{ struct timespec32 rmt32, rqt32; struct timespec rmt, rqt; int error; - error = copyin(uap->rqtp, &rqt32, sizeof(rqt32)); + error = copyin(ua_rqtp, &rqt32, sizeof(rqt32)); if (error) return (error); CP(rqt32, rqt, tv_sec); CP(rqt32, rqt, tv_nsec); - if (uap->rmtp && - !useracc((caddr_t)uap->rmtp, sizeof(rmt), VM_PROT_WRITE)) + if (ua_rmtp != NULL && (flags & TIMER_ABSTIME) == 0 && + !useracc(ua_rmtp, sizeof(rmt32), VM_PROT_WRITE)) return (EFAULT); - error = kern_nanosleep(td, &rqt, &rmt); - if (error == EINTR && uap->rmtp) { + error = kern_clock_nanosleep(td, clock_id, flags, &rqt, &rmt); + if (error == EINTR && ua_rmtp != NULL && (flags & TIMER_ABSTIME) == 0) { int error2; CP(rmt, rmt32, tv_sec); CP(rmt, rmt32, tv_nsec); - error2 = copyout(&rmt32, uap->rmtp, sizeof(rmt32)); + error2 = copyout(&rmt32, ua_rmtp, sizeof(rmt32)); if (error2) error = error2; } Modified: head/sys/compat/freebsd32/syscalls.master ============================================================================== --- head/sys/compat/freebsd32/syscalls.master Sun Mar 19 00:36:29 2017 (r315525) +++ head/sys/compat/freebsd32/syscalls.master Sun Mar 19 00:51:12 2017 (r315526) @@ -462,7 +462,10 @@ struct ffclock_estimate *cest); } 243 AUE_NULL NOPROTO { int ffclock_getestimate( \ struct ffclock_estimate *cest); } -244 AUE_NULL UNIMPL nosys +244 AUE_NULL STD { int freebsd32_clock_nanosleep( \ + clockid_t clock_id, int flags, \ + const struct timespec32 *rqtp, \ + struct timespec32 *rmtp); } 245 AUE_NULL UNIMPL nosys 246 AUE_NULL UNIMPL nosys 247 AUE_NULL STD { int freebsd32_clock_getcpuclockid2(\ Modified: head/sys/kern/kern_time.c ============================================================================== --- head/sys/kern/kern_time.c Sun Mar 19 00:36:29 2017 (r315525) +++ head/sys/kern/kern_time.c Sun Mar 19 00:51:12 2017 (r315526) @@ -86,6 +86,9 @@ static uma_zone_t itimer_zone = NULL; static int settime(struct thread *, struct timeval *); static void timevalfix(struct timeval *); +static int user_clock_nanosleep(struct thread *td, clockid_t clock_id, + int flags, const struct timespec *ua_rqtp, + struct timespec *ua_rmtp); static void itimer_start(void); static int itimer_init(void *, int, int); @@ -481,47 +484,95 @@ kern_clock_getres(struct thread *td, clo return (0); } +int +kern_nanosleep(struct thread *td, struct timespec *rqt, struct timespec *rmt) +{ + + return (kern_clock_nanosleep(td, CLOCK_REALTIME, TIMER_RELTIME, rqt, + rmt)); +} + static uint8_t nanowait[MAXCPU]; int -kern_nanosleep(struct thread *td, struct timespec *rqt, struct timespec *rmt) +kern_clock_nanosleep(struct thread *td, clockid_t clock_id, int flags, + const struct timespec *rqt, struct timespec *rmt) { - struct timespec ts; + struct timespec ts, now; sbintime_t sbt, sbtt, prec, tmp; time_t over; int error; + bool is_abs_real; if (rqt->tv_nsec < 0 || rqt->tv_nsec >= 1000000000) return (EINVAL); - if (rqt->tv_sec < 0 || (rqt->tv_sec == 0 && rqt->tv_nsec == 0)) - return (0); - ts = *rqt; - if (ts.tv_sec > INT32_MAX / 2) { - over = ts.tv_sec - INT32_MAX / 2; - ts.tv_sec -= over; - } else - over = 0; - tmp = tstosbt(ts); - prec = tmp; - prec >>= tc_precexp; - if (TIMESEL(&sbt, tmp)) - sbt += tc_tick_sbt; - sbt += tmp; - error = tsleep_sbt(&nanowait[curcpu], PWAIT | PCATCH, "nanslp", - sbt, prec, C_ABSOLUTE); + if ((flags & ~TIMER_ABSTIME) != 0) + return (EINVAL); + switch (clock_id) { + case CLOCK_REALTIME: + case CLOCK_REALTIME_PRECISE: + case CLOCK_REALTIME_FAST: + case CLOCK_SECOND: + is_abs_real = (flags & TIMER_ABSTIME) != 0; + break; + case CLOCK_MONOTONIC: + case CLOCK_MONOTONIC_PRECISE: + case CLOCK_MONOTONIC_FAST: + case CLOCK_UPTIME: + case CLOCK_UPTIME_PRECISE: + case CLOCK_UPTIME_FAST: + is_abs_real = false; + break; + case CLOCK_VIRTUAL: + case CLOCK_PROF: + case CLOCK_PROCESS_CPUTIME_ID: + return (ENOTSUP); + case CLOCK_THREAD_CPUTIME_ID: + default: + return (EINVAL); + } + do { + ts = *rqt; + if ((flags & TIMER_ABSTIME) != 0) { + if (is_abs_real) + td->td_rtcgen = + atomic_load_acq_int(&rtc_generation); + error = kern_clock_gettime(td, clock_id, &now); + KASSERT(error == 0, ("kern_clock_gettime: %d", error)); + timespecsub(&ts, &now); + } + if (ts.tv_sec < 0 || (ts.tv_sec == 0 && ts.tv_nsec == 0)) { + error = EWOULDBLOCK; + break; + } + if (ts.tv_sec > INT32_MAX / 2) { + over = ts.tv_sec - INT32_MAX / 2; + ts.tv_sec -= over; + } else + over = 0; + tmp = tstosbt(ts); + prec = tmp; + prec >>= tc_precexp; + if (TIMESEL(&sbt, tmp)) + sbt += tc_tick_sbt; + sbt += tmp; + error = tsleep_sbt(&nanowait[curcpu], PWAIT | PCATCH, "nanslp", + sbt, prec, C_ABSOLUTE); + } while (error == 0 && is_abs_real && td->td_rtcgen == 0); + td->td_rtcgen = 0; if (error != EWOULDBLOCK) { + TIMESEL(&sbtt, tmp); + if (sbtt >= sbt) + return (0); if (error == ERESTART) error = EINTR; - TIMESEL(&sbtt, tmp); - if (rmt != NULL) { + if ((flags & TIMER_ABSTIME) == 0 && rmt != NULL) { ts = sbttots(sbt - sbtt); ts.tv_sec += over; if (ts.tv_sec < 0) timespecclear(&ts); *rmt = ts; } - if (sbtt >= sbt) - return (0); return (error); } return (0); @@ -537,21 +588,48 @@ struct nanosleep_args { int sys_nanosleep(struct thread *td, struct nanosleep_args *uap) { + + return (user_clock_nanosleep(td, CLOCK_REALTIME, TIMER_RELTIME, + uap->rqtp, uap->rmtp)); +} + +#ifndef _SYS_SYSPROTO_H_ +struct clock_nanosleep_args { + clockid_t clock_id; + int flags; + struct timespec *rqtp; + struct timespec *rmtp; +}; +#endif +/* ARGSUSED */ +int +sys_clock_nanosleep(struct thread *td, struct clock_nanosleep_args *uap) +{ + int error; + + error = user_clock_nanosleep(td, uap->clock_id, uap->flags, uap->rqtp, + uap->rmtp); + return (kern_posix_error(td, error)); +} + +static int +user_clock_nanosleep(struct thread *td, clockid_t clock_id, int flags, + const struct timespec *ua_rqtp, struct timespec *ua_rmtp) +{ struct timespec rmt, rqt; int error; - error = copyin(uap->rqtp, &rqt, sizeof(rqt)); + error = copyin(ua_rqtp, &rqt, sizeof(rqt)); if (error) return (error); - - if (uap->rmtp && - !useracc((caddr_t)uap->rmtp, sizeof(rmt), VM_PROT_WRITE)) - return (EFAULT); - error = kern_nanosleep(td, &rqt, &rmt); - if (error == EINTR && uap->rmtp) { + if (ua_rmtp != NULL && (flags & TIMER_ABSTIME) == 0 && + !useracc(ua_rmtp, sizeof(rmt), VM_PROT_WRITE)) + return (EFAULT); + error = kern_clock_nanosleep(td, clock_id, flags, &rqt, &rmt); + if (error == EINTR && ua_rmtp != NULL && (flags & TIMER_ABSTIME) == 0) { int error2; - error2 = copyout(&rmt, uap->rmtp, sizeof(rmt)); + error2 = copyout(&rmt, ua_rmtp, sizeof(rmt)); if (error2) error = error2; } Modified: head/sys/kern/syscalls.master ============================================================================== --- head/sys/kern/syscalls.master Sun Mar 19 00:36:29 2017 (r315525) +++ head/sys/kern/syscalls.master Sun Mar 19 00:51:12 2017 (r315526) @@ -461,7 +461,9 @@ struct ffclock_estimate *cest); } 243 AUE_NULL STD { int ffclock_getestimate( \ struct ffclock_estimate *cest); } -244 AUE_NULL UNIMPL nosys +244 AUE_NULL STD { int clock_nanosleep(clockid_t clock_id, \ + int flags, const struct timespec *rqtp, \ + struct timespec *rmtp); } 245 AUE_NULL UNIMPL nosys 246 AUE_NULL UNIMPL nosys 247 AUE_NULL STD { int clock_getcpuclockid2(id_t id,\ Modified: head/sys/sys/syscallsubr.h ============================================================================== --- head/sys/sys/syscallsubr.h Sun Mar 19 00:36:29 2017 (r315525) +++ head/sys/sys/syscallsubr.h Sun Mar 19 00:51:12 2017 (r315526) @@ -82,6 +82,8 @@ int kern_clock_getres(struct thread *td, struct timespec *ts); int kern_clock_gettime(struct thread *td, clockid_t clock_id, struct timespec *ats); +int kern_clock_nanosleep(struct thread *td, clockid_t clock_id, int flags, + const struct timespec *rqtp, struct timespec *rmtp); int kern_clock_settime(struct thread *td, clockid_t clock_id, struct timespec *ats); int kern_close(struct thread *td, int fd); From owner-svn-src-head@freebsd.org Sun Mar 19 00:54:27 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1A55ED0839A; Sun, 19 Mar 2017 00:54:27 +0000 (UTC) (envelope-from vangyzen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DD0891EF3; Sun, 19 Mar 2017 00:54:26 +0000 (UTC) (envelope-from vangyzen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J0sP6G031576; Sun, 19 Mar 2017 00:54:25 GMT (envelope-from vangyzen@FreeBSD.org) Received: (from vangyzen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J0sOxj031565; Sun, 19 Mar 2017 00:54:24 GMT (envelope-from vangyzen@FreeBSD.org) Message-Id: <201703190054.v2J0sOxj031565@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: vangyzen set sender to vangyzen@FreeBSD.org using -f From: Eric van Gyzen Date: Sun, 19 Mar 2017 00:54:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315527 - in head/sys: compat/freebsd32 kern sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 00:54:27 -0000 Author: vangyzen Date: Sun Mar 19 00:54:24 2017 New Revision: 315527 URL: https://svnweb.freebsd.org/changeset/base/315527 Log: Regenerate syscall files for r315526 Sponsored by: Dell EMC Modified: head/sys/compat/freebsd32/freebsd32_proto.h head/sys/compat/freebsd32/freebsd32_syscall.h head/sys/compat/freebsd32/freebsd32_syscalls.c head/sys/compat/freebsd32/freebsd32_sysent.c head/sys/compat/freebsd32/freebsd32_systrace_args.c head/sys/kern/init_sysent.c head/sys/kern/syscalls.c head/sys/kern/systrace_args.c head/sys/sys/syscall.h head/sys/sys/syscall.mk head/sys/sys/sysproto.h Modified: head/sys/compat/freebsd32/freebsd32_proto.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_proto.h Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/compat/freebsd32/freebsd32_proto.h Sun Mar 19 00:54:24 2017 (r315527) @@ -235,6 +235,12 @@ struct freebsd32_nanosleep_args { char rqtp_l_[PADL_(const struct timespec32 *)]; const struct timespec32 * rqtp; char rqtp_r_[PADR_(const struct timespec32 *)]; char rmtp_l_[PADL_(struct timespec32 *)]; struct timespec32 * rmtp; char rmtp_r_[PADR_(struct timespec32 *)]; }; +struct freebsd32_clock_nanosleep_args { + char clock_id_l_[PADL_(clockid_t)]; clockid_t clock_id; char clock_id_r_[PADR_(clockid_t)]; + char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)]; + char rqtp_l_[PADL_(const struct timespec32 *)]; const struct timespec32 * rqtp; char rqtp_r_[PADR_(const struct timespec32 *)]; + char rmtp_l_[PADL_(struct timespec32 *)]; struct timespec32 * rmtp; char rmtp_r_[PADR_(struct timespec32 *)]; +}; struct freebsd32_clock_getcpuclockid2_args { char id1_l_[PADL_(uint32_t)]; uint32_t id1; char id1_r_[PADR_(uint32_t)]; char id2_l_[PADL_(uint32_t)]; uint32_t id2; char id2_r_[PADR_(uint32_t)]; @@ -727,6 +733,7 @@ int freebsd32_ktimer_create(struct threa int freebsd32_ktimer_settime(struct thread *, struct freebsd32_ktimer_settime_args *); int freebsd32_ktimer_gettime(struct thread *, struct freebsd32_ktimer_gettime_args *); int freebsd32_nanosleep(struct thread *, struct freebsd32_nanosleep_args *); +int freebsd32_clock_nanosleep(struct thread *, struct freebsd32_clock_nanosleep_args *); int freebsd32_clock_getcpuclockid2(struct thread *, struct freebsd32_clock_getcpuclockid2_args *); int freebsd32_aio_read(struct thread *, struct freebsd32_aio_read_args *); int freebsd32_aio_write(struct thread *, struct freebsd32_aio_write_args *); @@ -1185,6 +1192,7 @@ int freebsd10_freebsd32_pipe(struct thre #define FREEBSD32_SYS_AUE_freebsd32_ktimer_settime AUE_NULL #define FREEBSD32_SYS_AUE_freebsd32_ktimer_gettime AUE_NULL #define FREEBSD32_SYS_AUE_freebsd32_nanosleep AUE_NULL +#define FREEBSD32_SYS_AUE_freebsd32_clock_nanosleep AUE_NULL #define FREEBSD32_SYS_AUE_freebsd32_clock_getcpuclockid2 AUE_NULL #define FREEBSD32_SYS_AUE_freebsd32_aio_read AUE_NULL #define FREEBSD32_SYS_AUE_freebsd32_aio_write AUE_NULL Modified: head/sys/compat/freebsd32/freebsd32_syscall.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscall.h Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/compat/freebsd32/freebsd32_syscall.h Sun Mar 19 00:54:24 2017 (r315527) @@ -214,6 +214,7 @@ #define FREEBSD32_SYS_ffclock_getcounter 241 #define FREEBSD32_SYS_ffclock_setestimate 242 #define FREEBSD32_SYS_ffclock_getestimate 243 +#define FREEBSD32_SYS_freebsd32_clock_nanosleep 244 #define FREEBSD32_SYS_freebsd32_clock_getcpuclockid2 247 #define FREEBSD32_SYS_minherit 250 #define FREEBSD32_SYS_rfork 251 Modified: head/sys/compat/freebsd32/freebsd32_syscalls.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscalls.c Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/compat/freebsd32/freebsd32_syscalls.c Sun Mar 19 00:54:24 2017 (r315527) @@ -253,7 +253,7 @@ const char *freebsd32_syscallnames[] = { "ffclock_getcounter", /* 241 = ffclock_getcounter */ "ffclock_setestimate", /* 242 = ffclock_setestimate */ "ffclock_getestimate", /* 243 = ffclock_getestimate */ - "#244", /* 244 = nosys */ + "freebsd32_clock_nanosleep", /* 244 = freebsd32_clock_nanosleep */ "#245", /* 245 = nosys */ "#246", /* 246 = nosys */ "freebsd32_clock_getcpuclockid2", /* 247 = freebsd32_clock_getcpuclockid2 */ Modified: head/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_sysent.c Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/compat/freebsd32/freebsd32_sysent.c Sun Mar 19 00:54:24 2017 (r315527) @@ -296,7 +296,7 @@ struct sysent freebsd32_sysent[] = { { AS(ffclock_getcounter_args), (sy_call_t *)sys_ffclock_getcounter, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 241 = ffclock_getcounter */ { AS(ffclock_setestimate_args), (sy_call_t *)sys_ffclock_setestimate, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 242 = ffclock_setestimate */ { AS(ffclock_getestimate_args), (sy_call_t *)sys_ffclock_getestimate, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 243 = ffclock_getestimate */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 244 = nosys */ + { AS(freebsd32_clock_nanosleep_args), (sy_call_t *)freebsd32_clock_nanosleep, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 244 = freebsd32_clock_nanosleep */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 245 = nosys */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 246 = nosys */ { AS(freebsd32_clock_getcpuclockid2_args), (sy_call_t *)freebsd32_clock_getcpuclockid2, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 247 = freebsd32_clock_getcpuclockid2 */ Modified: head/sys/compat/freebsd32/freebsd32_systrace_args.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_systrace_args.c Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/compat/freebsd32/freebsd32_systrace_args.c Sun Mar 19 00:54:24 2017 (r315527) @@ -1260,6 +1260,16 @@ systrace_args(int sysnum, void *params, *n_args = 1; break; } + /* freebsd32_clock_nanosleep */ + case 244: { + struct freebsd32_clock_nanosleep_args *p = params; + iarg[0] = p->clock_id; /* clockid_t */ + iarg[1] = p->flags; /* int */ + uarg[2] = (intptr_t) p->rqtp; /* const struct timespec32 * */ + uarg[3] = (intptr_t) p->rmtp; /* struct timespec32 * */ + *n_args = 4; + break; + } /* freebsd32_clock_getcpuclockid2 */ case 247: { struct freebsd32_clock_getcpuclockid2_args *p = params; @@ -5303,6 +5313,25 @@ systrace_entry_setargdesc(int sysnum, in break; }; break; + /* freebsd32_clock_nanosleep */ + case 244: + switch(ndx) { + case 0: + p = "clockid_t"; + break; + case 1: + p = "int"; + break; + case 2: + p = "userland const struct timespec32 *"; + break; + case 3: + p = "userland struct timespec32 *"; + break; + default: + break; + }; + break; /* freebsd32_clock_getcpuclockid2 */ case 247: switch(ndx) { @@ -9626,6 +9655,11 @@ systrace_return_setargdesc(int sysnum, i if (ndx == 0 || ndx == 1) p = "int"; break; + /* freebsd32_clock_nanosleep */ + case 244: + if (ndx == 0 || ndx == 1) + p = "int"; + break; /* freebsd32_clock_getcpuclockid2 */ case 247: if (ndx == 0 || ndx == 1) Modified: head/sys/kern/init_sysent.c ============================================================================== --- head/sys/kern/init_sysent.c Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/kern/init_sysent.c Sun Mar 19 00:54:24 2017 (r315527) @@ -289,7 +289,7 @@ struct sysent sysent[] = { { AS(ffclock_getcounter_args), (sy_call_t *)sys_ffclock_getcounter, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 241 = ffclock_getcounter */ { AS(ffclock_setestimate_args), (sy_call_t *)sys_ffclock_setestimate, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 242 = ffclock_setestimate */ { AS(ffclock_getestimate_args), (sy_call_t *)sys_ffclock_getestimate, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 243 = ffclock_getestimate */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 244 = nosys */ + { AS(clock_nanosleep_args), (sy_call_t *)sys_clock_nanosleep, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 244 = clock_nanosleep */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 245 = nosys */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 246 = nosys */ { AS(clock_getcpuclockid2_args), (sy_call_t *)sys_clock_getcpuclockid2, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 247 = clock_getcpuclockid2 */ Modified: head/sys/kern/syscalls.c ============================================================================== --- head/sys/kern/syscalls.c Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/kern/syscalls.c Sun Mar 19 00:54:24 2017 (r315527) @@ -250,7 +250,7 @@ const char *syscallnames[] = { "ffclock_getcounter", /* 241 = ffclock_getcounter */ "ffclock_setestimate", /* 242 = ffclock_setestimate */ "ffclock_getestimate", /* 243 = ffclock_getestimate */ - "#244", /* 244 = nosys */ + "clock_nanosleep", /* 244 = clock_nanosleep */ "#245", /* 245 = nosys */ "#246", /* 246 = nosys */ "clock_getcpuclockid2", /* 247 = clock_getcpuclockid2 */ Modified: head/sys/kern/systrace_args.c ============================================================================== --- head/sys/kern/systrace_args.c Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/kern/systrace_args.c Sun Mar 19 00:54:24 2017 (r315527) @@ -1290,6 +1290,16 @@ systrace_args(int sysnum, void *params, *n_args = 1; break; } + /* clock_nanosleep */ + case 244: { + struct clock_nanosleep_args *p = params; + iarg[0] = p->clock_id; /* clockid_t */ + iarg[1] = p->flags; /* int */ + uarg[2] = (intptr_t) p->rqtp; /* const struct timespec * */ + uarg[3] = (intptr_t) p->rmtp; /* struct timespec * */ + *n_args = 4; + break; + } /* clock_getcpuclockid2 */ case 247: { struct clock_getcpuclockid2_args *p = params; @@ -5365,6 +5375,25 @@ systrace_entry_setargdesc(int sysnum, in break; }; break; + /* clock_nanosleep */ + case 244: + switch(ndx) { + case 0: + p = "clockid_t"; + break; + case 1: + p = "int"; + break; + case 2: + p = "userland const struct timespec *"; + break; + case 3: + p = "userland struct timespec *"; + break; + default: + break; + }; + break; /* clock_getcpuclockid2 */ case 247: switch(ndx) { @@ -9603,6 +9632,11 @@ systrace_return_setargdesc(int sysnum, i if (ndx == 0 || ndx == 1) p = "int"; break; + /* clock_nanosleep */ + case 244: + if (ndx == 0 || ndx == 1) + p = "int"; + break; /* clock_getcpuclockid2 */ case 247: if (ndx == 0 || ndx == 1) Modified: head/sys/sys/syscall.h ============================================================================== --- head/sys/sys/syscall.h Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/sys/syscall.h Sun Mar 19 00:54:24 2017 (r315527) @@ -218,6 +218,7 @@ #define SYS_ffclock_getcounter 241 #define SYS_ffclock_setestimate 242 #define SYS_ffclock_getestimate 243 +#define SYS_clock_nanosleep 244 #define SYS_clock_getcpuclockid2 247 #define SYS_ntp_gettime 248 #define SYS_minherit 250 Modified: head/sys/sys/syscall.mk ============================================================================== --- head/sys/sys/syscall.mk Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/sys/syscall.mk Sun Mar 19 00:54:24 2017 (r315527) @@ -158,6 +158,7 @@ MIASM = \ ffclock_getcounter.o \ ffclock_setestimate.o \ ffclock_getestimate.o \ + clock_nanosleep.o \ clock_getcpuclockid2.o \ ntp_gettime.o \ minherit.o \ Modified: head/sys/sys/sysproto.h ============================================================================== --- head/sys/sys/sysproto.h Sun Mar 19 00:51:12 2017 (r315526) +++ head/sys/sys/sysproto.h Sun Mar 19 00:54:24 2017 (r315527) @@ -697,6 +697,12 @@ struct ffclock_setestimate_args { struct ffclock_getestimate_args { char cest_l_[PADL_(struct ffclock_estimate *)]; struct ffclock_estimate * cest; char cest_r_[PADR_(struct ffclock_estimate *)]; }; +struct clock_nanosleep_args { + char clock_id_l_[PADL_(clockid_t)]; clockid_t clock_id; char clock_id_r_[PADR_(clockid_t)]; + char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)]; + char rqtp_l_[PADL_(const struct timespec *)]; const struct timespec * rqtp; char rqtp_r_[PADR_(const struct timespec *)]; + char rmtp_l_[PADL_(struct timespec *)]; struct timespec * rmtp; char rmtp_r_[PADR_(struct timespec *)]; +}; struct clock_getcpuclockid2_args { char id_l_[PADL_(id_t)]; id_t id; char id_r_[PADR_(id_t)]; char which_l_[PADL_(int)]; int which; char which_r_[PADR_(int)]; @@ -1936,6 +1942,7 @@ int sys_nanosleep(struct thread *, struc int sys_ffclock_getcounter(struct thread *, struct ffclock_getcounter_args *); int sys_ffclock_setestimate(struct thread *, struct ffclock_setestimate_args *); int sys_ffclock_getestimate(struct thread *, struct ffclock_getestimate_args *); +int sys_clock_nanosleep(struct thread *, struct clock_nanosleep_args *); int sys_clock_getcpuclockid2(struct thread *, struct clock_getcpuclockid2_args *); int sys_ntp_gettime(struct thread *, struct ntp_gettime_args *); int sys_minherit(struct thread *, struct minherit_args *); @@ -2706,6 +2713,7 @@ int freebsd10_pipe(struct thread *, stru #define SYS_AUE_ffclock_getcounter AUE_NULL #define SYS_AUE_ffclock_setestimate AUE_NULL #define SYS_AUE_ffclock_getestimate AUE_NULL +#define SYS_AUE_clock_nanosleep AUE_NULL #define SYS_AUE_clock_getcpuclockid2 AUE_NULL #define SYS_AUE_ntp_gettime AUE_NULL #define SYS_AUE_minherit AUE_MINHERIT From owner-svn-src-head@freebsd.org Sun Mar 19 01:24:20 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9F82CD08F63; Sun, 19 Mar 2017 01:24:20 +0000 (UTC) (envelope-from bjk@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6C4EF1D75; Sun, 19 Mar 2017 01:24:20 +0000 (UTC) (envelope-from bjk@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J1OJYI043833; Sun, 19 Mar 2017 01:24:19 GMT (envelope-from bjk@FreeBSD.org) Received: (from bjk@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J1OJgB043827; Sun, 19 Mar 2017 01:24:19 GMT (envelope-from bjk@FreeBSD.org) Message-Id: <201703190124.v2J1OJgB043827@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bjk set sender to bjk@FreeBSD.org using -f From: Benjamin Kaduk Date: Sun, 19 Mar 2017 01:24:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315528 - in head/share/man: man5 man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 01:24:20 -0000 Author: bjk (doc committer) Date: Sun Mar 19 01:24:18 2017 New Revision: 315528 URL: https://svnweb.freebsd.org/changeset/base/315528 Log: Tidy up mdoc formatting for "etc.)" at end of line man(1) has some logic to use two spaces after a full stop, which is useful for spotting sentence breaks in monospace fonts. However, this logic is very simple, treating almost all '.' characters as end-of-sentence markers, unless followed by certain other characters. For example, '.,' is not end-of-sentence, and neither is ".) ", but ".)" at the end of a line triggers the sentence-end detection. Apply a zero-width space to a few instances of this in share/man, and also supply a missing full stop for an instance that occurred at the end of a sentence. Leave untouched several instances that are at the end of a sentence or list element. Reported by: 0mp (ieee80211.9) Modified: head/share/man/man5/stab.5 head/share/man/man9/ieee80211.9 head/share/man/man9/ieee80211_vap.9 head/share/man/man9/taskqueue.9 head/share/man/man9/vnode.9 Modified: head/share/man/man5/stab.5 ============================================================================== --- head/share/man/man5/stab.5 Sun Mar 19 00:54:24 2017 (r315527) +++ head/share/man/man5/stab.5 Sun Mar 19 01:24:18 2017 (r315528) @@ -42,7 +42,7 @@ The file defines some of the symbol table .Fa n_type field values for a.out files. -These are the types for permanent symbols (i.e., not local labels, etc.) +These are the types for permanent symbols (i.e., not local labels, etc.\&) used by the old debugger .Em sdb and the Berkeley Pascal compiler Modified: head/share/man/man9/ieee80211.9 ============================================================================== --- head/share/man/man9/ieee80211.9 Sun Mar 19 00:54:24 2017 (r315527) +++ head/share/man/man9/ieee80211.9 Sun Mar 19 01:24:18 2017 (r315528) @@ -59,7 +59,7 @@ device driver implements a virtual radio users through network interfaces (aka vaps) that are cloned from the underlying device. These interfaces have an operating mode -(station, adhoc, hostap, wds, monitor, etc.) +(station, adhoc, hostap, wds, monitor, etc.\&) that is fixed for the lifetime of the interface. Devices that can support multiple concurrent interfaces allow multiple vaps to be cloned. Modified: head/share/man/man9/ieee80211_vap.9 ============================================================================== --- head/share/man/man9/ieee80211_vap.9 Sun Mar 19 00:54:24 2017 (r315527) +++ head/share/man/man9/ieee80211_vap.9 Sun Mar 19 01:24:18 2017 (r315528) @@ -62,7 +62,7 @@ a virtual radio API that is exported to users through network interfaces (aka vaps) that are cloned from the underlying device. These interfaces have an operating mode -(station, adhoc, hostap, wds, monitor, etc.) +(station, adhoc, hostap, wds, monitor, etc.\&) that is fixed for the lifetime of the interface. Devices that can support multiple concurrent interfaces allow multiple vaps to be cloned. Modified: head/share/man/man9/taskqueue.9 ============================================================================== --- head/share/man/man9/taskqueue.9 Sun Mar 19 00:54:24 2017 (r315527) +++ head/share/man/man9/taskqueue.9 Sun Mar 19 01:24:18 2017 (r315528) @@ -404,7 +404,7 @@ the .Va init argument to the macro is executed as a C statement, allowing any further initialisation to be performed -(such as registering an interrupt handler etc.) +(such as registering an interrupt handler, etc.). .Pp The .Fn TASKQUEUE_DEFINE_THREAD Modified: head/share/man/man9/vnode.9 ============================================================================== --- head/share/man/man9/vnode.9 Sun Mar 19 00:54:24 2017 (r315527) +++ head/share/man/man9/vnode.9 Sun Mar 19 01:24:18 2017 (r315528) @@ -82,7 +82,7 @@ system calls. Any call which returns a vnode (e.g.,\& .Xr vget 9 , .Xr VOP_LOOKUP 9 , -etc.) +etc.\&) will increase the .Va v_usecount of the vnode by one. From owner-svn-src-head@freebsd.org Sun Mar 19 02:25:35 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8DA7ED08B64; Sun, 19 Mar 2017 02:25:35 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail104.syd.optusnet.com.au (mail104.syd.optusnet.com.au [211.29.132.246]) by mx1.freebsd.org (Postfix) with ESMTP id 58FAE113B; Sun, 19 Mar 2017 02:25:35 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from besplex.bde.org (c122-106-153-191.carlnfd1.nsw.optusnet.com.au [122.106.153.191]) by mail104.syd.optusnet.com.au (Postfix) with ESMTPS id 5E9D34287AD; Sun, 19 Mar 2017 13:04:51 +1100 (AEDT) Date: Sun, 19 Mar 2017 13:04:50 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Ed Maste cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315522 - in head: contrib/binutils/ld/emulparams sys/conf In-Reply-To: <201703190022.v2J0MDhq015941@repo.freebsd.org> Message-ID: <20170319123107.W994@besplex.bde.org> References: <201703190022.v2J0MDhq015941@repo.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.2 cv=AYLBJzfG c=1 sm=1 tr=0 a=Tj3pCpwHnMupdyZSltBt7Q==:117 a=Tj3pCpwHnMupdyZSltBt7Q==:17 a=kj9zAlcOel0A:10 a=6I5d2MoRAAAA:8 a=_0Hqu8SF-oPYoeWnVvAA:9 a=CjuIK1q_8ugA:10 a=IjZwj45LgO3ly-622nXo:22 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 02:25:35 -0000 On Sun, 19 Mar 2017, Ed Maste wrote: > Log: > use INT3 instead of NOP for x86 binary padding > > We should never end up executing the inter-function padding, so we > are better off faulting than silently carrying on to whatever function > happens to be next. > > Note that LLD will soon do this by default (although it currently pads > with zeros). > > Reviewed by: dim, kib > MFC after: 1 month > Sponsored by: The FreeBSD Foundation > Differential Revision: https://reviews.freebsd.org/D10047 Is this a pessimization? Instruction prefetch near the end of almost every function now fetches INT3 instead of NOP. Both have to be decoded to decoded whether to speculatively execute them. INT3 is unlikely to be speculatively executed, but it takes extra work to decide not to do so. Functions normally end with a RET or unconditional JMP, and then branch prediction usually prevents speculative execution beyond the end, so the pessimization must be small. Intra-function padding that is executed now uses "fat NOP" instructions like null LEA's since this is faster to execute than a long string of NOPs. This is less readable than NOPs or even INT3's. Of course, INT3 can't be used for executed padding. I think it is also used for intra- function padding that is not executed. This is just harder to read unless it is needed to avoid the possible pessimization in this commit. The intra-function code with nops might look like: jmp over nop # 7 nops altogether nop over: or jmp over nullpad7 # single 7 byte null padding instruction over: and it is likely to be CPU-dependent whether 7 possibly-speculatively executed nops take more or less resources than 1 possibly-speculatively executed fancy instruction. I would expect the fancy instructions to take more resources each. Fancy LEAs don't seem such a good choice for executed padding either. amd64 uses lots of REX prefixes instead of fancy instructions, since these are designed to have low overheads. They certainly aren't executed separately. On i386, the same technique with lots of older prefixes is not used much, probably because all prefixes have high overheads on old i386's. They can be as slow as NOPs although they aren't executed separately. Bruce From owner-svn-src-head@freebsd.org Sun Mar 19 03:06:11 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 321E9D13801; Sun, 19 Mar 2017 03:06:11 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EDDA0A64; Sun, 19 Mar 2017 03:06:10 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J36AC0086100; Sun, 19 Mar 2017 03:06:10 GMT (envelope-from kp@FreeBSD.org) Received: (from kp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J36AZG086099; Sun, 19 Mar 2017 03:06:10 GMT (envelope-from kp@FreeBSD.org) Message-Id: <201703190306.v2J36AZG086099@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kp set sender to kp@FreeBSD.org using -f From: Kristof Provost Date: Sun, 19 Mar 2017 03:06:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315529 - head/sys/netpfil/pf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 03:06:11 -0000 Author: kp Date: Sun Mar 19 03:06:09 2017 New Revision: 315529 URL: https://svnweb.freebsd.org/changeset/base/315529 Log: pf: Fix rule evaluation after inet6 route-to In pf_route6() we re-run the ruleset with PF_FWD if the packet goes out of a different interface. pf_test6() needs to know that the packet was forwarded (in case it needs to refragment so it knows whether to call ip6_output() or ip6_forward()). This lead pf_test6() to try to evaluate rules against the PF_FWD direction, which isn't supported, so it needs to treat PF_FWD as PF_OUT. Once fwdir is set correctly the correct output/forward function will be called. PR: 217883 Submitted by: Kajetan Staszkiewicz MFC after: 1 week Sponsored by: InnoGames GmbH Modified: head/sys/netpfil/pf/pf.c Modified: head/sys/netpfil/pf/pf.c ============================================================================== --- head/sys/netpfil/pf/pf.c Sun Mar 19 01:24:18 2017 (r315528) +++ head/sys/netpfil/pf/pf.c Sun Mar 19 03:06:09 2017 (r315529) @@ -6245,6 +6245,9 @@ pf_test6(int dir, struct ifnet *ifp, str m->m_pkthdr.rcvif->if_bridge != ifp->if_bridge))) fwdir = PF_FWD; + if (dir == PF_FWD) + dir = PF_OUT; + if (!V_pf_status.running) return (PF_PASS); From owner-svn-src-head@freebsd.org Sun Mar 19 04:03:41 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 67979D13405; Sun, 19 Mar 2017 04:03:41 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1C3A3920; Sun, 19 Mar 2017 04:03:41 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J43e9n010190; Sun, 19 Mar 2017 04:03:40 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J43e1O010189; Sun, 19 Mar 2017 04:03:40 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703190403.v2J43e1O010189@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 04:03:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315530 - head/sys/arm/freescale/imx X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 04:03:41 -0000 Author: ian Date: Sun Mar 19 04:03:39 2017 New Revision: 315530 URL: https://svnweb.freebsd.org/changeset/base/315530 Log: Remove unreferenced global function imx_gpt_get_timerfreq() and do some cleanups enabled by that: - The only thing left in imx_gptvar.h was the softc, which IMO never should have been in there at all. Move it into the driver, and delete the header file. - Remove several unneeded #includes from the driver. - Change imx_gpt_softc from global to static (it's used by DELAY()), and don't redundantly static-initialize it to NULL. Deleted: head/sys/arm/freescale/imx/imx_gptvar.h Modified: head/sys/arm/freescale/imx/imx_gpt.c Modified: head/sys/arm/freescale/imx/imx_gpt.c ============================================================================== --- head/sys/arm/freescale/imx/imx_gpt.c Sun Mar 19 03:06:09 2017 (r315529) +++ head/sys/arm/freescale/imx/imx_gpt.c Sun Mar 19 04:03:39 2017 (r315530) @@ -35,24 +35,18 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include -#include #include -#include #include #include #include #include -#include -#include - -#include #include +#include #define WRITE4(_sc, _r, _v) \ bus_space_write_4((_sc)->sc_iot, (_sc)->sc_ioh, (_r), (_v)) @@ -80,8 +74,20 @@ static struct timecounter imx_gpt_timeco .tc_quality = 1000, }; +struct imx_gpt_softc { + device_t sc_dev; + struct resource * res[2]; + bus_space_tag_t sc_iot; + bus_space_handle_t sc_ioh; + void * sc_ih; /* interrupt handler */ + uint32_t sc_period; + uint32_t sc_clksrc; + uint32_t clkfreq; + struct eventtimer et; +}; + /* Global softc pointer for use in DELAY(). */ -struct imx_gpt_softc *imx_gpt_sc = NULL; +static struct imx_gpt_softc *imx_gpt_sc; /* * Hand-calibrated delay-loop counter. This was calibrated on an i.MX6 running @@ -106,7 +112,7 @@ static struct resource_spec imx_gpt_spec }; static struct ofw_compat_data compat_data[] = { - {"fsl,imx6dl-gpt", 1}, + {"fsl,imx6dl-gpt", 1}, {"fsl,imx6q-gpt", 1}, {"fsl,imx53-gpt", 1}, {"fsl,imx51-gpt", 1}, @@ -311,13 +317,6 @@ imx_gpt_timer_stop(struct eventtimer *et return (0); } -int -imx_gpt_get_timerfreq(struct imx_gpt_softc *sc) -{ - - return (sc->clkfreq); -} - static int imx_gpt_intr(void *arg) { From owner-svn-src-head@freebsd.org Sun Mar 19 04:12:10 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C9361D137D6; Sun, 19 Mar 2017 04:12:10 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail107.syd.optusnet.com.au (mail107.syd.optusnet.com.au [211.29.132.53]) by mx1.freebsd.org (Postfix) with ESMTP id 53997FC7; Sun, 19 Mar 2017 04:12:09 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from besplex.bde.org (c122-106-153-191.carlnfd1.nsw.optusnet.com.au [122.106.153.191]) by mail107.syd.optusnet.com.au (Postfix) with ESMTPS id BAB34D47D73; Sun, 19 Mar 2017 15:12:08 +1100 (AEDT) Date: Sun, 19 Mar 2017 15:12:08 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Dmitry Chagin cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315498 - head/sys/compat/linux In-Reply-To: <201703181814.v2IIEHxx066428@repo.freebsd.org> Message-ID: <20170319142933.I994@besplex.bde.org> References: <201703181814.v2IIEHxx066428@repo.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.2 cv=AYLBJzfG c=1 sm=1 tr=0 a=Tj3pCpwHnMupdyZSltBt7Q==:117 a=Tj3pCpwHnMupdyZSltBt7Q==:17 a=kj9zAlcOel0A:10 a=sawmzL94VX9KUcPa1PAA:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 04:12:10 -0000 On Sat, 18 Mar 2017, Dmitry Chagin wrote: > Log: > Check for negative nanoseconds. > Linux do that in timespec_valid(). This uses the unsigned hack to further obfuscate the code. No check is necessary on any supported arch, since there are no representability problems and FreeBSD checks for invalid nanoseconds natively. > Modified: head/sys/compat/linux/linux_time.c > ============================================================================== > --- head/sys/compat/linux/linux_time.c Sat Mar 18 18:12:09 2017 (r315497) > +++ head/sys/compat/linux/linux_time.c Sat Mar 18 18:14:17 2017 (r315498) > @@ -142,7 +142,7 @@ linux_to_native_timespec(struct timespec > > LIN_SDT_PROBE2(time, linux_to_native_timespec, entry, ntp, ltp); > > - if (ltp->tv_sec < 0 || ltp->tv_nsec > (l_long)999999999L) { > + if (ltp->tv_sec < 0 || (l_ulong)ltp->tv_nsec > 999999999L) { > LIN_SDT_PROBE1(time, linux_to_native_timespec, return, EINVAL); > return (EINVAL); > } Checking tv_sec < 0 breaks cases where negative times are valid. They were valid in nanosleep() in FreeBSD, and the recent addition of clock_nanosleep() doesn't seem to have broken this. There is no check that tv_sec is representable. None is needed, since native time_t is at least as large as linux time_t on all supported arches. There is no check that large tv_nsec is representable, but the check that large tv_nsec is valid not quite accidentally alo checks for representability None is needed, since native long is at least as large as linux l_long on all supported arches. The check that large tv_nsec is valid had 2 type errors: explicit long constant and bogus cast to undo this. These are only small style bug. Now it still has the first error, and is obfuscated using an unsigned hack. It takes a longer type analysis to see that this is just a style bug (since l_long == int32_t == int on 32-bit systems, but the constant is long so the expression doesn't have everything unsigned). There was no check that large negative tv_nsec is representable, but no check is necessary, as above. Now there is an unnecessary check, using the unsigned hack, etc. It takes a MUCH longer type analysis to see that this is just a style bug. E.g., consider the following subtle variation: if (ltp->tv_sec < 0 || (l_ulong)ltp->tv_nsec > 9999999999L) { The only change is to add a 9. Of course, the constant is now wrong for nansoseconds, but understanding why the unsigned hack is just an obfuscation with the correct constant requires the same analysis. Suppose l_ulong is uint32_t and tv_nsec is -1 and native is 64 bits. Then on 32-bit systems, the cast gives UINT32_MAX = 0xFFFFFFFF (u_int, not u_long, even on 32-bit systems). 9999999999L is larger than this, so the comparison is tautologically false and the bug might be reported by a compiler warning. 999999999L is not larger than this, so the comparison works as intended, just like if the constant were correctly written without an L suffix to obfuscate it -- then all the apparent longs are actually ints, and the unsigned hack works as intended. The L suffix doesn't make any difference here, except to obfuscate the code and possibly cause or prevent compiler warnings. On 32-bit hosts, the constant with the extra 9 is too large for long, so the compiler can reasonably warn that the constant has type long long. gcc with -std before 1999 warns whenever a constant is too large for long and unless it has a [U]LL suffix, and compilers could unreasonbly have the same sort of warnings for unsuffixed long constants. Anyway, with such a large constant, you have to be careful about its type. With no suffix, it might be either long or long long constant. The constant for nanoseconds is about 1/2 of INT32_MAX = LONG_MAX on 32-bit systems, so it is just below the limit for needing much care on 32-bit systems. Bruce From owner-svn-src-head@freebsd.org Sun Mar 19 05:00:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 41CE5D13025; Sun, 19 Mar 2017 05:00:15 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1C6E4219; Sun, 19 Mar 2017 05:00:15 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J50E4u031045; Sun, 19 Mar 2017 05:00:14 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J50EVW031044; Sun, 19 Mar 2017 05:00:14 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703190500.v2J50EVW031044@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Sun, 19 Mar 2017 05:00:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315531 - head/sys/dev/ath X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 05:00:15 -0000 Author: adrian Date: Sun Mar 19 05:00:14 2017 New Revision: 315531 URL: https://svnweb.freebsd.org/changeset/base/315531 Log: [ath] prepare for "correct" group (bcast/mcast) address frame handling and software/hardware queue TID mapping. When I initially did this 11n TX work in days of yonder, my 802.11 standards clue was ... not as finely tuned. One of the things in 802.11-2012 (which I guess technically was after I did this work, but I'm sure it was like this in the previous rev?) is that among other traffic classes, three things are important: * group addressed frames should be default non-QoS, even if they're QoS frames, and * group addressed frames should have a seqno out of a different space than the per-TID QoS one; and because of this * group addressed frames, being non-QoS, should never be in the Block-ACK window for TX. Now, net80211 and now this code cheats by using the non-QOS TID, but ideally we'd introduce a separate seqno space just for multicast/group traffic for TX and RX comparison. Later extensions (eg reliable multicast / multimedia) express what one should do when doing multicast traffic in a TID. Now, technically we /could/ do group traffic as QoS traffic and throw it into a per-TID seqno space, but this definitely introduces ordering issues when you take into account things like CABQ behaviour. (Ie, if some traffic in the TID goes into the CABQ and some doesn't, because it's doing a split of multicast and non-multicast traffic, then you have seqno ordering issues.) So, until someone implements 802.11vv reliable multicast / multimedia extensions, group traffic is non-QoS. Next, software/hardware queue TID mapping. In the past I believed the WME tagging of frames because well, net80211 had a habit of tagging things like management traffic with it. But, then we also map QoS traffic categories to TIDs as well. So, we should obey the TID! But! then it put some management traffic into higher WME categories too, as those frames don't have QoS TIDs. But! It'd do things like put things like QoS action frames into higher WME categories, when they should be kept in-order with the rest of the traffic for that TID. So! Given all of this, the ath(4) driver does overrides to not trust the WME category. I .. am undoing some of this. Now, the TID has a 1:1 mapping to the hardware queue. The TID is the primary source of truth now for all QoS traffic. The WME is only used for non-QoS traffic. This now means that any TID traffic queued should be consistently queued regardless of WME, so things like the "TX finished, do more TX" that is occuring right now for transmit handling should be "better". The consistent {TID, WME} -> hardware queue mapping is important for transmit completion. It's used to schedule more traffic for that particular TID, because that {many TID}:{1 TXQ} mapping in ath_tx_tid_sched() is used for driving completion. Ie, when the hardware queue completes, it'll walk that list of scheduled TIDs attached to that TXQ. The eventual aim is to get ready for some other features around putting some data into other hardware queues (eg for better PS-POLL support, uAPSD, support, correct-er TDMA support, etc) which requires that I tidy all of this up in preparation for then introducing further TID scheduling that isn't linked to a hardware TXQ (likely a per-WME, per-TID driver queue, and a per-node driver queue) to enable that. Tested: * AR9380, STA mode * AR9380, AR9580, AP mode Modified: head/sys/dev/ath/if_ath_tx.c Modified: head/sys/dev/ath/if_ath_tx.c ============================================================================== --- head/sys/dev/ath/if_ath_tx.c Sun Mar 19 04:03:39 2017 (r315530) +++ head/sys/dev/ath/if_ath_tx.c Sun Mar 19 05:00:14 2017 (r315531) @@ -174,21 +174,22 @@ ath_tx_is_11n(struct ath_softc *sc) /* * Obtain the current TID from the given frame. * - * Non-QoS frames need to go into TID 16 (IEEE80211_NONQOS_TID.) - * This has implications for which AC/priority the packet is placed - * in. + * Non-QoS frames get mapped to a TID so frames consistently + * go on a sensible queue. */ static int ath_tx_gettid(struct ath_softc *sc, const struct mbuf *m0) { const struct ieee80211_frame *wh; - int pri = M_WME_GETAC(m0); wh = mtod(m0, const struct ieee80211_frame *); + + /* Non-QoS: map frame to a TID queue for software queueing */ if (! IEEE80211_QOS_HAS_SEQ(wh)) - return IEEE80211_NONQOS_TID; - else - return WME_AC_TO_TID(pri); + return (WME_AC_TO_TID(M_WME_GETAC(m0))); + + /* QoS - fetch the TID from the header, ignore mbuf WME */ + return (ieee80211_gettid(wh)); } static void @@ -211,30 +212,42 @@ ath_tx_set_retry(struct ath_softc *sc, s * Determine what the correct AC queue for the given frame * should be. * - * This code assumes that the TIDs map consistently to - * the underlying hardware (or software) ath_txq. - * Since the sender may try to set an AC which is - * arbitrary, non-QoS TIDs may end up being put on - * completely different ACs. There's no way to put a - * TID into multiple ath_txq's for scheduling, so - * for now we override the AC/TXQ selection and set - * non-QOS TID frames into the BE queue. - * - * This may be completely incorrect - specifically, - * some management frames may end up out of order - * compared to the QoS traffic they're controlling. - * I'll look into this later. + * For QoS frames, obey the TID. That way things like + * management frames that are related to a given TID + * are thus serialised with the rest of the TID traffic, + * regardless of net80211 overriding priority. + * + * For non-QoS frames, return the mbuf WMI priority. + * + * This has implications that higher priority non-QoS traffic + * may end up being scheduled before other non-QoS traffic, + * leading to out-of-sequence packets being emitted. + * + * (It'd be nice to log/count this so we can see if it + * really is a problem.) + * + * TODO: maybe we should throw multicast traffic, QoS or + * otherwise, into a separate TX queue? */ static int ath_tx_getac(struct ath_softc *sc, const struct mbuf *m0) { const struct ieee80211_frame *wh; - int pri = M_WME_GETAC(m0); + wh = mtod(m0, const struct ieee80211_frame *); + + /* + * QoS data frame (sequence number or otherwise) - + * return hardware queue mapping for the underlying + * TID. + */ if (IEEE80211_QOS_HAS_SEQ(wh)) - return pri; + return TID_TO_WME_AC(ieee80211_gettid(wh)); - return ATH_NONQOS_TID_AC; + /* + * Otherwise - return mbuf QoS pri. + */ + return (M_WME_GETAC(m0)); } void @@ -1550,6 +1563,8 @@ ath_tx_normal_setup(struct ath_softc *sc const HAL_RATE_TABLE *rt; HAL_BOOL shortPreamble; struct ath_node *an; + + /* XXX TODO: this pri is only used for non-QoS check, right? */ u_int pri; /* @@ -1618,7 +1633,8 @@ ath_tx_normal_setup(struct ath_softc *sc //flags = HAL_TXDESC_CLRDMASK; /* XXX needed for crypto errs */ flags = 0; ismrr = 0; /* default no multi-rate retry*/ - pri = M_WME_GETAC(m0); /* honor classification */ + + pri = ath_tx_getac(sc, m0); /* honor classification */ /* XXX use txparams instead of fixed values */ /* * Calculate Atheros packet type from IEEE80211 packet header, @@ -1899,7 +1915,18 @@ ath_tx_start(struct ath_softc *sc, struc * Determine the target hardware queue. * * For multicast frames, the txq gets overridden appropriately - * depending upon the state of PS. + * depending upon the state of PS. If powersave is enabled + * then they get added to the cabq for later transmit. + * + * The "fun" issue here is that group addressed frames should + * have the sequence number from a different pool, rather than + * the per-TID pool. That means that even QoS group addressed + * frames will have a sequence number from that global value, + * which means if we transmit different group addressed frames + * at different traffic priorities, the sequence numbers will + * all be out of whack. So - chances are, the right thing + * to do here is to always put group addressed frames into the BE + * queue, and ignore the TID for queue selection. * * For any other frame, we do a TID/QoS lookup inside the frame * to see what the TID should be. If it's a non-QoS frame, the @@ -1999,21 +2026,26 @@ ath_tx_start(struct ath_softc *sc, struc /* * Don't do it whilst pending; the net80211 layer still * assigns them. + * + * Don't assign A-MPDU sequence numbers to group address + * frames; they come from a different sequence number space. */ - if (is_ampdu_tx) { + if (is_ampdu_tx && (! IEEE80211_IS_MULTICAST(wh->i_addr1))) { /* * Always call; this function will * handle making sure that null data frames - * don't get a sequence number from the current - * TID and thus mess with the BAW. + * and group-addressed frames don't get a sequence number + * from the current TID and thus mess with the BAW. */ seqno = ath_tx_tid_seqno_assign(sc, ni, bf, m0); /* - * Don't add QoS NULL frames to the BAW. + * Don't add QoS NULL frames and group-addressed frames + * to the BAW. */ if (IEEE80211_QOS_HAS_SEQ(wh) && - subtype != IEEE80211_FC0_SUBTYPE_QOS_NULL) { + (! IEEE80211_IS_MULTICAST(wh->i_addr1)) && + (subtype != IEEE80211_FC0_SUBTYPE_QOS_NULL)) { bf->bf_state.bfs_dobaw = 1; } } @@ -2030,7 +2062,7 @@ ath_tx_start(struct ath_softc *sc, struc "%s: tid %d: ampdu pending, seqno %d\n", __func__, tid, M_SEQNO_GET(m0)); - /* This also sets up the DMA map */ + /* This also sets up the DMA map; crypto; frame parameters, etc */ r = ath_tx_normal_setup(sc, ni, bf, m0, txq); if (r != 0) @@ -2148,7 +2180,7 @@ ath_tx_raw_start(struct ath_softc *sc, s /* Map ADDBA to the correct priority */ if (do_override) { -#if 0 +#if 1 DPRINTF(sc, ATH_DEBUG_XMIT, "%s: overriding tid %d pri %d -> %d\n", __func__, o_tid, pri, TID_TO_WME_AC(o_tid)); @@ -2156,6 +2188,14 @@ ath_tx_raw_start(struct ath_softc *sc, s pri = TID_TO_WME_AC(o_tid); } + /* + * "pri" is the hardware queue to transmit on. + * + * Look at the description in ath_tx_start() to understand + * what needs to be "fixed" here so we just use the TID + * for QoS frames. + */ + /* Handle encryption twiddling if needed */ if (! ath_tx_tag_crypto(sc, ni, m0, params->ibp_flags & IEEE80211_BPF_CRYPTO, 0, @@ -2931,22 +2971,25 @@ ath_tx_tid_unsched(struct ath_softc *sc, * Assign a sequence number manually to the given frame. * * This should only be called for A-MPDU TX frames. + * + * Note: for group addressed frames, the sequence number + * should be from NONQOS_TID, and net80211 should have + * already assigned it for us. */ static ieee80211_seq ath_tx_tid_seqno_assign(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf, struct mbuf *m0) { struct ieee80211_frame *wh; - int tid, pri; + int tid; ieee80211_seq seqno; uint8_t subtype; - /* TID lookup */ wh = mtod(m0, struct ieee80211_frame *); - pri = M_WME_GETAC(m0); /* honor classification */ - tid = WME_AC_TO_TID(pri); - DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: pri=%d, tid=%d, qos has seq=%d\n", - __func__, pri, tid, IEEE80211_QOS_HAS_SEQ(wh)); + tid = ieee80211_gettid(wh); + + DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: tid=%d, qos has seq=%d\n", + __func__, tid, IEEE80211_QOS_HAS_SEQ(wh)); /* XXX Is it a control frame? Ignore */ @@ -2970,6 +3013,13 @@ ath_tx_tid_seqno_assign(struct ath_softc /* XXX no locking for this TID? This is a bit of a problem. */ seqno = ni->ni_txseqs[IEEE80211_NONQOS_TID]; INCR(ni->ni_txseqs[IEEE80211_NONQOS_TID], IEEE80211_SEQ_RANGE); + } else if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { + /* + * group addressed frames get a sequence number from + * a different sequence number space. + */ + seqno = ni->ni_txseqs[IEEE80211_NONQOS_TID]; + INCR(ni->ni_txseqs[IEEE80211_NONQOS_TID], IEEE80211_SEQ_RANGE); } else { /* Manually assign sequence number */ seqno = ni->ni_txseqs[tid]; From owner-svn-src-head@freebsd.org Sun Mar 19 09:30:04 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D314CD08986; Sun, 19 Mar 2017 09:30:04 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9FE281E02; Sun, 19 Mar 2017 09:30:04 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J9U36j040659; Sun, 19 Mar 2017 09:30:03 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J9U3Xl040656; Sun, 19 Mar 2017 09:30:03 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703190930.v2J9U3Xl040656@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 19 Mar 2017 09:30:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315533 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 09:30:04 -0000 Author: mav Date: Sun Mar 19 09:30:03 2017 New Revision: 315533 URL: https://svnweb.freebsd.org/changeset/base/315533 Log: Move 24xx RQSTYPE_NOTIFY handling to generic code. This code has nothing to do with specific platform. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_target.c head/sys/dev/isp/isp_target.h Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Sun Mar 19 07:34:19 2017 (r315532) +++ head/sys/dev/isp/isp_freebsd.c Sun Mar 19 09:30:03 2017 (r315533) @@ -788,7 +788,6 @@ static void isp_target_start_ctio(ispsof static void isp_handle_platform_atio2(ispsoftc_t *, at2_entry_t *); static void isp_handle_platform_atio7(ispsoftc_t *, at7_entry_t *); static void isp_handle_platform_ctio(ispsoftc_t *, void *); -static void isp_handle_platform_notify_24xx(ispsoftc_t *, in_fcentry_24xx_t *); static int isp_handle_platform_target_notify_ack(ispsoftc_t *, isp_notify_t *, uint32_t rsp); static void isp_handle_platform_target_tmf(ispsoftc_t *, isp_notify_t *); static void isp_target_mark_aborted_early(ispsoftc_t *, int chan, tstate_t *, uint32_t); @@ -2108,28 +2107,24 @@ mdp: static void -isp_handle_srr_notify(ispsoftc_t *isp, void *inot_raw) +isp_handle_platform_srr(ispsoftc_t *isp, isp_notify_t *notify) { - in_fcentry_24xx_t *inot = inot_raw; + in_fcentry_24xx_t *inot = notify->nt_lreserved; atio_private_data_t *atp; - uint32_t tag = inot->in_rxid; - uint32_t bus = inot->in_vpidx; + uint32_t tag = notify->nt_tagval & 0xffffffff; - if (!IS_24XX(isp)) { - isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_raw); - return; - } - - atp = isp_find_atpd(isp, bus, tag); + atp = isp_find_atpd(isp, notify->nt_channel, tag); if (atp == NULL) { - isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x in SRR Notify", __func__, tag); + isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x in SRR Notify", + __func__, tag); isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); return; } atp->srr_notify_rcvd = 1; memcpy(atp->srr, inot, sizeof (atp->srr)); - isp_prt(isp, ISP_LOGTINFO /* ISP_LOGTDEBUG0 */, "SRR[0x%x] inot->in_rxid flags 0x%x srr_iu=%x reloff 0x%x", inot->in_rxid, inot->in_flags, inot->in_srr_iu, - inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16)); + isp_prt(isp, ISP_LOGTINFO, "SRR[0x%x] flags 0x%x srr_iu %x reloff 0x%x", + inot->in_rxid, inot->in_flags, inot->in_srr_iu, + ((uint32_t)inot->in_srr_reloff_hi << 16) | inot->in_srr_reloff_lo); if (atp->srr_ccb) isp_handle_srr_start(isp, atp); } @@ -2281,127 +2276,6 @@ isp_handle_platform_ctio(ispsoftc_t *isp } } -static void -isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot) -{ - uint16_t nphdl; - uint16_t prli_options = 0; - uint32_t portid; - fcportdb_t *lp; - char *msg = NULL; - uint8_t *ptr = (uint8_t *)inot; - uint64_t wwpn = INI_NONE, wwnn = INI_NONE; - - nphdl = inot->in_nphdl; - if (nphdl != NIL_HANDLE) { - portid = inot->in_portid_hi << 16 | inot->in_portid_lo; - } else { - portid = PORT_ANY; - } - - switch (inot->in_status) { - case IN24XX_ELS_RCVD: - { - char buf[16]; - int chan = ISP_GET_VPIDX(isp, inot->in_vpidx); - - /* - * Note that we're just getting notification that an ELS was received - * (possibly with some associated information sent upstream). This is - * *not* the same as being given the ELS frame to accept or reject. - */ - switch (inot->in_status_subcode) { - case LOGO: - msg = "LOGO"; - wwpn = be64dec(&ptr[IN24XX_PLOGI_WWPN_OFF]); - isp_del_wwn_entry(isp, chan, wwpn, nphdl, portid); - break; - case PRLO: - msg = "PRLO"; - break; - case PLOGI: - msg = "PLOGI"; - wwnn = be64dec(&ptr[IN24XX_PLOGI_WWNN_OFF]); - wwpn = be64dec(&ptr[IN24XX_PLOGI_WWPN_OFF]); - isp_add_wwn_entry(isp, chan, wwpn, wwnn, - nphdl, portid, prli_options); - break; - case PRLI: - msg = "PRLI"; - prli_options = inot->in_prli_options; - if (inot->in_flags & IN24XX_FLAG_PN_NN_VALID) - wwnn = be64dec(&ptr[IN24XX_PRLI_WWNN_OFF]); - wwpn = be64dec(&ptr[IN24XX_PRLI_WWPN_OFF]); - isp_add_wwn_entry(isp, chan, wwpn, wwnn, - nphdl, portid, prli_options); - break; - case PDISC: - msg = "PDISC"; - break; - case ADISC: - msg = "ADISC"; - break; - default: - ISP_SNPRINTF(buf, sizeof (buf), "ELS 0x%x", inot->in_status_subcode); - msg = buf; - break; - } - if (inot->in_flags & IN24XX_FLAG_PUREX_IOCB) { - isp_prt(isp, ISP_LOGERR, "%s Chan %d ELS N-port handle %x PortID 0x%06x marked as needing a PUREX response", msg, chan, nphdl, portid); - break; - } - isp_prt(isp, ISP_LOGTDEBUG0, "%s Chan %d ELS N-port handle %x PortID 0x%06x RX_ID 0x%x OX_ID 0x%x", msg, chan, nphdl, portid, - inot->in_rxid, inot->in_oxid); - isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); - break; - } - - case IN24XX_PORT_LOGOUT: - msg = "PORT LOGOUT"; - if (isp_find_pdb_by_handle(isp, ISP_GET_VPIDX(isp, inot->in_vpidx), nphdl, &lp)) { - isp_del_wwn_entry(isp, ISP_GET_VPIDX(isp, inot->in_vpidx), lp->port_wwn, nphdl, lp->portid); - } - /* FALLTHROUGH */ - case IN24XX_PORT_CHANGED: - if (msg == NULL) - msg = "PORT CHANGED"; - /* FALLTHROUGH */ - case IN24XX_LIP_RESET: - if (msg == NULL) - msg = "LIP RESET"; - isp_prt(isp, ISP_LOGINFO, "Chan %d %s (sub-status 0x%x) for N-port handle 0x%x", ISP_GET_VPIDX(isp, inot->in_vpidx), msg, inot->in_status_subcode, nphdl); - - /* - * All subcodes here are irrelevant. What is relevant - * is that we need to terminate all active commands from - * this initiator (known by N-port handle). - */ - /* XXX IMPLEMENT XXX */ - isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); - break; - - case IN24XX_SRR_RCVD: -#ifdef ISP_TARGET_MODE - isp_handle_srr_notify(isp, inot); - break; -#else - if (msg == NULL) - msg = "SRR RCVD"; - /* FALLTHROUGH */ -#endif - case IN24XX_LINK_RESET: - if (msg == NULL) - msg = "LINK RESET"; - case IN24XX_LINK_FAILED: - if (msg == NULL) - msg = "LINK FAILED"; - default: - isp_prt(isp, ISP_LOGWARN, "Chan %d %s", ISP_GET_VPIDX(isp, inot->in_vpidx), msg); - isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); - break; - } -} - static int isp_handle_platform_target_notify_ack(ispsoftc_t *isp, isp_notify_t *mp, uint32_t rsp) { @@ -4044,6 +3918,9 @@ changed: */ isp_handle_platform_target_notify_ack(isp, notify, 0); break; + case NT_SRR: + isp_handle_platform_srr(isp, notify); + break; default: isp_prt(isp, ISP_LOGALL, "target notify code 0x%x", notify->nt_ncode); isp_handle_platform_target_notify_ack(isp, notify, 0); @@ -4080,12 +3957,6 @@ changed: hp = va_arg(ap, isphdr_t *); va_end(ap); switch (hp->rqs_entry_type) { - default: - isp_prt(isp, ISP_LOGWARN, "%s: unhandled target action 0x%x", __func__, hp->rqs_entry_type); - break; - case RQSTYPE_NOTIFY: - isp_handle_platform_notify_24xx(isp, (in_fcentry_24xx_t *) hp); - break; case RQSTYPE_ATIO: isp_handle_platform_atio7(isp, (at7_entry_t *) hp); break; @@ -4098,6 +3969,10 @@ changed: case RQSTYPE_CTIO: isp_handle_platform_ctio(isp, hp); break; + default: + isp_prt(isp, ISP_LOGWARN, "%s: unhandled target action 0x%x", + __func__, hp->rqs_entry_type); + break; } break; } Modified: head/sys/dev/isp/isp_target.c ============================================================================== --- head/sys/dev/isp/isp_target.c Sun Mar 19 07:34:19 2017 (r315532) +++ head/sys/dev/isp/isp_target.c Sun Mar 19 09:30:03 2017 (r315533) @@ -152,7 +152,7 @@ isp_target_notify(ispsoftc_t *isp, void #define hdrp unp.hp } unp; uint8_t local[QENTRY_LEN]; - int bus, type, len, level, rval = 1; + int type, len, level, rval = 1; type = isp_get_response_type(isp, (isphdr_t *)vptr); unp.vp = vptr; @@ -214,11 +214,9 @@ isp_target_notify(ispsoftc_t *isp, void break; case RQSTYPE_NOTIFY: - bus = 0; if (IS_24XX(isp)) { isp_get_notify_24xx(isp, inot_24xx, (in_fcentry_24xx_t *)local); - inot_24xx = (in_fcentry_24xx_t *) local; - isp_handle_notify_24xx(isp, inot_24xx); + isp_handle_notify_24xx(isp, (in_fcentry_24xx_t *)local); break; } if (ISP_CAP_2KLOGIN(isp)) @@ -1380,51 +1378,152 @@ isp_handle_notify(ispsoftc_t *isp, in_fc } static void -isp_handle_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot_24xx) +isp_handle_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot) { - uint8_t ochan, chan, lochan, hichan; + uint8_t chan; + uint16_t nphdl, prli_options = 0; + uint32_t portid; + fcportdb_t *lp; + char *msg = NULL; + uint8_t *ptr = (uint8_t *)inot; + uint64_t wwpn = INI_NONE, wwnn = INI_NONE; + isp_notify_t notify; + char buf[16]; - /* - * Check to see whether we got a wildcard channel. - * If so, we have to iterate over all channels. - */ - ochan = chan = ISP_GET_VPIDX(isp, inot_24xx->in_vpidx); - if (chan == 0xff) { - lochan = 0; - hichan = isp->isp_nchan; + nphdl = inot->in_nphdl; + if (nphdl != NIL_HANDLE) { + portid = inot->in_portid_hi << 16 | inot->in_portid_lo; } else { - if (chan >= isp->isp_nchan) { - char buf[64]; - ISP_SNPRINTF(buf, sizeof buf, "%s: bad channel %d for status 0x%x", __func__, chan, inot_24xx->in_status); - isp_print_bytes(isp, buf, QENTRY_LEN, inot_24xx); - isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx); - return; + portid = PORT_ANY; + } + + chan = ISP_GET_VPIDX(isp, inot->in_vpidx); + if (chan >= isp->isp_nchan && + inot->in_status != IN24XX_LIP_RESET && + inot->in_status != IN24XX_LINK_RESET && + inot->in_status != IN24XX_LINK_FAILED) { + isp_prt(isp, ISP_LOGWARN, "%s: Received INOT with status %x on VP %x", + __func__, inot->in_status, chan); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); + return; + } + + switch (inot->in_status) { + case IN24XX_ELS_RCVD: + { + /* + * Note that we're just getting notification that an ELS was + * received (possibly with some associated information sent + * upstream). This is *not* the same as being given the ELS + * frame to accept or reject. + */ + switch (inot->in_status_subcode) { + case LOGO: + msg = "LOGO"; + wwpn = be64dec(&ptr[IN24XX_PLOGI_WWPN_OFF]); + isp_del_wwn_entry(isp, chan, wwpn, nphdl, portid); + break; + case PRLO: + msg = "PRLO"; + break; + case PLOGI: + msg = "PLOGI"; + wwnn = be64dec(&ptr[IN24XX_PLOGI_WWNN_OFF]); + wwpn = be64dec(&ptr[IN24XX_PLOGI_WWPN_OFF]); + isp_add_wwn_entry(isp, chan, wwpn, wwnn, + nphdl, portid, prli_options); + break; + case PRLI: + msg = "PRLI"; + prli_options = inot->in_prli_options; + if (inot->in_flags & IN24XX_FLAG_PN_NN_VALID) + wwnn = be64dec(&ptr[IN24XX_PRLI_WWNN_OFF]); + wwpn = be64dec(&ptr[IN24XX_PRLI_WWPN_OFF]); + isp_add_wwn_entry(isp, chan, wwpn, wwnn, + nphdl, portid, prli_options); + break; + case PDISC: + msg = "PDISC"; + break; + case ADISC: + msg = "ADISC"; + break; + default: + ISP_SNPRINTF(buf, sizeof (buf), "ELS 0x%x", + inot->in_status_subcode); + msg = buf; + break; + } + if (inot->in_flags & IN24XX_FLAG_PUREX_IOCB) { + isp_prt(isp, ISP_LOGERR, "%s Chan %d ELS N-port handle %x" + " PortID 0x%06x marked as needing a PUREX response", + msg, chan, nphdl, portid); + break; } - lochan = chan; - hichan = chan + 1; + isp_prt(isp, ISP_LOGTDEBUG0, "%s Chan %d ELS N-port handle %x" + " PortID 0x%06x RX_ID 0x%x OX_ID 0x%x", msg, chan, nphdl, + portid, inot->in_rxid, inot->in_oxid); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); + break; } - isp_prt(isp, ISP_LOGTDEBUG1, "%s: Immediate Notify Channels %d..%d status=0x%x seqid=0x%x", __func__, lochan, hichan-1, inot_24xx->in_status, inot_24xx->in_rxid); - switch (inot_24xx->in_status) { - case IN24XX_LIP_RESET: - case IN24XX_LINK_RESET: + case IN24XX_PORT_LOGOUT: + msg = "PORT LOGOUT"; + if (isp_find_pdb_by_handle(isp, chan, nphdl, &lp)) + isp_del_wwn_entry(isp, chan, lp->port_wwn, nphdl, lp->portid); + /* FALLTHROUGH */ case IN24XX_PORT_CHANGED: - case IN24XX_LINK_FAILED: + if (msg == NULL) + msg = "PORT CHANGED"; + /* FALLTHROUGH */ + case IN24XX_LIP_RESET: + if (msg == NULL) + msg = "LIP RESET"; + isp_prt(isp, ISP_LOGINFO, "Chan %d %s (sub-status 0x%x) for " + "N-port handle 0x%x", + chan, msg, inot->in_status_subcode, nphdl); + + /* + * All subcodes here are irrelevant. What is relevant + * is that we need to terminate all active commands from + * this initiator (known by N-port handle). + */ + /* XXX IMPLEMENT XXX */ + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); + break; + case IN24XX_SRR_RCVD: - case IN24XX_ELS_RCVD: - for (chan = lochan; chan < hichan; chan++) { - if (FCPARAM(isp, chan)->role == ISP_ROLE_NONE) - continue; - inot_24xx->in_reserved = 0; /* clear this for later usage */ - inot_24xx->in_vpidx = chan; - isp_async(isp, ISPASYNC_TARGET_ACTION, inot_24xx); - } - inot_24xx->in_vpidx = ochan; +#ifdef ISP_TARGET_MODE + ISP_MEMZERO(¬ify, sizeof (isp_notify_t)); + notify.nt_hba = isp; + notify.nt_wwn = INI_ANY; + notify.nt_tgt = FCPARAM(isp, chan)->isp_wwpn; + notify.nt_nphdl = nphdl; + notify.nt_sid = portid; + notify.nt_did = PORT_ANY; + notify.nt_lun = LUN_ANY; + notify.nt_tagval = inot->in_rxid; + notify.nt_tagval |= ((uint64_t)inot->in_srr_rxid << 32); + notify.nt_need_ack = 1; + notify.nt_channel = chan; + notify.nt_lreserved = inot; + notify.nt_ncode = NT_SRR; + isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); break; +#else + if (msg == NULL) + msg = "SRR RCVD"; + /* FALLTHROUGH */ +#endif + case IN24XX_LINK_RESET: + if (msg == NULL) + msg = "LINK RESET"; + case IN24XX_LINK_FAILED: + if (msg == NULL) + msg = "LINK FAILED"; default: - isp_prt(isp, ISP_LOGINFO, "%s: unhandled status (0x%x) for chan %d", - __func__, inot_24xx->in_status, chan); - isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx); + isp_prt(isp, ISP_LOGWARN, "Chan %d %s", chan, msg); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); break; } } Modified: head/sys/dev/isp/isp_target.h ============================================================================== --- head/sys/dev/isp/isp_target.h Sun Mar 19 07:34:19 2017 (r315532) +++ head/sys/dev/isp/isp_target.h Sun Mar 19 09:30:03 2017 (r315533) @@ -53,7 +53,8 @@ typedef enum { NT_CHANGED, NT_HBA_RESET, NT_QUERY_TASK_SET, - NT_QUERY_ASYNC_EVENT + NT_QUERY_ASYNC_EVENT, + NT_SRR /* Sequence Retransmission Request */ } isp_ncode_t; typedef struct isp_notify { From owner-svn-src-head@freebsd.org Sun Mar 19 09:36:45 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 45B28D08D21; Sun, 19 Mar 2017 09:36:45 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 159271355; Sun, 19 Mar 2017 09:36:45 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2J9ai1T044434; Sun, 19 Mar 2017 09:36:44 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2J9ai9O044433; Sun, 19 Mar 2017 09:36:44 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703190936.v2J9ai9O044433@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 19 Mar 2017 09:36:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315534 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 09:36:45 -0000 Author: mav Date: Sun Mar 19 09:36:43 2017 New Revision: 315534 URL: https://svnweb.freebsd.org/changeset/base/315534 Log: Remove some dead stuff. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_target.h Modified: head/sys/dev/isp/isp_target.h ============================================================================== --- head/sys/dev/isp/isp_target.h Sun Mar 19 09:30:03 2017 (r315533) +++ head/sys/dev/isp/isp_target.h Sun Mar 19 09:36:43 2017 (r315534) @@ -59,30 +59,19 @@ typedef enum { typedef struct isp_notify { void * nt_hba; /* HBA tag */ - void * nt_tmd; - void * nt_lreserved; - void * nt_hreserved; + void * nt_lreserved; /* original IOCB pointer */ uint64_t nt_wwn; /* source (wwn) */ uint64_t nt_tgt; /* destination (wwn) */ uint64_t nt_tagval; /* tag value */ lun_id_t nt_lun; /* logical unit */ - uint32_t - nt_sid : 24; /* source port id */ - uint32_t - nt_failed : 1, /* notify operation failed */ - nt_need_ack : 1, /* this notify needs an ACK */ - nt_did : 24; /* destination port id */ + uint32_t nt_sid : 24; /* source port id */ + uint32_t nt_did : 24; /* destination port id */ uint16_t nt_nphdl; /* n-port handle */ uint8_t nt_channel; /* channel id */ + uint8_t nt_need_ack; /* this notify needs an ACK */ isp_ncode_t nt_ncode; /* action */ } isp_notify_t; -#define MATCH_TMD(tmd, iid, lun, tag) \ - ( \ - (tmd) && \ - (iid == INI_ANY || iid == tmd->cd_iid) && \ - (lun == LUN_ANY || lun == tmd->cd_lun) && \ - (tag == TAG_ANY || tag == tmd->cd_tagval) \ - ) + /* * Debug macros */ From owner-svn-src-head@freebsd.org Sun Mar 19 10:28:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 03E6AD12011; Sun, 19 Mar 2017 10:28:06 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AF65BD8E; Sun, 19 Mar 2017 10:28:05 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JAS4dT064740; Sun, 19 Mar 2017 10:28:04 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JAS4Oh064738; Sun, 19 Mar 2017 10:28:04 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703191028.v2JAS4Oh064738@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 19 Mar 2017 10:28:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315536 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 10:28:06 -0000 Author: mav Date: Sun Mar 19 10:28:04 2017 New Revision: 315536 URL: https://svnweb.freebsd.org/changeset/base/315536 Log: Move <= 23xx PDB workaround to generic code. It is chip-specific and has nothing to do with platform. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_target.c Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Sun Mar 19 10:26:00 2017 (r315535) +++ head/sys/dev/isp/isp_freebsd.c Sun Mar 19 10:28:04 2017 (r315536) @@ -1743,22 +1743,15 @@ isp_handle_platform_atio2(ispsoftc_t *is if (IS_2100(isp)) atiop->init_id = nphdl; else { - if ((isp_find_pdb_by_handle(isp, 0, nphdl, &lp) == 0 || - lp->state == FC_PORTDB_STATE_ZOMBIE)) { - uint64_t wwpn = - (((uint64_t) aep->at_wwpn[0]) << 48) | - (((uint64_t) aep->at_wwpn[1]) << 32) | - (((uint64_t) aep->at_wwpn[2]) << 16) | - (((uint64_t) aep->at_wwpn[3]) << 0); - isp_add_wwn_entry(isp, 0, wwpn, INI_NONE, - nphdl, PORT_ANY, 0); - if (fcp->isp_loopstate > LOOP_LTEST_DONE) - fcp->isp_loopstate = LOOP_LTEST_DONE; - isp_async(isp, ISPASYNC_CHANGE_NOTIFY, 0, - ISPASYNC_CHANGE_PDB, nphdl, 0x06, 0xff); - isp_find_pdb_by_handle(isp, 0, nphdl, &lp); + if (isp_find_pdb_by_handle(isp, 0, nphdl, &lp)) { + atiop->init_id = FC_PORTDB_TGT(isp, 0, lp); + } else { + isp_prt(isp, ISP_LOGTINFO, "%s: port %x isn't in PDB", + __func__, nphdl); + isp_dump_portdb(isp, 0); + isp_endcmd(isp, aep, NIL_HANDLE, 0, ECMD_TERMINATE, 0); + return; } - atiop->init_id = FC_PORTDB_TGT(isp, 0, lp); } atiop->cdb_len = ATIO2_CDBLEN; ISP_MEMCPY(atiop->cdb_io.cdb_bytes, aep->at_cdb, ATIO2_CDBLEN); Modified: head/sys/dev/isp/isp_target.c ============================================================================== --- head/sys/dev/isp/isp_target.c Sun Mar 19 10:26:00 2017 (r315535) +++ head/sys/dev/isp/isp_target.c Sun Mar 19 10:28:04 2017 (r315536) @@ -919,6 +919,7 @@ isp_handle_abts(ispsoftc_t *isp, abts_t static void isp_handle_atio2(ispsoftc_t *isp, at2_entry_t *aep) { + fcportdb_t *lp; int lun, iid; if (ISP_CAP_SCCFW(isp)) { @@ -975,9 +976,26 @@ isp_handle_atio2(ispsoftc_t *isp, at2_en break; case AT_CDB: /* Got a CDB */ - /* - * Punt to platform specific layer. - */ + + /* Make sure we have this inititor in port database. */ + if (!IS_2100(isp) && + (isp_find_pdb_by_handle(isp, 0, iid, &lp) == 0 || + lp->state == FC_PORTDB_STATE_ZOMBIE)) { + fcparam *fcp = FCPARAM(isp, 0); + uint64_t wwpn = + (((uint64_t) aep->at_wwpn[0]) << 48) | + (((uint64_t) aep->at_wwpn[1]) << 32) | + (((uint64_t) aep->at_wwpn[2]) << 16) | + (((uint64_t) aep->at_wwpn[3]) << 0); + isp_add_wwn_entry(isp, 0, wwpn, INI_NONE, + iid, PORT_ANY, 0); + if (fcp->isp_loopstate > LOOP_LTEST_DONE) + fcp->isp_loopstate = LOOP_LTEST_DONE; + isp_async(isp, ISPASYNC_CHANGE_NOTIFY, 0, + ISPASYNC_CHANGE_PDB, iid, 0x06, 0xff); + } + + /* Punt to platform specific layer. */ isp_async(isp, ISPASYNC_TARGET_ACTION, aep); break; From owner-svn-src-head@freebsd.org Sun Mar 19 13:46:12 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CD8ABD12D3C; Sun, 19 Mar 2017 13:46:12 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A5970F2; Sun, 19 Mar 2017 13:46:12 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JDkBsE047251; Sun, 19 Mar 2017 13:46:11 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JDkBRt047247; Sun, 19 Mar 2017 13:46:11 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703191346.v2JDkBRt047247@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 19 Mar 2017 13:46:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315545 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 13:46:12 -0000 Author: mav Date: Sun Mar 19 13:46:11 2017 New Revision: 315545 URL: https://svnweb.freebsd.org/changeset/base/315545 Log: Remove hackish code delaying ATIOs to unknown virtual port. Since we support RQSTYPE_RPT_ID_ACQ, that functionality is only useful in loop mode, which probably doesn't worth having this hack in 2017. MFC after: 2 weeks Modified: head/sys/dev/isp/isp.c head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_target.c head/sys/dev/isp/ispvar.h Modified: head/sys/dev/isp/isp.c ============================================================================== --- head/sys/dev/isp/isp.c Sun Mar 19 10:41:36 2017 (r315544) +++ head/sys/dev/isp/isp.c Sun Mar 19 13:46:11 2017 (r315545) @@ -1323,7 +1323,6 @@ isp_init(ispsoftc_t *isp) } else { isp_scsi_init(isp); } - GET_NANOTIME(&isp->isp_init_time); } static void @@ -2368,7 +2367,6 @@ isp_fc_enable_vp(ispsoftc_t *isp, int ch __func__, chan, vp.vp_mod_hdr.rqs_flags, vp.vp_mod_status); return (EIO); } - GET_NANOTIME(&isp->isp_init_time); return (0); } @@ -5655,7 +5653,6 @@ isp_parse_async_fc(ispsoftc_t *isp, uint * These are broadcast events that have to be sent across * all active channels. */ - GET_NANOTIME(&isp->isp_init_time); for (chan = 0; chan < isp->isp_nchan; chan++) { fcp = FCPARAM(isp, chan); int topo = fcp->isp_topo; @@ -5710,7 +5707,6 @@ isp_parse_async_fc(ispsoftc_t *isp, uint * This is a broadcast event that has to be sent across * all active channels. */ - GET_NANOTIME(&isp->isp_init_time); for (chan = 0; chan < isp->isp_nchan; chan++) { fcp = FCPARAM(isp, chan); if (fcp->role == ISP_ROLE_NONE) @@ -5750,7 +5746,6 @@ isp_parse_async_fc(ispsoftc_t *isp, uint * This is a broadcast event that has to be sent across * all active channels. */ - GET_NANOTIME(&isp->isp_init_time); for (chan = 0; chan < isp->isp_nchan; chan++) { fcp = FCPARAM(isp, chan); if (fcp->role == ISP_ROLE_NONE) @@ -5942,7 +5937,6 @@ isp_handle_other_response(ispsoftc_t *is portid = (uint32_t)rid.ridacq_vp_port_hi << 16 | rid.ridacq_vp_port_lo; if (rid.ridacq_format == 0) { - GET_NANOTIME(&isp->isp_init_time); for (chan = 0; chan < isp->isp_nchan; chan++) { fcparam *fcp = FCPARAM(isp, chan); if (fcp->role == ISP_ROLE_NONE) Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Sun Mar 19 10:41:36 2017 (r315544) +++ head/sys/dev/isp/isp_freebsd.c Sun Mar 19 13:46:11 2017 (r315545) @@ -1817,44 +1817,17 @@ isp_handle_platform_atio7(ispsoftc_t *is sid = (aep->at_hdr.s_id[0] << 16) | (aep->at_hdr.s_id[1] << 8) | aep->at_hdr.s_id[2]; lun = CAM_EXTLUN_BYTE_SWIZZLE(be64dec(aep->at_cmnd.fcp_cmnd_lun)); - /* - * Find the N-port handle, and Virtual Port Index for this command. - * - * If we can't, we're somewhat in trouble because we can't actually respond w/o that information. - * We also, as a matter of course, need to know the WWN of the initiator too. - */ if (ISP_CAP_MULTI_ID(isp) && isp->isp_nchan > 1) { - /* - * Find the right channel based upon D_ID - */ + /* Channel has to be derived from D_ID */ isp_find_chan_by_did(isp, did, &chan); - if (chan == ISP_NOCHAN) { - NANOTIME_T now; - - /* - * If we don't recognizer our own D_DID, terminate the exchange, unless we're within 2 seconds of startup - * It's a bit tricky here as we need to stash this command *somewhere*. - */ - GET_NANOTIME(&now); - if (NANOTIME_SUB(&now, &isp->isp_init_time) > 2000000000ULL) { - isp_prt(isp, ISP_LOGWARN, "%s: [RX_ID 0x%x] D_ID %x not found on any channel- dropping", __func__, aep->at_rxid, did); - isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, ECMD_TERMINATE, 0); - return; - } - tptr = get_lun_statep(isp, 0, 0); - if (tptr == NULL) { - tptr = get_lun_statep(isp, 0, CAM_LUN_WILDCARD); - if (tptr == NULL) { - isp_prt(isp, ISP_LOGWARN, "%s: [RX_ID 0x%x] D_ID %x not found on any channel and no tptr- dropping", __func__, aep->at_rxid, did); - isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, ECMD_TERMINATE, 0); - return; - } - } - isp_prt(isp, ISP_LOGWARN, "%s: [RX_ID 0x%x] D_ID %x not found on any channel- deferring", __func__, aep->at_rxid, did); - goto noresrc; + isp_prt(isp, ISP_LOGWARN, + "%s: [RX_ID 0x%x] D_ID %x not found on any channel", + __func__, aep->at_rxid, did); + isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, + ECMD_TERMINATE, 0); + return; } - isp_prt(isp, ISP_LOGTDEBUG0, "%s: [RX_ID 0x%x] D_ID 0x%06x found on Chan %d for S_ID 0x%06x", __func__, aep->at_rxid, did, chan, sid); } else { chan = 0; } Modified: head/sys/dev/isp/isp_target.c ============================================================================== --- head/sys/dev/isp/isp_target.c Sun Mar 19 10:41:36 2017 (r315544) +++ head/sys/dev/isp/isp_target.c Sun Mar 19 13:46:11 2017 (r315545) @@ -688,8 +688,11 @@ isp_got_tmf_24xx(ispsoftc_t *isp, at7_en /* Channel has to be derived from D_ID */ isp_find_chan_by_did(isp, did, &chan); if (chan == ISP_NOCHAN) { - isp_prt(isp, ISP_LOGWARN, "%s: D_ID 0x%x not found on any channel", __func__, did); - isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, ECMD_TERMINATE, 0); + isp_prt(isp, ISP_LOGWARN, + "%s: D_ID 0x%x not found on any channel", + __func__, did); + isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, + ECMD_TERMINATE, 0); return; } } else { @@ -891,17 +894,23 @@ isp_handle_abts(ispsoftc_t *isp, abts_t nt->nt_did = did; nt->nt_nphdl = abts->abts_nphdl; nt->nt_sid = sid; - isp_find_chan_by_did(isp, did, &chan); - if (chan == ISP_NOCHAN) { - nt->nt_tgt = TGT_ANY; - } else { - nt->nt_tgt = FCPARAM(isp, chan)->isp_wwpn; - if (isp_find_pdb_by_handle(isp, chan, abts->abts_nphdl, &lp)) { - nt->nt_wwn = lp->port_wwn; - } else { - nt->nt_wwn = INI_ANY; + if (ISP_CAP_MULTI_ID(isp) && isp->isp_nchan > 1) { + /* Channel has to be derived from D_ID */ + isp_find_chan_by_did(isp, did, &chan); + if (chan == ISP_NOCHAN) { + isp_prt(isp, ISP_LOGWARN, + "%s: D_ID 0x%x not found on any channel", + __func__, did); + isp_acknak_abts(isp, abts, ENXIO); + return; } - } + } else + chan = 0; + nt->nt_tgt = FCPARAM(isp, chan)->isp_wwpn; + if (isp_find_pdb_by_handle(isp, chan, abts->abts_nphdl, &lp)) + nt->nt_wwn = lp->port_wwn; + else + nt->nt_wwn = INI_ANY; nt->nt_lun = LUN_ANY; nt->nt_need_ack = 1; nt->nt_tagval = abts->abts_rxid_task; Modified: head/sys/dev/isp/ispvar.h ============================================================================== --- head/sys/dev/isp/ispvar.h Sun Mar 19 10:41:36 2017 (r315544) +++ head/sys/dev/isp/ispvar.h Sun Mar 19 13:46:11 2017 (r315545) @@ -544,7 +544,6 @@ struct ispsoftc { uint32_t isp_rqstoutrp; /* register for REQOUTP */ uint32_t isp_respinrp; /* register for RESINP */ uint32_t isp_respoutrp; /* register for RESOUTP */ - NANOTIME_T isp_init_time; /* time were last initialized */ /* * Volatile state From owner-svn-src-head@freebsd.org Sun Mar 19 14:22:50 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B37AAD13A71; Sun, 19 Mar 2017 14:22:50 +0000 (UTC) (envelope-from tijl@freebsd.org) Received: from mailrelay108.isp.belgacom.be (mailrelay108.isp.belgacom.be [195.238.20.135]) (using TLSv1.2 with cipher RC4-SHA (128/128 bits)) (Client CN "relay.skynet.be", Issuer "GlobalSign Organization Validation CA - SHA256 - G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8DDBD1F56; Sun, 19 Mar 2017 14:22:48 +0000 (UTC) (envelope-from tijl@freebsd.org) X-Belgacom-Dynamic: yes X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CCDQD0ks5Y/0nD8VFdHQEFAQsBg1FBE?= =?us-ascii?q?BCBCo5kkGYpAZUZgg4mhXwCgwBBFwECAQEBAQEBAWsohRYBBTocIxALDgoJJQ8?= =?us-ascii?q?qHgYTigQKtH6KPQEBAQEBAQEBAQEBAQEBAQEdBYs9ijkFnABNhnmLPXaQQpNYI?= =?us-ascii?q?QE1gQQ5LAiHGT81igoBAQE?= X-IPAS-Result: =?us-ascii?q?A2CCDQD0ks5Y/0nD8VFdHQEFAQsBg1FBEBCBCo5kkGYpAZU?= =?us-ascii?q?Zgg4mhXwCgwBBFwECAQEBAQEBAWsohRYBBTocIxALDgoJJQ8qHgYTigQKtH6KP?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEdBYs9ijkFnABNhnmLPXaQQpNYIQE1gQQ5LAiHGT8?= =?us-ascii?q?1igoBAQE?= Received: from 73.195-241-81.adsl-dyn.isp.belgacom.be (HELO kalimero.tijl.coosemans.org) ([81.241.195.73]) by relay.skynet.be with ESMTP; 19 Mar 2017 15:21:36 +0100 Received: from kalimero.tijl.coosemans.org (kalimero.tijl.coosemans.org [127.0.0.1]) by kalimero.tijl.coosemans.org (8.15.2/8.15.2) with ESMTP id v2JELXGk002430; Sun, 19 Mar 2017 15:21:35 +0100 (CET) (envelope-from tijl@FreeBSD.org) Date: Sun, 19 Mar 2017 15:21:33 +0100 From: Tijl Coosemans To: Bruce Evans Cc: Ed Maste , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315522 - in head: contrib/binutils/ld/emulparams sys/conf Message-ID: <20170319152133.0921abd9@kalimero.tijl.coosemans.org> In-Reply-To: <20170319123107.W994@besplex.bde.org> References: <201703190022.v2J0MDhq015941@repo.freebsd.org> <20170319123107.W994@besplex.bde.org> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 14:22:50 -0000 On Sun, 19 Mar 2017 13:04:50 +1100 (EST) Bruce Evans wrote: > On Sun, 19 Mar 2017, Ed Maste wrote: >> Log: >> use INT3 instead of NOP for x86 binary padding >> >> We should never end up executing the inter-function padding, so we >> are better off faulting than silently carrying on to whatever function >> happens to be next. >> >> Note that LLD will soon do this by default (although it currently pads >> with zeros). >> >> Reviewed by: dim, kib >> MFC after: 1 month >> Sponsored by: The FreeBSD Foundation >> Differential Revision: https://reviews.freebsd.org/D10047 > > Is this a pessimization? Instruction prefetch near the end of almost > every function now fetches INT3 instead of NOP. Both have to be > decoded to decoded whether to speculatively execute them. INT3 is > unlikely to be speculatively executed, but it takes extra work to > decide not to do so. I seem to vaguely remember that ud2 should be used to stop speculative execution (and the instruction fetching and possible cache invalidation because of it). From owner-svn-src-head@freebsd.org Sun Mar 19 14:42:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7AB1FD1210B; Sun, 19 Mar 2017 14:42:17 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4A424F24; Sun, 19 Mar 2017 14:42:17 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JEgGwZ073458; Sun, 19 Mar 2017 14:42:16 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JEgGTx073457; Sun, 19 Mar 2017 14:42:16 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703191442.v2JEgGTx073457@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sun, 19 Mar 2017 14:42:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315552 - head/sys/vm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 14:42:17 -0000 Author: kib Date: Sun Mar 19 14:42:16 2017 New Revision: 315552 URL: https://svnweb.freebsd.org/changeset/base/315552 Log: Fix off-by-one in the vm_fault_populate() code. When re-calculating the last inclusive page index after the pager call, -1 was erronously ommitted. If the pager extended the run (unlikely), the result would be insertion of the valid page mapping outside the current map entry range. Found by: alc Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/vm/vm_fault.c Modified: head/sys/vm/vm_fault.c ============================================================================== --- head/sys/vm/vm_fault.c Sun Mar 19 14:40:01 2017 (r315551) +++ head/sys/vm/vm_fault.c Sun Mar 19 14:42:16 2017 (r315552) @@ -409,7 +409,7 @@ vm_fault_populate(struct faultstate *fs, vm_fault_populate_cleanup(fs->first_object, pager_first, map_first - 1); map_last = MIN(OFF_TO_IDX(fs->entry->end - fs->entry->start + - fs->entry->offset), pager_last); + fs->entry->offset) - 1, pager_last); if (map_last < pager_last) vm_fault_populate_cleanup(fs->first_object, map_last + 1, pager_last); From owner-svn-src-head@freebsd.org Sun Mar 19 15:46:35 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8BB1ED13735; Sun, 19 Mar 2017 15:46:35 +0000 (UTC) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: from pdx.rh.CN85.dnsmgr.net (br1.CN84in.dnsmgr.net [69.59.192.140]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 520261696; Sun, 19 Mar 2017 15:46:34 +0000 (UTC) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: from pdx.rh.CN85.dnsmgr.net (localhost [127.0.0.1]) by pdx.rh.CN85.dnsmgr.net (8.13.3/8.13.3) with ESMTP id v2JFkQ13060300; Sun, 19 Mar 2017 08:46:26 -0700 (PDT) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: (from freebsd@localhost) by pdx.rh.CN85.dnsmgr.net (8.13.3/8.13.3/Submit) id v2JFkQOh060299; Sun, 19 Mar 2017 08:46:26 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201703191546.v2JFkQOh060299@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r315522 - in head: contrib/binutils/ld/emulparams sys/conf In-Reply-To: <20170319123107.W994@besplex.bde.org> To: Bruce Evans Date: Sun, 19 Mar 2017 08:46:26 -0700 (PDT) CC: Ed Maste , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Reply-To: rgrimes@freebsd.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 15:46:35 -0000 > On Sun, 19 Mar 2017, Ed Maste wrote: > > > Log: > > use INT3 instead of NOP for x86 binary padding > > > > We should never end up executing the inter-function padding, so we > > are better off faulting than silently carrying on to whatever function > > happens to be next. > > > > Note that LLD will soon do this by default (although it currently pads > > with zeros). > > > > Reviewed by: dim, kib > > MFC after: 1 month > > Sponsored by: The FreeBSD Foundation > > Differential Revision: https://reviews.freebsd.org/D10047 > > Is this a pessimization? Instruction prefetch near the end of almost > every function now fetches INT3 instead of NOP. Both have to be > decoded to decoded whether to speculatively execute them. INT3 is > unlikely to be speculatively executed, but it takes extra work to > decide not to do so. > > Functions normally end with a RET or unconditional JMP, and then branch > prediction usually prevents speculative execution beyond the end, so the > pessimization must be small. > > Intra-function padding that is executed now uses "fat NOP" instructions > like null LEA's since this is faster to execute than a long string of > NOPs. This is less readable than NOPs or even INT3's. Of course, INT3 > can't be used for executed padding. I think it is also used for intra- > function padding that is not executed. This is just harder to read > unless it is needed to avoid the possible pessimization in this commit. > The intra-function code with nops might look like: > > jmp over > nop > # 7 nops altogether > nop > over: > > or > > jmp over > nullpad7 # single 7 byte null padding instruction > over: > > and it is likely to be CPU-dependent whether 7 possibly-speculatively > executed nops take more or less resources than 1 possibly-speculatively > executed fancy instruction. I would expect the fancy instructions to > take more resources each. > > Fancy LEAs don't seem such a good choice for executed padding either. > amd64 uses lots of REX prefixes instead of fancy instructions, since > these are designed to have low overheads. They certainly aren't > executed separately. On i386, the same technique with lots of older > prefixes is not used much, probably because all prefixes have high > overheads on old i386's. They can be as slow as NOPs although they > aren't executed separately. As an intermediate ground what about using N of something really easy for the decoder/branch predictor to grovel over, then a single int3 at the end of the block so if we do fall into this we end up getting the desired effect? nop's followed by an > Bruce -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Sun Mar 19 15:49:53 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 00730D13836; Sun, 19 Mar 2017 15:49:53 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C188F1A34; Sun, 19 Mar 2017 15:49:52 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JFnpDC098438; Sun, 19 Mar 2017 15:49:51 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JFnpHc098437; Sun, 19 Mar 2017 15:49:51 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <201703191549.v2JFnpHc098437@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sun, 19 Mar 2017 15:49:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315560 - head/sbin/reboot X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 15:49:53 -0000 Author: trasz Date: Sun Mar 19 15:49:51 2017 New Revision: 315560 URL: https://svnweb.freebsd.org/changeset/base/315560 Log: Document how to use reroot with NFS. MFC after: 2 weeks Sponsored by: DARPA, AFRL Modified: head/sbin/reboot/reboot.8 Modified: head/sbin/reboot/reboot.8 ============================================================================== --- head/sbin/reboot/reboot.8 Sun Mar 19 15:48:41 2017 (r315559) +++ head/sbin/reboot/reboot.8 Sun Mar 19 15:49:51 2017 (r315560) @@ -28,7 +28,7 @@ .\" @(#)reboot.8 8.1 (Berkeley) 6/9/93 .\" $FreeBSD$ .\" -.Dd September 10, 2016 +.Dd March 19, 2017 .Dt REBOOT 8 .Os .Sh NAME @@ -152,6 +152,13 @@ Replace current root filesystem with UFS kenv vfs.root.mountfrom=ufs:/dev/ada0s1a reboot -r .Ed +.Pp +This mechanism can also be used with NFS, with a caveat that +it only works with NFSv4, and requires a numeric IPv4 address: +.Bd -literal -offset indent +kenv vfs.root.mountfrom=nfs:192.168.1.1:/share/name +reboot -r +.Ed .Sh SEE ALSO .Xr kenv 1 , .Xr getutxent 3 , From owner-svn-src-head@freebsd.org Sun Mar 19 15:53:18 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D3230D13C07; Sun, 19 Mar 2017 15:53:18 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A003A1F6C; Sun, 19 Mar 2017 15:53:18 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JFrHke002471; Sun, 19 Mar 2017 15:53:17 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JFrHBr002470; Sun, 19 Mar 2017 15:53:17 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <201703191553.v2JFrHBr002470@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sun, 19 Mar 2017 15:53:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315561 - head/share/man/man4 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 15:53:18 -0000 Author: trasz Date: Sun Mar 19 15:53:17 2017 New Revision: 315561 URL: https://svnweb.freebsd.org/changeset/base/315561 Log: Bring back the "i". The point is to make it easy to find via "apropos iscsi", along with all the other relevant components. MFC after: 2 weeks Modified: head/share/man/man4/ctl.4 Modified: head/share/man/man4/ctl.4 ============================================================================== --- head/share/man/man4/ctl.4 Sun Mar 19 15:49:51 2017 (r315560) +++ head/share/man/man4/ctl.4 Sun Mar 19 15:53:17 2017 (r315561) @@ -24,12 +24,12 @@ .\" SUCH DAMAGE. .\" .\" $FreeBSD$ -.Dd March 11, 2017 +.Dd March 19, 2017 .Dt CTL 4 .Os .Sh NAME .Nm ctl -.Nd CAM Target Layer / SCSI target subsystem +.Nd CAM Target Layer / iSCSI target subsystem .Sh SYNOPSIS To compile this driver into the kernel, place the following line in your From owner-svn-src-head@freebsd.org Sun Mar 19 16:17:44 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 022B5D13773; Sun, 19 Mar 2017 16:17:44 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C5C331634; Sun, 19 Mar 2017 16:17:43 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JGHgg0011261; Sun, 19 Mar 2017 16:17:42 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JGHgAO011260; Sun, 19 Mar 2017 16:17:42 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <201703191617.v2JGHgAO011260@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sun, 19 Mar 2017 16:17:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315564 - head/usr.sbin/fstyp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 16:17:44 -0000 Author: trasz Date: Sun Mar 19 16:17:42 2017 New Revision: 315564 URL: https://svnweb.freebsd.org/changeset/base/315564 Log: Improve formatting. MFC after: 2 weeks Modified: head/usr.sbin/fstyp/fstyp.8 Modified: head/usr.sbin/fstyp/fstyp.8 ============================================================================== --- head/usr.sbin/fstyp/fstyp.8 Sun Mar 19 16:01:44 2017 (r315563) +++ head/usr.sbin/fstyp/fstyp.8 Sun Mar 19 16:17:42 2017 (r315564) @@ -121,10 +121,11 @@ The command appeared in .Fx 10.2 . .Sh AUTHORS +.An -nosplit The .Nm utility was developed by .An Edward Tomasz Napierala Aq Mt trasz@FreeBSD.org under sponsorship from the FreeBSD Foundation. ZFS and GELI support was added by -.An Allan Jude Aq Mt allanjude@FreeBSD.org +.An Allan Jude Aq Mt allanjude@FreeBSD.org . From owner-svn-src-head@freebsd.org Sun Mar 19 17:20:01 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3B6A7D0F79D; Sun, 19 Mar 2017 17:20:01 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EDDD11358; Sun, 19 Mar 2017 17:20:00 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JHK01W036365; Sun, 19 Mar 2017 17:20:00 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JHJxBF036347; Sun, 19 Mar 2017 17:19:59 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703191719.v2JHJxBF036347@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 19 Mar 2017 17:19:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315565 - in head: . gnu/usr.bin gnu/usr.bin/diff usr.bin X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 17:20:01 -0000 Author: bapt Date: Sun Mar 19 17:19:59 2017 New Revision: 315565 URL: https://svnweb.freebsd.org/changeset/base/315565 Log: Temporary readd GNU diff etcupdate requires --change-group-format it is not easy to implement in bsd diff so for now readd GNU diff Added: head/gnu/usr.bin/diff/ - copied from r315050, head/gnu/usr.bin/diff/ Modified: head/Makefile.inc1 head/ObsoleteFiles.inc head/UPDATING head/gnu/usr.bin/Makefile head/usr.bin/Makefile Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Sun Mar 19 16:17:42 2017 (r315564) +++ head/Makefile.inc1 Sun Mar 19 17:19:59 2017 (r315565) @@ -1936,7 +1936,7 @@ native-xtools: .PHONY ${_clang} \ sbin/md5 \ sbin/sysctl \ - usr.bin/diff \ + gnu/usr.bin/diff \ usr.bin/awk \ usr.bin/basename \ usr.bin/bmake \ Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Sun Mar 19 16:17:42 2017 (r315564) +++ head/ObsoleteFiles.inc Sun Mar 19 17:19:59 2017 (r315565) @@ -49,8 +49,6 @@ OLD_FILES+=sbin/ipftest OLD_FILES+=sbin/ipresend # 20170311: Remove WITHOUT_MANDOCDB option OLD_FILES+=usr/share/man/man1/makewhatis.1.gz -# 20170311: remove GNU diff -OLD_FILES+=usr/share/man/man7/diff.7.gz # 20170308: rename some tests OLD_FILES+=usr/tests/bin/pwait/pwait OLD_FILES+=usr/tests/usr.bin/timeout/timeout Modified: head/UPDATING ============================================================================== --- head/UPDATING Sun Mar 19 16:17:42 2017 (r315564) +++ head/UPDATING Sun Mar 19 17:19:59 2017 (r315565) @@ -69,11 +69,6 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12 removed as the userland we provide cannot use them. The KMS version (sys/dev/drm2) support the same hardware. -20170311: - GNU diff has been replaced by a BSD licensed diff. Some features of GNU - diff has not been implemented, if those are needed a newer version of - GNU diff is available via the diffutils package under the gdiff name. - 20170302: Clang, llvm, lldb, compiler-rt and libc++ have been upgraded to 4.0.0. Please see the 20141231 entry below for information about prerequisites Modified: head/gnu/usr.bin/Makefile ============================================================================== --- head/gnu/usr.bin/Makefile Sun Mar 19 16:17:42 2017 (r315564) +++ head/gnu/usr.bin/Makefile Sun Mar 19 17:19:59 2017 (r315565) @@ -17,7 +17,7 @@ SUBDIR_DEPEND_gdb= binutils .endif SUBDIR.${MK_GCC}+= cc -SUBDIR.${MK_GNU_DIFF}+= diff3 +SUBDIR.${MK_GNU_DIFF}+= diff diff3 SUBDIR.${MK_GNU_GREP}+= grep SUBDIR.${MK_GPL_DTC}+= dtc SUBDIR.${MK_TESTS}+= tests Modified: head/usr.bin/Makefile ============================================================================== --- head/usr.bin/Makefile Sun Mar 19 16:17:42 2017 (r315564) +++ head/usr.bin/Makefile Sun Mar 19 17:19:59 2017 (r315565) @@ -34,7 +34,6 @@ SUBDIR= alias \ csplit \ ctlstat \ cut \ - diff \ dirname \ du \ elf2aout \ From owner-svn-src-head@freebsd.org Sun Mar 19 17:46:09 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8FE2AD0FDCB; Sun, 19 Mar 2017 17:46:09 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 37CCB86; Sun, 19 Mar 2017 17:46:09 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JHk83c048247; Sun, 19 Mar 2017 17:46:08 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JHk8tM048246; Sun, 19 Mar 2017 17:46:08 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703191746.v2JHk8tM048246@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 19 Mar 2017 17:46:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315566 - head/tools/tools/locale/etc/final-maps X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 17:46:09 -0000 Author: bapt Date: Sun Mar 19 17:46:08 2017 New Revision: 315566 URL: https://svnweb.freebsd.org/changeset/base/315566 Log: Garbage collect a map file that is not used anymore to generate locales Deleted: head/tools/tools/locale/etc/final-maps/map.Big5HKSCS From owner-svn-src-head@freebsd.org Sun Mar 19 17:48:43 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 32168D0FE70; Sun, 19 Mar 2017 17:48:43 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E718A1FA; Sun, 19 Mar 2017 17:48:42 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JHmg3a048377; Sun, 19 Mar 2017 17:48:42 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JHmfbv048374; Sun, 19 Mar 2017 17:48:41 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703191748.v2JHmfbv048374@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 19 Mar 2017 17:48:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315567 - in head/tools/tools/locale: . etc etc/charmaps etc/final-maps tools X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 17:48:43 -0000 Author: bapt Date: Sun Mar 19 17:48:41 2017 New Revision: 315567 URL: https://svnweb.freebsd.org/changeset/base/315567 Log: Prepare the removal of the zh_TW.Big5 encoding Deleted: head/tools/tools/locale/etc/charmaps/Big5.TXT head/tools/tools/locale/etc/final-maps/map.Big5 Modified: head/tools/tools/locale/Makefile head/tools/tools/locale/etc/charmaps.xml head/tools/tools/locale/tools/convert_map.pl head/tools/tools/locale/tools/finalize Modified: head/tools/tools/locale/Makefile ============================================================================== --- head/tools/tools/locale/Makefile Sun Mar 19 17:46:08 2017 (r315566) +++ head/tools/tools/locale/Makefile Sun Mar 19 17:48:41 2017 (r315567) @@ -35,7 +35,6 @@ COLLATION_SPECIAL?= \ sr_Cyrl_RS ISO8859-5 \ zh_Hans_CN GB2312 \ zh_Hans_CN eucCN \ - zh_Hant_TW Big5 \ zh_Hans_CN GB18030 \ zh_Hans_CN GBK \ ja_JP eucJP \ @@ -132,8 +131,7 @@ BASE_LOCALES_OF_INTEREST?= \ th_TH lo_LA bo_IN my_MM pa_Guru_IN ka_GE chr_US \ km_KH shi_Tfng_MA ii_CN vai_Vaii_LR vi_VN -ENCODINGS= Big5 \ - CP1251 \ +ENCODINGS= CP1251 \ CP866 \ CP949 \ eucCN \ Modified: head/tools/tools/locale/etc/charmaps.xml ============================================================================== --- head/tools/tools/locale/etc/charmaps.xml Sun Mar 19 17:46:08 2017 (r315566) +++ head/tools/tools/locale/etc/charmaps.xml Sun Mar 19 17:48:41 2017 (r315567) @@ -188,7 +188,6 @@ countries="HK" /> @@ -403,111 +402,101 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -517,12 +506,8 @@ cldr="CJK UNIFIED IDEOGRAPH-706B" ucc="706B" /> - - - \"$codeset\"\n"); print(" 1\n"); Modified: head/tools/tools/locale/tools/finalize ============================================================================== --- head/tools/tools/locale/tools/finalize Sun Mar 19 17:46:08 2017 (r315566) +++ head/tools/tools/locale/tools/finalize Sun Mar 19 17:48:41 2017 (r315567) @@ -124,7 +124,7 @@ then /usr/bin/sed -E -e 's/[ ]+/ /g' \ ${CLDRDIR}/posix/eucCN.cm \ > ${base}/../etc/final-maps/map.GB2312 - CHARMAPS="ARMSCII-8 Big5 CP1131 CP1251 \ + CHARMAPS="ARMSCII-8 CP1131 CP1251 \ CP866 GBK ISCII-DEV ISO8859-1 \ ISO8859-13 ISO8859-15 ISO8859-2 ISO8859-4 \ ISO8859-5 ISO8859-7 ISO8859-9 KOI8-R KOI8-U \ From owner-svn-src-head@freebsd.org Sun Mar 19 17:52:48 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9D595D13085; Sun, 19 Mar 2017 17:52:48 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5BFC989D; Sun, 19 Mar 2017 17:52:48 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JHqlGo052270; Sun, 19 Mar 2017 17:52:47 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JHqkaM052262; Sun, 19 Mar 2017 17:52:46 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703191752.v2JHqkaM052262@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 19 Mar 2017 17:52:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315568 - in head: . etc/mtree share/colldef share/ctypedef share/monetdef share/msgdef share/numericdef tools/build/mk X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 17:52:48 -0000 Author: bapt Date: Sun Mar 19 17:52:46 2017 New Revision: 315568 URL: https://svnweb.freebsd.org/changeset/base/315568 Log: Remove zh_TW.Big5 locale After discussion with many Taiwanese, in IT or not. Big5 is not used anymore. It is not able to represent lots of the characters used in the language. Deleted: head/share/colldef/zh_TW.Big5.src head/share/ctypedef/zh_TW.Big5.src head/share/monetdef/zh_TW.Big5.src head/share/msgdef/zh_TW.Big5.src head/share/numericdef/zh_TW.Big5.src Modified: head/ObsoleteFiles.inc head/etc/mtree/BSD.usr.dist head/share/colldef/Makefile head/share/ctypedef/Makefile head/share/monetdef/Makefile head/share/msgdef/Makefile head/share/numericdef/Makefile head/tools/build/mk/OptionalObsoleteFiles.inc Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Sun Mar 19 17:48:41 2017 (r315567) +++ head/ObsoleteFiles.inc Sun Mar 19 17:52:46 2017 (r315568) @@ -38,6 +38,14 @@ # xargs -n1 | sort | uniq -d; # done +# 20170319: Remove zh_TW.Big5 +OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_COLLATE +OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_CTYPE +OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_MESSAGES +OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_MONETARY +OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_NUMERIC +OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_TIME +OLD_DIRS+=usr/share/locale/zh_TW.Big5 # 20170313: move .../sys/geom/eli/... to .../sys/geom/class/eli/... OLD_FILES+=usr/tests/sys/geom/eli/pbkdf2/pbkdf2 OLD_FILES+=usr/tests/sys/geom/eli/pbkdf2/Kyuafile Modified: head/etc/mtree/BSD.usr.dist ============================================================================== --- head/etc/mtree/BSD.usr.dist Sun Mar 19 17:48:41 2017 (r315567) +++ head/etc/mtree/BSD.usr.dist Sun Mar 19 17:52:46 2017 (r315568) @@ -891,8 +891,6 @@ .. zh_HK.UTF-8 .. - zh_TW.Big5 - .. zh_TW.UTF-8 .. .. Modified: head/share/colldef/Makefile ============================================================================== --- head/share/colldef/Makefile Sun Mar 19 17:48:41 2017 (r315567) +++ head/share/colldef/Makefile Sun Mar 19 17:52:46 2017 (r315568) @@ -5,7 +5,7 @@ LOCALEDIR= ${SHAREDIR}/locale FILESNAME= LC_COLLATE .SUFFIXES: .src .LC_COLLATE -MAPLOC= ${SRCTOP}/tools/tools/locale/etc/final-maps +MAPLOC= ${.CURDIR}/../../tools/tools/locale/etc/final-maps .src.LC_COLLATE: localedef -D -U -i ${.IMPSRC} \ @@ -158,7 +158,6 @@ LOCALES+= sr_RS.ISO8859-2 LOCALES+= sr_RS.ISO8859-5 LOCALES+= zh_CN.GB2312 LOCALES+= zh_CN.eucCN -LOCALES+= zh_TW.Big5 LOCALES+= zh_CN.GB18030 LOCALES+= zh_CN.GBK LOCALES+= ja_JP.eucJP Modified: head/share/ctypedef/Makefile ============================================================================== --- head/share/ctypedef/Makefile Sun Mar 19 17:48:41 2017 (r315567) +++ head/share/ctypedef/Makefile Sun Mar 19 17:52:46 2017 (r315568) @@ -5,7 +5,7 @@ LOCALEDIR= ${SHAREDIR}/locale FILESNAME= LC_CTYPE .SUFFIXES: .src .LC_CTYPE -MAPLOC= ${SRCTOP}/tools/tools/locale/etc/final-maps +MAPLOC= ${.CURDIR}/../../tools/tools/locale/etc/final-maps .src.LC_CTYPE: localedef -D -U -c -w ${MAPLOC}/widths.txt \ @@ -39,7 +39,6 @@ LOCALES+= zh_CN.GB18030 LOCALES+= zh_CN.GB2312 LOCALES+= zh_CN.GBK LOCALES+= zh_CN.eucCN -LOCALES+= zh_TW.Big5 Modified: head/share/monetdef/Makefile ============================================================================== --- head/share/monetdef/Makefile Sun Mar 19 17:48:41 2017 (r315567) +++ head/share/monetdef/Makefile Sun Mar 19 17:52:46 2017 (r315568) @@ -103,7 +103,6 @@ LOCALES+= zh_CN.GBK LOCALES+= zh_CN.UTF-8 LOCALES+= zh_CN.eucCN LOCALES+= zh_HK.UTF-8 -LOCALES+= zh_TW.Big5 LOCALES+= zh_TW.UTF-8 Modified: head/share/msgdef/Makefile ============================================================================== --- head/share/msgdef/Makefile Sun Mar 19 17:48:41 2017 (r315567) +++ head/share/msgdef/Makefile Sun Mar 19 17:52:46 2017 (r315568) @@ -76,7 +76,6 @@ LOCALES+= zh_CN.GB2312 LOCALES+= zh_CN.GBK LOCALES+= zh_CN.UTF-8 LOCALES+= zh_HK.UTF-8 -LOCALES+= zh_TW.Big5 LOCALES+= zh_TW.UTF-8 Modified: head/share/numericdef/Makefile ============================================================================== --- head/share/numericdef/Makefile Sun Mar 19 17:48:41 2017 (r315567) +++ head/share/numericdef/Makefile Sun Mar 19 17:52:46 2017 (r315568) @@ -23,7 +23,6 @@ LOCALES+= uk_UA.KOI8-U LOCALES+= uk_UA.UTF-8 LOCALES+= zh_CN.GB2312 LOCALES+= zh_CN.eucCN -LOCALES+= zh_TW.Big5 Modified: head/tools/build/mk/OptionalObsoleteFiles.inc ============================================================================== --- head/tools/build/mk/OptionalObsoleteFiles.inc Sun Mar 19 17:48:41 2017 (r315567) +++ head/tools/build/mk/OptionalObsoleteFiles.inc Sun Mar 19 17:52:46 2017 (r315568) @@ -6178,13 +6178,6 @@ OLD_FILES+=usr/share/locale/zh_HK.UTF-8/ OLD_FILES+=usr/share/locale/zh_HK.UTF-8/LC_MONETARY OLD_FILES+=usr/share/locale/zh_HK.UTF-8/LC_NUMERIC OLD_FILES+=usr/share/locale/zh_HK.UTF-8/LC_TIME -OLD_DIRS+=usr/share/locale/zh_TW.Big5 -OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_COLLATE -OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_CTYPE -OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_MESSAGES -OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_MONETARY -OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_NUMERIC -OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_TIME OLD_DIRS+=usr/share/locale/zh_TW.UTF-8 OLD_FILES+=usr/share/locale/zh_TW.UTF-8/LC_COLLATE OLD_FILES+=usr/share/locale/zh_TW.UTF-8/LC_CTYPE From owner-svn-src-head@freebsd.org Sun Mar 19 17:54:13 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6C844D13102; Sun, 19 Mar 2017 17:54:13 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3C5A69E9; Sun, 19 Mar 2017 17:54:13 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JHsClW052366; Sun, 19 Mar 2017 17:54:12 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JHsC1m052365; Sun, 19 Mar 2017 17:54:12 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703191754.v2JHsC1m052365@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 19 Mar 2017 17:54:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315569 - head/share/timedef X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 17:54:13 -0000 Author: bapt Date: Sun Mar 19 17:54:12 2017 New Revision: 315569 URL: https://svnweb.freebsd.org/changeset/base/315569 Log: Finish removal of Big5 Deleted: head/share/timedef/zh_TW.Big5.src Modified: head/share/timedef/Makefile Modified: head/share/timedef/Makefile ============================================================================== --- head/share/timedef/Makefile Sun Mar 19 17:52:46 2017 (r315568) +++ head/share/timedef/Makefile Sun Mar 19 17:54:12 2017 (r315569) @@ -128,7 +128,6 @@ LOCALES+= zh_CN.GBK LOCALES+= zh_CN.UTF-8 LOCALES+= zh_CN.eucCN LOCALES+= zh_HK.UTF-8 -LOCALES+= zh_TW.Big5 LOCALES+= zh_TW.UTF-8 From owner-svn-src-head@freebsd.org Sun Mar 19 18:03:54 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 61EF4D133CF; Sun, 19 Mar 2017 18:03:54 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 31A73F6E; Sun, 19 Mar 2017 18:03:54 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JI3r2f056563; Sun, 19 Mar 2017 18:03:53 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JI3rgr056561; Sun, 19 Mar 2017 18:03:53 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703191803.v2JI3rgr056561@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 19 Mar 2017 18:03:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315570 - in head: . etc/mtree X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 18:03:54 -0000 Author: bapt Date: Sun Mar 19 18:03:52 2017 New Revision: 315570 URL: https://svnweb.freebsd.org/changeset/base/315570 Log: Remove empty Big5 directory from share/nls Modified: head/ObsoleteFiles.inc head/etc/mtree/BSD.usr.dist Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Sun Mar 19 17:54:12 2017 (r315569) +++ head/ObsoleteFiles.inc Sun Mar 19 18:03:52 2017 (r315570) @@ -38,6 +38,9 @@ # xargs -n1 | sort | uniq -d; # done +# 20170318: remove nls for non supported Big5* locales +OLD_DIRS+=usr/share/nls/zh_HK.Big5HKSCS +OLD_DIRS+=usr/share/nls/zh_TW.Big5 # 20170319: Remove zh_TW.Big5 OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_COLLATE OLD_FILES+=usr/share/locale/zh_TW.Big5/LC_CTYPE Modified: head/etc/mtree/BSD.usr.dist ============================================================================== --- head/etc/mtree/BSD.usr.dist Sun Mar 19 17:54:12 2017 (r315569) +++ head/etc/mtree/BSD.usr.dist Sun Mar 19 18:03:52 2017 (r315570) @@ -1379,12 +1379,8 @@ .. zh_CN.eucCN .. - zh_HK.Big5HKSCS - .. zh_HK.UTF-8 .. - zh_TW.Big5 - .. zh_TW.UTF-8 .. .. From owner-svn-src-head@freebsd.org Sun Mar 19 18:21:37 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 689CCD13AE2; Sun, 19 Mar 2017 18:21:37 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1FD5B197D; Sun, 19 Mar 2017 18:21:37 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JILaVc061553; Sun, 19 Mar 2017 18:21:36 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JILZGT061463; Sun, 19 Mar 2017 18:21:35 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703191821.v2JILZGT061463@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 19 Mar 2017 18:21:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315571 - head/share/timedef X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 18:21:37 -0000 Author: bapt Date: Sun Mar 19 18:21:35 2017 New Revision: 315571 URL: https://svnweb.freebsd.org/changeset/base/315571 Log: Canada adheres to ISO 8601, let's make the locale reflecting that fact PR: 200079 MFC after: 1 week Submitted by: Dan McGregor Reported by: A.J. Kehoe IV (Nanoman) Differential Revision: https://reviews.freebsd.org/D9925 Modified: head/share/timedef/ca_IT.ISO8859-15.src head/share/timedef/en_CA.UTF-8.src head/share/timedef/fr_CA.ISO8859-15.src head/share/timedef/fr_CA.UTF-8.src Modified: head/share/timedef/ca_IT.ISO8859-15.src ============================================================================== --- head/share/timedef/ca_IT.ISO8859-15.src Sun Mar 19 18:03:52 2017 (r315570) +++ head/share/timedef/ca_IT.ISO8859-15.src Sun Mar 19 18:21:35 2017 (r315571) @@ -53,7 +53,7 @@ dissabte %H:%M:%S # # x_fmt -%d/%m/%Y +%Y-%m-%d # # c_fmt %a %e %b %X %Y Modified: head/share/timedef/en_CA.UTF-8.src ============================================================================== --- head/share/timedef/en_CA.UTF-8.src Sun Mar 19 18:03:52 2017 (r315570) +++ head/share/timedef/en_CA.UTF-8.src Sun Mar 19 18:21:35 2017 (r315571) @@ -53,7 +53,7 @@ Saturday %H:%M:%S # # x_fmt -%d/%m/%Y +%Y-%m-%d # # c_fmt %a %e %b %X %Y Modified: head/share/timedef/fr_CA.ISO8859-15.src ============================================================================== --- head/share/timedef/fr_CA.ISO8859-15.src Sun Mar 19 18:03:52 2017 (r315570) +++ head/share/timedef/fr_CA.ISO8859-15.src Sun Mar 19 18:21:35 2017 (r315571) @@ -53,7 +53,7 @@ samedi %H:%M:%S # # x_fmt -%d.%m.%Y +%Y-%m-%d # # c_fmt %a %e %b %X %Y Modified: head/share/timedef/fr_CA.UTF-8.src ============================================================================== --- head/share/timedef/fr_CA.UTF-8.src Sun Mar 19 18:03:52 2017 (r315570) +++ head/share/timedef/fr_CA.UTF-8.src Sun Mar 19 18:21:35 2017 (r315571) @@ -53,7 +53,7 @@ samedi %H:%M:%S # # x_fmt -%d.%m.%Y +%Y-%m-%d # # c_fmt %a %e %b %X %Y From owner-svn-src-head@freebsd.org Sun Mar 19 18:26:54 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 42306D13CDF; Sun, 19 Mar 2017 18:26:54 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EB38B1CA5; Sun, 19 Mar 2017 18:26:53 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JIQrLp064734; Sun, 19 Mar 2017 18:26:53 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JIQq7S064733; Sun, 19 Mar 2017 18:26:53 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703191826.v2JIQq7S064733@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 18:26:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315572 - head/sys/arm/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 18:26:54 -0000 Author: ian Date: Sun Mar 19 18:26:52 2017 New Revision: 315572 URL: https://svnweb.freebsd.org/changeset/base/315572 Log: Remove kernel config for IMX53-QSB (quickstart board). It was just standard IMX53 with static dtb added, and now that imx53 can use vendor- supplied dts files and ubldr, there is no need for a static-dtb variant. Deleted: head/sys/arm/conf/IMX53-QSB From owner-svn-src-head@freebsd.org Sun Mar 19 18:28:40 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 38367D13D5C; Sun, 19 Mar 2017 18:28:40 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 080CF1DF2; Sun, 19 Mar 2017 18:28:39 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JISdKo064874; Sun, 19 Mar 2017 18:28:39 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JISdnT064873; Sun, 19 Mar 2017 18:28:39 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703191828.v2JISdnT064873@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 18:28:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315573 - head/sys/arm/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 18:28:40 -0000 Author: ian Date: Sun Mar 19 18:28:38 2017 New Revision: 315573 URL: https://svnweb.freebsd.org/changeset/base/315573 Log: Add dtb/imx5 module build to the imx53 kernel config. Modified: head/sys/arm/conf/IMX53 Modified: head/sys/arm/conf/IMX53 ============================================================================== --- head/sys/arm/conf/IMX53 Sun Mar 19 18:26:52 2017 (r315572) +++ head/sys/arm/conf/IMX53 Sun Mar 19 18:28:38 2017 (r315573) @@ -117,3 +117,4 @@ device wlan_amrr # AMRR transmit rate # Flattened Device Tree options FDT # Configure using FDT/DTB data +makeoptions MODULES_EXTRA=dtb/imx5 From owner-svn-src-head@freebsd.org Sun Mar 19 18:30:40 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5949CD13E1E; Sun, 19 Mar 2017 18:30:40 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3153E1CB; Sun, 19 Mar 2017 18:30:40 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JIUdhR065148; Sun, 19 Mar 2017 18:30:39 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JIUd6A065146; Sun, 19 Mar 2017 18:30:39 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703191830.v2JIUd6A065146@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 18:30:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315574 - in head/sys/arm: conf freescale/imx X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 18:30:40 -0000 Author: ian Date: Sun Mar 19 18:30:38 2017 New Revision: 315574 URL: https://svnweb.freebsd.org/changeset/base/315574 Log: Convert the imx5 interrupt controller driver to INTRNG. Modified: head/sys/arm/conf/IMX53 head/sys/arm/freescale/imx/tzic.c Modified: head/sys/arm/conf/IMX53 ============================================================================== --- head/sys/arm/conf/IMX53 Sun Mar 19 18:28:38 2017 (r315573) +++ head/sys/arm/conf/IMX53 Sun Mar 19 18:30:38 2017 (r315574) @@ -118,3 +118,5 @@ device wlan_amrr # AMRR transmit rate # Flattened Device Tree options FDT # Configure using FDT/DTB data makeoptions MODULES_EXTRA=dtb/imx5 + +options INTRNG Modified: head/sys/arm/freescale/imx/tzic.c ============================================================================== --- head/sys/arm/freescale/imx/tzic.c Sun Mar 19 18:28:38 2017 (r315573) +++ head/sys/arm/freescale/imx/tzic.c Sun Mar 19 18:30:38 2017 (r315574) @@ -34,14 +34,12 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include -#include #include -#include #include #include + #include #include @@ -51,26 +49,178 @@ __FBSDID("$FreeBSD$"); #include -struct tzic_softc { - struct resource * tzic_res[3]; - bus_space_tag_t tzic_bst; - bus_space_handle_t tzic_bsh; - uint8_t ver; +#include "pic_if.h" + +#define TZIC_NIRQS 128 + +struct tzic_irqsrc { + struct intr_irqsrc isrc; + u_int irq; }; -static struct resource_spec tzic_spec[] = { - { SYS_RES_MEMORY, 0, RF_ACTIVE }, - { -1, 0 } +struct tzic_softc { + device_t dev; + struct resource *tzicregs; + struct tzic_irqsrc isrcs[TZIC_NIRQS]; }; -static struct tzic_softc *tzic_sc = NULL; +static struct tzic_softc *tzic_sc; + +static inline uint32_t +tzic_read_4(struct tzic_softc *sc, int reg) +{ + + return (bus_read_4(sc->tzicregs, reg)); +} + +static inline void +tzic_write_4(struct tzic_softc *sc, int reg, uint32_t val) +{ + + bus_write_4(sc->tzicregs, reg, val); +} + +static inline void +tzic_irq_eoi(struct tzic_softc *sc) +{ + + tzic_write_4(sc, TZIC_PRIOMASK, 0xff); +} + +static inline void +tzic_irq_mask(struct tzic_softc *sc, u_int irq) +{ + + tzic_write_4(sc, TZIC_ENCLEAR(irq >> 5), (1u << (irq & 0x1f))); +} -#define tzic_read_4(reg) \ - bus_space_read_4(tzic_sc->tzic_bst, tzic_sc->tzic_bsh, reg) -#define tzic_write_4(reg, val) \ - bus_space_write_4(tzic_sc->tzic_bst, tzic_sc->tzic_bsh, reg, val) +static inline void +tzic_irq_unmask(struct tzic_softc *sc, u_int irq) +{ -static void tzic_post_filter(void *); + tzic_write_4(sc, TZIC_ENSET(irq >> 5), (1u << (irq & 0x1f))); +} + +static int +tzic_intr(void *arg) +{ + struct tzic_softc *sc = arg; + int b, i, irq; + uint32_t pending; + + /* Get active interrupt */ + for (i = 0; i < TZIC_NIRQS / 32; ++i) { + pending = tzic_read_4(sc, TZIC_PND(i)); + if ((b = 31 - __builtin_clz(pending)) < 0) + continue; + irq = i * 32 + b; + tzic_write_4(sc, TZIC_PRIOMASK, 0); + if (intr_isrc_dispatch(&sc->isrcs[irq].isrc, + curthread->td_intr_frame) != 0) { + tzic_irq_mask(sc, irq); + tzic_irq_eoi(sc); + arm_irq_memory_barrier(irq); + if (bootverbose) { + device_printf(sc->dev, + "Stray irq %u disabled\n", irq); + } + } + return (FILTER_HANDLED); + } + + if (bootverbose) + device_printf(sc->dev, "Spurious interrupt detected\n"); + + return (FILTER_HANDLED); +} + +static void +tzic_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + u_int irq = ((struct tzic_irqsrc *)isrc)->irq; + struct tzic_softc *sc = device_get_softc(dev); + + arm_irq_memory_barrier(irq); + tzic_irq_unmask(sc, irq); +} + +static void +tzic_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + u_int irq = ((struct tzic_irqsrc *)isrc)->irq; + struct tzic_softc *sc = device_get_softc(dev); + + tzic_irq_mask(sc, irq); +} + +static int +tzic_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ + struct intr_map_data_fdt *daf; + struct tzic_softc *sc; + + if (data->type != INTR_MAP_DATA_FDT) + return (ENOTSUP); + + daf = (struct intr_map_data_fdt *)data; + if (daf->ncells != 1 || daf->cells[0] >= TZIC_NIRQS) + return (EINVAL); + + sc = device_get_softc(dev); + *isrcp = &sc->isrcs[daf->cells[0]].isrc; + + return (0); +} + +static void +tzic_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + struct tzic_softc *sc = device_get_softc(dev); + + tzic_irq_mask(sc, ((struct tzic_irqsrc *)isrc)->irq); + tzic_irq_eoi(sc); +} + +static void +tzic_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + tzic_enable_intr(dev, isrc); +} + +static void +tzic_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ + + tzic_irq_eoi(device_get_softc(dev)); +} + +static int +tzic_pic_attach(struct tzic_softc *sc) +{ + struct intr_pic *pic; + const char *name; + intptr_t xref; + int error; + u_int irq; + + name = device_get_nameunit(sc->dev); + for (irq = 0; irq < TZIC_NIRQS; irq++) { + sc->isrcs[irq].irq = irq; + error = intr_isrc_register(&sc->isrcs[irq].isrc, + sc->dev, 0, "%s,%u", name, irq); + if (error != 0) + return (error); + } + + xref = OF_xref_from_node(ofw_bus_get_node(sc->dev)); + pic = intr_pic_register(sc->dev, xref); + if (pic == NULL) + return (ENXIO); + + return (intr_pic_claim_root(sc->dev, xref, tzic_intr, sc, 0)); +} static int tzic_probe(device_t dev) @@ -89,42 +239,47 @@ tzic_probe(device_t dev) static int tzic_attach(device_t dev) { - struct tzic_softc *sc = device_get_softc(dev); - int i; - uint32_t reg; + struct tzic_softc *sc = device_get_softc(dev); + int i; if (tzic_sc) return (ENXIO); + tzic_sc = sc; + sc->dev = dev; - if (bus_alloc_resources(dev, tzic_spec, sc->tzic_res)) { + i = 0; + sc->tzicregs = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &i, + RF_ACTIVE); + if (sc->tzicregs == NULL) { device_printf(dev, "could not allocate resources\n"); return (ENXIO); } - arm_post_filter = tzic_post_filter; - - /* Distributor Interface */ - sc->tzic_bst = rman_get_bustag(sc->tzic_res[0]); - sc->tzic_bsh = rman_get_bushandle(sc->tzic_res[0]); - - tzic_sc = sc; - - reg = tzic_read_4(TZIC_INTCNTL); - tzic_write_4(TZIC_INTCNTL, INTCNTL_NSEN_MASK|INTCNTL_NSEN|INTCNTL_EN); - reg = tzic_read_4(TZIC_INTCNTL); - tzic_write_4(TZIC_PRIOMASK, 0x1f); - reg = tzic_read_4(TZIC_PRIOMASK); - - tzic_write_4(TZIC_SYNCCTRL, 0x02); - reg = tzic_read_4(TZIC_SYNCCTRL); - /* route all interrupts to IRQ. secure interrupts are for FIQ */ for (i = 0; i < 4; i++) - tzic_write_4(TZIC_INTSEC(i), 0xffffffff); + tzic_write_4(sc, TZIC_INTSEC(i), 0xffffffff); /* disable all interrupts */ for (i = 0; i < 4; i++) - tzic_write_4(TZIC_ENCLEAR(i), 0xffffffff); + tzic_write_4(sc, TZIC_ENCLEAR(i), 0xffffffff); + + /* Set all interrupts to priority 0 (max). */ + for (i = 0; i < 128 / 4; ++i) + tzic_write_4(sc, TZIC_PRIORITY(i), 0); + + /* + * Set priority mask to lowest (unmasked) prio, set synchronizer to + * low-latency mode (as opposed to low-power), enable the controller. + */ + tzic_write_4(sc, TZIC_PRIOMASK, 0xff); + tzic_write_4(sc, TZIC_SYNCCTRL, 0); + tzic_write_4(sc, TZIC_INTCNTL, INTCNTL_NSEN_MASK|INTCNTL_NSEN|INTCNTL_EN); + + /* Register as a root pic. */ + if (tzic_pic_attach(sc) != 0) { + device_printf(dev, "could not attach PIC\n"); + return (ENXIO); + } return (0); } @@ -132,7 +287,15 @@ tzic_attach(device_t dev) static device_method_t tzic_methods[] = { DEVMETHOD(device_probe, tzic_probe), DEVMETHOD(device_attach, tzic_attach), - { 0, 0 } + + DEVMETHOD(pic_disable_intr, tzic_disable_intr), + DEVMETHOD(pic_enable_intr, tzic_enable_intr), + DEVMETHOD(pic_map_intr, tzic_map_intr), + DEVMETHOD(pic_post_filter, tzic_post_filter), + DEVMETHOD(pic_post_ithread, tzic_post_ithread), + DEVMETHOD(pic_pre_ithread, tzic_pre_ithread), + + DEVMETHOD_END }; static driver_t tzic_driver = { @@ -143,48 +306,5 @@ static driver_t tzic_driver = { static devclass_t tzic_devclass; -/* - * Memory space of controller located outside of device range, so let him to - * attach not only to simplebus, but ofwbus also. - */ EARLY_DRIVER_MODULE(tzic, ofwbus, tzic_driver, tzic_devclass, 0, 0, BUS_PASS_INTERRUPT); -EARLY_DRIVER_MODULE(tzic, simplebus, tzic_driver, tzic_devclass, 0, 0, - BUS_PASS_INTERRUPT); - -static void -tzic_post_filter(void *arg) -{ - -} - -int -arm_get_next_irq(int last_irq) -{ - uint32_t pending; - int i, b; - - for (i = 0; i < 4; i++) { - pending = tzic_read_4(TZIC_PND(i)); - for (b = 0; pending != 0 && b < 32; b++) - if (pending & (1 << b)) { - return (i * 32 + b); - } - } - - return (-1); -} - -void -arm_mask_irq(uintptr_t nb) -{ - - tzic_write_4(TZIC_ENCLEAR(nb / 32), (1UL <<(nb % 32))); -} - -void -arm_unmask_irq(uintptr_t nb) -{ - - tzic_write_4(TZIC_ENSET(nb / 32), (1UL <<(nb % 32))); -} From owner-svn-src-head@freebsd.org Sun Mar 19 18:35:21 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7FC3CD130FD; Sun, 19 Mar 2017 18:35:21 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 372C786B; Sun, 19 Mar 2017 18:35:21 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JIZKsD069141; Sun, 19 Mar 2017 18:35:20 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JIZKnf069140; Sun, 19 Mar 2017 18:35:20 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703191835.v2JIZKnf069140@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 18:35:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315575 - head/sys/arm/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 18:35:21 -0000 Author: ian Date: Sun Mar 19 18:35:20 2017 New Revision: 315575 URL: https://svnweb.freebsd.org/changeset/base/315575 Log: Remove kernel config for DIGI-CCWMX53 devel board. It was just standard IMX53 with static dtb added, and now that imx53 can use vendor-supplied dts files and ubldr, there is no need for a static-dtb variant. Deleted: head/sys/arm/conf/DIGI-CCWMX53 From owner-svn-src-head@freebsd.org Sun Mar 19 18:38:10 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 14DE3D13209; Sun, 19 Mar 2017 18:38:10 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D8C1BA92; Sun, 19 Mar 2017 18:38:09 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JIc8I7069280; Sun, 19 Mar 2017 18:38:08 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JIc8rK069279; Sun, 19 Mar 2017 18:38:08 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703191838.v2JIc8rK069279@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 18:38:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315576 - head/sys/arm/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 18:38:10 -0000 Author: ian Date: Sun Mar 19 18:38:08 2017 New Revision: 315576 URL: https://svnweb.freebsd.org/changeset/base/315576 Log: Add INTRNG option to EFIKA_MX config, it is an imx5-based platform. Modified: head/sys/arm/conf/EFIKA_MX Modified: head/sys/arm/conf/EFIKA_MX ============================================================================== --- head/sys/arm/conf/EFIKA_MX Sun Mar 19 18:35:20 2017 (r315575) +++ head/sys/arm/conf/EFIKA_MX Sun Mar 19 18:38:08 2017 (r315576) @@ -130,3 +130,5 @@ options SC_DFLT_FONT # compile font in makeoptions SC_DFLT_FONT=cp437 device ukbd # Allow keyboard like HIDs to control console device ums + +options INTRNG From owner-svn-src-head@freebsd.org Sun Mar 19 18:50:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3A1BFD136FA; Sun, 19 Mar 2017 18:50:05 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E189E118B; Sun, 19 Mar 2017 18:50:04 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JIo35s073267; Sun, 19 Mar 2017 18:50:03 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JIo3ua073266; Sun, 19 Mar 2017 18:50:03 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703191850.v2JIo3ua073266@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 18:50:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315577 - head/sys/boot/fdt/dts/arm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 18:50:05 -0000 Author: ian Date: Sun Mar 19 18:50:03 2017 New Revision: 315577 URL: https://svnweb.freebsd.org/changeset/base/315577 Log: Delete our local imx53-qsb.dts file; the code now runs fine using the standard vendor-supplied file in sys/gnu/dts/arm. Deleted: head/sys/boot/fdt/dts/arm/imx53-qsb.dts From owner-svn-src-head@freebsd.org Sun Mar 19 19:10:24 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6E63AD13B29; Sun, 19 Mar 2017 19:10:24 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3E33D1A5C; Sun, 19 Mar 2017 19:10:24 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JJANHL081569; Sun, 19 Mar 2017 19:10:23 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JJANqu081568; Sun, 19 Mar 2017 19:10:23 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703191910.v2JJANqu081568@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 19:10:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315578 - head/sys/modules/dtb/imx5 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 19:10:24 -0000 Author: ian Date: Sun Mar 19 19:10:23 2017 New Revision: 315578 URL: https://svnweb.freebsd.org/changeset/base/315578 Log: Add a module to build imx5 dtb files. Added: head/sys/modules/dtb/imx5/ head/sys/modules/dtb/imx5/Makefile (contents, props changed) Added: head/sys/modules/dtb/imx5/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/modules/dtb/imx5/Makefile Sun Mar 19 19:10:23 2017 (r315578) @@ -0,0 +1,6 @@ +# $FreeBSD$ +# All the dts files for imx5 systems we support. +DTS= \ + imx53-qsb.dts + +.include From owner-svn-src-head@freebsd.org Sun Mar 19 19:11:42 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 41DA7D13CCA; Sun, 19 Mar 2017 19:11:42 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 19FD61DCD; Sun, 19 Mar 2017 19:11:42 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JJBfJ8084435; Sun, 19 Mar 2017 19:11:41 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JJBedF084426; Sun, 19 Mar 2017 19:11:40 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703191911.v2JJBedF084426@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 19 Mar 2017 19:11:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315579 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 19:11:42 -0000 Author: mav Date: Sun Mar 19 19:11:40 2017 New Revision: 315579 URL: https://svnweb.freebsd.org/changeset/base/315579 Log: Add initial support for multiple MSI-X vectors. For 24xx and above use 2 vectors (default and response queue). For 26xx and above use 3 vectors (default, response and ATIO queues). Due to global lock interrupt hardlers never run simultaneously now, but at least this allows to save one regitster read per interrupt. MFC after: 2 weeks Modified: head/sys/dev/isp/isp.c head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_freebsd.h head/sys/dev/isp/isp_pci.c head/sys/dev/isp/isp_sbus.c head/sys/dev/isp/ispmbox.h head/sys/dev/isp/ispvar.h Modified: head/sys/dev/isp/isp.c ============================================================================== --- head/sys/dev/isp/isp.c Sun Mar 19 19:10:23 2017 (r315578) +++ head/sys/dev/isp/isp.c Sun Mar 19 19:11:40 2017 (r315579) @@ -2089,7 +2089,7 @@ isp_fibre_init_2400(ispsoftc_t *isp) } if (IS_26XX(isp)) { - /* We don't support MSI-X yet, so set this unconditionally. */ + /* Use handshake to reduce global lock congestion. */ icbp->icb_fwoptions2 |= ICB2400_OPT2_ENA_IHR; icbp->icb_fwoptions2 |= ICB2400_OPT2_ENA_IHA; } @@ -2187,6 +2187,12 @@ isp_fibre_init_2400(ispsoftc_t *isp) DMA_WD1(isp->isp_atioq_dma), DMA_WD0(isp->isp_atioq_dma)); #endif + if (ISP_CAP_MSIX(isp) && isp->isp_nirq >= 2) { + icbp->icb_msixresp = 1; + if (IS_26XX(isp) && isp->isp_nirq >= 3) + icbp->icb_msixatio = 2; + } + isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: fwopt1 0x%x fwopt2 0x%x fwopt3 0x%x", icbp->icb_fwoptions1, icbp->icb_fwoptions2, icbp->icb_fwoptions3); isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: rqst %04x%04x%04x%04x rsp %04x%04x%04x%04x", DMA_WD3(isp->isp_rquest_dma), DMA_WD2(isp->isp_rquest_dma), Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Sun Mar 19 19:10:23 2017 (r315578) +++ head/sys/dev/isp/isp_freebsd.c Sun Mar 19 19:11:40 2017 (r315579) @@ -4160,6 +4160,34 @@ isp_platform_intr(void *arg) } void +isp_platform_intr_resp(void *arg) +{ + ispsoftc_t *isp = arg; + + ISP_LOCK(isp); + isp_intr_respq(isp); + ISP_UNLOCK(isp); + + /* We have handshake enabled, so explicitly complete interrupt */ + ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); +} + +void +isp_platform_intr_atio(void *arg) +{ + ispsoftc_t *isp = arg; + + ISP_LOCK(isp); +#ifdef ISP_TARGET_MODE + isp_intr_atioq(isp); +#endif + ISP_UNLOCK(isp); + + /* We have handshake enabled, so explicitly complete interrupt */ + ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); +} + +void isp_common_dmateardown(ispsoftc_t *isp, struct ccb_scsiio *csio, uint32_t hdl) { if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { Modified: head/sys/dev/isp/isp_freebsd.h ============================================================================== --- head/sys/dev/isp/isp_freebsd.h Sun Mar 19 19:10:23 2017 (r315578) +++ head/sys/dev/isp/isp_freebsd.h Sun Mar 19 19:11:40 2017 (r315579) @@ -722,6 +722,8 @@ void isp_mbox_release(ispsoftc_t *); int isp_fc_scratch_acquire(ispsoftc_t *, int); int isp_mstohz(int); void isp_platform_intr(void *); +void isp_platform_intr_resp(void *); +void isp_platform_intr_atio(void *); void isp_common_dmateardown(ispsoftc_t *, struct ccb_scsiio *, uint32_t); void isp_fcp_reset_crn(ispsoftc_t *, int, uint32_t, int); int isp_fcp_next_crn(ispsoftc_t *, uint8_t *, XS_T *); @@ -734,8 +736,6 @@ int isp_fcp_next_crn(ispsoftc_t *, uint8 bus_dma_tag_create(a, b, c, d, e, f, g, h, i, j, k, \ busdma_lock_mutex, &isp->isp_osinfo.lock, z) -#define isp_setup_intr bus_setup_intr - #define isp_sim_alloc(a, b, c, d, e, f, g, h) \ cam_sim_alloc(a, b, c, d, e, &(d)->isp_osinfo.lock, f, g, h) Modified: head/sys/dev/isp/isp_pci.c ============================================================================== --- head/sys/dev/isp/isp_pci.c Sun Mar 19 19:10:23 2017 (r315578) +++ head/sys/dev/isp/isp_pci.c Sun Mar 19 19:11:40 2017 (r315579) @@ -364,15 +364,17 @@ struct isp_pcisoftc { struct resource * regs; struct resource * regs1; struct resource * regs2; - void * irq; - int iqd; + struct { + int iqd; + struct resource * irq; + void * ih; + } irq[ISP_MAX_IRQS]; int rtp; int rgd; int rtp1; int rgd1; int rtp2; int rgd2; - void * ih; int16_t pci_poff[_NREG_BLKS]; bus_dma_tag_t dmat; int msicount; @@ -691,8 +693,8 @@ isp_pci_attach(device_t dev) isp_get_generic_options(dev, isp); linesz = PCI_DFLT_LNSZ; - pcs->irq = pcs->regs = pcs->regs2 = NULL; - pcs->rgd = pcs->rtp = pcs->iqd = 0; + pcs->regs = pcs->regs2 = NULL; + pcs->rgd = pcs->rtp = 0; pcs->pci_dev = dev; pcs->pci_poff[BIU_BLOCK >> _BLK_REG_SHFT] = BIU_REGS_OFF; @@ -932,41 +934,6 @@ isp_pci_attach(device_t dev) data &= ~1; pci_write_config(dev, PCIR_ROMADDR, data, 4); - if (IS_26XX(isp)) { - /* 26XX chips support only MSI-X, so start from them. */ - pcs->msicount = imin(pci_msix_count(dev), 1); - if (pcs->msicount > 0 && - (i = pci_alloc_msix(dev, &pcs->msicount)) == 0) { - pcs->iqd = 1; - } else { - pcs->msicount = 0; - } - } - if (pcs->msicount == 0 && (IS_24XX(isp) || IS_2322(isp))) { - /* - * Older chips support both MSI and MSI-X, but I have - * feeling that older firmware may not support MSI-X, - * but we have no way to check the firmware flag here. - */ - pcs->msicount = imin(pci_msi_count(dev), 1); - if (pcs->msicount > 0 && - pci_alloc_msi(dev, &pcs->msicount) == 0) { - pcs->iqd = 1; - } else { - pcs->msicount = 0; - } - } - pcs->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &pcs->iqd, RF_ACTIVE | RF_SHAREABLE); - if (pcs->irq == NULL) { - device_printf(dev, "could not allocate interrupt\n"); - goto bad; - } - - if (isp_setup_intr(dev, pcs->irq, ISP_IFLAGS, NULL, isp_platform_intr, isp, &pcs->ih)) { - device_printf(dev, "could not setup interrupt\n"); - goto bad; - } - /* * Last minute checks... */ @@ -992,11 +959,10 @@ isp_pci_attach(device_t dev) return (0); bad: - if (pcs->ih) { - (void) bus_teardown_intr(dev, pcs->irq, pcs->ih); - } - if (pcs->irq) { - (void) bus_release_resource(dev, SYS_RES_IRQ, pcs->iqd, pcs->irq); + for (i = 0; i < isp->isp_nirq; i++) { + (void) bus_teardown_intr(dev, pcs->irq[i].irq, pcs->irq[i].ih); + (void) bus_release_resource(dev, SYS_RES_IRQ, pcs->irq[i].iqd, + pcs->irq[0].irq); } if (pcs->msicount) { pci_release_msi(dev); @@ -1024,7 +990,7 @@ isp_pci_detach(device_t dev) { struct isp_pcisoftc *pcs = device_get_softc(dev); ispsoftc_t *isp = &pcs->pci_isp; - int status; + int i, status; status = isp_detach(isp); if (status) @@ -1032,9 +998,11 @@ isp_pci_detach(device_t dev) ISP_LOCK(isp); isp_shutdown(isp); ISP_UNLOCK(isp); - if (pcs->ih) - (void) bus_teardown_intr(dev, pcs->irq, pcs->ih); - (void) bus_release_resource(dev, SYS_RES_IRQ, pcs->iqd, pcs->irq); + for (i = 0; i < isp->isp_nirq; i++) { + (void) bus_teardown_intr(dev, pcs->irq[i].irq, pcs->irq[i].ih); + (void) bus_release_resource(dev, SYS_RES_IRQ, pcs->irq[i].iqd, + pcs->irq[i].irq); + } if (pcs->msicount) pci_release_msi(dev); (void) bus_release_resource(dev, pcs->rtp, pcs->rgd, pcs->regs); @@ -2077,8 +2045,57 @@ isp_pci_dmasetup(ispsoftc_t *isp, struct static int isp_pci_irqsetup(ispsoftc_t *isp) { + device_t dev = isp->isp_osinfo.dev; + struct isp_pcisoftc *pcs = device_get_softc(dev); + driver_intr_t *f; + int i, max_irq; - return (0); + /* Allocate IRQs only once. */ + if (isp->isp_nirq > 0) + return (0); + + if (ISP_CAP_MSIX(isp)) { + max_irq = min(ISP_MAX_IRQS, IS_26XX(isp) ? 3 : 2); + pcs->msicount = imin(pci_msix_count(dev), max_irq); + if (pcs->msicount > 0 && + pci_alloc_msix(dev, &pcs->msicount) != 0) + pcs->msicount = 0; + } + if (pcs->msicount == 0) { + pcs->msicount = imin(pci_msi_count(dev), 1); + if (pcs->msicount > 0 && + pci_alloc_msi(dev, &pcs->msicount) != 0) + pcs->msicount = 0; + } + for (i = 0; i < MAX(1, pcs->msicount); i++) { + pcs->irq[i].iqd = i + (pcs->msicount > 0); + pcs->irq[i].irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, + &pcs->irq[i].iqd, RF_ACTIVE | RF_SHAREABLE); + if (pcs->irq[i].irq == NULL) { + device_printf(dev, "could not allocate interrupt\n"); + break; + } + if (i == 0) + f = isp_platform_intr; + else if (i == 1) + f = isp_platform_intr_resp; + else + f = isp_platform_intr_atio; + if (bus_setup_intr(dev, pcs->irq[i].irq, ISP_IFLAGS, NULL, + f, isp, &pcs->irq[i].ih)) { + device_printf(dev, "could not setup interrupt\n"); + (void) bus_release_resource(dev, SYS_RES_IRQ, + pcs->irq[i].iqd, pcs->irq[i].irq); + break; + } + if (pcs->msicount > 1) { + bus_describe_intr(dev, pcs->irq[i].irq, pcs->irq[i].ih, + "%d", i); + } + isp->isp_nirq = i + 1; + } + + return (isp->isp_nirq == 0); } static void Modified: head/sys/dev/isp/isp_sbus.c ============================================================================== --- head/sys/dev/isp/isp_sbus.c Sun Mar 19 19:10:23 2017 (r315578) +++ head/sys/dev/isp/isp_sbus.c Sun Mar 19 19:11:40 2017 (r315579) @@ -139,7 +139,6 @@ isp_sbus_attach(device_t dev) struct isp_sbussoftc *sbs = device_get_softc(dev); ispsoftc_t *isp = &sbs->sbus_isp; int tval, isp_debug, role, ispburst, default_id; - int ints_setup = 0; sbs->sbus_dev = dev; sbs->sbus_mdvec = mdvec; @@ -262,12 +261,14 @@ isp_sbus_attach(device_t dev) goto bad; } - if (isp_setup_intr(dev, sbs->irq, ISP_IFLAGS, NULL, isp_platform_intr, + if (bus_setup_intr(dev, sbs->irq, ISP_IFLAGS, NULL, isp_platform_intr, isp, &sbs->ih)) { device_printf(dev, "could not setup interrupt\n"); + (void) bus_release_resource(dev, SYS_RES_IRQ, + sbs->iqd, sbs->irq); goto bad; } - ints_setup++; + isp->isp_nirq = 1; /* * Set up logging levels. @@ -299,13 +300,10 @@ isp_sbus_attach(device_t dev) return (0); bad: - - if (sbs && ints_setup) { + if (isp->isp_nirq > 0) { (void) bus_teardown_intr(dev, sbs->irq, sbs->ih); - } - - if (sbs && sbs->irq) { - bus_release_resource(dev, SYS_RES_IRQ, sbs->iqd, sbs->irq); + (void) bus_release_resource(dev, SYS_RES_IRQ, sbs->iqd, + sbs->irq); } if (sbs->regs) { @@ -329,9 +327,11 @@ isp_sbus_detach(device_t dev) ISP_LOCK(isp); isp_shutdown(isp); ISP_UNLOCK(isp); - if (sbs->ih) + if (isp->isp_nirq > 0) { (void) bus_teardown_intr(dev, sbs->irq, sbs->ih); - (void) bus_release_resource(dev, SYS_RES_IRQ, sbs->iqd, sbs->irq); + (void) bus_release_resource(dev, SYS_RES_IRQ, sbs->iqd, + sbs->irq); + } (void) bus_release_resource(dev, SYS_RES_MEMORY, sbs->rgd, sbs->regs); isp_sbus_mbxdmafree(isp); mtx_destroy(&isp->isp_osinfo.lock); Modified: head/sys/dev/isp/ispmbox.h ============================================================================== --- head/sys/dev/isp/ispmbox.h Sun Mar 19 19:10:23 2017 (r315578) +++ head/sys/dev/isp/ispmbox.h Sun Mar 19 19:11:40 2017 (r315579) @@ -895,6 +895,8 @@ typedef struct { (IS_24XX(isp)? (isp->isp_fwattr & ISP2400_FW_ATTR_MULTIID) : 0) #define ISP_GET_VPIDX(isp, tag) \ (ISP_CAP_MULTI_ID(isp) ? tag : 0) +#define ISP_CAP_MSIX(isp) \ + (IS_24XX(isp)? (isp->isp_fwattr & ISP2400_FW_ATTR_MSIX) : 0) #define ISP_CAP_VP0(isp) \ (IS_24XX(isp)? (isp->isp_fwattr & ISP2400_FW_ATTR_VP0) : 0) Modified: head/sys/dev/isp/ispvar.h ============================================================================== --- head/sys/dev/isp/ispvar.h Sun Mar 19 19:10:23 2017 (r315578) +++ head/sys/dev/isp/ispvar.h Sun Mar 19 19:11:40 2017 (r315579) @@ -80,6 +80,7 @@ struct ispmdvec { #endif #define ISP_MAX_TARGETS(isp) (IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS) #define ISP_MAX_LUNS(isp) (isp)->isp_maxluns +#define ISP_MAX_IRQS 3 /* * Macros to access ISP registers through bus specific layers- @@ -526,6 +527,7 @@ struct ispsoftc { uint16_t isp_maxcmds; /* max possible I/O cmds */ uint8_t isp_type; /* HBA Chip Type */ uint8_t isp_revision; /* HBA Chip H/W Revision */ + uint8_t isp_nirq; /* number of IRQs */ uint16_t isp_nchan; /* number of channels */ uint32_t isp_maxluns; /* maximum luns supported */ From owner-svn-src-head@freebsd.org Sun Mar 19 19:52:48 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AF09DD13A94; Sun, 19 Mar 2017 19:52:48 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6254812DC; Sun, 19 Mar 2017 19:52:48 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JJqleq001386; Sun, 19 Mar 2017 19:52:47 GMT (envelope-from alc@FreeBSD.org) Received: (from alc@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JJqlQl001385; Sun, 19 Mar 2017 19:52:47 GMT (envelope-from alc@FreeBSD.org) Message-Id: <201703191952.v2JJqlQl001385@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: alc set sender to alc@FreeBSD.org using -f From: Alan Cox Date: Sun, 19 Mar 2017 19:52:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315580 - head/sys/vm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 19:52:48 -0000 Author: alc Date: Sun Mar 19 19:52:47 2017 New Revision: 315580 URL: https://svnweb.freebsd.org/changeset/base/315580 Log: Two changes to vm_fault_populate(): Simplify the logic for clipping the range returned by the pager to fit within the map entry. Use atop() rather than OFF_TO_IDX() on addresses. Reviewed by: kib MFC after: 1 week Modified: head/sys/vm/vm_fault.c Modified: head/sys/vm/vm_fault.c ============================================================================== --- head/sys/vm/vm_fault.c Sun Mar 19 19:11:40 2017 (r315579) +++ head/sys/vm/vm_fault.c Sun Mar 19 19:52:47 2017 (r315580) @@ -352,8 +352,7 @@ vm_fault_populate(struct faultstate *fs, MPASS(fs->lookup_still_valid); pager_first = OFF_TO_IDX(fs->entry->offset); - pager_last = OFF_TO_IDX(fs->entry->offset + fs->entry->end - - fs->entry->start) - 1; + pager_last = pager_first + atop(fs->entry->end - fs->entry->start) - 1; unlock_map(fs); unlock_vp(fs); @@ -404,18 +403,20 @@ vm_fault_populate(struct faultstate *fs, * In case the pager expanded the range, clip it to fit into * the map entry. */ - map_first = MAX(OFF_TO_IDX(fs->entry->offset), pager_first); - if (map_first > pager_first) + map_first = OFF_TO_IDX(fs->entry->offset); + if (map_first > pager_first) { vm_fault_populate_cleanup(fs->first_object, pager_first, map_first - 1); - map_last = MIN(OFF_TO_IDX(fs->entry->end - fs->entry->start + - fs->entry->offset) - 1, pager_last); - if (map_last < pager_last) + pager_first = map_first; + } + map_last = map_first + atop(fs->entry->end - fs->entry->start) - 1; + if (map_last < pager_last) { vm_fault_populate_cleanup(fs->first_object, map_last + 1, pager_last); - - for (pidx = map_first, m = vm_page_lookup(fs->first_object, pidx); - pidx <= map_last; pidx++, m = vm_page_next(m)) { + pager_last = map_last; + } + for (pidx = pager_first, m = vm_page_lookup(fs->first_object, pidx); + pidx <= pager_last; pidx++, m = vm_page_next(m)) { vm_fault_populate_check_page(m); vm_fault_dirty(fs->entry, m, prot, fault_type, fault_flags, true); From owner-svn-src-head@freebsd.org Sun Mar 19 20:05:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C6EECD13EFA; Sun, 19 Mar 2017 20:05:22 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9F11F1CA6; Sun, 19 Mar 2017 20:05:22 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JK5L62005541; Sun, 19 Mar 2017 20:05:21 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JK5LL7005539; Sun, 19 Mar 2017 20:05:21 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703192005.v2JK5LL7005539@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Sun, 19 Mar 2017 20:05:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315583 - head/sys/net80211 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 20:05:22 -0000 Author: avos Date: Sun Mar 19 20:05:21 2017 New Revision: 315583 URL: https://svnweb.freebsd.org/changeset/base/315583 Log: net80211: add a timer to flush fast-frames queues. This should allow to drop 'ieee80211_ff_[age/flush]' calls from drivers (an additional call can be made from ieee80211_tx_complete() for non-default ieee80211_ffagemax values to prevent stalls - but it will require an additional counter for transmitted frames). Tested with RTL8821AU, STA mode (A-MSDU part only). Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D9984 Modified: head/sys/net80211/ieee80211_superg.c head/sys/net80211/ieee80211_superg.h Modified: head/sys/net80211/ieee80211_superg.c ============================================================================== --- head/sys/net80211/ieee80211_superg.c Sun Mar 19 20:04:57 2017 (r315582) +++ head/sys/net80211/ieee80211_superg.c Sun Mar 19 20:05:21 2017 (r315583) @@ -94,6 +94,33 @@ SYSCTL_PROC(_net_wlan, OID_AUTO, ffagema &ieee80211_ffagemax, 0, ieee80211_sysctl_msecs_ticks, "I", "max hold time for fast-frame staging (ms)"); +static void +ff_age_all(void *arg, int npending) +{ + struct ieee80211com *ic = arg; + + /* XXX cache timer value somewhere (racy) */ + ieee80211_ff_age_all(ic, ieee80211_ffagemax + 1); +} + +static void +ff_check_cancel_age_timer(struct ieee80211com *ic) +{ + struct ieee80211_superg *sg = ic->ic_superg; + + IEEE80211_FF_LOCK_ASSERT(ic); + + if (sg->ff_stageq[WME_AC_VO].depth == 0 && + sg->ff_stageq[WME_AC_VI].depth == 0 && + sg->ff_stageq[WME_AC_BE].depth == 0 && + sg->ff_stageq[WME_AC_BK].depth == 0) { + struct timeout_task *qtask = &sg->ff_qtimer; + + /* NB: may be called from the task itself */ + (void) taskqueue_cancel_timeout(ic->ic_tq, qtask, NULL); + } +} + void ieee80211_superg_attach(struct ieee80211com *ic) { @@ -109,6 +136,7 @@ ieee80211_superg_attach(struct ieee80211 __func__); return; } + TIMEOUT_TASK_INIT(ic->ic_tq, &sg->ff_qtimer, 0, ff_age_all, ic); ic->ic_superg = sg; /* @@ -122,12 +150,16 @@ ieee80211_superg_attach(struct ieee80211 void ieee80211_superg_detach(struct ieee80211com *ic) { - IEEE80211_FF_LOCK_DESTROY(ic); if (ic->ic_superg != NULL) { + struct timeout_task *qtask = &ic->ic_superg->ff_qtimer; + + while (taskqueue_cancel_timeout(ic->ic_tq, qtask, NULL) != 0) + taskqueue_drain_timeout(ic->ic_tq, qtask); IEEE80211_FREE(ic->ic_superg, M_80211_VAP); ic->ic_superg = NULL; } + IEEE80211_FF_LOCK_DESTROY(ic); } void @@ -647,9 +679,10 @@ ieee80211_ff_age(struct ieee80211com *ic sq->head = m->m_nextpkt; sq->depth--; } - if (m == NULL) + if (m == NULL) { sq->tail = NULL; - else + ff_check_cancel_age_timer(ic); + } else M_AGE_SUB(m, quanta); IEEE80211_FF_UNLOCK(ic); @@ -668,8 +701,13 @@ stageq_add(struct ieee80211com *ic, stru if (sq->tail != NULL) { sq->tail->m_nextpkt = m; age -= M_AGE_GET(sq->head); - } else + } else { sq->head = m; + + /* Do not restart the timer if task was already scheduled. */ + struct timeout_task *qtask = &ic->ic_superg->ff_qtimer; + taskqueue_enqueue_timeout(ic->ic_tq, qtask, -age); + } KASSERT(age >= 0, ("age %d", age)); M_AGE_SET(m, age); m->m_nextpkt = NULL; @@ -694,6 +732,7 @@ stageq_remove(struct ieee80211com *ic, s if (sq->tail == m) sq->tail = mprev; sq->depth--; + ff_check_cancel_age_timer(ic); return; } mprev = m; Modified: head/sys/net80211/ieee80211_superg.h ============================================================================== --- head/sys/net80211/ieee80211_superg.h Sun Mar 19 20:04:57 2017 (r315582) +++ head/sys/net80211/ieee80211_superg.h Sun Mar 19 20:05:21 2017 (r315583) @@ -66,6 +66,8 @@ struct ieee80211_stageq { struct ieee80211_superg { /* fast-frames staging q */ struct ieee80211_stageq ff_stageq[WME_NUM_AC]; + /* flush queues automatically */ + struct timeout_task ff_qtimer; }; void ieee80211_superg_attach(struct ieee80211com *); From owner-svn-src-head@freebsd.org Sun Mar 19 20:51:29 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CFBF7D13D93; Sun, 19 Mar 2017 20:51:29 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 76AEE1653; Sun, 19 Mar 2017 20:51:29 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JKpSqA026281; Sun, 19 Mar 2017 20:51:28 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JKpSUv026279; Sun, 19 Mar 2017 20:51:28 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703192051.v2JKpSUv026279@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Sun, 19 Mar 2017 20:51:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315584 - in head/sys/dev/rtwn: pci usb X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 20:51:29 -0000 Author: avos Date: Sun Mar 19 20:51:28 2017 New Revision: 315584 URL: https://svnweb.freebsd.org/changeset/base/315584 Log: rtwn: drop unneeded (after r315583) code. Tested with RTL8188EU, HOSTAP mode + RTL8821AU, STA mode (fast-frames / A-MSDU). Modified: head/sys/dev/rtwn/pci/rtwn_pci_rx.c head/sys/dev/rtwn/usb/rtwn_usb_rx.c Modified: head/sys/dev/rtwn/pci/rtwn_pci_rx.c ============================================================================== --- head/sys/dev/rtwn/pci/rtwn_pci_rx.c Sun Mar 19 20:05:21 2017 (r315583) +++ head/sys/dev/rtwn/pci/rtwn_pci_rx.c Sun Mar 19 20:51:28 2017 (r315584) @@ -280,17 +280,6 @@ rtwn_pci_rx_done(struct rtwn_softc *sc) ring->cur = (ring->cur + 1) % RTWN_PCI_RX_LIST_COUNT; } - - /* Finished receive; age anything left on the FF queue by a little bump */ - /* - * XXX TODO: just make this a callout timer schedule so we can - * flush the FF staging queue if we're approaching idle. - */ -#ifdef IEEE80211_SUPPORT_SUPERG - if (!(sc->sc_flags & RTWN_FW_LOADED) || - sc->sc_ratectl != RTWN_RATECTL_NET80211) - rtwn_cmd_sleepable(sc, NULL, 0, rtwn_ff_flush_all); -#endif } void Modified: head/sys/dev/rtwn/usb/rtwn_usb_rx.c ============================================================================== --- head/sys/dev/rtwn/usb/rtwn_usb_rx.c Sun Mar 19 20:05:21 2017 (r315583) +++ head/sys/dev/rtwn/usb/rtwn_usb_rx.c Sun Mar 19 20:51:28 2017 (r315584) @@ -319,17 +319,6 @@ tr_setup: break; } finish: - /* Finished receive; age anything left on the FF queue by a little bump */ - /* - * XXX TODO: just make this a callout timer schedule so we can - * flush the FF staging queue if we're approaching idle. - */ -#ifdef IEEE80211_SUPPORT_SUPERG - if (!(sc->sc_flags & RTWN_FW_LOADED) || - sc->sc_ratectl != RTWN_RATECTL_NET80211) - rtwn_cmd_sleepable(sc, NULL, 0, rtwn_ff_flush_all); -#endif - /* Kick-start more transmit in case we stalled */ rtwn_start(sc); } From owner-svn-src-head@freebsd.org Sun Mar 19 21:18:54 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6C1A2D12D78; Sun, 19 Mar 2017 21:18:54 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 39450DF5; Sun, 19 Mar 2017 21:18:54 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JLIrLU034432; Sun, 19 Mar 2017 21:18:53 GMT (envelope-from jilles@FreeBSD.org) Received: (from jilles@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JLIrPj034431; Sun, 19 Mar 2017 21:18:53 GMT (envelope-from jilles@FreeBSD.org) Message-Id: <201703192118.v2JLIrPj034431@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jilles set sender to jilles@FreeBSD.org using -f From: Jilles Tjoelker Date: Sun, 19 Mar 2017 21:18:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315585 - head/bin/sh X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 21:18:54 -0000 Author: jilles Date: Sun Mar 19 21:18:53 2017 New Revision: 315585 URL: https://svnweb.freebsd.org/changeset/base/315585 Log: sh: Fix build with -DDEBUG=2. With the new expansion code (word splitting during instead of after other expansion processing), tracing the result of command substitution is no longer possible, so stop trying. Modified: head/bin/sh/expand.c Modified: head/bin/sh/expand.c ============================================================================== --- head/bin/sh/expand.c Sun Mar 19 20:51:28 2017 (r315584) +++ head/bin/sh/expand.c Sun Mar 19 21:18:53 2017 (r315585) @@ -522,10 +522,7 @@ expbackq(union node *cmd, int quoted, in exitstatus = waitforjob(in.jp, (int *)NULL); ungrabstackstr(p, dest); } - TRACE(("expbackq: size=%td: \"%.*s\"\n", - ((dest - stackblock()) - startloc), - (int)((dest - stackblock()) - startloc), - stackblock() + startloc)); + TRACE(("expbackq: done\n")); expdest = dest; INTON; } From owner-svn-src-head@freebsd.org Sun Mar 19 21:24:09 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 07371D13067; Sun, 19 Mar 2017 21:24:09 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AEA2413E4; Sun, 19 Mar 2017 21:24:08 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JLO7LG038579; Sun, 19 Mar 2017 21:24:07 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JLO7Id038578; Sun, 19 Mar 2017 21:24:07 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703192124.v2JLO7Id038578@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sun, 19 Mar 2017 21:24:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315586 - head/sys/dev/cpuctl X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 21:24:09 -0000 Author: kib Date: Sun Mar 19 21:24:07 2017 New Revision: 315586 URL: https://svnweb.freebsd.org/changeset/base/315586 Log: Style. Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/dev/cpuctl/cpuctl.c Modified: head/sys/dev/cpuctl/cpuctl.c ============================================================================== --- head/sys/dev/cpuctl/cpuctl.c Sun Mar 19 21:18:53 2017 (r315585) +++ head/sys/dev/cpuctl/cpuctl.c Sun Mar 19 21:24:07 2017 (r315586) @@ -126,7 +126,8 @@ set_cpu(int cpu, struct thread *td) sched_bind(td, cpu); thread_unlock(td); KASSERT(td->td_oncpu == cpu, - ("[cpuctl,%d]: cannot bind to target cpu %d on cpu %d", __LINE__, cpu, td->td_oncpu)); + ("[cpuctl,%d]: cannot bind to target cpu %d on cpu %d", __LINE__, + cpu, td->td_oncpu)); } static void @@ -145,11 +146,11 @@ restore_cpu(int oldcpu, int is_bound, st int cpuctl_ioctl(struct cdev *dev, u_long cmd, caddr_t data, - int flags, struct thread *td) + int flags, struct thread *td) { - int ret; - int cpu = dev2unit(dev); + int cpu, ret; + cpu = dev2unit(dev); if (cpu > mp_maxid || !cpu_enabled(cpu)) { DPRINTF("[cpuctl,%d]: bad cpu number %d\n", __LINE__, cpu); return (ENXIO); @@ -279,7 +280,8 @@ cpuctl_do_msr(int cpu, cpuctl_msr_args_t ret = wrmsr_safe(data->msr, reg & ~data->data); critical_exit(); } else - panic("[cpuctl,%d]: unknown operation requested: %lu", __LINE__, cmd); + panic("[cpuctl,%d]: unknown operation requested: %lu", + __LINE__, cmd); restore_cpu(oldcpu, is_bound, td); return (ret); } @@ -311,7 +313,8 @@ cpuctl_do_update(int cpu, cpuctl_update_ ret = update_intel(cpu, data, td); else if(strncmp(vendor, AMD_VENDOR_ID, sizeof(AMD_VENDOR_ID)) == 0) ret = update_amd(cpu, data, td); - else if(strncmp(vendor, CENTAUR_VENDOR_ID, sizeof(CENTAUR_VENDOR_ID)) == 0) + else if(strncmp(vendor, CENTAUR_VENDOR_ID, sizeof(CENTAUR_VENDOR_ID)) + == 0) ret = update_via(cpu, data, td); else ret = ENXIO; From owner-svn-src-head@freebsd.org Sun Mar 19 21:25:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 67A76D1312F; Sun, 19 Mar 2017 21:25:15 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 25F0B1632; Sun, 19 Mar 2017 21:25:15 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JLPEdb038671; Sun, 19 Mar 2017 21:25:14 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JLPDPN038667; Sun, 19 Mar 2017 21:25:13 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703192125.v2JLPDPN038667@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 19 Mar 2017 21:25:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315587 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 21:25:15 -0000 Author: mav Date: Sun Mar 19 21:25:13 2017 New Revision: 315587 URL: https://svnweb.freebsd.org/changeset/base/315587 Log: Remove some useless code. MFC after: 2 weeks Modified: head/sys/dev/isp/isp.c head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/ispvar.h Modified: head/sys/dev/isp/isp.c ============================================================================== --- head/sys/dev/isp/isp.c Sun Mar 19 21:24:07 2017 (r315586) +++ head/sys/dev/isp/isp.c Sun Mar 19 21:25:13 2017 (r315587) @@ -4530,7 +4530,6 @@ isp_start(XS_T *xs) return (dmaresult); } isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "START cmd cdb[0]=0x%x datalen %ld", XS_CDBP(xs)[0], (long) XS_XFRLEN(xs)); - isp->isp_nactive++; return (CMD_QUEUED); } @@ -5359,9 +5358,6 @@ isp_intr_respq(ispsoftc_t *isp) } isp_destroy_handle(isp, sp->req_handle); - if (isp->isp_nactive > 0) { - isp->isp_nactive--; - } complist[ndone++] = xs; /* defer completion call until later */ ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ last_etype = etype; @@ -5932,9 +5928,6 @@ isp_handle_other_response(ispsoftc_t *is void *ptr; switch (type) { - case RQSTYPE_STATUS_CONT: - isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response"); - return (1); case RQSTYPE_MARKER: isp_prt(isp, ISP_LOG_WARN1, "Marker Response"); return (1); @@ -6536,9 +6529,6 @@ isp_fastpost_complete(ispsoftc_t *isp, u if (XS_XFRLEN(xs)) { ISP_DMAFREE(isp, xs, fph); } - if (isp->isp_nactive) { - isp->isp_nactive--; - } isp_done(xs); } @@ -7579,7 +7569,6 @@ isp_reinit(ispsoftc_t *isp, int do_load_ } cleanup: - isp->isp_nactive = 0; isp_clear_commands(isp); if (IS_FC(isp)) { for (i = 0; i < isp->isp_nchan; i++) Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Sun Mar 19 21:24:07 2017 (r315586) +++ head/sys/dev/isp/isp_freebsd.c Sun Mar 19 21:25:13 2017 (r315587) @@ -1591,7 +1591,6 @@ isp_target_start_ctio(ispsoftc_t *isp, u xpt_done(ccb); continue; } - isp->isp_nactive++; ccb->ccb_h.status = CAM_REQ_INPROG | CAM_SIM_QUEUED; if (xfrlen) { ccb->ccb_h.spriv_field0 = atp->bytes_xfered; @@ -2113,9 +2112,6 @@ isp_handle_platform_ctio(ispsoftc_t *isp isp_destroy_handle(isp, handle); resid = data_requested = PISP_PCMD(ccb)->datalen; isp_free_pcmd(isp, ccb); - if (isp->isp_nactive) { - isp->isp_nactive--; - } bus = XS_CHANNEL(ccb); if (IS_24XX(isp)) { Modified: head/sys/dev/isp/ispvar.h ============================================================================== --- head/sys/dev/isp/ispvar.h Sun Mar 19 21:24:07 2017 (r315586) +++ head/sys/dev/isp/ispvar.h Sun Mar 19 21:25:13 2017 (r315587) @@ -553,7 +553,6 @@ struct ispsoftc { volatile u_int isp_mboxbsy; /* mailbox command active */ volatile u_int isp_state; - volatile u_int isp_nactive; /* how many commands active */ volatile mbreg_t isp_curmbx; /* currently active mailbox command */ volatile uint32_t isp_reqodx; /* index of last ISP pickup */ volatile uint32_t isp_reqidx; /* index of next request */ From owner-svn-src-head@freebsd.org Sun Mar 19 21:25:29 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F3DEBD1317B; Sun, 19 Mar 2017 21:25:28 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C129B170B; Sun, 19 Mar 2017 21:25:28 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JLPRiw038723; Sun, 19 Mar 2017 21:25:27 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JLPRH5038722; Sun, 19 Mar 2017 21:25:27 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703192125.v2JLPRH5038722@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sun, 19 Mar 2017 21:25:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315588 - head/sys/dev/cpuctl X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 21:25:29 -0000 Author: kib Date: Sun Mar 19 21:25:27 2017 New Revision: 315588 URL: https://svnweb.freebsd.org/changeset/base/315588 Log: Update the list of cpudev ioctls which require write access. Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/dev/cpuctl/cpuctl.c Modified: head/sys/dev/cpuctl/cpuctl.c ============================================================================== --- head/sys/dev/cpuctl/cpuctl.c Sun Mar 19 21:25:13 2017 (r315587) +++ head/sys/dev/cpuctl/cpuctl.c Sun Mar 19 21:25:27 2017 (r315588) @@ -156,8 +156,9 @@ cpuctl_ioctl(struct cdev *dev, u_long cm return (ENXIO); } /* Require write flag for "write" requests. */ - if ((cmd == CPUCTL_WRMSR || cmd == CPUCTL_UPDATE) && - ((flags & FWRITE) == 0)) + if ((cmd == CPUCTL_MSRCBIT || cmd == CPUCTL_MSRSBIT || + cmd == CPUCTL_UPDATE || cmd == CPUCTL_WRMSR) && + (flags & FWRITE) == 0) return (EPERM); switch (cmd) { case CPUCTL_RDMSR: From owner-svn-src-head@freebsd.org Sun Mar 19 21:28:39 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3956AD132A7; Sun, 19 Mar 2017 21:28:39 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D91E319CC; Sun, 19 Mar 2017 21:28:38 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JLSbD2038869; Sun, 19 Mar 2017 21:28:37 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JLSbPt038868; Sun, 19 Mar 2017 21:28:37 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703192128.v2JLSbPt038868@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 21:28:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315589 - head/sys/arm/freescale/imx X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 21:28:39 -0000 Author: ian Date: Sun Mar 19 21:28:37 2017 New Revision: 315589 URL: https://svnweb.freebsd.org/changeset/base/315589 Log: Eliminate unnecessary read/modify/write sequences during eventtimer setup. It turns out to be surprisingly expensive to access the gpt hardware (on the order of 150ns per read/write). To cut down on the overhead of setting up each eventtimer event, eliminate read-modify-write sequences to manage the compare interrupt enable, by keeping a shadow copy of the hardware register and only writing to the hardware when the enable bits really change. Modified: head/sys/arm/freescale/imx/imx_gpt.c Modified: head/sys/arm/freescale/imx/imx_gpt.c ============================================================================== --- head/sys/arm/freescale/imx/imx_gpt.c Sun Mar 19 21:25:27 2017 (r315588) +++ head/sys/arm/freescale/imx/imx_gpt.c Sun Mar 19 21:28:37 2017 (r315589) @@ -83,6 +83,7 @@ struct imx_gpt_softc { uint32_t sc_period; uint32_t sc_clksrc; uint32_t clkfreq; + uint32_t ir_reg; struct eventtimer et; }; @@ -284,16 +285,20 @@ imx_gpt_timer_start(struct eventtimer *e /* Set expected value */ WRITE4(sc, IMX_GPT_OCR2, READ4(sc, IMX_GPT_CNT) + sc->sc_period); /* Enable compare register 2 Interrupt */ - SET4(sc, IMX_GPT_IR, GPT_IR_OF2); + sc->ir_reg |= GPT_IR_OF2; + WRITE4(sc, IMX_GPT_IR, sc->ir_reg); return (0); } else if (first != 0) { + /* Enable compare register 3 interrupt if not already on. */ + if ((sc->ir_reg & GPT_IR_OF3) == 0) { + sc->ir_reg |= GPT_IR_OF3; + WRITE4(sc, IMX_GPT_IR, sc->ir_reg); + } ticks = ((uint32_t)et->et_frequency * first) >> 32; /* Do not disturb, otherwise event will be lost */ spinlock_enter(); /* Set expected value */ WRITE4(sc, IMX_GPT_OCR3, READ4(sc, IMX_GPT_CNT) + ticks); - /* Enable compare register 1 Interrupt */ - SET4(sc, IMX_GPT_IR, GPT_IR_OF3); /* Now everybody can relax */ spinlock_exit(); return (0); @@ -309,9 +314,10 @@ imx_gpt_timer_stop(struct eventtimer *et sc = (struct imx_gpt_softc *)et->et_priv; - /* Disable OF2 Interrupt */ - CLEAR4(sc, IMX_GPT_IR, GPT_IR_OF2); - WRITE4(sc, IMX_GPT_SR, GPT_IR_OF2); + /* Disable interrupts and clear any pending status. */ + sc->ir_reg &= ~(GPT_IR_OF2 | GPT_IR_OF3); + WRITE4(sc, IMX_GPT_IR, sc->ir_reg); + WRITE4(sc, IMX_GPT_SR, GPT_IR_OF2 | GPT_IR_OF3); sc->sc_period = 0; return (0); From owner-svn-src-head@freebsd.org Sun Mar 19 21:49:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 26F1DD13BB1; Sun, 19 Mar 2017 21:49:17 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E81AF76D; Sun, 19 Mar 2017 21:49:16 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JLnFDO046777; Sun, 19 Mar 2017 21:49:15 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JLnFWB046776; Sun, 19 Mar 2017 21:49:15 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703192149.v2JLnFWB046776@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Sun, 19 Mar 2017 21:49:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315590 - head/usr.bin/diff X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 21:49:17 -0000 Author: ngie Date: Sun Mar 19 21:49:15 2017 New Revision: 315590 URL: https://svnweb.freebsd.org/changeset/base/315590 Log: diff(1): add --strip-trailing-cr to last example in the SYNOPSIS This syncs the last example in the SYNOPSIS with the other examples. Reviewed by: bapt Sponsored by: Dell EMC Isilon Differential Revision: D10017 Modified: head/usr.bin/diff/diff.1 Modified: head/usr.bin/diff/diff.1 ============================================================================== --- head/usr.bin/diff/diff.1 Sun Mar 19 21:28:37 2017 (r315589) +++ head/usr.bin/diff/diff.1 Sun Mar 19 21:49:15 2017 (r315590) @@ -30,7 +30,7 @@ .\" @(#)diff.1 8.1 (Berkeley) 6/30/93 .\" $FreeBSD$ .\" -.Dd March 15, 2017 +.Dd March 19, 2017 .Dt DIFF 1 .Os .Sh NAME @@ -92,6 +92,7 @@ .Op Fl -ignore-case .Op Fl -no-ignore-case .Op Fl -normal +.Op Fl -strip-trailing-cr .Op Fl -tabsize .Op Fl I Ar pattern .Bk -words From owner-svn-src-head@freebsd.org Sun Mar 19 21:53:13 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B4F58D13DAA; Sun, 19 Mar 2017 21:53:13 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 740BAB8B; Sun, 19 Mar 2017 21:53:13 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JLrC8T050452; Sun, 19 Mar 2017 21:53:12 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JLrCPr050451; Sun, 19 Mar 2017 21:53:12 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703192153.v2JLrCPr050451@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sun, 19 Mar 2017 21:53:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315591 - head/sys/arm/freescale/imx X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 21:53:13 -0000 Author: ian Date: Sun Mar 19 21:53:12 2017 New Revision: 315591 URL: https://svnweb.freebsd.org/changeset/base/315591 Log: Replace the hard-coded way-too-small minimum event timer period with a value calculated at runtime based on how long it takes to set up an event in hardware. This fixes the intermittant 1-minute hang at boot on imx5 systems, and also the occasional oversleeping while running. It doesn't affect imx6 systems, which use different hardware for eventtimers. It turns out that it usually takes about 30 timer ticks to set up the timer compare register, and the old hard-coded minimum period was 10 ticks. On the rare occasions when a timeout event that short was set up, we'd miss the event and have to wait about 64 seconds for counter rollover before the compare interrupt would fire. Instead of just hardcoding a new bigger value, the code now measures the time it takes to do the register read/write sequence to set up the compare register, scales it up by 1.5x to be safe, and calculates the minimum event period from the result. In the real world, the minimum period works out to about 750 nanoseconds on imx5 hardware. Modified: head/sys/arm/freescale/imx/imx_gpt.c Modified: head/sys/arm/freescale/imx/imx_gpt.c ============================================================================== --- head/sys/arm/freescale/imx/imx_gpt.c Sun Mar 19 21:49:15 2017 (r315590) +++ head/sys/arm/freescale/imx/imx_gpt.c Sun Mar 19 21:53:12 2017 (r315591) @@ -102,10 +102,6 @@ static const int imx_gpt_delay_count = 7 /* Try to divide down an available fast clock to this frequency. */ #define TARGET_FREQUENCY 1000000000 -/* Don't try to set an event timer period smaller than this. */ -#define MIN_ET_PERIOD 10LLU - - static struct resource_spec imx_gpt_spec[] = { { SYS_RES_MEMORY, 0, RF_ACTIVE }, { SYS_RES_IRQ, 0, RF_ACTIVE }, @@ -143,7 +139,7 @@ imx_gpt_attach(device_t dev) { struct imx_gpt_softc *sc; int ctlreg, err; - uint32_t basefreq, prescale; + uint32_t basefreq, prescale, setup_ticks, t1, t2; sc = device_get_softc(dev); @@ -249,13 +245,25 @@ imx_gpt_attach(device_t dev) return (ENXIO); } + /* + * Measure how many clock ticks it takes to setup a one-shot event (it's + * longer than you might think, due to wait states in accessing gpt + * registers). Scale up the result by a factor of 1.5 to be safe, + * and use that to set the minimum eventtimer period we can schedule. In + * the real world, the value works out to about 750ns on imx5 hardware. + */ + t1 = READ4(sc, IMX_GPT_CNT); + WRITE4(sc, IMX_GPT_OCR3, 0); + t2 = READ4(sc, IMX_GPT_CNT); + setup_ticks = ((t2 - t1 + 1) * 3) / 2; + /* Register as an eventtimer. */ sc->et.et_name = "iMXGPT"; sc->et.et_flags = ET_FLAGS_ONESHOT | ET_FLAGS_PERIODIC; sc->et.et_quality = 800; sc->et.et_frequency = sc->clkfreq; - sc->et.et_min_period = (MIN_ET_PERIOD << 32) / sc->et.et_frequency; - sc->et.et_max_period = (0xfffffffeLLU << 32) / sc->et.et_frequency; + sc->et.et_min_period = ((uint64_t)setup_ticks << 32) / sc->clkfreq; + sc->et.et_max_period = ((uint64_t)0xfffffffe << 32) / sc->clkfreq; sc->et.et_start = imx_gpt_timer_start; sc->et.et_stop = imx_gpt_timer_stop; sc->et.et_priv = sc; From owner-svn-src-head@freebsd.org Sun Mar 19 22:18:45 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D4216D137B5; Sun, 19 Mar 2017 22:18:45 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A3C6F1CB2; Sun, 19 Mar 2017 22:18:45 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JMIiD3059440; Sun, 19 Mar 2017 22:18:44 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JMIiTx059439; Sun, 19 Mar 2017 22:18:44 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703192218.v2JMIiTx059439@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Sun, 19 Mar 2017 22:18:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315594 - head/sys/net80211 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 22:18:45 -0000 Author: avos Date: Sun Mar 19 22:18:44 2017 New Revision: 315594 URL: https://svnweb.freebsd.org/changeset/base/315594 Log: net80211: do not cancel callout when FF queue is empty. This should reduce overhead for aggregates (since every second frame clears the queue and reschedules the task there is no need to cancel the callout here; let it just run once at the end - even if queue is empty). Reported by: adrian Modified: head/sys/net80211/ieee80211_superg.c Modified: head/sys/net80211/ieee80211_superg.c ============================================================================== --- head/sys/net80211/ieee80211_superg.c Sun Mar 19 22:14:22 2017 (r315593) +++ head/sys/net80211/ieee80211_superg.c Sun Mar 19 22:18:44 2017 (r315594) @@ -103,24 +103,6 @@ ff_age_all(void *arg, int npending) ieee80211_ff_age_all(ic, ieee80211_ffagemax + 1); } -static void -ff_check_cancel_age_timer(struct ieee80211com *ic) -{ - struct ieee80211_superg *sg = ic->ic_superg; - - IEEE80211_FF_LOCK_ASSERT(ic); - - if (sg->ff_stageq[WME_AC_VO].depth == 0 && - sg->ff_stageq[WME_AC_VI].depth == 0 && - sg->ff_stageq[WME_AC_BE].depth == 0 && - sg->ff_stageq[WME_AC_BK].depth == 0) { - struct timeout_task *qtask = &sg->ff_qtimer; - - /* NB: may be called from the task itself */ - (void) taskqueue_cancel_timeout(ic->ic_tq, qtask, NULL); - } -} - void ieee80211_superg_attach(struct ieee80211com *ic) { @@ -679,10 +661,9 @@ ieee80211_ff_age(struct ieee80211com *ic sq->head = m->m_nextpkt; sq->depth--; } - if (m == NULL) { + if (m == NULL) sq->tail = NULL; - ff_check_cancel_age_timer(ic); - } else + else M_AGE_SUB(m, quanta); IEEE80211_FF_UNLOCK(ic); @@ -732,7 +713,6 @@ stageq_remove(struct ieee80211com *ic, s if (sq->tail == m) sq->tail = mprev; sq->depth--; - ff_check_cancel_age_timer(ic); return; } mprev = m; From owner-svn-src-head@freebsd.org Sun Mar 19 23:05:00 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 22F4AD1379A; Sun, 19 Mar 2017 23:05:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E6CF61515; Sun, 19 Mar 2017 23:04:59 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JN4x67079098; Sun, 19 Mar 2017 23:04:59 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JN4xv6079097; Sun, 19 Mar 2017 23:04:59 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703192304.v2JN4xv6079097@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Sun, 19 Mar 2017 23:04:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315595 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 23:05:00 -0000 Author: ngie Date: Sun Mar 19 23:04:58 2017 New Revision: 315595 URL: https://svnweb.freebsd.org/changeset/base/315595 Log: Remove a commented out line before kvm_getprocs(3) The commented out return value for kvm_getprocs(3) was misleading -- the uncommented line is correct. No content change MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/lib/libkvm/kvm_getprocs.3 Modified: head/lib/libkvm/kvm_getprocs.3 ============================================================================== --- head/lib/libkvm/kvm_getprocs.3 Sun Mar 19 22:18:44 2017 (r315594) +++ head/lib/libkvm/kvm_getprocs.3 Sun Mar 19 23:04:58 2017 (r315595) @@ -47,7 +47,6 @@ .In sys/param.h .In sys/sysctl.h .In sys/user.h -.\" .Fa kvm_t *kd .Ft struct kinfo_proc * .Fn kvm_getprocs "kvm_t *kd" "int op" "int arg" "int *cnt" .Ft char ** From owner-svn-src-head@freebsd.org Sun Mar 19 23:05:04 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EC6D1D137C2; Sun, 19 Mar 2017 23:05:04 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B18231554; Sun, 19 Mar 2017 23:05:04 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JN53DF079156; Sun, 19 Mar 2017 23:05:03 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JN53gX079155; Sun, 19 Mar 2017 23:05:03 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703192305.v2JN53gX079155@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Sun, 19 Mar 2017 23:05:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315596 - head/sys/net80211 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 23:05:05 -0000 Author: avos Date: Sun Mar 19 23:05:03 2017 New Revision: 315596 URL: https://svnweb.freebsd.org/changeset/base/315596 Log: net80211: reschedule tasks properly after r315594. Modified: head/sys/net80211/ieee80211_superg.c Modified: head/sys/net80211/ieee80211_superg.c ============================================================================== --- head/sys/net80211/ieee80211_superg.c Sun Mar 19 23:04:58 2017 (r315595) +++ head/sys/net80211/ieee80211_superg.c Sun Mar 19 23:05:03 2017 (r315596) @@ -685,9 +685,8 @@ stageq_add(struct ieee80211com *ic, stru } else { sq->head = m; - /* Do not restart the timer if task was already scheduled. */ struct timeout_task *qtask = &ic->ic_superg->ff_qtimer; - taskqueue_enqueue_timeout(ic->ic_tq, qtask, -age); + taskqueue_enqueue_timeout(ic->ic_tq, qtask, age); } KASSERT(age >= 0, ("age %d", age)); M_AGE_SET(m, age); From owner-svn-src-head@freebsd.org Sun Mar 19 23:06:13 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1A125D138B4; Sun, 19 Mar 2017 23:06:13 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C1927182E; Sun, 19 Mar 2017 23:06:12 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JN6BkF079237; Sun, 19 Mar 2017 23:06:11 GMT (envelope-from alc@FreeBSD.org) Received: (from alc@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JN6BLY079236; Sun, 19 Mar 2017 23:06:11 GMT (envelope-from alc@FreeBSD.org) Message-Id: <201703192306.v2JN6BLY079236@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: alc set sender to alc@FreeBSD.org using -f From: Alan Cox Date: Sun, 19 Mar 2017 23:06:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315597 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 23:06:13 -0000 Author: alc Date: Sun Mar 19 23:06:11 2017 New Revision: 315597 URL: https://svnweb.freebsd.org/changeset/base/315597 Log: Style fixes. In particular, the variable "bogus" is used like a Boolean. Define it as such. Reviewed by: kib MFC after: 1 week Modified: head/sys/kern/vfs_bio.c Modified: head/sys/kern/vfs_bio.c ============================================================================== --- head/sys/kern/vfs_bio.c Sun Mar 19 23:05:03 2017 (r315596) +++ head/sys/kern/vfs_bio.c Sun Mar 19 23:06:11 2017 (r315597) @@ -2481,7 +2481,8 @@ vfs_vmio_iodone(struct buf *bp) vm_page_t m; vm_object_t obj; struct vnode *vp; - int bogus, i, iosize; + int i, iosize, resid; + bool bogus; obj = bp->b_bufobj->bo_object; KASSERT(obj->paging_in_progress >= bp->b_npages, @@ -2498,12 +2499,10 @@ vfs_vmio_iodone(struct buf *bp) KASSERT(bp->b_offset != NOOFFSET, ("vfs_vmio_iodone: bp %p has no buffer offset", bp)); - bogus = 0; + bogus = false; iosize = bp->b_bcount - bp->b_resid; VM_OBJECT_WLOCK(obj); for (i = 0; i < bp->b_npages; i++) { - int resid; - resid = ((foff + PAGE_SIZE) & ~(off_t)PAGE_MASK) - foff; if (resid > iosize) resid = iosize; @@ -2513,7 +2512,7 @@ vfs_vmio_iodone(struct buf *bp) */ m = bp->b_pages[i]; if (m == bogus_page) { - bogus = 1; + bogus = true; m = vm_page_lookup(obj, OFF_TO_IDX(foff)); if (m == NULL) panic("biodone: page disappeared!"); @@ -4211,10 +4210,11 @@ vfs_drain_busy_pages(struct buf *bp) void vfs_busy_pages(struct buf *bp, int clear_modify) { - int i, bogus; vm_object_t obj; vm_ooffset_t foff; vm_page_t m; + int i; + bool bogus; if (!(bp->b_flags & B_VMIO)) return; @@ -4227,7 +4227,7 @@ vfs_busy_pages(struct buf *bp, int clear vfs_drain_busy_pages(bp); if (bp->b_bufsize != 0) vfs_setdirty_locked_object(bp); - bogus = 0; + bogus = false; for (i = 0; i < bp->b_npages; i++) { m = bp->b_pages[i]; @@ -4256,7 +4256,7 @@ vfs_busy_pages(struct buf *bp, int clear } else if (m->valid == VM_PAGE_BITS_ALL && (bp->b_flags & B_CACHE) == 0) { bp->b_pages[i] = bogus_page; - bogus++; + bogus = true; } foff = (foff + PAGE_SIZE) & ~(off_t)PAGE_MASK; } From owner-svn-src-head@freebsd.org Sun Mar 19 23:27:19 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BCCECD13EAB; Sun, 19 Mar 2017 23:27:19 +0000 (UTC) (envelope-from marius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5560C1C7; Sun, 19 Mar 2017 23:27:19 +0000 (UTC) (envelope-from marius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2JNRIVH087405; Sun, 19 Mar 2017 23:27:18 GMT (envelope-from marius@FreeBSD.org) Received: (from marius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2JNRHsO087398; Sun, 19 Mar 2017 23:27:17 GMT (envelope-from marius@FreeBSD.org) Message-Id: <201703192327.v2JNRHsO087398@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marius set sender to marius@FreeBSD.org using -f From: Marius Strobl Date: Sun, 19 Mar 2017 23:27:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315598 - in head/sys/dev: mmc sdhci X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Mar 2017 23:27:19 -0000 Author: marius Date: Sun Mar 19 23:27:17 2017 New Revision: 315598 URL: https://svnweb.freebsd.org/changeset/base/315598 Log: o Add support for eMMC DDR bus speed mode at 52 MHz to sdhci(4) and mmc(4). For the most part, this consists of support for: - Switching the signal voltage (VCCQ) to 1.8 V or (if supported by the host controller) to 1.2 V, - setting the UHS mode as appropriate in the SDHCI_HOST_CONTROL2 register, - setting the power class in the eMMC device according to the core supply voltage (VCC), - using different bits for enabling a bus width of 4 and 8 bits in the the eMMC device at DDR or higher timings respectively, - arbitrating timings faster than high speed if there actually are additional devices on the same MMC bus. Given that support for DDR52 is not denoted by SDHCI capability registers, availability of that timing is indicated by a new quirk SDHCI_QUIRK_MMC_DDR52 and only enabled for Intel SDHCI controllers so far. Generally, what it takes for a sdhci(4) front-end to enable support for DDR52 is to hook up the bridge method mmcbr_switch_vccq (which especially for 1.2 V signaling support is chip/board specific) and the sdhci_set_uhs_timing sdhci(4) method. As a side-effect, this change also fixes communication with some eMMC devices at SDR high speed mode with 52 MHz due to the signaling voltage and UHS bits in the SDHCI controller no longer being left in an inappropriate state. Compared to 52 MHz at SDR high speed which typically yields ~45 MB/s with the eMMC chips tested, throughput goes up to ~80 MB/s at DDR52. Additionally, this change already adds infrastructure and quite some code for modes up to HS400ES and SDR104 respectively (I did not want to add to much stuff at a time, though). Essentially, what is still missing in order to be able to activate support for these latter is is support for and handling of (re-)tuning. o In sdhci(4), add two tunables hw.sdhci.quirk_clear as well as hw.sdhci.quirk_set, which (when hooked up in the front-end) allow to set/clear sdhci(4) quirks for debugging and testing purposes. However, especially for SDHCI controllers on the PCI bus which have no specific support code so far and, thus, are picked up as generic SDHCI controllers, hw.sdhci.quirk_set allows for setting the necessary quirks (if required). o In mmc(4), check and handle the return values of some more function calls instead of assuming that everything went right. In case failures actually are not problematic, indicate that by casting the return value to void. Reviewed by: jmcneill Modified: head/sys/dev/mmc/bridge.h head/sys/dev/mmc/mmc.c head/sys/dev/mmc/mmcbr_if.m head/sys/dev/mmc/mmcbrvar.h head/sys/dev/mmc/mmcreg.h head/sys/dev/sdhci/sdhci.c head/sys/dev/sdhci/sdhci.h head/sys/dev/sdhci/sdhci_acpi.c head/sys/dev/sdhci/sdhci_if.m head/sys/dev/sdhci/sdhci_pci.c Modified: head/sys/dev/mmc/bridge.h ============================================================================== --- head/sys/dev/mmc/bridge.h Sun Mar 19 23:06:11 2017 (r315597) +++ head/sys/dev/mmc/bridge.h Sun Mar 19 23:27:17 2017 (r315598) @@ -89,6 +89,10 @@ enum mmc_vdd { vdd_330, vdd_340, vdd_350, vdd_360 }; +enum mmc_vccq { + vccq_120 = 0, vccq_180, vccq_330 +}; + enum mmc_power_mode { power_off = 0, power_up, power_on }; @@ -105,18 +109,28 @@ enum mmc_bus_width { bus_width_1 = 0, bus_width_4 = 2, bus_width_8 = 3 }; +enum mmc_drv_type { + drv_type_b = 0, drv_type_a, drv_type_c, drv_type_d +}; + enum mmc_bus_timing { - bus_timing_normal = 0, bus_timing_hs + bus_timing_normal = 0, bus_timing_hs, bus_timing_uhs_sdr12, + bus_timing_uhs_sdr25, bus_timing_uhs_sdr50, bus_timing_uhs_ddr50, + bus_timing_uhs_sdr104, bus_timing_mmc_ddr52, bus_timing_mmc_hs200, + bus_timing_mmc_hs400, bus_timing_mmc_hs400es, bus_timing_max = + bus_timing_mmc_hs400es }; struct mmc_ios { uint32_t clock; /* Speed of the clock in Hz to move data */ enum mmc_vdd vdd; /* Voltage to apply to the power pins */ + enum mmc_vccq vccq; /* Voltage to use for signaling */ enum mmc_bus_mode bus_mode; enum mmc_chip_select chip_select; enum mmc_bus_width bus_width; enum mmc_power_mode power_mode; enum mmc_bus_timing timing; + enum mmc_drv_type drv_type; }; enum mmc_card_mode { @@ -134,6 +148,28 @@ struct mmc_host { #define MMC_CAP_HSPEED (1 << 2) /* Can do High Speed transfers */ #define MMC_CAP_BOOT_NOACC (1 << 4) /* Cannot access boot partitions */ #define MMC_CAP_WAIT_WHILE_BUSY (1 << 5) /* Host waits for busy responses */ +#define MMC_CAP_UHS_SDR12 (1 << 6) /* Can do UHS SDR12 */ +#define MMC_CAP_UHS_SDR25 (1 << 7) /* Can do UHS SDR25 */ +#define MMC_CAP_UHS_SDR50 (1 << 8) /* Can do UHS SDR50 */ +#define MMC_CAP_UHS_SDR104 (1 << 9) /* Can do UHS SDR104 */ +#define MMC_CAP_UHS_DDR50 (1 << 10) /* Can do UHS DDR50 */ +#define MMC_CAP_MMC_DDR52_120 (1 << 11) /* Can do eMMC DDR52 at 1.2 V */ +#define MMC_CAP_MMC_DDR52_180 (1 << 12) /* Can do eMMC DDR52 at 1.8 V */ +#define MMC_CAP_MMC_DDR52 (MMC_CAP_MMC_DDR52_120 | MMC_CAP_MMC_DDR52_180) +#define MMC_CAP_MMC_HS200_120 (1 << 13) /* Can do eMMC HS200 at 1.2 V */ +#define MMC_CAP_MMC_HS200_180 (1 << 14) /* Can do eMMC HS200 at 1.8 V */ +#define MMC_CAP_MMC_HS200 (MMC_CAP_MMC_HS200_120| MMC_CAP_MMC_HS200_180) +#define MMC_CAP_MMC_HS400_120 (1 << 15) /* Can do eMMC HS400 at 1.2 V */ +#define MMC_CAP_MMC_HS400_180 (1 << 16) /* Can do eMMC HS400 at 1.8 V */ +#define MMC_CAP_MMC_HS400 (MMC_CAP_MMC_HS400_120 | MMC_CAP_MMC_HS400_180) +#define MMC_CAP_MMC_HSX00_120 (MMC_CAP_MMC_HS200_120 | MMC_CAP_MMC_HS400_120) +#define MMC_CAP_MMC_ENH_STROBE (1 << 17) /* Can do eMMC Enhanced Strobe */ +#define MMC_CAP_SIGNALING_120 (1 << 18) /* Can do signaling at 1.2 V */ +#define MMC_CAP_SIGNALING_180 (1 << 19) /* Can do signaling at 1.8 V */ +#define MMC_CAP_SIGNALING_330 (1 << 20) /* Can do signaling at 3.3 V */ +#define MMC_CAP_DRIVER_TYPE_A (1 << 21) /* Can do Driver Type A */ +#define MMC_CAP_DRIVER_TYPE_C (1 << 22) /* Can do Driver Type C */ +#define MMC_CAP_DRIVER_TYPE_D (1 << 23) /* Can do Driver Type D */ enum mmc_card_mode mode; struct mmc_ios ios; /* Current state of the host */ }; @@ -141,7 +177,7 @@ struct mmc_host { extern driver_t mmc_driver; extern devclass_t mmc_devclass; -#define MMC_VERSION 2 +#define MMC_VERSION 3 #define MMC_DECLARE_BRIDGE(name) \ DRIVER_MODULE(mmc, name, mmc_driver, mmc_devclass, NULL, NULL); \ Modified: head/sys/dev/mmc/mmc.c ============================================================================== --- head/sys/dev/mmc/mmc.c Sun Mar 19 23:06:11 2017 (r315597) +++ head/sys/dev/mmc/mmc.c Sun Mar 19 23:27:17 2017 (r315598) @@ -1,6 +1,7 @@ /*- * Copyright (c) 2006 Bernd Walter. All rights reserved. * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2017 Marius Strobl * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -75,6 +76,8 @@ __FBSDID("$FreeBSD$"); #include "mmcbr_if.h" #include "mmcbus_if.h" +CTASSERT(bus_timing_max <= sizeof(uint32_t) * NBBY); + /* * Per-card data */ @@ -92,9 +95,11 @@ struct mmc_ivars { struct mmc_sd_status sd_status; /* SD_STATUS decoded */ u_char read_only; /* True when the device is read-only */ u_char bus_width; /* Bus width to use */ - u_char timing; /* Bus timing support */ u_char high_cap; /* High Capacity card (block addressed) */ uint32_t sec_count; /* Card capacity in 512byte blocks */ + uint32_t timings; /* Mask of bus timings supported */ + uint32_t vccq_120; /* Mask of bus timings at VCCQ of 1.2 V */ + uint32_t vccq_180; /* Mask of bus timings at VCCQ of 1.8 V */ uint32_t tran_speed; /* Max speed in normal mode */ uint32_t hs_tran_speed; /* Max speed in high speed mode */ uint32_t erase_sector; /* Card native erase sector size */ @@ -105,8 +110,6 @@ struct mmc_ivars { #define CMD_RETRIES 3 -#define CARD_ID_FREQUENCY 400000 /* Spec requires 400kHz max during ID phase. */ - static SYSCTL_NODE(_hw, OID_AUTO, mmc, CTLFLAG_RD, NULL, "mmc driver"); static int mmc_debug; @@ -180,12 +183,15 @@ static int mmc_send_op_cond(struct mmc_s uint32_t *rocr); static int mmc_send_relative_addr(struct mmc_softc *sc, uint32_t *resp); static int mmc_set_blocklen(struct mmc_softc *sc, uint32_t len); -static int mmc_set_card_bus_width(struct mmc_softc *sc, - struct mmc_ivars *ivar); +static int mmc_set_card_bus_width(struct mmc_softc *sc, struct mmc_ivars *ivar); +static int mmc_set_power_class(struct mmc_softc *sc, struct mmc_ivars *ivar); static int mmc_set_relative_addr(struct mmc_softc *sc, uint16_t resp); static int mmc_set_timing(struct mmc_softc *sc, struct mmc_ivars *ivar, - int timing); + enum mmc_bus_timing timing); static int mmc_test_bus_width(struct mmc_softc *sc); +static uint32_t mmc_timing_to_dtr(struct mmc_ivars *ivar, + enum mmc_bus_timing timing); +static const char *mmc_timing_to_string(enum mmc_bus_timing timing); static int mmc_wait_for_command(struct mmc_softc *sc, uint32_t opcode, uint32_t arg, uint32_t flags, uint32_t *resp, int retries); static int mmc_wait_for_req(struct mmc_softc *sc, struct mmc_request *req); @@ -264,8 +270,8 @@ mmc_acquire_bus(device_t busdev, device_ { struct mmc_softc *sc; struct mmc_ivars *ivar; - int err; - int rca; + int err, rca; + enum mmc_bus_timing timing; err = MMCBR_ACQUIRE_HOST(device_get_parent(busdev), busdev); if (err) @@ -287,16 +293,44 @@ mmc_acquire_bus(device_t busdev, device_ ivar = device_get_ivars(dev); rca = ivar->rca; if (sc->last_rca != rca) { - mmc_select_card(sc, rca); + if (mmc_select_card(sc, rca) != MMC_ERR_NONE) { + device_printf(sc->dev, "Card at relative " + "address %d failed to select.\n", rca); + return (ENXIO); + } sc->last_rca = rca; + timing = mmcbr_get_timing(busdev); /* Prepare bus width for the new card. */ if (bootverbose || mmc_debug) { device_printf(busdev, - "setting bus width to %d bits\n", + "setting bus width to %d bits %s timing\n", (ivar->bus_width == bus_width_4) ? 4 : - (ivar->bus_width == bus_width_8) ? 8 : 1); + (ivar->bus_width == bus_width_8) ? 8 : 1, + mmc_timing_to_string(timing)); + } + if (mmc_set_card_bus_width(sc, ivar) != MMC_ERR_NONE) { + device_printf(sc->dev, "Card at relative " + "address %d failed to set bus width.\n", + rca); + return (ENXIO); + } + if (isset(&ivar->vccq_120, timing)) + mmcbr_set_vccq(busdev, vccq_120); + else if (isset(&ivar->vccq_180, timing)) + mmcbr_set_vccq(busdev, vccq_180); + else + mmcbr_set_vccq(busdev, vccq_330); + if (mmcbr_switch_vccq(busdev) != 0) { + device_printf(sc->dev, "Failed to set VCCQ " + "for card at relative address %d.\n", rca); + return (ENXIO); + } + if (mmc_set_power_class(sc, ivar) != MMC_ERR_NONE) { + device_printf(sc->dev, "Card at relative " + "address %d failed to set power class.\n", + rca); + return (ENXIO); } - mmc_set_card_bus_width(sc, ivar); mmcbr_set_bus_width(busdev, ivar->bus_width); mmcbr_update_ios(busdev); } @@ -524,6 +558,7 @@ static void mmc_power_up(struct mmc_softc *sc) { device_t dev; + enum mmc_vccq vccq; dev = sc->dev; mmcbr_set_vdd(dev, mmc_highest_voltage(mmcbr_get_host_ocr(dev))); @@ -533,9 +568,14 @@ mmc_power_up(struct mmc_softc *sc) mmcbr_set_power_mode(dev, power_up); mmcbr_set_clock(dev, 0); mmcbr_update_ios(dev); + for (vccq = vccq_330; ; vccq--) { + mmcbr_set_vccq(dev, vccq); + if (mmcbr_switch_vccq(dev) == 0 || vccq == vccq_120) + break; + } mmc_ms_delay(1); - mmcbr_set_clock(dev, CARD_ID_FREQUENCY); + mmcbr_set_clock(dev, SD_MMC_CARD_ID_FREQUENCY); mmcbr_set_timing(dev, bus_timing_normal); mmcbr_set_power_mode(dev, power_on); mmcbr_update_ios(dev); @@ -631,10 +671,30 @@ mmc_set_card_bus_width(struct mmc_softc value = EXT_CSD_BUS_WIDTH_1; break; case bus_width_4: - value = EXT_CSD_BUS_WIDTH_4; + switch (mmcbr_get_timing(sc->dev)) { + case bus_timing_mmc_ddr52: + case bus_timing_mmc_hs200: + case bus_timing_mmc_hs400: + case bus_timing_mmc_hs400es: + value = EXT_CSD_BUS_WIDTH_4_DDR; + break; + default: + value = EXT_CSD_BUS_WIDTH_4; + break; + } break; case bus_width_8: - value = EXT_CSD_BUS_WIDTH_8; + switch (mmcbr_get_timing(sc->dev)) { + case bus_timing_mmc_ddr52: + case bus_timing_mmc_hs200: + case bus_timing_mmc_hs400: + case bus_timing_mmc_hs400es: + value = EXT_CSD_BUS_WIDTH_8_DDR; + break; + default: + value = EXT_CSD_BUS_WIDTH_8; + break; + } break; default: return (MMC_ERR_INVALID); @@ -647,23 +707,96 @@ mmc_set_card_bus_width(struct mmc_softc } static int -mmc_set_timing(struct mmc_softc *sc, struct mmc_ivars *ivar, int timing) +mmc_set_power_class(struct mmc_softc *sc, struct mmc_ivars *ivar) { - u_char switch_res[64]; - uint8_t value; - int err; + device_t dev; + const uint8_t *ext_csd; + uint32_t clock; + uint8_t value; - switch (timing) { - case bus_timing_normal: - value = 0; + dev = sc->dev; + if (mmcbr_get_mode(dev) != mode_mmc || ivar->csd.spec_vers < 4) + return (MMC_ERR_NONE); + + value = 0; + ext_csd = ivar->raw_ext_csd; + clock = mmcbr_get_clock(dev); + switch (1 << mmcbr_get_vdd(dev)) { + case MMC_OCR_LOW_VOLTAGE: + if (clock <= MMC_TYPE_HS_26_MAX) + value = ext_csd[EXT_CSD_PWR_CL_26_195]; + else if (clock <= MMC_TYPE_HS_52_MAX) { + if (mmcbr_get_timing(dev) >= bus_timing_mmc_ddr52 && + ivar->bus_width >= bus_width_4) + value = ext_csd[EXT_CSD_PWR_CL_52_195_DDR]; + else + value = ext_csd[EXT_CSD_PWR_CL_52_195]; + } else if (clock <= MMC_TYPE_HS200_HS400ES_MAX) + value = ext_csd[EXT_CSD_PWR_CL_200_195]; break; - case bus_timing_hs: - value = 1; + case MMC_OCR_270_280: + case MMC_OCR_280_290: + case MMC_OCR_290_300: + case MMC_OCR_300_310: + case MMC_OCR_310_320: + case MMC_OCR_320_330: + case MMC_OCR_330_340: + case MMC_OCR_340_350: + case MMC_OCR_350_360: + if (clock <= MMC_TYPE_HS_26_MAX) + value = ext_csd[EXT_CSD_PWR_CL_26_360]; + else if (clock <= MMC_TYPE_HS_52_MAX) { + if (mmcbr_get_timing(dev) == bus_timing_mmc_ddr52 && + ivar->bus_width >= bus_width_4) + value = ext_csd[EXT_CSD_PWR_CL_52_360_DDR]; + else + value = ext_csd[EXT_CSD_PWR_CL_52_360]; + } else if (clock <= MMC_TYPE_HS200_HS400ES_MAX) { + if (ivar->bus_width == bus_width_8) + value = ext_csd[EXT_CSD_PWR_CL_200_360_DDR]; + else + value = ext_csd[EXT_CSD_PWR_CL_200_360]; + } break; default: + device_printf(dev, "No power class support for VDD 0x%x\n", + 1 << mmcbr_get_vdd(dev)); return (MMC_ERR_INVALID); } + + if (ivar->bus_width == bus_width_8) + value = (value & EXT_CSD_POWER_CLASS_8BIT_MASK) >> + EXT_CSD_POWER_CLASS_8BIT_SHIFT; + else + value = (value & EXT_CSD_POWER_CLASS_4BIT_MASK) >> + EXT_CSD_POWER_CLASS_4BIT_SHIFT; + + if (value == 0) + return (MMC_ERR_NONE); + + return (mmc_switch(dev, dev, ivar->rca, EXT_CSD_CMD_SET_NORMAL, + EXT_CSD_POWER_CLASS, value, ivar->cmd6_time, true)); +} + +static int +mmc_set_timing(struct mmc_softc *sc, struct mmc_ivars *ivar, + enum mmc_bus_timing timing) +{ + u_char switch_res[64]; + uint8_t value; + int err; + if (mmcbr_get_mode(sc->dev) == mode_sd) { + switch (timing) { + case bus_timing_normal: + value = SD_SWITCH_NORMAL_MODE; + break; + case bus_timing_hs: + value = SD_SWITCH_HS_MODE; + break; + default: + return (MMC_ERR_INVALID); + } err = mmc_sd_switch(sc, SD_SWITCH_MODE_SET, SD_SWITCH_GROUP1, value, switch_res); if (err != MMC_ERR_NONE) @@ -673,6 +806,17 @@ mmc_set_timing(struct mmc_softc *sc, str mmcbr_set_timing(sc->dev, timing); mmcbr_update_ios(sc->dev); } else { + switch (timing) { + case bus_timing_normal: + value = EXT_CSD_HS_TIMING_BC; + break; + case bus_timing_hs: + case bus_timing_mmc_ddr52: + value = EXT_CSD_HS_TIMING_HS; + break; + default: + return (MMC_ERR_INVALID); + } err = mmc_switch(sc->dev, sc->dev, ivar->rca, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, value, ivar->cmd6_time, false); @@ -1166,19 +1310,82 @@ mmc_set_blocklen(struct mmc_softc *sc, u return (err); } +static uint32_t +mmc_timing_to_dtr(struct mmc_ivars *ivar, enum mmc_bus_timing timing) +{ + + switch (timing) { + case bus_timing_normal: + return (ivar->tran_speed); + case bus_timing_hs: + return (ivar->hs_tran_speed); + case bus_timing_uhs_sdr12: + return (SD_SDR12_MAX); + case bus_timing_uhs_sdr25: + return (SD_SDR25_MAX); + case bus_timing_uhs_ddr50: + return (SD_DDR50_MAX); + case bus_timing_uhs_sdr50: + return (SD_SDR50_MAX); + case bus_timing_uhs_sdr104: + return (SD_SDR104_MAX); + case bus_timing_mmc_ddr52: + return (MMC_TYPE_DDR52_MAX); + case bus_timing_mmc_hs200: + case bus_timing_mmc_hs400: + case bus_timing_mmc_hs400es: + return (MMC_TYPE_HS200_HS400ES_MAX); + } + return (0); +} + +static const char * +mmc_timing_to_string(enum mmc_bus_timing timing) +{ + + switch (timing) { + case bus_timing_normal: + return ("normal speed"); + case bus_timing_hs: + return ("high speed"); + case bus_timing_uhs_sdr12: + case bus_timing_uhs_sdr25: + case bus_timing_uhs_sdr50: + case bus_timing_uhs_sdr104: + return ("single data rate"); + case bus_timing_uhs_ddr50: + case bus_timing_mmc_ddr52: + return ("dual data rate"); + case bus_timing_mmc_hs200: + return ("HS200"); + case bus_timing_mmc_hs400: + return ("HS400"); + case bus_timing_mmc_hs400es: + return ("HS400 with enhanced strobe"); + } + return (""); +} + static void mmc_log_card(device_t dev, struct mmc_ivars *ivar, int newcard) { + enum mmc_bus_timing max_timing, timing; device_printf(dev, "Card at relative address 0x%04x%s:\n", ivar->rca, newcard ? " added" : ""); device_printf(dev, " card: %s\n", ivar->card_id_string); - device_printf(dev, " bus: %ubit, %uMHz%s\n", + max_timing = bus_timing_normal; + for (timing = bus_timing_max; timing > bus_timing_normal; timing--) { + if (isset(&ivar->timings, timing)) { + max_timing = timing; + break; + } + } + device_printf(dev, " bus: %ubit, %uMHz (%s timing)\n", (ivar->bus_width == bus_width_1 ? 1 : (ivar->bus_width == bus_width_4 ? 4 : 8)), - (ivar->timing == bus_timing_hs ? - ivar->hs_tran_speed : ivar->tran_speed) / 1000000, - ivar->timing == bus_timing_hs ? ", high speed timing" : ""); + mmc_timing_to_dtr(ivar, timing) / 1000000, + mmc_timing_to_string(timing)); device_printf(dev, " memory: %u blocks, erase sector %u blocks%s\n", ivar->sec_count, ivar->erase_sector, ivar->read_only ? ", read-only" : ""); @@ -1192,10 +1399,11 @@ mmc_discover_cards(struct mmc_softc *sc) struct mmc_ivars *ivar = NULL; device_t *devlist; device_t child; - int err, i, devcount, newcard; + int devcount, err, host_caps, i, newcard; uint32_t resp, sec_count, status; uint16_t rca = 2; + host_caps = mmcbr_get_caps(sc->dev); if (bootverbose || mmc_debug) device_printf(sc->dev, "Probing cards\n"); while (1) { @@ -1235,14 +1443,24 @@ mmc_discover_cards(struct mmc_softc *sc) if (mmcbr_get_ro(sc->dev)) ivar->read_only = 1; ivar->bus_width = bus_width_1; - ivar->timing = bus_timing_normal; + setbit(&ivar->timings, bus_timing_normal); ivar->mode = mmcbr_get_mode(sc->dev); if (ivar->mode == mode_sd) { mmc_decode_cid_sd(ivar->raw_cid, &ivar->cid); - mmc_send_relative_addr(sc, &resp); + err = mmc_send_relative_addr(sc, &resp); + if (err != MMC_ERR_NONE) { + device_printf(sc->dev, + "Error getting RCA %d\n", err); + break; + } ivar->rca = resp >> 16; /* Get card CSD. */ - mmc_send_csd(sc, ivar->rca, ivar->raw_csd); + err = mmc_send_csd(sc, ivar->rca, ivar->raw_csd); + if (err != MMC_ERR_NONE) { + device_printf(sc->dev, + "Error getting CSD %d\n", err); + break; + } if (bootverbose || mmc_debug) device_printf(sc->dev, "%sard detected (CSD %08x%08x%08x%08x)\n", @@ -1271,18 +1489,29 @@ mmc_discover_cards(struct mmc_softc *sc) } /* Get card SCR. Card must be selected to fetch it. */ - mmc_select_card(sc, ivar->rca); - mmc_app_send_scr(sc, ivar->rca, ivar->raw_scr); + err = mmc_select_card(sc, ivar->rca); + if (err != MMC_ERR_NONE) { + device_printf(sc->dev, + "Error selecting card %d\n", err); + break; + } + err = mmc_app_send_scr(sc, ivar->rca, ivar->raw_scr); + if (err != MMC_ERR_NONE) { + device_printf(sc->dev, + "Error reading SCR %d\n", err); + break; + } mmc_app_decode_scr(ivar->raw_scr, &ivar->scr); /* Get card switch capabilities (command class 10). */ if ((ivar->scr.sda_vsn >= 1) && (ivar->csd.ccc & (1 << 10))) { - mmc_sd_switch(sc, SD_SWITCH_MODE_CHECK, + err = mmc_sd_switch(sc, SD_SWITCH_MODE_CHECK, SD_SWITCH_GROUP1, SD_SWITCH_NOCHANGE, switch_res); - if (switch_res[13] & (1 << SD_SWITCH_HS_MODE)) { - ivar->timing = bus_timing_hs; - ivar->hs_tran_speed = SD_MAX_HS; + if (err == MMC_ERR_NONE && + switch_res[13] & (1 << SD_SWITCH_HS_MODE)) { + setbit(&ivar->timings, bus_timing_hs); + ivar->hs_tran_speed = SD_HS_MAX; } } @@ -1299,8 +1528,9 @@ mmc_discover_cards(struct mmc_softc *sc) * it is still nice to get that right. */ mmc_select_card(sc, 0); - mmc_select_card(sc, ivar->rca); - mmc_app_sd_status(sc, ivar->rca, ivar->raw_sd_status); + (void)mmc_select_card(sc, ivar->rca); + (void)mmc_app_sd_status(sc, ivar->rca, + ivar->raw_sd_status); mmc_app_decode_sd_status(ivar->raw_sd_status, &ivar->sd_status); if (ivar->sd_status.au_size != 0) { @@ -1308,7 +1538,7 @@ mmc_discover_cards(struct mmc_softc *sc) 16 << ivar->sd_status.au_size; } /* Find max supported bus width. */ - if ((mmcbr_get_caps(sc->dev) & MMC_CAP_4_BIT_DATA) && + if ((host_caps & MMC_CAP_4_BIT_DATA) && (ivar->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) ivar->bus_width = bus_width_4; @@ -1338,9 +1568,17 @@ mmc_discover_cards(struct mmc_softc *sc) return; } ivar->rca = rca++; - mmc_set_relative_addr(sc, ivar->rca); + err = mmc_set_relative_addr(sc, ivar->rca); + if (err != MMC_ERR_NONE) { + device_printf(sc->dev, "Error setting RCA %d\n", err); + break; + } /* Get card CSD. */ - mmc_send_csd(sc, ivar->rca, ivar->raw_csd); + err = mmc_send_csd(sc, ivar->rca, ivar->raw_csd); + if (err != MMC_ERR_NONE) { + device_printf(sc->dev, "Error getting CSD %d\n", err); + break; + } if (bootverbose || mmc_debug) device_printf(sc->dev, "%sard detected (CSD %08x%08x%08x%08x)\n", @@ -1366,7 +1604,12 @@ mmc_discover_cards(struct mmc_softc *sc) break; } - mmc_select_card(sc, ivar->rca); + err = mmc_select_card(sc, ivar->rca); + if (err != MMC_ERR_NONE) { + device_printf(sc->dev, "Error selecting card %d\n", + err); + break; + } /* Only MMC >= 4.x devices support EXT_CSD. */ if (ivar->csd.spec_vers >= 4) { @@ -1386,16 +1629,28 @@ mmc_discover_cards(struct mmc_softc *sc) ivar->sec_count = sec_count; ivar->high_cap = 1; } - /* Get card speed in high speed mode. */ - ivar->timing = bus_timing_hs; - if (ivar->raw_ext_csd[EXT_CSD_CARD_TYPE] - & EXT_CSD_CARD_TYPE_52) - ivar->hs_tran_speed = MMC_TYPE_52_MAX_HS; - else if (ivar->raw_ext_csd[EXT_CSD_CARD_TYPE] - & EXT_CSD_CARD_TYPE_26) - ivar->hs_tran_speed = MMC_TYPE_26_MAX_HS; - else - ivar->hs_tran_speed = ivar->tran_speed; + /* Get device speeds beyond normal mode. */ + if ((ivar->raw_ext_csd[EXT_CSD_CARD_TYPE] & + EXT_CSD_CARD_TYPE_HS_52) != 0) { + setbit(&ivar->timings, bus_timing_hs); + ivar->hs_tran_speed = MMC_TYPE_HS_52_MAX; + } else if ((ivar->raw_ext_csd[EXT_CSD_CARD_TYPE] & + EXT_CSD_CARD_TYPE_HS_26) != 0) { + setbit(&ivar->timings, bus_timing_hs); + ivar->hs_tran_speed = MMC_TYPE_HS_26_MAX; + } + if ((ivar->raw_ext_csd[EXT_CSD_CARD_TYPE] & + EXT_CSD_CARD_TYPE_DDR_52_1_2V) != 0 && + (host_caps & MMC_CAP_SIGNALING_120) != 0) { + setbit(&ivar->timings, bus_timing_mmc_ddr52); + setbit(&ivar->vccq_120, bus_timing_mmc_ddr52); + } + if ((ivar->raw_ext_csd[EXT_CSD_CARD_TYPE] & + EXT_CSD_CARD_TYPE_DDR_52_1_8V) != 0 && + (host_caps & MMC_CAP_SIGNALING_180) != 0) { + setbit(&ivar->timings, bus_timing_mmc_ddr52); + setbit(&ivar->vccq_180, bus_timing_mmc_ddr52); + } /* * Determine generic switch timeout (provided in * units of 10 ms), defaulting to 500 ms. @@ -1422,9 +1677,6 @@ mmc_discover_cards(struct mmc_softc *sc) break; } } - } else { - ivar->bus_width = bus_width_1; - ivar->timing = bus_timing_normal; } /* @@ -1548,7 +1800,7 @@ mmc_go_discovery(struct mmc_softc *sc) mmc_idle_cards(sc); } else { mmcbr_set_bus_mode(dev, opendrain); - mmcbr_set_clock(dev, CARD_ID_FREQUENCY); + mmcbr_set_clock(dev, SD_MMC_CARD_ID_FREQUENCY); mmcbr_update_ios(dev); /* XXX recompute vdd based on new cards? */ } @@ -1587,42 +1839,59 @@ mmc_calculate_clock(struct mmc_softc *sc { device_t *kids; struct mmc_ivars *ivar; - int i, f_max, max_dtr, max_hs_dtr, max_timing, nkid; - - f_max = mmcbr_get_f_max(sc->dev); - max_dtr = max_hs_dtr = f_max; - if (mmcbr_get_caps(sc->dev) & MMC_CAP_HSPEED) + int host_caps, i, nkid; + uint32_t dtr, max_dtr; + enum mmc_bus_timing max_timing, timing; + bool changed; + + max_dtr = mmcbr_get_f_max(sc->dev); + host_caps = mmcbr_get_caps(sc->dev); + if ((host_caps & MMC_CAP_MMC_DDR52) != 0) + max_timing = bus_timing_mmc_ddr52; + else if ((host_caps & MMC_CAP_HSPEED) != 0) max_timing = bus_timing_hs; else max_timing = bus_timing_normal; if (device_get_children(sc->dev, &kids, &nkid) != 0) panic("can't get children"); - for (i = 0; i < nkid; i++) { - ivar = device_get_ivars(kids[i]); - if (ivar->timing < max_timing) - max_timing = ivar->timing; - if (ivar->tran_speed < max_dtr) - max_dtr = ivar->tran_speed; - if (ivar->hs_tran_speed < max_hs_dtr) - max_hs_dtr = ivar->hs_tran_speed; - } + do { + changed = false; + for (i = 0; i < nkid; i++) { + ivar = device_get_ivars(kids[i]); + if (isclr(&ivar->timings, max_timing)) { + for (timing = max_timing; timing >= + bus_timing_normal; timing--) { + if (isset(&ivar->timings, timing)) { + max_timing = timing; + break; + } + } + changed = true; + } + dtr = mmc_timing_to_dtr(ivar, max_timing); + if (dtr < max_dtr) { + max_dtr = dtr; + changed = true; + } + } + } while (changed == true); if (bootverbose || mmc_debug) { device_printf(sc->dev, - "setting transfer rate to %d.%03dMHz%s\n", + "setting transfer rate to %d.%03dMHz (%s timing)\n", max_dtr / 1000000, (max_dtr / 1000) % 1000, - max_timing == bus_timing_hs ? " (high speed timing)" : ""); + mmc_timing_to_string(max_timing)); } for (i = 0; i < nkid; i++) { ivar = device_get_ivars(kids[i]); - if (ivar->timing == bus_timing_normal) + if ((ivar->timings & ~(1 << bus_timing_normal)) == 0) continue; - mmc_select_card(sc, ivar->rca); - mmc_set_timing(sc, ivar, max_timing); + if (mmc_select_card(sc, ivar->rca) != MMC_ERR_NONE || + mmc_set_timing(sc, ivar, max_timing) != MMC_ERR_NONE) + device_printf(sc->dev, "Card at relative address %d " + "failed to set timing.\n", ivar->rca); } mmc_select_card(sc, 0); free(kids, M_TEMP); - if (max_timing == bus_timing_hs) - max_dtr = max_hs_dtr; mmcbr_set_clock(sc->dev, max_dtr); mmcbr_update_ios(sc->dev); return (max_dtr); Modified: head/sys/dev/mmc/mmcbr_if.m ============================================================================== --- head/sys/dev/mmc/mmcbr_if.m Sun Mar 19 23:06:11 2017 (r315597) +++ head/sys/dev/mmc/mmcbr_if.m Sun Mar 19 23:27:17 2017 (r315598) @@ -65,6 +65,18 @@ INTERFACE mmcbr; # +# Default implementations of some methods. +# +CODE { + static int + null_switch_vccq(device_t brdev __unused, device_t reqdev __unused) + { + + return (0); + } +}; + +# # Called by the mmcbus to set up the IO pins correctly, the common/core # supply voltage (VDD/VCC) to use for the device, the clock frequency, the # type of SPI chip select, power mode and bus width. @@ -75,6 +87,14 @@ METHOD int update_ios { }; # +# Called by the mmcbus to switch the signaling voltage (VCCQ). +# +METHOD int switch_vccq { + device_t brdev; + device_t reqdev; +} DEFAULT null_switch_vccq; + +# # Called by the mmcbus or its children to schedule a mmc request. These # requests are queued. Time passes. The bridge then gets notification # of the status of the request, who then notifies the requesting device Modified: head/sys/dev/mmc/mmcbrvar.h ============================================================================== --- head/sys/dev/mmc/mmcbrvar.h Sun Mar 19 23:06:11 2017 (r315597) +++ head/sys/dev/mmc/mmcbrvar.h Sun Mar 19 23:27:17 2017 (r315598) @@ -71,6 +71,7 @@ enum mmcbr_device_ivars { MMCBR_IVAR_OCR, MMCBR_IVAR_POWER_MODE, MMCBR_IVAR_VDD, + MMCBR_IVAR_VCCQ, MMCBR_IVAR_CAPS, MMCBR_IVAR_TIMING, MMCBR_IVAR_MAX_DATA, @@ -94,6 +95,7 @@ MMCBR_ACCESSOR(mode, MODE, int) MMCBR_ACCESSOR(ocr, OCR, int) MMCBR_ACCESSOR(power_mode, POWER_MODE, int) MMCBR_ACCESSOR(vdd, VDD, int) +MMCBR_ACCESSOR(vccq, VCCQ, int) MMCBR_ACCESSOR(caps, CAPS, int) MMCBR_ACCESSOR(timing, TIMING, int) MMCBR_ACCESSOR(max_data, MAX_DATA, int) @@ -107,6 +109,13 @@ mmcbr_update_ios(device_t dev) } static int __inline +mmcbr_switch_vccq(device_t dev) +{ + + return (MMCBR_SWITCH_VCCQ(device_get_parent(dev), dev)); +} + +static int __inline mmcbr_get_ro(device_t dev) { Modified: head/sys/dev/mmc/mmcreg.h ============================================================================== --- head/sys/dev/mmc/mmcreg.h Sun Mar 19 23:06:11 2017 (r315597) +++ head/sys/dev/mmc/mmcreg.h Sun Mar 19 23:27:17 2017 (r315598) @@ -209,11 +209,11 @@ struct mmc_request { #define MMC_SET_BLOCKLEN 16 #define MMC_READ_SINGLE_BLOCK 17 #define MMC_READ_MULTIPLE_BLOCK 18 - /* reserved: 19 */ +#define MMC_SEND_TUNING_BLOCK 19 +#define MMC_SEND_TUNING_BLOCK_HS200 21 /* Class 3: Stream write commands */ #define MMC_WRITE_DAT_UNTIL_STOP 20 - /* reserved: 21 */ /* reserved: 22 */ /* Class 4: Block oriented write commands */ @@ -304,16 +304,28 @@ struct mmc_request { #define EXT_CSD_ERASE_GRP_DEF 175 /* R/W */ #define EXT_CSD_PART_CONFIG 179 /* R/W */ #define EXT_CSD_BUS_WIDTH 183 /* R/W */ +#define EXT_CSD_STROBE_SUPPORT 184 /* RO */ #define EXT_CSD_HS_TIMING 185 /* R/W */ +#define EXT_CSD_POWER_CLASS 187 /* R/W */ #define EXT_CSD_CARD_TYPE 196 /* RO */ +#define EXT_CSD_DRIVER_STRENGTH 197 /* RO */ #define EXT_CSD_REV 192 /* RO */ #define EXT_CSD_PART_SWITCH_TO 199 /* RO */ +#define EXT_CSD_PWR_CL_52_195 200 /* RO */ +#define EXT_CSD_PWR_CL_26_195 201 /* RO */ +#define EXT_CSD_PWR_CL_52_360 202 /* RO */ +#define EXT_CSD_PWR_CL_26_360 203 /* RO */ #define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */ #define EXT_CSD_HC_WP_GRP_SIZE 221 /* RO */ #define EXT_CSD_ERASE_TO_MULT 223 /* RO */ #define EXT_CSD_ERASE_GRP_SIZE 224 /* RO */ #define EXT_CSD_BOOT_SIZE_MULT 226 /* RO */ +#define EXT_CSD_PWR_CL_200_195 236 /* RO */ +#define EXT_CSD_PWR_CL_200_360 237 /* RO */ +#define EXT_CSD_PWR_CL_52_195_DDR 238 /* RO */ +#define EXT_CSD_PWR_CL_52_360_DDR 239 /* RO */ #define EXT_CSD_GEN_CMD6_TIME 248 /* RO */ +#define EXT_CSD_PWR_CL_200_360_DDR 253 /* RO */ /* * EXT_CSD field definitions @@ -363,15 +375,38 @@ struct mmc_request { #define EXT_CSD_CMD_SET_SECURE 2 #define EXT_CSD_CMD_SET_CPSECURE 4 -#define EXT_CSD_CARD_TYPE_26 1 -#define EXT_CSD_CARD_TYPE_52 2 +#define EXT_CSD_HS_TIMING_BC 0 +#define EXT_CSD_HS_TIMING_HS 1 +#define EXT_CSD_HS_TIMING_DDR200 2 +#define EXT_CSD_HS_TIMING_DDR400 3 +#define EXT_CSD_HS_TIMING_DRV_STR_SHIFT 4 + +#define EXT_CSD_POWER_CLASS_8BIT_MASK 0xf0 +#define EXT_CSD_POWER_CLASS_8BIT_SHIFT 4 +#define EXT_CSD_POWER_CLASS_4BIT_MASK 0x0f +#define EXT_CSD_POWER_CLASS_4BIT_SHIFT 0 + +#define EXT_CSD_CARD_TYPE_HS_26 0x0001 +#define EXT_CSD_CARD_TYPE_HS_52 0x0002 +#define EXT_CSD_CARD_TYPE_DDR_52_1_8V 0x0004 +#define EXT_CSD_CARD_TYPE_DDR_52_1_2V 0x0008 +#define EXT_CSD_CARD_TYPE_HS200_1_8V 0x0010 +#define EXT_CSD_CARD_TYPE_HS200_1_2V 0x0020 +#define EXT_CSD_CARD_TYPE_HS400_1_8V 0x0040 +#define EXT_CSD_CARD_TYPE_HS400_1_2V 0x0080 +#define EXT_CSD_CARD_TYPE_HS400ES 0x0100 #define EXT_CSD_BUS_WIDTH_1 0 #define EXT_CSD_BUS_WIDTH_4 1 #define EXT_CSD_BUS_WIDTH_8 2 - -#define MMC_TYPE_26_MAX_HS 26000000 -#define MMC_TYPE_52_MAX_HS 52000000 +#define EXT_CSD_BUS_WIDTH_4_DDR 5 +#define EXT_CSD_BUS_WIDTH_8_DDR 6 +#define EXT_CSD_BUS_WIDTH_ES 0x80 + +#define MMC_TYPE_HS_26_MAX 26000000 +#define MMC_TYPE_HS_52_MAX 52000000 +#define MMC_TYPE_DDR52_MAX 52000000 +#define MMC_TYPE_HS200_HS400ES_MAX 200000000 /* * SD bus widths @@ -387,12 +422,23 @@ struct mmc_request { #define SD_SWITCH_GROUP1 0 #define SD_SWITCH_NORMAL_MODE 0 #define SD_SWITCH_HS_MODE 1 +#define SD_SWITCH_SDR50_MODE 2 +#define SD_SWITCH_SDR104_MODE 3 +#define SD_SWITCH_DDR50 4 #define SD_SWITCH_NOCHANGE 0xF #define SD_CLR_CARD_DETECT 0 #define SD_SET_CARD_DETECT 1 -#define SD_MAX_HS 50000000 +#define SD_HS_MAX 50000000 +#define SD_DDR50_MAX 50000000 +#define SD_SDR12_MAX 25000000 +#define SD_SDR25_MAX 50000000 +#define SD_SDR50_MAX 100000000 +#define SD_SDR104_MAX 208000000 + +/* Specifications require 400 kHz max. during ID phase. */ +#define SD_MMC_CARD_ID_FREQUENCY 400000 /* OCR bits */ @@ -429,6 +475,12 @@ struct mmc_request { #define MMC_OCR_340_350 (1U << 22) /* Vdd voltage 3.40 ~ 3.50 */ #define MMC_OCR_350_360 (1U << 23) /* Vdd voltage 3.50 ~ 3.60 */ #define MMC_OCR_MAX_VOLTAGE_SHIFT 23 +#define MMC_OCR_S18R (1U << 24) /* Switching to 1.8 V requested (SD) */ +#define MMC_OCR_S18A MMC_OCR_S18R /* Switching to 1.8 V accepted (SD) */ +#define MMC_OCR_XPC (1U << 28) /* SDXC Power Control */ +#define MMC_OCR_ACCESS_MODE_BYTE (0U << 29) /* Access Mode Byte (MMC) */ +#define MMC_OCR_ACCESS_MODE_SECT (1U << 29) /* Access Mode Sector (MMC) */ +#define MMC_OCR_ACCESS_MODE_MASK (3U << 29) #define MMC_OCR_CCS (1u << 30) /* Card Capacity status (SD vs SDHC) */ #define MMC_OCR_CARD_BUSY (1U << 31) /* Card Power up status */ Modified: head/sys/dev/sdhci/sdhci.c ============================================================================== --- head/sys/dev/sdhci/sdhci.c Sun Mar 19 23:06:11 2017 (r315597) +++ head/sys/dev/sdhci/sdhci.c Sun Mar 19 23:27:17 2017 (r315598) @@ -57,6 +57,12 @@ SYSCTL_NODE(_hw, OID_AUTO, sdhci, CTLFLA static int sdhci_debug; SYSCTL_INT(_hw_sdhci, OID_AUTO, debug, CTLFLAG_RWTUN, &sdhci_debug, 0, "Debug level"); +u_int sdhci_quirk_clear = 0; +SYSCTL_INT(_hw_sdhci, OID_AUTO, quirk_clear, CTLFLAG_RWTUN, &sdhci_quirk_clear, + 0, "Mask of quirks to clear"); +u_int sdhci_quirk_set = 0; +SYSCTL_INT(_hw_sdhci, OID_AUTO, quirk_set, CTLFLAG_RWTUN, &sdhci_quirk_set, 0, + "Mask of quirks to set"); #define RD1(slot, off) SDHCI_READ_1((slot)->bus, (slot), (off)) #define RD2(slot, off) SDHCI_READ_2((slot)->bus, (slot), (off)) @@ -78,6 +84,10 @@ static void sdhci_card_poll(void *); static void sdhci_card_task(void *, int); /* helper routines */ +static void sdhci_dumpregs(struct sdhci_slot *slot); +static int slot_printf(struct sdhci_slot *slot, const char * fmt, ...) + __printflike(2, 3); + #define SDHCI_LOCK(_slot) mtx_lock(&(_slot)->mtx) #define SDHCI_UNLOCK(_slot) mtx_unlock(&(_slot)->mtx) #define SDHCI_LOCK_INIT(_slot) \ @@ -581,7 +591,7 @@ sdhci_card_poll(void *arg) int sdhci_init_slot(device_t dev, struct sdhci_slot *slot, int num) { - uint32_t caps, freq; + uint32_t caps, caps2, freq, host_caps; int err; SDHCI_LOCK_INIT(slot); @@ -625,10 +635,16 @@ sdhci_init_slot(device_t dev, struct sdh sdhci_init(slot); slot->version = (RD2(slot, SDHCI_HOST_VERSION) >> SDHCI_SPEC_VER_SHIFT) & SDHCI_SPEC_VER_MASK; - if (slot->quirks & SDHCI_QUIRK_MISSING_CAPS) + if (slot->quirks & SDHCI_QUIRK_MISSING_CAPS) { caps = slot->caps; - else + caps2 = slot->caps2; + } else { caps = RD4(slot, SDHCI_CAPABILITIES); + if (slot->version >= SDHCI_SPEC_300) + caps2 = RD4(slot, SDHCI_CAPABILITIES2); + else + caps2 = 0; + } /* Calculate base clock frequency. */ if (slot->version >= SDHCI_SPEC_300) freq = (caps & SDHCI_CLOCK_V3_BASE_MASK) >> @@ -684,15 +700,45 @@ sdhci_init_slot(device_t dev, struct sdh device_printf(dev, "Hardware doesn't report any " "support voltages.\n"); } - slot->host.caps = MMC_CAP_4_BIT_DATA; + host_caps = MMC_CAP_4_BIT_DATA; if (caps & SDHCI_CAN_DO_8BITBUS) - slot->host.caps |= MMC_CAP_8_BIT_DATA; + host_caps |= MMC_CAP_8_BIT_DATA; if (caps & SDHCI_CAN_DO_HISPD) - slot->host.caps |= MMC_CAP_HSPEED; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Mon Mar 20 01:19:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0DCBFD14D7F; Mon, 20 Mar 2017 01:19:06 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D19AFF88; Mon, 20 Mar 2017 01:19:05 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K1J4Ta033772; Mon, 20 Mar 2017 01:19:04 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K1J4xE033771; Mon, 20 Mar 2017 01:19:04 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703200119.v2K1J4xE033771@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 01:19:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315601 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 01:19:06 -0000 Author: ngie Date: Mon Mar 20 01:19:04 2017 New Revision: 315601 URL: https://svnweb.freebsd.org/changeset/base/315601 Log: kvm_open2(3): remove '*' when describing addr argument for `resolver` As noted by vangyzen, with a similar issue in D10022, the pointer portion of the .Fa macro call is unnecessary, so remove the '*'. MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/lib/libkvm/kvm_open.3 Modified: head/lib/libkvm/kvm_open.3 ============================================================================== --- head/lib/libkvm/kvm_open.3 Mon Mar 20 00:55:24 2017 (r315600) +++ head/lib/libkvm/kvm_open.3 Mon Mar 20 01:19:04 2017 (r315601) @@ -32,7 +32,7 @@ .\" @(#)kvm_open.3 8.3 (Berkeley) 4/19/94 .\" $FreeBSD$ .\" -.Dd November 27, 2015 +.Dd March 19, 2017 .Dt KVM_OPEN 3 .Os .Sh NAME @@ -196,7 +196,7 @@ function is called, specifies the requested symbol name. If the function is able to resolve the name to an address, the address should be set in -.Fa *addr +.Fa addr and the function should return zero. If the function is not able to resolve the name to an address, it should return a non-zero value. From owner-svn-src-head@freebsd.org Mon Mar 20 02:47:29 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 65337D1428A; Mon, 20 Mar 2017 02:47:29 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 326FF157D; Mon, 20 Mar 2017 02:47:29 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K2lSll069975; Mon, 20 Mar 2017 02:47:28 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K2lSrb069974; Mon, 20 Mar 2017 02:47:28 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703200247.v2K2lSrb069974@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 02:47:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315603 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 02:47:29 -0000 Author: ngie Date: Mon Mar 20 02:47:28 2017 New Revision: 315603 URL: https://svnweb.freebsd.org/changeset/base/315603 Log: kvm_close(3): return `error` instead of blindly returning `0` `error` is the accumulated error from previous close(2) calls. This bug has been present since the libcall's import from 4.4BSD Lite (r1573). MFC after: 1 week Noticed by: vangyzen (D10022) Relnotes: yes Sponsored by: Dell EMC Isilon Modified: head/lib/libkvm/kvm.c Modified: head/lib/libkvm/kvm.c ============================================================================== --- head/lib/libkvm/kvm.c Mon Mar 20 01:53:50 2017 (r315602) +++ head/lib/libkvm/kvm.c Mon Mar 20 02:47:28 2017 (r315603) @@ -292,7 +292,7 @@ kvm_close(kvm_t *kd) free(kd->pt_map); free((void *)kd); - return (0); + return (error); } int From owner-svn-src-head@freebsd.org Mon Mar 20 03:42:16 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 25C8CD0C109; Mon, 20 Mar 2017 03:42:16 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E96389E; Mon, 20 Mar 2017 03:42:15 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K3gFvT093574; Mon, 20 Mar 2017 03:42:15 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K3gFua093573; Mon, 20 Mar 2017 03:42:15 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703200342.v2K3gFua093573@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 03:42:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315614 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 03:42:16 -0000 Author: ngie Date: Mon Mar 20 03:42:14 2017 New Revision: 315614 URL: https://svnweb.freebsd.org/changeset/base/315614 Log: Fix date added in r315570 so it's sorted properly Sponsored by: Dell EMC Isilon Modified: head/ObsoleteFiles.inc Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Mon Mar 20 03:18:16 2017 (r315613) +++ head/ObsoleteFiles.inc Mon Mar 20 03:42:14 2017 (r315614) @@ -38,7 +38,7 @@ # xargs -n1 | sort | uniq -d; # done -# 20170318: remove nls for non supported Big5* locales +# 20170319: remove nls for non supported Big5* locales OLD_DIRS+=usr/share/nls/zh_HK.Big5HKSCS OLD_DIRS+=usr/share/nls/zh_TW.Big5 # 20170319: Remove zh_TW.Big5 From owner-svn-src-head@freebsd.org Mon Mar 20 03:47:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 371BFD0C18B; Mon, 20 Mar 2017 03:47:17 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EA9A9281; Mon, 20 Mar 2017 03:47:16 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K3lGoT095933; Mon, 20 Mar 2017 03:47:16 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K3lGCf095932; Mon, 20 Mar 2017 03:47:16 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201703200347.v2K3lGCf095932@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Mon, 20 Mar 2017 03:47:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315615 - head/lib/libc/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 03:47:17 -0000 Author: delphij Date: Mon Mar 20 03:47:15 2017 New Revision: 315615 URL: https://svnweb.freebsd.org/changeset/base/315615 Log: Make space style consistent with earlier entries. X-MFC with: r315526 Modified: head/lib/libc/sys/Symbol.map Modified: head/lib/libc/sys/Symbol.map ============================================================================== --- head/lib/libc/sys/Symbol.map Mon Mar 20 03:42:14 2017 (r315614) +++ head/lib/libc/sys/Symbol.map Mon Mar 20 03:47:15 2017 (r315615) @@ -399,8 +399,8 @@ FBSD_1.4 { }; FBSD_1.5 { - clock_nanosleep; - fdatasync; + clock_nanosleep; + fdatasync; }; FBSDprivate_1.0 { From owner-svn-src-head@freebsd.org Mon Mar 20 03:50:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B1AEBD0C254; Mon, 20 Mar 2017 03:50:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 78CA5642; Mon, 20 Mar 2017 03:50:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K3oMmA096104; Mon, 20 Mar 2017 03:50:22 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K3oMUW096102; Mon, 20 Mar 2017 03:50:22 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703200350.v2K3oMUW096102@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 03:50:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315616 - in head: . lib/libc/tests/locale X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 03:50:23 -0000 Author: ngie Date: Mon Mar 20 03:50:22 2017 New Revision: 315616 URL: https://svnweb.freebsd.org/changeset/base/315616 Log: Don't build/install lib/libc/io_test anymore The failing test requires the zh_TW.Big5 locale, which is no longer installed as of r315568. Add a note/pointer just in case someone considers re-adding it. Reported by: Jenkins Sponsored by: Dell EMC Isilon Modified: head/ObsoleteFiles.inc head/lib/libc/tests/locale/Makefile Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Mon Mar 20 03:47:15 2017 (r315615) +++ head/ObsoleteFiles.inc Mon Mar 20 03:50:22 2017 (r315616) @@ -38,6 +38,8 @@ # xargs -n1 | sort | uniq -d; # done +# 20170319: io_test requires zh_TW.Big5 locale. +OLD_FILES+=usr/tests/lib/libc/locale/io_test # 20170319: remove nls for non supported Big5* locales OLD_DIRS+=usr/share/nls/zh_HK.Big5HKSCS OLD_DIRS+=usr/share/nls/zh_TW.Big5 Modified: head/lib/libc/tests/locale/Makefile ============================================================================== --- head/lib/libc/tests/locale/Makefile Mon Mar 20 03:47:15 2017 (r315615) +++ head/lib/libc/tests/locale/Makefile Mon Mar 20 03:50:22 2017 (r315616) @@ -20,7 +20,8 @@ ATF_TESTS_C+= wcsrtombs_test ATF_TESTS_C+= wcstombs_test ATF_TESTS_C+= wctomb_2_test -NETBSD_ATF_TESTS_C= io_test +# Note: io_test requires zh_TW.Big5 locale (see ^/head@r315568) +#NETBSD_ATF_TESTS_C= io_test NETBSD_ATF_TESTS_C+= mbrtowc_test NETBSD_ATF_TESTS_C+= mbstowcs_test NETBSD_ATF_TESTS_C+= mbsnrtowcs_test From owner-svn-src-head@freebsd.org Mon Mar 20 03:52:08 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 27349D0C3FE; Mon, 20 Mar 2017 03:52:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E87E0A52; Mon, 20 Mar 2017 03:52:07 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K3q6GA096866; Mon, 20 Mar 2017 03:52:06 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K3q6eX096865; Mon, 20 Mar 2017 03:52:06 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703200352.v2K3q6eX096865@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 03:52:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315617 - head/contrib/netbsd-tests/lib/libc/locale X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 03:52:08 -0000 Author: ngie Date: Mon Mar 20 03:52:06 2017 New Revision: 315617 URL: https://svnweb.freebsd.org/changeset/base/315617 Log: Remove all expected failures from lib/libc/locale/io_test for FreeBSD This is no longer required as of r315616, as the test is no longer built/installed. This is being done to diff reduce with NetBSD. Sponsored by: Dell EMC Isilon Modified: head/contrib/netbsd-tests/lib/libc/locale/t_io.c Modified: head/contrib/netbsd-tests/lib/libc/locale/t_io.c ============================================================================== --- head/contrib/netbsd-tests/lib/libc/locale/t_io.c Mon Mar 20 03:50:22 2017 (r315616) +++ head/contrib/netbsd-tests/lib/libc/locale/t_io.c Mon Mar 20 03:52:06 2017 (r315617) @@ -53,10 +53,6 @@ ATF_TC_HEAD(bad_big5_wprintf, tc) ATF_TC_BODY(bad_big5_wprintf, tc) { -#ifdef __FreeBSD__ - atf_tc_skip("does not fail as expected (may be implementation " - "specific issue with the test)"); -#endif /* XXX implementation detail knowledge (wchar_t encoding) */ wchar_t ibuf[] = { 0xcf10, 0 }; setlocale(LC_CTYPE, "zh_TW.Big5"); @@ -72,10 +68,6 @@ ATF_TC_HEAD(bad_big5_swprintf, tc) ATF_TC_BODY(bad_big5_swprintf, tc) { -#ifdef __FreeBSD__ - atf_tc_skip("does not fail as expected (may be implementation " - "specific issue with the test)"); -#endif /* XXX implementation detail knowledge (wchar_t encoding) */ wchar_t ibuf[] = { 0xcf10, 0 }; wchar_t obuf[20]; @@ -169,9 +161,6 @@ ATF_TC_BODY(bad_big5_getwc, tc) ATF_REQUIRE(fp != NULL); setlocale(LC_CTYPE, "zh_TW.Big5"); -#ifdef __FreeBSD__ - atf_tc_expect_fail("does not return WEOF as expected"); -#endif ATF_REQUIRE_EQ(getwc(fp), WEOF); fclose(fp); } From owner-svn-src-head@freebsd.org Mon Mar 20 04:25:41 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E1C8FD0CCA3; Mon, 20 Mar 2017 04:25:41 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A41431723; Mon, 20 Mar 2017 04:25:41 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K4Pe7Q012044; Mon, 20 Mar 2017 04:25:40 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K4PeLQ012043; Mon, 20 Mar 2017 04:25:40 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703200425.v2K4PeLQ012043@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 04:25:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315618 - head/usr.sbin/syslogd X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 04:25:42 -0000 Author: ngie Date: Mon Mar 20 04:25:40 2017 New Revision: 315618 URL: https://svnweb.freebsd.org/changeset/base/315618 Log: syslogd: don't leak `f` on failure in cfline(..) Free `f` if an unknown priority or facility is parsed with the function. MFC after: 1 week Reported by: Coverity CID: 1368068 Sponsored by: Dell EMC Isilon Modified: head/usr.sbin/syslogd/syslogd.c Modified: head/usr.sbin/syslogd/syslogd.c ============================================================================== --- head/usr.sbin/syslogd/syslogd.c Mon Mar 20 03:52:06 2017 (r315617) +++ head/usr.sbin/syslogd/syslogd.c Mon Mar 20 04:25:40 2017 (r315618) @@ -2117,6 +2117,7 @@ cfline(const char *line, const char *pro (void)snprintf(ebuf, sizeof ebuf, "unknown priority name \"%s\"", buf); logerror(ebuf); + free(f); return (NULL); } } @@ -2147,6 +2148,7 @@ cfline(const char *line, const char *pro "unknown facility name \"%s\"", buf); logerror(ebuf); + free(f); return (NULL); } f->f_pmask[i >> 3] = pri; From owner-svn-src-head@freebsd.org Mon Mar 20 04:41:37 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6BFB0D1314F; Mon, 20 Mar 2017 04:41:37 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3B75D1F1F; Mon, 20 Mar 2017 04:41:37 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K4fagC018618; Mon, 20 Mar 2017 04:41:36 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K4faUw018617; Mon, 20 Mar 2017 04:41:36 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201703200441.v2K4faUw018617@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Mon, 20 Mar 2017 04:41:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315619 - head/share/man/man4 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 04:41:37 -0000 Author: delphij Date: Mon Mar 20 04:41:36 2017 New Revision: 315619 URL: https://svnweb.freebsd.org/changeset/base/315619 Log: Pet manlint. MFC after: 2 weeks Modified: head/share/man/man4/cpuctl.4 Modified: head/share/man/man4/cpuctl.4 ============================================================================== --- head/share/man/man4/cpuctl.4 Mon Mar 20 04:25:40 2017 (r315618) +++ head/share/man/man4/cpuctl.4 Mon Mar 20 04:41:36 2017 (r315619) @@ -160,7 +160,11 @@ field should point to the firmware image .Pp For additional information refer to .Pa cpuctl.h . -.Sh RETURN VALUES +.Sh FILES +.Bl -tag -width /dev/cpuctl -compact +.It Pa /dev/cpuctl +.El +.Sh ERRORS .Bl -tag -width Er .It Bq Er ENXIO The operation requested is not supported by the device (e.g., unsupported @@ -172,10 +176,6 @@ No physical memory was available to comp .It Bq Er EFAULT The firmware image address points outside the process address space. .El -.Sh FILES -.Bl -tag -width /dev/cpuctl -compact -.It Pa /dev/cpuctl -.El .Sh SEE ALSO .Xr hwpmc 4 , .Xr cpucontrol 8 From owner-svn-src-head@freebsd.org Mon Mar 20 05:12:29 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 304ABD13961; Mon, 20 Mar 2017 05:12:29 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F16F91C4E; Mon, 20 Mar 2017 05:12:28 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K5CSuC031060; Mon, 20 Mar 2017 05:12:28 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K5CSsB031043; Mon, 20 Mar 2017 05:12:28 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703200512.v2K5CSsB031043@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 05:12:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315620 - head/usr.sbin/syslogd X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 05:12:29 -0000 Author: ngie Date: Mon Mar 20 05:12:27 2017 New Revision: 315620 URL: https://svnweb.freebsd.org/changeset/base/315620 Log: syslogd: fix dprintf in socksetup(..) - Make the explanation more complete - Correct a minor grammar nit with verb tense. - Don't emit the message if `pe->pe_name` is NULL (it doesn't have much value). MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/usr.sbin/syslogd/syslogd.c Modified: head/usr.sbin/syslogd/syslogd.c ============================================================================== --- head/usr.sbin/syslogd/syslogd.c Mon Mar 20 04:41:36 2017 (r315619) +++ head/usr.sbin/syslogd/syslogd.c Mon Mar 20 05:12:27 2017 (r315620) @@ -2901,7 +2901,8 @@ socksetup(struct peer *pe) .ai_socktype = SOCK_DGRAM, .ai_flags = AI_PASSIVE }; - dprintf("Try %s\n", pe->pe_name); + if (pe->pe_name != NULL) + dprintf("Trying peer: %s\n", pe->pe_name); if (pe->pe_serv == NULL) pe->pe_serv = "syslog"; error = getaddrinfo(pe->pe_name, pe->pe_serv, &hints, &res0); From owner-svn-src-head@freebsd.org Mon Mar 20 05:15:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9F91DD13A30; Mon, 20 Mar 2017 05:15:56 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6C6581DBD; Mon, 20 Mar 2017 05:15:56 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K5FtMc032281; Mon, 20 Mar 2017 05:15:55 GMT (envelope-from alc@FreeBSD.org) Received: (from alc@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K5Ft9g032280; Mon, 20 Mar 2017 05:15:55 GMT (envelope-from alc@FreeBSD.org) Message-Id: <201703200515.v2K5Ft9g032280@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: alc set sender to alc@FreeBSD.org using -f From: Alan Cox Date: Mon, 20 Mar 2017 05:15:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315621 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 05:15:56 -0000 Author: alc Date: Mon Mar 20 05:15:55 2017 New Revision: 315621 URL: https://svnweb.freebsd.org/changeset/base/315621 Log: Use IDX_TO_OFF(), not ptoa(), when converting the difference between two vm_pindex_t's into a vm_ooffset_t. The length given to shm_dotruncate() must never be negative. Assert this. Tidy up a comment. Reviewed by: kib MFC after: 1 week Modified: head/sys/kern/uipc_shm.c Modified: head/sys/kern/uipc_shm.c ============================================================================== --- head/sys/kern/uipc_shm.c Mon Mar 20 05:12:27 2017 (r315620) +++ head/sys/kern/uipc_shm.c Mon Mar 20 05:15:55 2017 (r315621) @@ -418,6 +418,7 @@ shm_dotruncate(struct shmfd *shmfd, off_ vm_ooffset_t delta; int base, rv; + KASSERT(length >= 0, ("shm_dotruncate: length < 0")); object = shmfd->shm_object; VM_OBJECT_WLOCK(object); if (length == shmfd->shm_size) { @@ -486,7 +487,7 @@ retry: vm_pager_page_unswapped(m); } } - delta = ptoa(object->size - nobjsize); + delta = IDX_TO_OFF(object->size - nobjsize); /* Toss in memory pages. */ if (nobjsize < object->size) @@ -501,8 +502,8 @@ retry: swap_release_by_cred(delta, object->cred); object->charge -= delta; } else { - /* Attempt to reserve the swap */ - delta = ptoa(nobjsize - object->size); + /* Try to reserve additional swap space. */ + delta = IDX_TO_OFF(nobjsize - object->size); if (!swap_reserve_by_cred(delta, object->cred)) { VM_OBJECT_WUNLOCK(object); return (ENOMEM); From owner-svn-src-head@freebsd.org Mon Mar 20 06:12:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A7811D146DE; Mon, 20 Mar 2017 06:12:56 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 76A2312F6; Mon, 20 Mar 2017 06:12:56 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K6Ct6S056171; Mon, 20 Mar 2017 06:12:55 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K6Ctgw056170; Mon, 20 Mar 2017 06:12:55 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703200612.v2K6Ctgw056170@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 06:12:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315622 - head/usr.sbin/syslogd X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 06:12:56 -0000 Author: ngie Date: Mon Mar 20 06:12:55 2017 New Revision: 315622 URL: https://svnweb.freebsd.org/changeset/base/315622 Log: syslogd: try to print out a more helpful message in socksetup(..) if/when getaddrinfo fails If the asprintf call fails, fall back to the old code (as a last ditch effort to provide the end-user with helpful output). Sponsored by: Dell EMC Isilon Modified: head/usr.sbin/syslogd/syslogd.c Modified: head/usr.sbin/syslogd/syslogd.c ============================================================================== --- head/usr.sbin/syslogd/syslogd.c Mon Mar 20 05:15:55 2017 (r315621) +++ head/usr.sbin/syslogd/syslogd.c Mon Mar 20 06:12:55 2017 (r315622) @@ -2907,8 +2907,17 @@ socksetup(struct peer *pe) pe->pe_serv = "syslog"; error = getaddrinfo(pe->pe_name, pe->pe_serv, &hints, &res0); if (error) { - logerror(gai_strerror(error)); + char *msgbuf; + + asprintf(&msgbuf, "getaddrinfo failed for %s%s: %s", + pe->pe_name == NULL ? "" : pe->pe_name, pe->pe_serv, + gai_strerror(error)); errno = 0; + if (msgbuf == NULL) + logerror(gai_strerror(error)); + else + logerror(msgbuf); + free(msgbuf); die(0); } for (res = res0; res != NULL; res = res->ai_next) { From owner-svn-src-head@freebsd.org Mon Mar 20 06:43:49 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D27FED13013; Mon, 20 Mar 2017 06:43:49 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pg0-x241.google.com (mail-pg0-x241.google.com [IPv6:2607:f8b0:400e:c05::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9FCD91259; Mon, 20 Mar 2017 06:43:49 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pg0-x241.google.com with SMTP id 79so9468031pgf.0; Sun, 19 Mar 2017 23:43:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=S/cjhcT+hJPm42ga7JDJamPhrI4wmPgOMT4Zi5D8tfU=; b=ir6IwfrH7ytkM9jbtSC6LJXFKLw0ITT1CoyBkF2mf6zSZPT6p4dTaP/Zs1wSfBCf/j tK9WSglPwa4yJJehGOpHytj1GGz8mr0pOdBb8etezHSmOzWkIcUAnpQQv0OByjK3sjon PqtJlfLww36Ff3dTEPQFzAG0WSnJ1PRd0DW3gJwUvekbzL4UAMNo8JEvxXTx5SaHHeNJ NCHuRpsZoaGSzx3+3iLq6LZhVQ3JkEuE0X9QDS1DtuQnFkPNeYfj7qJidRXYEmKRi9KO 6AHf+XmfT/1DwVABIuxHBIkzpxrfwX5xFSoA9CPtN67gnQSr4SL/ibre/0Vqi8tnx4FY uHog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=S/cjhcT+hJPm42ga7JDJamPhrI4wmPgOMT4Zi5D8tfU=; b=FnxOq9hmzfOp2OgR1wWKmmt0rVvGtc+QBK0ILP1Bbbd6nwaxyt9RJddNXCkTTHyMf8 psOWPDUL5LE22llZIXSYqs2pq0QMMTvmbBS1XD2nPq/6yblzafZksy5BNpTPkyv6m4AQ FboLvxHHza2xrAHdh7i2YwervJJZ1BiSWC3kxYIWfl5yKy5cZsavhDdg9bcpiLeo1Bwo Crn1OjmfvFZMD1zFrvCVTre5zqOifgmi+zoSb584R99vV2sesEZFLN6y+3N+uA3UrULf hUkQx5J52APDIREOT29abef9eZYZmNsGXaQ4Ri13M6QbzlHFaqIoMRGg2jgvUKPT5RdC tzvA== X-Gm-Message-State: AFeK/H1Vv8GCQXJN1W+QkLTXCD/yhHQeQdm8wcqPP1GhWIRPfwW6h3OMPoxmA7FUViRDZQ== X-Received: by 10.98.156.23 with SMTP id f23mr31212571pfe.3.1489992229005; Sun, 19 Mar 2017 23:43:49 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id r13sm30642107pfg.55.2017.03.19.23.43.47 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 19 Mar 2017 23:43:47 -0700 (PDT) Subject: Re: svn commit: r309933 - head/usr.sbin/syslogd Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_E6F2F2EA-4A35-42A1-978E-885E420FCC47"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: <201612121933.uBCJXen2093959@repo.freebsd.org> Date: Sun, 19 Mar 2017 23:43:46 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: References: <201612121933.uBCJXen2093959@repo.freebsd.org> To: Hiroki Sato X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 06:43:49 -0000 --Apple-Mail=_E6F2F2EA-4A35-42A1-978E-885E420FCC47 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Dec 12, 2016, at 11:33, Hiroki Sato wrote: >=20 > Author: hrs > Date: Mon Dec 12 19:33:40 2016 > New Revision: 309933 > URL: https://svnweb.freebsd.org/changeset/base/309933 >=20 > Log: > - Refactor listening socket list. All of the listening sockets are > now maintained in a single linked-list in a transport-independent = manner. > - Use queue.h for linked-list structure. > - Use linked-list for AllowedPeers. > - Use getaddrinfo(8) even for Unix Domain sockets. > - Use macros to type-casting from/to struct sockaddr{,_in,_in6}. > - Define fu_* macro for union f_un to shorten the member names. > - Remove an extra #include . > - Add "static" to non-exported symbols. > - !INET support is still incomplete but will be fixed later. >=20 > There is no functional change except for some minor debug messages. Hello Hiroki-san, This change unfortunately breaks binding to IPv6 addresses, as = discussed in this bug: = https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D217939 . If I can = figure out how to make it work (soon), I=E2=80=99ll send out a CR with = my proposed changes. Thanks, -Ngie --Apple-Mail=_E6F2F2EA-4A35-42A1-978E-885E420FCC47 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIbBAEBCgAGBQJYz3oiAAoJEPWDqSZpMIYVu1UP+OUh1AScoNQXKjN118UpIpN4 DJfc27p5I0FNcMP2vWdwFIzkqFhBKk/j6yxCfgY4CFqtpqa1CSU3nRbj+Hpb5/tb ZsXqz6ZZ0c3+A4MNDvc4cdAO8sYMmXLSX8bVe2Ws90evb3VfXUs2dypdbW6+PKDE PAeN6CUQmLrlcMZyBoQkJgsqA6DBS1gzAZuY94uee6TMyDEbpZoDaHNZsxkiWHbR mv+g3WnQX+uFg84rYfXOjBnL6sUPwTky8zryN0sYkeUUH9ZpYE4oJIcRn+JR9Tgf +2FhCnsV+bRGIbJXxlAcRbPVRt7RN37bC5E75+eR9Oi8InVP0w82aOA7DRoSl7Ok 7ifMz91OCqt3dzY+Dt/ORtqt1Zwh/II+JidMuo8t2nzQUO9qo/uA4hBWMJ96Snd7 tjufTrTOOiZM+XZwgzuD7lF312wVcxOjo1h0yPRcdT1e8C5XCHDvQEpll6dj/FO3 XHGj18Ar1Vm86khC0I9ohadXiq4T/F2UOAJzSo8yi3XsEPXvoh2UFPMhlMW3Rxom HfXlIB9/QjC0SPABsGBojmBzACpJo6TRlLEx9hE9QT7UoeGkYsGuzuI6ekNkklus UWwv0z1zXpgNUmyN2biWwqqomv59HMU9S28BQBpnyb0brhk+Mn4c3MDV6QlgNbS1 0gttIDcsCUS2s1Ea3os= =TeFd -----END PGP SIGNATURE----- --Apple-Mail=_E6F2F2EA-4A35-42A1-978E-885E420FCC47-- From owner-svn-src-head@freebsd.org Mon Mar 20 06:45:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 09452D130FD; Mon, 20 Mar 2017 06:45:23 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pf0-x241.google.com (mail-pf0-x241.google.com [IPv6:2607:f8b0:400e:c00::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id CA3BD13D6; Mon, 20 Mar 2017 06:45:22 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pf0-x241.google.com with SMTP id p189so10241672pfp.0; Sun, 19 Mar 2017 23:45:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=26Vx5f/PhbLEFOwxhHMH+OWysiw8PDZEKE+48L3bMq0=; b=jCWR8X/KKJhDPV/pxlwrOJis09WplzIpl/0ttKBz64hGqePjE3UJLlbXYHvGGxE7sB EqObYXeEaLQGmXBY40AuCHs/VZqpKo1xqk2ONKsO56jxUvD9sX2KkdKx7j8nEG7OSp8K 83ix0B3zw+ABg/NsBAB/gno5hcQ4FykV2oFzRV7VEH/+sLunykrD/YBzJQ9TrhtZAPVK hSXx9Qvqu40qrZ7VucmKXy6Rr6L6EtIhMpIxTLXk44ruo1VFK94iSaTDQqDqv3WzHHBq UHdPfA+DNzlzEOb1pvAxAUnGKuVZuokvA14p+THhGhZ0E4Gtmq1mllVOVozSl/Fj/sPF iYvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=26Vx5f/PhbLEFOwxhHMH+OWysiw8PDZEKE+48L3bMq0=; b=p4slyem+NP8tuUpnhFL8nxM67bu9jDBp9V3EBjhf/81+l7GWHVvq+PeHpf8yfckrzn TfPFf9cgP5i+ZzEgSiviJFla6827eIhbGrbUxu4V3UtjcCZrQhZ/Xsf+oqVUTn23X8iw 9eunQYUbF7lgMkiiyp1Cx0TCg+Oe5ogt8TXyi9qneNwWL2G7HNkOSdv7C6ahm776VWJF 9IHldSCXQkn6xisFqTGZxGF8am1+H/2fQzZn+HvjGKqtaqVIeugNETc4M5CxBXmSYZh2 di60daMYFxaO9aOuqRBt2P/ahu2sCY8pO9aDV0kwH/DLjjOSyX8ILO//MUfQVsPf1h0l wZyg== X-Gm-Message-State: AFeK/H2E/g+u2TVo6dS1YSA34EfrpDvYqM3fKZBaMooOkFCFU+W9O+hc/dwVSASaG45zTw== X-Received: by 10.99.125.68 with SMTP id m4mr29997521pgn.13.1489992322183; Sun, 19 Mar 2017 23:45:22 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id r17sm30850450pgg.19.2017.03.19.23.45.21 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 19 Mar 2017 23:45:21 -0700 (PDT) Subject: Re: svn commit: r309933 - head/usr.sbin/syslogd Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_F6E34CCE-77F7-4A44-B67C-ADE283EDEC9B"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: Date: Sun, 19 Mar 2017 23:45:20 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: <093CA6EB-C75E-4CE3-AB62-2453D183214D@gmail.com> References: <201612121933.uBCJXen2093959@repo.freebsd.org> To: Hiroki Sato X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 06:45:23 -0000 --Apple-Mail=_F6E34CCE-77F7-4A44-B67C-ADE283EDEC9B Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 19, 2017, at 23:43, Ngie Cooper (yaneurabeya) = wrote: >=20 >>=20 >> On Dec 12, 2016, at 11:33, Hiroki Sato wrote: >>=20 >> Author: hrs >> Date: Mon Dec 12 19:33:40 2016 >> New Revision: 309933 >> URL: https://svnweb.freebsd.org/changeset/base/309933 >>=20 >> Log: >> - Refactor listening socket list. All of the listening sockets are >> now maintained in a single linked-list in a transport-independent = manner. >> - Use queue.h for linked-list structure. >> - Use linked-list for AllowedPeers. >> - Use getaddrinfo(8) even for Unix Domain sockets. >> - Use macros to type-casting from/to struct sockaddr{,_in,_in6}. >> - Define fu_* macro for union f_un to shorten the member names. >> - Remove an extra #include . >> - Add "static" to non-exported symbols. >> - !INET support is still incomplete but will be fixed later. >>=20 >> There is no functional change except for some minor debug messages. >=20 > Hello Hiroki-san, = =E3=80=8C=E3=81=A9=E3=81=86=E3=82=82=E3=81=99=E3=81=BF=E3=81=BE=E3=81=9B=E3= =82=93=E3=83=BB=E3=83=BB=E3=83=BB=E4=BD=90=E8=97=A4=E3=81=95=E3=82=93=E3=81= =A8=E8=A8=80=E3=81=A3=E3=81=9F=E3=81=AF=E3=81=9A=E3=81=A7=E3=81=99=E3=81=AD= =E3=80=82=E3=80=8D --Apple-Mail=_F6E34CCE-77F7-4A44-B67C-ADE283EDEC9B Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJYz3qAAAoJEPWDqSZpMIYV2oAP/RamiSdE2vtf98A7rBdzrAv9 /HGebnsr/c0xvcZyCPHVJ7EqEaomCme8UTlLk3YBj74a+t2S7V4oLt5p2fPJu8Ff VfCyYBBTCI8qHJj62IIgI6B3dGcfL/z4G9dVfWmqjLt9TfyLvaZ23cjnemdjQB3p N8nfJPuLABxBGFmELf9SH2TO7MU1rIeR70wYvKwrbTLDE8Xzf9XnCtrP7TalwcbB lEph0aHvnEvEVIkt3GLjf0vUAma9Pl9pZgl/QodpxA4CtO5h6z64pGVIPcwdbVpw Mirrs10g3VXwhG9AQ9FQXjbGu2IcD+dtyn0+z4B+5sxxuGmSj5Xd3ukB9ZP/jBK4 ce5/9dHdLK2JdEb2MA0YWEozeDURT1Bq0GX17B0SvB4SCFJJ36Cy3zaSYCdvDa37 EUbd6vhCKMG88fsATSHseGkueARF4M31Mj2IeZIf2PdedtNFDZ9+xUsCFT+nps9p mFpfuC3z7oADB14BhLYFmTsIxvycXQ5qrnXLSITGCB9YJgSfp3G5A+DFJsS2IBIP EVaVGNMAcM3DB4q9/CXgadjzefmXemplvcuaNsGY61ugPRKvZESnjK+us4AcnHUT 44Dp029zbBbsJD3kxzQiSAbXYzsJZVuQN8AzBtnqQx1+FGkPmcs7XWSMblNceYCP aIuv7FJ3MP2oi5i5n/xb =gPbO -----END PGP SIGNATURE----- --Apple-Mail=_F6E34CCE-77F7-4A44-B67C-ADE283EDEC9B-- From owner-svn-src-head@freebsd.org Mon Mar 20 08:10:36 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5BA1DD14667; Mon, 20 Mar 2017 08:10:36 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2B5421706; Mon, 20 Mar 2017 08:10:36 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2K8AZJq000696; Mon, 20 Mar 2017 08:10:35 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2K8AZhK000695; Mon, 20 Mar 2017 08:10:35 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703200810.v2K8AZhK000695@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Mon, 20 Mar 2017 08:10:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315623 - head/sys/dev/rtwn X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 08:10:36 -0000 Author: avos Date: Mon Mar 20 08:10:35 2017 New Revision: 315623 URL: https://svnweb.freebsd.org/changeset/base/315623 Log: rtwn: fix node id assignment. Do not assign new id if node is reused. Tested with RTL8821AU, HOSTAP mode + RTL8188EU, STA mode (with inactivity timeout == 90) Modified: head/sys/dev/rtwn/if_rtwn.c Modified: head/sys/dev/rtwn/if_rtwn.c ============================================================================== --- head/sys/dev/rtwn/if_rtwn.c Mon Mar 20 06:12:55 2017 (r315622) +++ head/sys/dev/rtwn/if_rtwn.c Mon Mar 20 08:10:35 2017 (r315623) @@ -1718,13 +1718,13 @@ rtwn_node_alloc(struct ieee80211vap *vap } static void -rtwn_newassoc(struct ieee80211_node *ni, int isnew) +rtwn_newassoc(struct ieee80211_node *ni, int isnew __unused) { struct rtwn_softc *sc = ni->ni_ic->ic_softc; struct rtwn_node *un = RTWN_NODE(ni); int id; - if (!isnew) + if (un->id != RTWN_MACID_UNDEFINED) return; RTWN_NT_LOCK(sc); From owner-svn-src-head@freebsd.org Mon Mar 20 13:02:30 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 316F0D134DD; Mon, 20 Mar 2017 13:02:30 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BCF5684D; Mon, 20 Mar 2017 13:02:29 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KD2S3r023295; Mon, 20 Mar 2017 13:02:28 GMT (envelope-from mm@FreeBSD.org) Received: (from mm@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KD2Rnt023283; Mon, 20 Mar 2017 13:02:27 GMT (envelope-from mm@FreeBSD.org) Message-Id: <201703201302.v2KD2Rnt023283@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mm set sender to mm@FreeBSD.org using -f From: Martin Matuska Date: Mon, 20 Mar 2017 13:02:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315636 - in head: contrib/libarchive contrib/libarchive/cpio contrib/libarchive/libarchive contrib/libarchive/libarchive/test contrib/libarchive/tar contrib/libarchive/tar/test contrib... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 13:02:30 -0000 Author: mm Date: Mon Mar 20 13:02:27 2017 New Revision: 315636 URL: https://svnweb.freebsd.org/changeset/base/315636 Log: MFV r315633, 315635: Sync libarchive with vendor Vendor changes/bugfixes (FreeBSD-related): PR 867 (bsdcpio): show numeric uid/gid when names are not found PR 870 (seekable zip): accept files with valid ZIP64 EOCD headers PR 880 (pax): Fix handling of "size" pax header keyword PR 887 (crypto): Discard 3072 bytes instead of 1024 of first keystream OSS-Fuzz issue 806 (mtree): rework mtree_atol10 integer parser Break ACL read/write code into platform-specific source files Unbreak static dependency on libbz2 MFC after: 1 week Added: head/contrib/libarchive/libarchive/archive_acl_maps.h - copied, changed from r315633, vendor/libarchive/dist/libarchive/archive_acl_maps.h head/contrib/libarchive/libarchive/archive_acl_maps_freebsd.c - copied, changed from r315633, vendor/libarchive/dist/libarchive/archive_acl_maps_freebsd.c head/contrib/libarchive/libarchive/archive_platform_acl.h - copied unchanged from r315633, vendor/libarchive/dist/libarchive/archive_platform_acl.h head/contrib/libarchive/libarchive/archive_read_disk_acl_freebsd.c - copied unchanged from r315633, vendor/libarchive/dist/libarchive/archive_read_disk_acl_freebsd.c head/contrib/libarchive/libarchive/archive_version_details.c - copied unchanged from r315633, vendor/libarchive/dist/libarchive/archive_version_details.c head/contrib/libarchive/libarchive/archive_write_disk_acl_freebsd.c - copied unchanged from r315633, vendor/libarchive/dist/libarchive/archive_write_disk_acl_freebsd.c Deleted: head/contrib/libarchive/libarchive/archive_write_disk_acl.c Modified: head/contrib/libarchive/NEWS head/contrib/libarchive/cpio/cpio.c head/contrib/libarchive/libarchive/archive_entry.3 head/contrib/libarchive/libarchive/archive_entry_acl.3 head/contrib/libarchive/libarchive/archive_platform.h head/contrib/libarchive/libarchive/archive_random.c head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c head/contrib/libarchive/libarchive/archive_read_disk_private.h head/contrib/libarchive/libarchive/archive_read_open.3 head/contrib/libarchive/libarchive/archive_read_support_format_mtree.c head/contrib/libarchive/libarchive/archive_read_support_format_tar.c head/contrib/libarchive/libarchive/archive_read_support_format_zip.c head/contrib/libarchive/libarchive/archive_util.c head/contrib/libarchive/libarchive/archive_write_disk_posix.c head/contrib/libarchive/libarchive/archive_write_disk_private.h head/contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c head/contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c head/contrib/libarchive/tar/bsdtar.1 head/contrib/libarchive/tar/test/test_option_acls.c head/contrib/libarchive/test_utils/test_common.h head/contrib/libarchive/test_utils/test_main.c head/lib/libarchive/Makefile head/lib/libarchive/config_freebsd.h head/usr.bin/bsdcat/tests/Makefile head/usr.bin/cpio/tests/Makefile head/usr.bin/tar/tests/Makefile Directory Properties: head/contrib/libarchive/ (props changed) Modified: head/contrib/libarchive/NEWS ============================================================================== --- head/contrib/libarchive/NEWS Mon Mar 20 11:55:03 2017 (r315635) +++ head/contrib/libarchive/NEWS Mon Mar 20 13:02:27 2017 (r315636) @@ -1,3 +1,5 @@ +Mar 16, 2017: NFSv4 ACL support for Linux (librichacl) + Feb 26, 2017: libarchive 3.3.1 released Security & Feature release @@ -293,7 +295,7 @@ May 04, 2008: libarchive 2.5.3b released * libarchive: Mark which entry strings are set; be accurate about distinguishing empty strings ("") from unset ones (NULL) * tar: Don't crash reading entries with empty filenames - * libarchive_test, bsdtar_test, bsdcpio_test: Better detaults: + * libarchive_test, bsdtar_test, bsdcpio_test: Better defaults: run all tests, delete temp dirs, summarize repeated failures * -no-undefined to libtool for Cygwin * libarchive_test: Skip large file tests on systems with 32-bit off_t Modified: head/contrib/libarchive/cpio/cpio.c ============================================================================== --- head/contrib/libarchive/cpio/cpio.c Mon Mar 20 11:55:03 2017 (r315635) +++ head/contrib/libarchive/cpio/cpio.c Mon Mar 20 13:02:27 2017 (r315636) @@ -1344,23 +1344,23 @@ lookup_name(struct cpio *cpio, struct na cache->cache[slot].name = NULL; } - if (lookup_fn(cpio, &name, id) == 0) { - if (name == NULL || name[0] == '\0') { - /* If lookup failed, format it as a number. */ - snprintf(asnum, sizeof(asnum), "%u", (unsigned)id); - name = asnum; - } - cache->cache[slot].name = strdup(name); - if (cache->cache[slot].name != NULL) { - cache->cache[slot].id = id; - return (cache->cache[slot].name); - } - /* - * Conveniently, NULL marks an empty slot, so - * if the strdup() fails, we've just failed to - * cache it. No recovery necessary. - */ - } + if (lookup_fn(cpio, &name, id)) { + /* If lookup failed, format it as a number. */ + snprintf(asnum, sizeof(asnum), "%u", (unsigned)id); + name = asnum; + } + + cache->cache[slot].name = strdup(name); + if (cache->cache[slot].name != NULL) { + cache->cache[slot].id = id; + return (cache->cache[slot].name); + } + + /* + * Conveniently, NULL marks an empty slot, so + * if the strdup() fails, we've just failed to + * cache it. No recovery necessary. + */ return (NULL); } @@ -1381,15 +1381,14 @@ lookup_uname_helper(struct cpio *cpio, c errno = 0; pwent = getpwuid((uid_t)id); if (pwent == NULL) { - *name = NULL; - if (errno != 0 && errno != ENOENT) + if (errno && errno != ENOENT) lafe_warnc(errno, "getpwuid(%s) failed", cpio_i64toa((int64_t)id)); - return (errno); + return 1; } *name = pwent->pw_name; - return (0); + return 0; } static const char * @@ -1409,15 +1408,14 @@ lookup_gname_helper(struct cpio *cpio, c errno = 0; grent = getgrgid((gid_t)id); if (grent == NULL) { - *name = NULL; - if (errno != 0) + if (errno && errno != ENOENT) lafe_warnc(errno, "getgrgid(%s) failed", cpio_i64toa((int64_t)id)); - return (errno); + return 1; } *name = grent->gr_name; - return (0); + return 0; } /* Copied and modified: head/contrib/libarchive/libarchive/archive_acl_maps.h (from r315633, vendor/libarchive/dist/libarchive/archive_acl_maps.h) ============================================================================== --- vendor/libarchive/dist/libarchive/archive_acl_maps.h Mon Mar 20 11:12:31 2017 (r315633, copy source) +++ head/contrib/libarchive/libarchive/archive_acl_maps.h Mon Mar 20 13:02:27 2017 (r315636) @@ -37,7 +37,6 @@ typedef struct { const int p_perm; /* Platform permission or flag */ } acl_perm_map_t; -#ifndef _ARCHIVE_ACL_MAPS_DEFS #if ARCHIVE_ACL_POSIX1E extern const acl_perm_map_t acl_posix_perm_map[]; extern const int acl_posix_perm_map_size; @@ -48,5 +47,4 @@ extern const int acl_nfs4_perm_map_size; extern const acl_perm_map_t acl_nfs4_flag_map[]; extern const int acl_nfs4_flag_map_size; #endif -#endif /* !_ARCHIVE_ACL_MAPS_DEFS */ #endif /* ARCHIVE_ACL_MAPS_H_INCLUDED */ Copied and modified: head/contrib/libarchive/libarchive/archive_acl_maps_freebsd.c (from r315633, vendor/libarchive/dist/libarchive/archive_acl_maps_freebsd.c) ============================================================================== --- vendor/libarchive/dist/libarchive/archive_acl_maps_freebsd.c Mon Mar 20 11:12:31 2017 (r315633, copy source) +++ head/contrib/libarchive/libarchive/archive_acl_maps_freebsd.c Mon Mar 20 13:02:27 2017 (r315636) @@ -36,7 +36,6 @@ #include "archive_entry.h" #include "archive_private.h" #include "archive_read_disk_private.h" -#define _ARCHIVE_ACL_MAPS_DEFS #include "archive_acl_maps.h" const acl_perm_map_t acl_posix_perm_map[] = { Modified: head/contrib/libarchive/libarchive/archive_entry.3 ============================================================================== --- head/contrib/libarchive/libarchive/archive_entry.3 Mon Mar 20 11:55:03 2017 (r315635) +++ head/contrib/libarchive/libarchive/archive_entry.3 Mon Mar 20 13:02:27 2017 (r315636) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd Feburary 2, 2012 +.Dd February 2, 2012 .Dt ARCHIVE_ENTRY 3 .Os .Sh NAME Modified: head/contrib/libarchive/libarchive/archive_entry_acl.3 ============================================================================== --- head/contrib/libarchive/libarchive/archive_entry_acl.3 Mon Mar 20 11:55:03 2017 (r315635) +++ head/contrib/libarchive/libarchive/archive_entry_acl.3 Mon Mar 20 13:02:27 2017 (r315636) @@ -267,7 +267,7 @@ Only inherit, do not apply the permissio .It Dv ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT ( Sy n ) Do not propagate inherit flags. Only first-level entries inherit ACLs. .It Dv ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS ( Sy S ) -Trigger alarm or audit on succesful access. +Trigger alarm or audit on successful access. .It Dv ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS ( Sy F ) Trigger alarm or audit on failed access. .It Dv ARCHIVE_ENTRY_ACL_ENTRY_INHERITED ( Sy I ) @@ -279,7 +279,7 @@ and .Fn archive_entry_acl_add_entry_w add a single ACL entry. For the access ACL and non-extended principals, the classic Unix permissions -are updated. An archive enry cannot contain both POSIX.1e and NFSv4 ACL +are updated. An archive entry cannot contain both POSIX.1e and NFSv4 ACL entries. .Pp .Fn archive_entry_acl_clear @@ -303,7 +303,7 @@ for POSIX.1e ACLs and for NFSv4 ACLs. For POSIX.1e ACLs if .Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS is included and at least one extended ACL entry is found, -the three non-extened ACLs are added. +the three non-extended ACLs are added. .Pp .Fn archive_entry_acl_from_text and @@ -367,7 +367,7 @@ and .Fn archive_entry_acl_to_text_w convert the ACL entries for the given type into a .Pq wide -string of ACL entries separated by newline. If the the pointer +string of ACL entries separated by newline. If the pointer .Fa len_p is not NULL, then the function shall return the length of the string .Pq not including the NULL terminator Modified: head/contrib/libarchive/libarchive/archive_platform.h ============================================================================== --- head/contrib/libarchive/libarchive/archive_platform.h Mon Mar 20 11:55:03 2017 (r315635) +++ head/contrib/libarchive/libarchive/archive_platform.h Mon Mar 20 13:02:27 2017 (r315636) @@ -143,40 +143,6 @@ #endif /* - * If this platform has , acl_create(), acl_init(), - * acl_set_file(), and ACL_USER, we assume it has the rest of the - * POSIX.1e draft functions used in archive_read_extract.c. - */ -#if HAVE_SYS_ACL_H && HAVE_ACL_CREATE_ENTRY && HAVE_ACL_INIT && HAVE_ACL_SET_FILE -#if HAVE_DECL_ACL_USER -#define HAVE_POSIX_ACL 1 -#elif HAVE_DECL_ACL_TYPE_EXTENDED && HAVE_MEMBERSHIP_H -#define HAVE_DARWIN_ACL 1 -#endif -#if HAVE_DECL_ACL_TYPE_NFS4 -#define HAVE_FREEBSD_NFS4_ACL 1 -#endif -#endif - -/* - * If this platform has , acl(), facl() and ACLENT_T - * facl_set() and types aclent_t and ace_t it uses Solaris-style ACL functions - */ -#if HAVE_SYS_ACL_H && HAVE_ACL && HAVE_FACL && HAVE_ACLENT_T && \ - HAVE_DECL_GETACL && HAVE_DECL_GETACLCNT && HAVE_DECL_SETACL -#define HAVE_SUN_ACL 1 -#if HAVE_ACE_T && HAVE_DECL_ACE_GETACL && HAVE_DECL_ACE_GETACLCNT && \ - HAVE_DECL_ACE_SETACL -#define HAVE_SUN_NFS4_ACL 1 -#endif -#endif - -/* Define if platform supports NFSv4 ACLs */ -#if HAVE_FREEBSD_NFS4_ACL || HAVE_SUN_NFS4_ACL || HAVE_DARWIN_ACL -#define HAVE_NFS4_ACL 1 -#endif - -/* * If we can't restore metadata using a file descriptor, then * for compatibility's sake, close files before trying to restore metadata. */ Copied: head/contrib/libarchive/libarchive/archive_platform_acl.h (from r315633, vendor/libarchive/dist/libarchive/archive_platform_acl.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/libarchive/libarchive/archive_platform_acl.h Mon Mar 20 13:02:27 2017 (r315636, copy of r315633, vendor/libarchive/dist/libarchive/archive_platform_acl.h) @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2017 Martin Matuska + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* !!ONLY FOR USE INTERNALLY TO LIBARCHIVE!! */ + +#ifndef ARCHIVE_PLATFORM_ACL_H_INCLUDED +#define ARCHIVE_PLATFORM_ACL_H_INCLUDED + +/* + * Determine what ACL types are supported + */ +#if ARCHIVE_ACL_FREEBSD || ARCHIVE_ACL_SUNOS || ARCHIVE_ACL_LIBACL +#define ARCHIVE_ACL_POSIX1E 1 +#endif + +#if ARCHIVE_ACL_FREEBSD_NFS4 || ARCHIVE_ACL_SUNOS_NFS4 || \ + ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_LIBRICHACL +#define ARCHIVE_ACL_NFS4 1 +#endif + +#if ARCHIVE_ACL_POSIX1E || ARCHIVE_ACL_NFS4 +#define ARCHIVE_ACL_SUPPORT 1 +#endif + +#endif /* ARCHIVE_PLATFORM_ACL_H_INCLUDED */ Modified: head/contrib/libarchive/libarchive/archive_random.c ============================================================================== --- head/contrib/libarchive/libarchive/archive_random.c Mon Mar 20 11:55:03 2017 (r315635) +++ head/contrib/libarchive/libarchive/archive_random.c Mon Mar 20 13:02:27 2017 (r315636) @@ -221,8 +221,11 @@ arc4_stir(void) /* * Discard early keystream, as per recommendations in: * "(Not So) Random Shuffles of RC4" by Ilya Mironov. + * As per the Network Operations Division, cryptographic requirements + * published on wikileaks on March 2017. */ - for (i = 0; i < 1024; i++) + + for (i = 0; i < 3072; i++) (void)arc4_getbyte(); arc4_count = 1600000; } Copied: head/contrib/libarchive/libarchive/archive_read_disk_acl_freebsd.c (from r315633, vendor/libarchive/dist/libarchive/archive_read_disk_acl_freebsd.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/libarchive/libarchive/archive_read_disk_acl_freebsd.c Mon Mar 20 13:02:27 2017 (r315636, copy of r315633, vendor/libarchive/dist/libarchive/archive_read_disk_acl_freebsd.c) @@ -0,0 +1,371 @@ +/*- + * Copyright (c) 2003-2009 Tim Kientzle + * Copyright (c) 2010-2012 Michihiro NAKAJIMA + * Copyright (c) 2016-2017 Martin Matuska + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "archive_platform.h" + +#ifdef HAVE_ERRNO_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_ACL_H +#define _ACL_PRIVATE /* For debugging */ +#include +#endif + +#include "archive_entry.h" +#include "archive_private.h" +#include "archive_read_disk_private.h" +#include "archive_acl_maps.h" + +/* + * Translate FreeBSD ACLs into libarchive internal structure + */ +static int +translate_acl(struct archive_read_disk *a, + struct archive_entry *entry, acl_t acl, int default_entry_acl_type) +{ +#if ARCHIVE_ACL_FREEBSD_NFS4 + int brand; + acl_flagset_t acl_flagset; +#endif + acl_tag_t acl_tag; + acl_entry_t acl_entry; + acl_permset_t acl_permset; + acl_entry_type_t acl_type; + int i, entry_acl_type, perm_map_size; + const acl_perm_map_t *perm_map; + int r, s, ae_id, ae_tag, ae_perm; + void *q; + const char *ae_name; + +#if ARCHIVE_ACL_FREEBSD_NFS4 + // FreeBSD "brands" ACLs as POSIX.1e or NFSv4 + // Make sure the "brand" on this ACL is consistent + // with the default_entry_acl_type bits provided. + if (acl_get_brand_np(acl, &brand) != 0) { + archive_set_error(&a->archive, errno, + "Failed to read ACL brand"); + return (ARCHIVE_WARN); + } + switch (brand) { + case ACL_BRAND_POSIX: + switch (default_entry_acl_type) { + case ARCHIVE_ENTRY_ACL_TYPE_ACCESS: + case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT: + break; + default: + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Invalid ACL entry type for POSIX.1e ACL"); + return (ARCHIVE_WARN); + } + break; + case ACL_BRAND_NFS4: + if (default_entry_acl_type & ~ARCHIVE_ENTRY_ACL_TYPE_NFS4) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Invalid ACL entry type for NFSv4 ACL"); + return (ARCHIVE_WARN); + } + break; + default: + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Unknown ACL brand"); + return (ARCHIVE_WARN); + } +#endif + + s = acl_get_entry(acl, ACL_FIRST_ENTRY, &acl_entry); + if (s == -1) { + archive_set_error(&a->archive, errno, + "Failed to get first ACL entry"); + return (ARCHIVE_WARN); + } + + while (s == 1) { + ae_id = -1; + ae_name = NULL; + ae_perm = 0; + + if (acl_get_tag_type(acl_entry, &acl_tag) != 0) { + archive_set_error(&a->archive, errno, + "Failed to get ACL tag type"); + return (ARCHIVE_WARN); + } + switch (acl_tag) { + case ACL_USER: + q = acl_get_qualifier(acl_entry); + if (q != NULL) { + ae_id = (int)*(uid_t *)q; + acl_free(q); + ae_name = archive_read_disk_uname(&a->archive, + ae_id); + } + ae_tag = ARCHIVE_ENTRY_ACL_USER; + break; + case ACL_GROUP: + q = acl_get_qualifier(acl_entry); + if (q != NULL) { + ae_id = (int)*(gid_t *)q; + acl_free(q); + ae_name = archive_read_disk_gname(&a->archive, + ae_id); + } + ae_tag = ARCHIVE_ENTRY_ACL_GROUP; + break; + case ACL_MASK: + ae_tag = ARCHIVE_ENTRY_ACL_MASK; + break; + case ACL_USER_OBJ: + ae_tag = ARCHIVE_ENTRY_ACL_USER_OBJ; + break; + case ACL_GROUP_OBJ: + ae_tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ; + break; + case ACL_OTHER: + ae_tag = ARCHIVE_ENTRY_ACL_OTHER; + break; +#if ARCHIVE_ACL_FREEBSD_NFS4 + case ACL_EVERYONE: + ae_tag = ARCHIVE_ENTRY_ACL_EVERYONE; + break; +#endif + default: + /* Skip types that libarchive can't support. */ + s = acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry); + continue; + } + + // XXX acl_type maps to allow/deny/audit/YYYY bits + entry_acl_type = default_entry_acl_type; + +#if ARCHIVE_ACL_FREEBSD_NFS4 + if (default_entry_acl_type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) { + /* + * acl_get_entry_type_np() fails with non-NFSv4 ACLs + */ + if (acl_get_entry_type_np(acl_entry, &acl_type) != 0) { + archive_set_error(&a->archive, errno, "Failed " + "to get ACL type from a NFSv4 ACL entry"); + return (ARCHIVE_WARN); + } + switch (acl_type) { + case ACL_ENTRY_TYPE_ALLOW: + entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_ALLOW; + break; + case ACL_ENTRY_TYPE_DENY: + entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_DENY; + break; + case ACL_ENTRY_TYPE_AUDIT: + entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_AUDIT; + break; + case ACL_ENTRY_TYPE_ALARM: + entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_ALARM; + break; + default: + archive_set_error(&a->archive, errno, + "Invalid NFSv4 ACL entry type"); + return (ARCHIVE_WARN); + } + + /* + * Libarchive stores "flag" (NFSv4 inheritance bits) + * in the ae_perm bitmap. + * + * acl_get_flagset_np() fails with non-NFSv4 ACLs + */ + if (acl_get_flagset_np(acl_entry, &acl_flagset) != 0) { + archive_set_error(&a->archive, errno, + "Failed to get flagset from a NFSv4 " + "ACL entry"); + return (ARCHIVE_WARN); + } + for (i = 0; i < acl_nfs4_flag_map_size; ++i) { + r = acl_get_flag_np(acl_flagset, + acl_nfs4_flag_map[i].p_perm); + if (r == -1) { + archive_set_error(&a->archive, errno, + "Failed to check flag in a NFSv4 " + "ACL flagset"); + return (ARCHIVE_WARN); + } else if (r) + ae_perm |= acl_nfs4_flag_map[i].a_perm; + } + } +#endif + + if (acl_get_permset(acl_entry, &acl_permset) != 0) { + archive_set_error(&a->archive, errno, + "Failed to get ACL permission set"); + return (ARCHIVE_WARN); + } + +#if ARCHIVE_ACL_FREEBSD_NFS4 + if (default_entry_acl_type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) { + perm_map_size = acl_nfs4_perm_map_size; + perm_map = acl_nfs4_perm_map; + } else { +#endif + perm_map_size = acl_posix_perm_map_size; + perm_map = acl_posix_perm_map; +#if ARCHIVE_ACL_FREEBSD_NFS4 + } +#endif + + for (i = 0; i < perm_map_size; ++i) { + r = acl_get_perm_np(acl_permset, perm_map[i].p_perm); + if (r == -1) { + archive_set_error(&a->archive, errno, + "Failed to check permission in an ACL " + "permission set"); + return (ARCHIVE_WARN); + } else if (r) + ae_perm |= perm_map[i].a_perm; + } + + archive_entry_acl_add_entry(entry, entry_acl_type, + ae_perm, ae_tag, + ae_id, ae_name); + + s = acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry); + if (s == -1) { + archive_set_error(&a->archive, errno, + "Failed to get next ACL entry"); + return (ARCHIVE_WARN); + } + } + return (ARCHIVE_OK); +} + +int +archive_read_disk_entry_setup_acls(struct archive_read_disk *a, + struct archive_entry *entry, int *fd) +{ + const char *accpath; + acl_t acl; + int r; + + accpath = NULL; + + if (*fd < 0) { + accpath = archive_read_disk_entry_setup_path(a, entry, fd); + if (accpath == NULL) + return (ARCHIVE_WARN); + } + + archive_entry_acl_clear(entry); + + acl = NULL; + +#if ARCHIVE_ACL_FREEBSD_NFS4 + /* Try NFSv4 ACL first. */ + if (*fd >= 0) + acl = acl_get_fd_np(*fd, ACL_TYPE_NFS4); + else if (!a->follow_symlinks) + acl = acl_get_link_np(accpath, ACL_TYPE_NFS4); + else + acl = acl_get_file(accpath, ACL_TYPE_NFS4); + + /* Ignore "trivial" ACLs that just mirror the file mode. */ + if (acl != NULL && acl_is_trivial_np(acl, &r) == 0 && r == 1) { + acl_free(acl); + acl = NULL; + return (ARCHIVE_OK); + } + + if (acl != NULL) { + r = translate_acl(a, entry, acl, ARCHIVE_ENTRY_ACL_TYPE_NFS4); + acl_free(acl); + acl = NULL; + + if (r != ARCHIVE_OK) { + archive_set_error(&a->archive, errno, + "Couldn't translate NFSv4 ACLs"); + } + + return (r); + } +#endif + + /* Retrieve access ACL from file. */ + if (*fd >= 0) + acl = acl_get_fd_np(*fd, ACL_TYPE_ACCESS); +#if HAVE_ACL_GET_LINK_NP + else if (!a->follow_symlinks) + acl = acl_get_link_np(accpath, ACL_TYPE_ACCESS); +#else + else if ((!a->follow_symlinks) + && (archive_entry_filetype(entry) == AE_IFLNK)) + /* We can't get the ACL of a symlink, so we assume it can't + have one. */ + acl = NULL; +#endif + else + acl = acl_get_file(accpath, ACL_TYPE_ACCESS); + +#if HAVE_ACL_IS_TRIVIAL_NP + /* Ignore "trivial" ACLs that just mirror the file mode. */ + if (acl != NULL && acl_is_trivial_np(acl, &r) == 0 && r == 1) { + acl_free(acl); + acl = NULL; + } +#endif + + if (acl != NULL) { + r = translate_acl(a, entry, acl, ARCHIVE_ENTRY_ACL_TYPE_ACCESS); + acl_free(acl); + acl = NULL; + + if (r != ARCHIVE_OK) { + archive_set_error(&a->archive, errno, + "Couldn't translate access ACLs"); + return (r); + } + } + + /* Only directories can have default ACLs. */ + if (S_ISDIR(archive_entry_mode(entry))) { + if (*fd >= 0) + acl = acl_get_fd_np(*fd, ACL_TYPE_DEFAULT); + else + acl = acl_get_file(accpath, ACL_TYPE_DEFAULT); + if (acl != NULL) { + r = translate_acl(a, entry, acl, + ARCHIVE_ENTRY_ACL_TYPE_DEFAULT); + acl_free(acl); + if (r != ARCHIVE_OK) { + archive_set_error(&a->archive, errno, + "Couldn't translate default ACLs"); + return (r); + } + } + } + return (ARCHIVE_OK); +} Modified: head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c ============================================================================== --- head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c Mon Mar 20 11:55:03 2017 (r315635) +++ head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c Mon Mar 20 13:02:27 2017 (r315636) @@ -26,23 +26,14 @@ */ #include "archive_platform.h" -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD"); /* This is the tree-walking code for POSIX systems. */ #if !defined(_WIN32) || defined(__CYGWIN__) #ifdef HAVE_SYS_TYPES_H -/* Mac OSX requires sys/types.h before sys/acl.h. */ #include #endif -#ifdef HAVE_SYS_ACL_H -#include -#endif -#ifdef HAVE_DARWIN_ACL -#include -#include -#include -#endif #ifdef HAVE_SYS_EXTATTR_H #include #endif @@ -63,9 +54,6 @@ __FBSDID("$FreeBSD$"); #ifdef HAVE_SYS_EA_H #include #endif -#ifdef HAVE_ACL_LIBACL_H -#include -#endif #ifdef HAVE_COPYFILE_H #include #endif @@ -113,25 +101,6 @@ __FBSDID("$FreeBSD$"); #define O_CLOEXEC 0 #endif -/* - * Linux and FreeBSD plug this obvious hole in POSIX.1e in - * different ways. - */ -#if HAVE_ACL_GET_PERM -#define ACL_GET_PERM acl_get_perm -#elif HAVE_ACL_GET_PERM_NP -#define ACL_GET_PERM acl_get_perm_np -#endif - -/* NFSv4 platform ACL type */ -#if HAVE_DARWIN_ACL -#define ARCHIVE_PLATFORM_ACL_TYPE_NFS4 ACL_TYPE_EXTENDED -#elif HAVE_FREEBSD_NFS4_ACL -#define ARCHIVE_PLATFORM_ACL_TYPE_NFS4 ACL_TYPE_NFS4 -#endif - -static int setup_acls(struct archive_read_disk *, - struct archive_entry *, int *fd); static int setup_mac_metadata(struct archive_read_disk *, struct archive_entry *, int *fd); static int setup_xattrs(struct archive_read_disk *, @@ -143,6 +112,45 @@ static int setup_sparse_fiemap(struct ar struct archive_entry *, int *fd); #endif +#if !ARCHIVE_ACL_SUPPORT +int +archive_read_disk_entry_setup_acls(struct archive_read_disk *a, + struct archive_entry *entry, int *fd) +{ + (void)a; /* UNUSED */ + (void)entry; /* UNUSED */ + (void)fd; /* UNUSED */ + return (ARCHIVE_OK); +} +#endif + +/* + * Enter working directory and return working pathname of archive_entry. + * If a pointer to an integer is provided and its value is below zero + * open a file descriptor on this pahtname. + */ +const char * +archive_read_disk_entry_setup_path(struct archive_read_disk *a, + struct archive_entry *entry, int *fd) +{ + const char *path; + + path = archive_entry_sourcepath(entry); + + if (path == NULL || (a->tree != NULL && + a->tree_enter_working_dir(a->tree) != 0)) + path = archive_entry_pathname(entry); + if (path == NULL) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Couldn't determine path"); + } else if (fd != NULL && *fd < 0 && a->tree != NULL && + (a->follow_symlinks || archive_entry_filetype(entry) != AE_IFLNK)) { + *fd = a->open_on_current_dir(a->tree, path, + O_RDONLY | O_NONBLOCK); + } + return (path); +} + int archive_read_disk_entry_from_file(struct archive *_a, struct archive_entry *entry, @@ -277,7 +285,7 @@ archive_read_disk_entry_from_file(struct r = 0; if ((a->flags & ARCHIVE_READDISK_NO_ACL) == 0) - r = setup_acls(a, entry, &fd); + r = archive_read_disk_entry_setup_acls(a, entry, &fd); if ((a->flags & ARCHIVE_READDISK_NO_XATTR) == 0) { r1 = setup_xattrs(a, entry, &fd); if (r1 < r) @@ -326,19 +334,10 @@ setup_mac_metadata(struct archive_read_d struct archive_string tempfile; (void)fd; /* UNUSED */ - name = archive_entry_sourcepath(entry); + + name = archive_read_disk_entry_setup_path(a, entry, NULL); if (name == NULL) - name = archive_entry_pathname(entry); - else if (a->tree != NULL && a->tree_enter_working_dir(a->tree) != 0) { - archive_set_error(&a->archive, errno, - "Can't change dir to read extended attributes"); - return (ARCHIVE_FAILED); - } - if (name == NULL) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Can't open file to read extended attributes: No name"); return (ARCHIVE_WARN); - } /* Short-circuit if there's nothing to do. */ have_attrs = copyfile(name, NULL, 0, copyfile_flags | COPYFILE_CHECK); @@ -424,1116 +423,6 @@ setup_mac_metadata(struct archive_read_d } #endif -#if HAVE_DARWIN_ACL -static int translate_guid(struct archive *, acl_entry_t, - int *, int *, const char **); - -static void add_trivial_nfs4_acl(struct archive_entry *); -#endif - -#if HAVE_SUN_ACL -static int -sun_acl_is_trivial(void *, int, mode_t, int, int, int *); - -static void * -sunacl_get(int cmd, int *aclcnt, int fd, const char *path) -{ - int cnt, cntcmd; - size_t size; - void *aclp; - - if (cmd == GETACL) { - cntcmd = GETACLCNT; - size = sizeof(aclent_t); - } -#if HAVE_SUN_NFS4_ACL - else if (cmd == ACE_GETACL) { - cntcmd = ACE_GETACLCNT; - size = sizeof(ace_t); - } -#endif - else { - errno = EINVAL; - *aclcnt = -1; - return (NULL); - } - - aclp = NULL; - cnt = -2; - - while (cnt == -2 || (cnt == -1 && errno == ENOSPC)) { - if (path != NULL) - cnt = acl(path, cntcmd, 0, NULL); - else - cnt = facl(fd, cntcmd, 0, NULL); - - if (cnt > 0) { - if (aclp == NULL) - aclp = malloc(cnt * size); - else - aclp = realloc(NULL, cnt * size); - if (aclp != NULL) { - if (path != NULL) - cnt = acl(path, cmd, cnt, aclp); - else - cnt = facl(fd, cmd, cnt, aclp); - } - } else { - if (aclp != NULL) { - free(aclp); - aclp = NULL; - } - break; - } - } - - *aclcnt = cnt; - return (aclp); -} -#endif /* HAVE_SUN_ACL */ - -#if HAVE_POSIX_ACL || HAVE_NFS4_ACL -static int translate_acl(struct archive_read_disk *a, - struct archive_entry *entry, -#if HAVE_SUN_ACL - void *aclp, - int aclcnt, -#else - acl_t acl, -#endif - int archive_entry_acl_type); - -static int -setup_acls(struct archive_read_disk *a, - struct archive_entry *entry, int *fd) -{ - const char *accpath; -#if HAVE_SUN_ACL - void *aclp; - int aclcnt; -#else - acl_t acl; -#endif - int r; - - accpath = NULL; - -#if HAVE_SUN_ACL || HAVE_DARWIN_ACL || HAVE_ACL_GET_FD_NP - if (*fd < 0) -#else - /* For default ACLs on Linux we need reachable accpath */ - if (*fd < 0 || S_ISDIR(archive_entry_mode(entry))) -#endif - { - accpath = archive_entry_sourcepath(entry); - if (accpath == NULL || (a->tree != NULL && - a->tree_enter_working_dir(a->tree) != 0)) - accpath = archive_entry_pathname(entry); - if (accpath == NULL) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Couldn't determine file path to read ACLs"); - return (ARCHIVE_WARN); - } - if (a->tree != NULL && -#if !HAVE_SUN_ACL && !HAVE_DARWIN_ACL && !HAVE_ACL_GET_FD_NP - *fd < 0 && -#endif - (a->follow_symlinks || - archive_entry_filetype(entry) != AE_IFLNK)) { - *fd = a->open_on_current_dir(a->tree, - accpath, O_RDONLY | O_NONBLOCK); - } - } - - archive_entry_acl_clear(entry); - -#if HAVE_SUN_ACL - aclp = NULL; -#else - acl = NULL; -#endif - -#if HAVE_NFS4_ACL - /* Try NFSv4 ACL first. */ - if (*fd >= 0) -#if HAVE_SUN_ACL - aclp = sunacl_get(ACE_GETACL, &aclcnt, *fd, NULL); -#elif HAVE_ACL_GET_FD_NP - acl = acl_get_fd_np(*fd, ARCHIVE_PLATFORM_ACL_TYPE_NFS4); -#else - acl = acl_get_fd(*fd); -#endif -#if HAVE_ACL_GET_LINK_NP - else if (!a->follow_symlinks) - acl = acl_get_link_np(accpath, ARCHIVE_PLATFORM_ACL_TYPE_NFS4); -#else - else if ((!a->follow_symlinks) - && (archive_entry_filetype(entry) == AE_IFLNK)) - /* We can't get the ACL of a symlink, so we assume it can't - have one. */ -#if HAVE_SUN_ACL - aclp = NULL; -#else - acl = NULL; -#endif -#endif /* !HAVE_ACL_GET_LINK_NP */ - else -#if HAVE_SUN_ACL - /* Solaris reads both POSIX.1e and NFSv4 ACLs here */ - aclp = sunacl_get(ACE_GETACL, &aclcnt, 0, accpath); -#else - acl = acl_get_file(accpath, ARCHIVE_PLATFORM_ACL_TYPE_NFS4); -#endif - - - /* Ignore "trivial" ACLs that just mirror the file mode. */ -#if HAVE_SUN_ACL - if (aclp != NULL && sun_acl_is_trivial(aclp, aclcnt, - archive_entry_mode(entry), 1, S_ISDIR(archive_entry_mode(entry)), - &r) == 0 && r == 1) { - free(aclp); - aclp = NULL; - return (ARCHIVE_OK); - } -#elif HAVE_ACL_IS_TRIVIAL_NP - if (acl != NULL && acl_is_trivial_np(acl, &r) == 0 && r == 1) { - acl_free(acl); - acl = NULL; - return (ARCHIVE_OK); - } -#endif - -#if HAVE_SUN_ACL - if (aclp != NULL) -#else - if (acl != NULL) -#endif - { - r = translate_acl(a, entry, -#if HAVE_SUN_ACL - aclp, aclcnt, -#else - acl, -#endif - ARCHIVE_ENTRY_ACL_TYPE_NFS4); -#if HAVE_SUN_ACL - free(aclp); - aclp = NULL; -#else - acl_free(acl); - acl = NULL; -#endif *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Mon Mar 20 16:30:03 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ABD20D14C64; Mon, 20 Mar 2017 16:30:03 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7872F192D; Mon, 20 Mar 2017 16:30:03 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KGU2oA006513; Mon, 20 Mar 2017 16:30:02 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KGU2wq006512; Mon, 20 Mar 2017 16:30:02 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703201630.v2KGU2wq006512@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 16:30:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315639 - head/lib/libcam X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 16:30:03 -0000 Author: ngie Date: Mon Mar 20 16:30:02 2017 New Revision: 315639 URL: https://svnweb.freebsd.org/changeset/base/315639 Log: libcam: NULL out freed `ccb.cdm.matches` and `ccb.cdm.patterns` pointers This is being done to avoid potential double frees with the values. Differential Revision: D9970 MFC after: 1 week Reviewed by: imp Sponsored by: Dell EMC Isilon Modified: head/lib/libcam/camlib.c Modified: head/lib/libcam/camlib.c ============================================================================== --- head/lib/libcam/camlib.c Mon Mar 20 14:17:00 2017 (r315638) +++ head/lib/libcam/camlib.c Mon Mar 20 16:30:02 2017 (r315639) @@ -308,6 +308,7 @@ cam_open_btl(path_id_t path_id, target_i snprintf(cam_errbuf, CAM_ERRBUF_SIZE, "%s: couldn't malloc pattern buffer", func_name); free(ccb.cdm.matches); + ccb.cdm.matches = NULL; close(fd); return(NULL); } @@ -371,7 +372,9 @@ cam_open_btl(path_id_t path_id, target_i periph_result = &ccb.cdm.matches[0].result.periph_result; pass_unit = periph_result->unit_number; free(ccb.cdm.matches); + ccb.cdm.matches = NULL; free(ccb.cdm.patterns); + ccb.cdm.patterns = NULL; close(fd); sprintf(dev_path, "/dev/pass%d", pass_unit); return(cam_real_open_device(dev_path, flags, device, NULL, @@ -388,7 +391,9 @@ cam_open_btl(path_id_t path_id, target_i btl_bailout: free(ccb.cdm.matches); + ccb.cdm.matches = NULL; free(ccb.cdm.patterns); + ccb.cdm.patterns = NULL; close(fd); return(NULL); } From owner-svn-src-head@freebsd.org Mon Mar 20 16:44:58 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 13D61D130C0; Mon, 20 Mar 2017 16:44:58 +0000 (UTC) (envelope-from vangyzen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B6723418; Mon, 20 Mar 2017 16:44:57 +0000 (UTC) (envelope-from vangyzen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KGiuAb014572; Mon, 20 Mar 2017 16:44:56 GMT (envelope-from vangyzen@FreeBSD.org) Received: (from vangyzen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KGiuPo014564; Mon, 20 Mar 2017 16:44:56 GMT (envelope-from vangyzen@FreeBSD.org) Message-Id: <201703201644.v2KGiuPo014564@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: vangyzen set sender to vangyzen@FreeBSD.org using -f From: Eric van Gyzen Date: Mon, 20 Mar 2017 16:44:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315640 - in head: lib/libnetbsd usr.bin usr.bin/getaddrinfo X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 16:44:58 -0000 Author: vangyzen Date: Mon Mar 20 16:44:55 2017 New Revision: 315640 URL: https://svnweb.freebsd.org/changeset/base/315640 Log: Port the getaddrinfo(1) utility from NetBSD Submitted by: Lohith Bellad Reviewed by: hiren (earlier rev), ae Obtained from: NetBSD MFC after: 1 week Relnotes: yes Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D9365 Added: head/lib/libnetbsd/sockaddr_snprintf.c (contents, props changed) head/usr.bin/getaddrinfo/ head/usr.bin/getaddrinfo/Makefile (contents, props changed) head/usr.bin/getaddrinfo/getaddrinfo.1 (contents, props changed) head/usr.bin/getaddrinfo/getaddrinfo.c (contents, props changed) head/usr.bin/getaddrinfo/tables.awk (contents, props changed) Modified: head/lib/libnetbsd/Makefile head/lib/libnetbsd/util.h head/usr.bin/Makefile Modified: head/lib/libnetbsd/Makefile ============================================================================== --- head/lib/libnetbsd/Makefile Mon Mar 20 16:30:02 2017 (r315639) +++ head/lib/libnetbsd/Makefile Mon Mar 20 16:44:55 2017 (r315640) @@ -7,7 +7,7 @@ LIB= netbsd CFLAGS+= -I${.CURDIR} -SRCS+= strsuftoll.c util.c util.h +SRCS+= sockaddr_snprintf.c strsuftoll.c util.c util.h INTERNALLIB= Added: head/lib/libnetbsd/sockaddr_snprintf.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libnetbsd/sockaddr_snprintf.c Mon Mar 20 16:44:55 2017 (r315640) @@ -0,0 +1,317 @@ +/* $NetBSD: sockaddr_snprintf.c,v 1.14 2016/12/29 18:30:55 christos Exp $ */ + +/*- + * Copyright (c) 2004, 2016 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Christos Zoulas. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include +#ifdef HAVE_NET_IF_DL_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#ifdef BSD4_4 +# define SALEN(sa) ((sa)->sa ## _len) +#else +# define SALEN(sa) ((unsigned)sizeof(*sa)) +#endif + +static int +debug_in(char *str, size_t len, const struct sockaddr_in *sin) +{ + return snprintf(str, len, "sin_len=%u, sin_family=%u, sin_port=%u, " + "sin_addr.s_addr=%08x", + SALEN(sin), sin->sin_family, sin->sin_port, + sin->sin_addr.s_addr); +} + +static int +debug_in6(char *str, size_t len, const struct sockaddr_in6 *sin6) +{ + const uint8_t *s = sin6->sin6_addr.s6_addr; + + return snprintf(str, len, "sin6_len=%u, sin6_family=%u, sin6_port=%u, " + "sin6_flowinfo=%u, " + "sin6_addr=%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:" + "%02x:%02x:%02x:%02x:%02x:%02x, sin6_scope_id=%u", + SALEN(sin6), sin6->sin6_family, sin6->sin6_port, + sin6->sin6_flowinfo, s[0x0], s[0x1], s[0x2], s[0x3], s[0x4], s[0x5], + s[0x6], s[0x7], s[0x8], s[0x9], s[0xa], s[0xb], s[0xc], s[0xd], + s[0xe], s[0xf], sin6->sin6_scope_id); +} + +static int +debug_un(char *str, size_t len, const struct sockaddr_un *sun) +{ + return snprintf(str, len, "sun_len=%u, sun_family=%u, sun_path=%*s", + SALEN(sun), sun->sun_family, (int)sizeof(sun->sun_path), + sun->sun_path); +} + +#ifdef HAVE_NET_IF_DL_H +static int +debug_dl(char *str, size_t len, const struct sockaddr_dl *sdl) +{ + const uint8_t *s = (const void *)sdl->sdl_data; + + return snprintf(str, len, "sdl_len=%u, sdl_family=%u, sdl_index=%u, " + "sdl_type=%u, sdl_nlen=%u, sdl_alen=%u, sdl_slen=%u, sdl_data=" + "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", + SALEN(sdl), sdl->sdl_family, sdl->sdl_index, + sdl->sdl_type, sdl->sdl_nlen, sdl->sdl_alen, sdl->sdl_slen, + s[0x0], s[0x1], s[0x2], s[0x3], s[0x4], s[0x5], + s[0x6], s[0x7], s[0x8], s[0x9], s[0xa], s[0xb]); +} +#endif + +int +sockaddr_snprintf(char * const sbuf, const size_t len, const char * const fmt, + const struct sockaddr * const sa) +{ + const void *a = NULL; + char abuf[1024], nbuf[1024], *addr = NULL; + char Abuf[1024], pbuf[32], *name = NULL, *port = NULL; + char *ebuf = &sbuf[len - 1], *buf = sbuf; + const char *ptr, *s; + size_t salen; + int p = -1; + const struct sockaddr_in *sin4 = NULL; + const struct sockaddr_in6 *sin6 = NULL; + const struct sockaddr_un *sun = NULL; +#ifdef HAVE_NET_IF_DL_H + const struct sockaddr_dl *sdl = NULL; + char *w = NULL; +#endif + int na = 1; + +#define ADDC(c) do { if (buf < ebuf) *buf++ = c; else buf++; } \ + while (/*CONSTCOND*/0) +#define ADDS(p) do { for (s = p; *s; s++) ADDC(*s); } \ + while (/*CONSTCOND*/0) +#define ADDNA() do { if (na) ADDS("N/A"); } \ + while (/*CONSTCOND*/0) + + switch (sa->sa_family) { + case AF_UNSPEC: + goto done; + case AF_LOCAL: + salen = sizeof(*sun); + sun = ((const struct sockaddr_un *)(const void *)sa); + (void)strlcpy(addr = abuf, sun->sun_path, sizeof(abuf)); + break; + case AF_INET: + salen = sizeof(*sin4); + sin4 = ((const struct sockaddr_in *)(const void *)sa); + p = ntohs(sin4->sin_port); + a = &sin4->sin_addr; + break; + case AF_INET6: + salen = sizeof(*sin6); + sin6 = ((const struct sockaddr_in6 *)(const void *)sa); + p = ntohs(sin6->sin6_port); + a = &sin6->sin6_addr; + break; +#ifdef HAVE_NET_IF_DL_H + case AF_LINK: + sdl = ((const struct sockaddr_dl *)(const void *)sa); + addr = abuf; + if (sdl->sdl_slen == 0 && sdl->sdl_nlen == 0 + && sdl->sdl_alen == 0) { + salen = sizeof(*sdl); + (void)snprintf(abuf, sizeof(abuf), "link#%hu", + sdl->sdl_index); + } else { + salen = sdl->sdl_slen + sdl->sdl_nlen + sdl->sdl_alen; + if (salen < sizeof(*sdl)) + salen = sizeof(*sdl); + (void)strlcpy(abuf, link_ntoa(sdl), sizeof(abuf)); + if ((w = strchr(addr, ':')) != NULL) { + *w++ = '\0'; + addr = w; + } + } + break; +#endif + default: + errno = EAFNOSUPPORT; + return -1; + } + + if (addr == abuf) + name = addr; + + if (a && getnameinfo(sa, (socklen_t)salen, addr = abuf, + (unsigned int)sizeof(abuf), NULL, 0, + NI_NUMERICHOST|NI_NUMERICSERV) != 0) + return -1; + + for (ptr = fmt; *ptr; ptr++) { + if (*ptr != '%') { + ADDC(*ptr); + continue; + } + next_char: + switch (*++ptr) { + case '?': + na = 0; + goto next_char; + case 'a': + ADDS(addr); + break; + case 'p': + if (p != -1) { + (void)snprintf(nbuf, sizeof(nbuf), "%d", p); + ADDS(nbuf); + } else + ADDNA(); + break; + case 'f': + (void)snprintf(nbuf, sizeof(nbuf), "%d", sa->sa_family); + ADDS(nbuf); + break; + case 'l': + (void)snprintf(nbuf, sizeof(nbuf), "%zu", salen); + ADDS(nbuf); + break; + case 'A': + if (name) + ADDS(name); + else if (!a) + ADDNA(); + else { + getnameinfo(sa, (socklen_t)salen, name = Abuf, + (unsigned int)sizeof(nbuf), NULL, 0, 0); + ADDS(name); + } + break; + case 'P': + if (port) + ADDS(port); + else if (p == -1) + ADDNA(); + else { + getnameinfo(sa, (socklen_t)salen, NULL, 0, + port = pbuf, + (unsigned int)sizeof(pbuf), 0); + ADDS(port); + } + break; + case 'I': +#ifdef HAVE_NET_IF_DL_H + if (sdl && addr != abuf) { + ADDS(abuf); + } else +#endif + { + ADDNA(); + } + break; + case 'F': + if (sin6) { + (void)snprintf(nbuf, sizeof(nbuf), "%d", + sin6->sin6_flowinfo); + ADDS(nbuf); + break; + } else { + ADDNA(); + } + break; + case 'S': + if (sin6) { + (void)snprintf(nbuf, sizeof(nbuf), "%d", + sin6->sin6_scope_id); + ADDS(nbuf); + break; + } else { + ADDNA(); + } + break; + case 'R': + { + ADDNA(); + } + break; + case 'D': + switch (sa->sa_family) { + case AF_LOCAL: + debug_un(nbuf, sizeof(nbuf), sun); + break; + case AF_INET: + debug_in(nbuf, sizeof(nbuf), sin4); + break; + case AF_INET6: + debug_in6(nbuf, sizeof(nbuf), sin6); + break; +#ifdef HAVE_NET_IF_DL_H + case AF_LINK: + debug_dl(nbuf, sizeof(nbuf), sdl); + break; +#endif + default: + abort(); + } + ADDS(nbuf); + break; + default: + ADDC('%'); + if (na == 0) + ADDC('?'); + if (*ptr == '\0') + goto done; + /*FALLTHROUGH*/ + case '%': + ADDC(*ptr); + break; + } + na = 1; + } +done: + if (buf < ebuf) + *buf = '\0'; + else if (len != 0) + sbuf[len - 1] = '\0'; + return (int)(buf - sbuf); +} Modified: head/lib/libnetbsd/util.h ============================================================================== --- head/lib/libnetbsd/util.h Mon Mar 20 16:30:02 2017 (r315639) +++ head/lib/libnetbsd/util.h Mon Mar 20 16:44:55 2017 (r315640) @@ -37,6 +37,8 @@ #include char *flags_to_string(u_long flags, const char *def); +int sockaddr_snprintf(char *, size_t, const char *, + const struct sockaddr *); int string_to_flags(char **stringp, u_long *setp, u_long *clrp); #endif Modified: head/usr.bin/Makefile ============================================================================== --- head/usr.bin/Makefile Mon Mar 20 16:30:02 2017 (r315639) +++ head/usr.bin/Makefile Mon Mar 20 16:44:55 2017 (r315640) @@ -50,6 +50,7 @@ SUBDIR= alias \ fsync \ gcore \ gencat \ + getaddrinfo \ getconf \ getent \ getopt \ Added: head/usr.bin/getaddrinfo/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/getaddrinfo/Makefile Mon Mar 20 16:44:55 2017 (r315640) @@ -0,0 +1,22 @@ +# $NetBSD: Makefile,v 1.2 2014/04/29 01:21:02 christos Exp $ +# $FreeBSD$ +.include + +PROG= getaddrinfo + +CFLAGS+= -I${.CURDIR}/../../lib/libnetbsd +LIBNETBSDDIR= ${.OBJDIR}/../../lib/libnetbsd +LIBNETBSD= ${LIBNETBSDDIR}/libnetbsd.a +DPADD+= ${LIBNETBSD} +LDADD+= ${LIBNETBSD} + +LIBADD+= util + +SYS_SOCKET_H?= ${.CURDIR}/../../sys/sys/socket.h + +CFLAGS+= -I. +DPSRCS+= tables.h +CLEANFILES+= tables.h +tables.h: tables.awk ${SYS_SOCKET_H} + LC_ALL=C awk -f ${.ALLSRC} > ${.TARGET} +.include Added: head/usr.bin/getaddrinfo/getaddrinfo.1 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/getaddrinfo/getaddrinfo.1 Mon Mar 20 16:44:55 2017 (r315640) @@ -0,0 +1,180 @@ +.\" $FreeBSD$ +.\" $NetBSD: getaddrinfo.1,v 1.5 2014/04/22 06:02:06 wiz Exp $ +.\" +.\" Copyright (c) 2013 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This documentation is derived from text contributed to The NetBSD +.\" Foundation by Taylor R. Campbell. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 20, 2017 +.Dt GETADDRINFO 1 +.Os +.Sh NAME +.Nm getaddrinfo +.Nd resolve names to socket addresses +.Sh SYNOPSIS +.Nm +.Op Fl cNnP +.Op Fl f Ar family +.Op Fl p Ar protocol +.Op Fl s Ar service Ns Op Ns / Ns Ar protocol +.Op Fl t Ar socktype +.Op Ar hostname +.Sh DESCRIPTION +The +.Nm +utility resolves host and service names to socket addresses with +.Xr getaddrinfo 3 +and prints them to standard output in a user-friendly format. +.Pp +The output is a sequence of lines with space-separated fields: +.Pp +.Dl socket-type address-family protocol [af-specific data ...] +.Pp +For the +.Dq inet +and +.Dq inet6 +address families, the af-specific data are the IP/IPv6 address and port +number. +.Pp +Depending on the settings in +.Xr nsswitch.conf 5 , +.Nm +might query DNS for answers. +However, it is not intended to be a general-purpose DNS query utility. +Use +.Xr drill 1 +for that. +.Pp +These options are available: +.Bl -tag -width Ds +.It Fl c +Look up a canonical name as if with the +.Dv AI_CANONNAME +flag to +.Xr getaddrinfo 3 +and print it on the first line before the socket addresses. +.It Fl f Ar family +Specify an address family. +Address families are named like the +.Dv AF_... +constants for address family numbers in the +.Aq Pa sys/socket.h +header file but without the +.Dv AF_ +prefix and lowercase. +For example, +.Dq inet +corresponds with +.Dv AF_INET . +.It Fl N +Treat the service as numeric and do not attempt service name +resolution, as if with the +.Dv AI_NUMERICSERV +flag to +.Xr getaddrinfo 3 . +.It Fl n +Treat the hostname as a numeric address and do not attempt name +resolution, as if with the +.Dv AI_NUMERICHOST +flag to +.Xr getaddrinfo 3 . +.It Fl P +Return socket addresses intended for use with +.Xr bind 2 , +as if with the +.Dv AI_PASSIVE +flag to +.Xr getaddrinfo 3 . +By default, the socket addresses are intended for use with +.Xr connect 2 , +.Xr sendto 2 , +or +.Xr sendmsg 2 . +.It Fl p Ar protocol +Specify a protocol. +Protocols are numeric or symbolic as listed in +.Xr protocols 5 . +.It Fl s Ar service Ns Op Ns / Ns Ar protocol +Specify a service to look up. +Services are symbolic or numeric with an optional +protocol suffix as listed in +.Xr services 5 . +If a service is not specified, a hostname is required. +.It Fl t Ar socktype +Specify a socket type. +Socket types are named like the +.Dv SOCK_... +constants for socket type numbers in the +.Aq Pa sys/socket.h +header file but without the +.Dv SOCK_ +prefix and lowercase. +For example, +.Dq dgram +corresponds with +.Dv SOCK_DGRAM . +.El +.Sh EXIT STATUS +.Ex -std getaddrinfo +.Sh EXAMPLES +Look up +.Dq www.NetBSD.org : +.Bd -literal -offset indent +$ getaddrinfo www.NetBSD.org +dgram inet6 udp 2001:4f8:3:7:2e0:81ff:fe52:9ab6 0 +dgram inet udp 149.20.53.67 0 +stream inet6 tcp 2001:4f8:3:7:2e0:81ff:fe52:9ab6 0 +stream inet tcp 149.20.53.67 0 +.Ed +.Pp +The port number here is zero because no service was specified. +.Pp +Look up +.Dq morden.NetBSD.org +for stream sockets on port 80, and show the canonical name: +.Bd -literal -offset indent +$ getaddrinfo -c -t stream -s 80 morden.NetBSD.org +canonname ftp.NetBSD.org +stream inet6 tcp 2001:470:1f05:3d::21 80 +stream inet tcp 199.233.217.249 80 +.Ed +.Sh SEE ALSO +.Xr drill 1 , +.Xr getent 1 , +.Xr getaddrinfo 3 , +.Xr getnameinfo 3 , +.Xr resolver 3 , +.Xr hosts 5 , +.Xr nsswitch.conf 5 , +.Xr protocols 5 , +.Xr resolv.conf 5 , +.Xr services 5 +.Sh HISTORY +The +.Nm +command first appeared in +.Nx 7.0 . Added: head/usr.bin/getaddrinfo/getaddrinfo.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/getaddrinfo/getaddrinfo.c Mon Mar 20 16:44:55 2017 (r315640) @@ -0,0 +1,331 @@ +/* $NetBSD: getaddrinfo.c,v 1.4 2014/04/22 02:23:03 ginsbach Exp $ */ + +/*- + * Copyright (c) 2013 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Taylor R. Campbell. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tables.h" + +static void usage(void) __dead; +static void printaddrinfo(struct addrinfo *); +static bool parse_af(const char *, int *); +static bool parse_protocol(const char *, int *); +static bool parse_socktype(const char *, int *); +static bool parse_numeric_tabular(const char *, int *, const char *const *, + size_t); + +int +main(int argc, char **argv) +{ + static const struct addrinfo zero_addrinfo; + struct addrinfo hints = zero_addrinfo; + struct addrinfo *addrinfo; + const char *hostname = NULL, *service = NULL; + int ch; + int error; + + setprogname(argv[0]); + + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = 0; + hints.ai_protocol = 0; + hints.ai_flags = 0; + + while ((ch = getopt(argc, argv, "cf:nNp:Ps:t:")) != -1) { + switch (ch) { + case 'c': + hints.ai_flags |= AI_CANONNAME; + break; + + case 'f': + if (!parse_af(optarg, &hints.ai_family)) { + warnx("invalid address family: %s", optarg); + usage(); + } + break; + + case 'n': + hints.ai_flags |= AI_NUMERICHOST; + break; + + case 'N': + hints.ai_flags |= AI_NUMERICSERV; + break; + + case 's': + service = optarg; + break; + + case 'p': + if (!parse_protocol(optarg, &hints.ai_protocol)) { + warnx("invalid protocol: %s", optarg); + usage(); + } + break; + + case 'P': + hints.ai_flags |= AI_PASSIVE; + break; + + case 't': + if (!parse_socktype(optarg, &hints.ai_socktype)) { + warnx("invalid socket type: %s", optarg); + usage(); + } + break; + + case '?': + default: + usage(); + } + } + + argc -= optind; + argv += optind; + + if (!((argc == 1) || ((argc == 0) && (hints.ai_flags & AI_PASSIVE)))) + usage(); + if (argc == 1) + hostname = argv[0]; + + if (service != NULL) { + char *p; + + if ((p = strchr(service, '/')) != NULL) { + if (hints.ai_protocol != 0) { + warnx("protocol already specified"); + usage(); + } + *p = '\0'; + p++; + + if (!parse_protocol(p, &hints.ai_protocol)) { + warnx("invalid protocol: %s", p); + usage(); + } + } + } + + error = getaddrinfo(hostname, service, &hints, &addrinfo); + if (error) + errx(1, "%s", gai_strerror(error)); + + if ((hints.ai_flags & AI_CANONNAME) && (addrinfo != NULL)) { + if (printf("canonname %s\n", addrinfo->ai_canonname) < 0) + err(1, "printf"); + } + + printaddrinfo(addrinfo); + + freeaddrinfo(addrinfo); + + return 0; +} + +static void __dead +usage(void) +{ + + (void)fprintf(stderr, "Usage: %s", getprogname()); + (void)fprintf(stderr, + " [-f ] [-p ] [-t ] [-s ]\n"); + (void)fprintf(stderr, " [-cnNP] []\n"); + exit(1); +} + +static bool +parse_af(const char *string, int *afp) +{ + + return parse_numeric_tabular(string, afp, address_families, + __arraycount(address_families)); +} + +static bool +parse_protocol(const char *string, int *protop) +{ + struct protoent *protoent; + char *end; + long value; + + errno = 0; + value = strtol(string, &end, 0); + if ((string[0] == '\0') || (*end != '\0')) + goto numeric_failed; + if ((errno == ERANGE) && ((value == LONG_MAX) || (value == LONG_MIN))) + goto numeric_failed; + if ((value > INT_MAX) || (value < INT_MIN)) + goto numeric_failed; + + *protop = value; + return true; + +numeric_failed: + protoent = getprotobyname(string); + if (protoent == NULL) + goto protoent_failed; + + *protop = protoent->p_proto; + return true; + +protoent_failed: + return false; +} + +static bool +parse_socktype(const char *string, int *typep) +{ + + return parse_numeric_tabular(string, typep, socket_types, + __arraycount(socket_types)); +} + +static bool +parse_numeric_tabular(const char *string, int *valuep, + const char *const *table, size_t n) +{ + char *end; + long value; + size_t i; + + assert((uintmax_t)n <= (uintmax_t)INT_MAX); + + errno = 0; + value = strtol(string, &end, 0); + if ((string[0] == '\0') || (*end != '\0')) + goto numeric_failed; + if ((errno == ERANGE) && ((value == LONG_MAX) || (value == LONG_MIN))) + goto numeric_failed; + if ((value > INT_MAX) || (value < INT_MIN)) + goto numeric_failed; + + *valuep = value; + return true; + +numeric_failed: + for (i = 0; i < n; i++) + if ((table[i] != NULL) && (strcmp(string, table[i]) == 0)) + break; + if (i == n) + goto table_failed; + *valuep = i; + return true; + +table_failed: + return false; +} + +static void +printaddrinfo(struct addrinfo *addrinfo) +{ + struct addrinfo *ai; + char buf[1024]; + int n; + struct protoent *protoent; + + for (ai = addrinfo; ai != NULL; ai = ai->ai_next) { + /* Print the socket type. */ + if ((ai->ai_socktype >= 0) && + ((size_t)ai->ai_socktype < __arraycount(socket_types)) && + (socket_types[ai->ai_socktype] != NULL)) + n = printf("%s", socket_types[ai->ai_socktype]); + else + n = printf("%d", ai->ai_socktype); + if (n < 0) + err(1, "printf"); + + /* Print the address family. */ + if ((ai->ai_family >= 0) && + ((size_t)ai->ai_family < __arraycount(address_families)) && + (address_families[ai->ai_family] != NULL)) + n = printf(" %s", address_families[ai->ai_family]); + else + n = printf(" %d", ai->ai_family); + if (n < 0) + err(1, "printf"); + + /* Print the protocol number. */ + protoent = getprotobynumber(ai->ai_protocol); + if (protoent == NULL) + n = printf(" %d", ai->ai_protocol); + else + n = printf(" %s", protoent->p_name); + if (n < 0) + err(1, "printf"); + + /* Format the sockaddr. */ + switch (ai->ai_family) { + case AF_INET: + case AF_INET6: + n = sockaddr_snprintf(buf, sizeof(buf), " %a %p", + ai->ai_addr); + break; + + default: + n = sockaddr_snprintf(buf, sizeof(buf), + "%a %p %I %F %R %S", ai->ai_addr); + } + + /* + * Check for sockaddr_snprintf failure. + * + * XXX sockaddr_snprintf's error reporting is botched + * -- man page says it sets errno, but if getnameinfo + * fails, errno is not where it reports the error... + */ + if (n < 0) { + warnx("sockaddr_snprintf failed"); + continue; + } + if (sizeof(buf) <= (size_t)n) + warnx("truncated sockaddr_snprintf output"); + + /* Print the formatted sockaddr. */ + if (printf("%s\n", buf) < 0) + err(1, "printf"); + } +} Added: head/usr.bin/getaddrinfo/tables.awk ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/getaddrinfo/tables.awk Mon Mar 20 16:44:55 2017 (r315640) @@ -0,0 +1,63 @@ +#!/usr/bin/awk -f + +# $FreeBSD$ +# $NetBSD: tables.awk,v 1.2 2014/02/27 01:17:13 ginsbach Exp $ + +# Copyright (c) 2013 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Taylor R. Campbell. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +BEGIN { + n_afs = 0 + n_socktypes = 0 +} + +!(($1 == "#define") && ($3 ~ /^[0-9]*$/)) { + next +} + +($2 ~ /^AF_[A-Z0-9_]*$/) && ($2 != "AF_MAX") { + afs[n_afs++] = substr($2, 4) +} + +($2 ~ /^SOCK_[A-Z0-9_]*$/) && ($2 != "SOCK_MAXADDRLEN") { + socktypes[n_socktypes++] = substr($2, 6) +} + +END { + printf("/* Do not edit! This file was generated automagically! */\n"); + + printf("\nstatic const char *const address_families[] = {\n"); + for (i = 0; i < n_afs; i++) + printf("\t[AF_%s] = \"%s\",\n", afs[i], tolower(afs[i])); + printf("};\n"); + + printf("\nstatic const char *const socket_types[] = {\n"); + for (i = 0; i < n_socktypes; i++) + printf("\t[SOCK_%s] = \"%s\",\n", socktypes[i], + tolower(socktypes[i])); + printf("};\n"); +} From owner-svn-src-head@freebsd.org Mon Mar 20 17:17:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 08D34D13ED7; Mon, 20 Mar 2017 17:17:56 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CCA031968; Mon, 20 Mar 2017 17:17:55 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KHHseW026836; Mon, 20 Mar 2017 17:17:54 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KHHstt026835; Mon, 20 Mar 2017 17:17:54 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703201717.v2KHHstt026835@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 17:17:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315641 - head/contrib/bsnmp/lib X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 17:17:56 -0000 Author: ngie Date: Mon Mar 20 17:17:54 2017 New Revision: 315641 URL: https://svnweb.freebsd.org/changeset/base/315641 Log: bsnmp: don't leak snmp_client.fd in open_client_udp(..) on connect(2) failure MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/contrib/bsnmp/lib/snmpclient.c Modified: head/contrib/bsnmp/lib/snmpclient.c ============================================================================== --- head/contrib/bsnmp/lib/snmpclient.c Mon Mar 20 16:44:55 2017 (r315640) +++ head/contrib/bsnmp/lib/snmpclient.c Mon Mar 20 17:17:54 2017 (r315641) @@ -947,6 +947,8 @@ open_client_udp(const char *host, const if ((res = res->ai_next) == NULL) { seterr(&snmp_client, "%s", strerror(errno)); freeaddrinfo(res0); + (void)close(snmp_client.fd); + snmp_client.fd = -1; return (-1); } } else From owner-svn-src-head@freebsd.org Mon Mar 20 17:26:14 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8F8E1D1413E; Mon, 20 Mar 2017 17:26:14 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5F3D71E5E; Mon, 20 Mar 2017 17:26:14 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KHQDaf031015; Mon, 20 Mar 2017 17:26:13 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KHQDPH031014; Mon, 20 Mar 2017 17:26:13 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703201726.v2KHQDPH031014@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 17:26:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315642 - head/contrib/bsnmp/lib X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 17:26:14 -0000 Author: ngie Date: Mon Mar 20 17:26:13 2017 New Revision: 315642 URL: https://svnweb.freebsd.org/changeset/base/315642 Log: bsnmp: explicitly test the return value for open_client_{local,udp} in snmp_open(..) open_client_* returns -1 on failure; 0 on success. Ensure that the return value is 0 -- otherwise exit snmp_open(..). MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/contrib/bsnmp/lib/snmpclient.c Modified: head/contrib/bsnmp/lib/snmpclient.c ============================================================================== --- head/contrib/bsnmp/lib/snmpclient.c Mon Mar 20 17:17:54 2017 (r315641) +++ head/contrib/bsnmp/lib/snmpclient.c Mon Mar 20 17:26:13 2017 (r315642) @@ -1068,13 +1068,13 @@ snmp_open(const char *host, const char * switch (snmp_client.trans) { case SNMP_TRANS_UDP: - if (open_client_udp(host, port)) + if (open_client_udp(host, port) != 0) return (-1); break; case SNMP_TRANS_LOC_DGRAM: case SNMP_TRANS_LOC_STREAM: - if (open_client_local(host)) + if (open_client_local(host) != 0) return (-1); break; From owner-svn-src-head@freebsd.org Mon Mar 20 17:46:34 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D3C7BD146E5; Mon, 20 Mar 2017 17:46:34 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A37A3198A; Mon, 20 Mar 2017 17:46:34 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KHkX1k039071; Mon, 20 Mar 2017 17:46:33 GMT (envelope-from hrs@FreeBSD.org) Received: (from hrs@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KHkXC5039070; Mon, 20 Mar 2017 17:46:33 GMT (envelope-from hrs@FreeBSD.org) Message-Id: <201703201746.v2KHkXC5039070@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hrs set sender to hrs@FreeBSD.org using -f From: Hiroki Sato Date: Mon, 20 Mar 2017 17:46:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315643 - head/usr.sbin/syslogd X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 17:46:34 -0000 Author: hrs Date: Mon Mar 20 17:46:33 2017 New Revision: 315643 URL: https://svnweb.freebsd.org/changeset/base/315643 Log: Fix a regression which prevented an IPv6 address in a -b option from working. PR: 217939 Differential Revision: https://reviews.freebsd.org/D10064 Modified: head/usr.sbin/syslogd/syslogd.c Modified: head/usr.sbin/syslogd/syslogd.c ============================================================================== --- head/usr.sbin/syslogd/syslogd.c Mon Mar 20 17:26:13 2017 (r315642) +++ head/usr.sbin/syslogd/syslogd.c Mon Mar 20 17:46:33 2017 (r315643) @@ -477,7 +477,15 @@ main(int argc, char *argv[]) break; case 'b': bflag = 1; - if ((p = strchr(optarg, ':')) == NULL) { + p = strchr(optarg, ']'); + if (p != NULL) + p = strchr(p + 1, ':'); + else { + p = strchr(optarg, ':'); + if (p != NULL && strchr(p + 1, ':') != NULL) + p = NULL; /* backward compatibility */ + } + if (p == NULL) { /* A hostname or filename only. */ addpeer(&(struct peer){ .pe_name = optarg, From owner-svn-src-head@freebsd.org Mon Mar 20 17:52:40 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 013CCD149F0; Mon, 20 Mar 2017 17:52:40 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pf0-x241.google.com (mail-pf0-x241.google.com [IPv6:2607:f8b0:400e:c00::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C26821F38; Mon, 20 Mar 2017 17:52:39 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pf0-x241.google.com with SMTP id o126so18401110pfb.1; Mon, 20 Mar 2017 10:52:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=TxcZX3n/caGl8vxjd75Lj/3+JN3Z5RIg++qSx+KSP3Y=; b=bJ+pAXpmDUhlyxXIN9hTrRpdS4FS1PH1FciVKBh0pd6o+2Dgax88aJPXDSbzuU/L8p M6PYMq12+dBZJQ97/RyT4PvdK1eOGiGKRjjWqMPNEzlKhToF8N7bElIx75BNecF+9oOm Iji5O02wi3DnRBBcQU5P3/Br+4l9ZJMyETKmIa5uYxe+UZWkB64nO1JubE9OwftV+G+Y knQ6oFK32umIT4Bqyz2UO/Fjcf4q2p8wqVAB5mMovl9sE0BFo5p0ShJx2fhBcXMa/uHU 8JOpKtZXpNZq3TtfAzne75Vy70z9igLDLjV2+AvyaZYS8e6LhIUl9HIef+CAhULjdyXR Igyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=TxcZX3n/caGl8vxjd75Lj/3+JN3Z5RIg++qSx+KSP3Y=; b=MBGSPF96hzadMpVERWbITCTkKRCTyJ/vyWIBNu7hM52mko6H3YoQeHw+7N8ARV6H9s fd/lLbZphGqnfw3u6KzDepSIZUE5pmu3EYko1lY7MEDZWp5gU7Wa9Lj+abeRgFPhi6bI kF+FLkjtxMrAWywiHOnBGhBpLB/9C6yhJHxgfpn6qmlba7NWPzc3eCKX8lKj4yHILN9V 2sI1ha+btHlLHLfhUAys27CWBZVnVl7V05JKnDXwaO7MnAydFwTb1voyAR31KzmsQDtI 707HlguKCnwgv14UoGbz/fz1MuiQ8VJP9ExYAHE6V++yNHMoe738RLJ54b8tGDdGpz7F bZPg== X-Gm-Message-State: AFeK/H1fCNVFJz22tt5vt1DzVjkNuyB3Gs7p7Gi2+EAg9KbKeSRf8JE4Pyp8/2dHf6wP+g== X-Received: by 10.98.201.212 with SMTP id l81mr33889031pfk.13.1490032359240; Mon, 20 Mar 2017 10:52:39 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id v186sm34608020pgv.44.2017.03.20.10.52.38 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 20 Mar 2017 10:52:38 -0700 (PDT) Subject: Re: svn commit: r315643 - head/usr.sbin/syslogd Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_89CE7BB4-DC1F-4134-94DC-67919785B9FF"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: <201703201746.v2KHkXC5039070@repo.freebsd.org> Date: Mon, 20 Mar 2017 10:52:37 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: References: <201703201746.v2KHkXC5039070@repo.freebsd.org> To: Hiroki Sato X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 17:52:40 -0000 --Apple-Mail=_89CE7BB4-DC1F-4134-94DC-67919785B9FF Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 20, 2017, at 10:46, Hiroki Sato wrote: >=20 > Author: hrs > Date: Mon Mar 20 17:46:33 2017 > New Revision: 315643 > URL: https://svnweb.freebsd.org/changeset/base/315643 >=20 > Log: > Fix a regression which prevented an IPv6 address in a -b option from > working. >=20 > PR: 217939 > Differential Revision: https://reviews.freebsd.org/D10064 Thank you very much =E2=80=94 I=E2=80=99ll see if I can write tests for = this and other things to avoid future regressions. -Ngie --Apple-Mail=_89CE7BB4-DC1F-4134-94DC-67919785B9FF Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJY0BblAAoJEPWDqSZpMIYV7UAP/R1TQEvb68xWI4/Op8tLGTxc tavWZFiQcqcujynAoRd5LMtMkx1d2Ri5uupCmKBIEHZN/fllQ9VU5EwXd3xoT3Ai GeAk8d5myI6DvBomXZsEsu1TgbjKHQIt8x20lzBHfJP23lULvYCXcf0uxGvSLC8P LnqWX3zqSg3sADBzHVsv9BNrc82TkntNQ8j4WSZ5oW3FIASowZZRZUJMqRKOzEOD fCodrvYeDCElay+tyM8YIHpK3l1NTITkErQGt7fOBcaXd2IiMa/vAcchHyQ4+OhR qsGmLXK5bGSUwAmwCMWopLgVuuQP1nIZ2UNaPK63k14eDBGWAmnbEsyFZUaz+QAU NibKUWeqW0DtaURj7z1hGZ/MhgCWkOBTiMvum6Q3V/YEs+Cgm553XSv7ffjzxycQ 6bniYODJyGx6BPy5msn5kPYiUH7cA/c8noKiCsuWk0eYcSSXIFMhVmVBVNgdwlvQ WdGQd9DzGskvzRAaxRzE7OIMi8AZFEvYBHuFy+KkUKOWRbh7CIx7Tt3ZSV4PDatP gbV/SG017/scBhfe3lu5g9yAboZa2nnF0nkjxGc8NUWhy4liZ0UfNIMVUvMTItIH 8hfLO8YPc00JcNynv9vV1XxGVFnMndAsnnsjCqh/X1zrzEwXS9d6mwla5dc6D0Og 0yBMzdWOwmuRB3BjG1Hr =z8Yk -----END PGP SIGNATURE----- --Apple-Mail=_89CE7BB4-DC1F-4134-94DC-67919785B9FF-- From owner-svn-src-head@freebsd.org Mon Mar 20 17:57:25 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EC4FDD14BFF; Mon, 20 Mar 2017 17:57:25 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C6DA3299; Mon, 20 Mar 2017 17:57:25 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KHvOBq043360; Mon, 20 Mar 2017 17:57:24 GMT (envelope-from hrs@FreeBSD.org) Received: (from hrs@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KHvOkR043359; Mon, 20 Mar 2017 17:57:24 GMT (envelope-from hrs@FreeBSD.org) Message-Id: <201703201757.v2KHvOkR043359@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hrs set sender to hrs@FreeBSD.org using -f From: Hiroki Sato Date: Mon, 20 Mar 2017 17:57:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315644 - head/usr.sbin/inetd X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 17:57:26 -0000 Author: hrs Date: Mon Mar 20 17:57:24 2017 New Revision: 315644 URL: https://svnweb.freebsd.org/changeset/base/315644 Log: Simplify a pipe for signal handling. Modified: head/usr.sbin/inetd/inetd.c Modified: head/usr.sbin/inetd/inetd.c ============================================================================== --- head/usr.sbin/inetd/inetd.c Mon Mar 20 17:46:33 2017 (r315643) +++ head/usr.sbin/inetd/inetd.c Mon Mar 20 17:57:24 2017 (r315644) @@ -214,7 +214,6 @@ __FBSDID("$FreeBSD$"); #endif static void close_sep(struct servtab *); static void flag_signal(int); -static void flag_config(int); static void config(void); static int cpmip(const struct servtab *, int); static void endconfig(void); @@ -224,11 +223,9 @@ static struct servtab *getconfigent(void static int matchservent(const char *, const char *, const char *); static char *nextline(FILE *); static void addchild(struct servtab *, int); -static void flag_reapchild(int); static void reapchild(void); static void enable(struct servtab *); static void disable(struct servtab *); -static void flag_retry(int); static void retry(void); static int setconfig(void); static void setup(struct servtab *); @@ -532,17 +529,17 @@ main(int argc, char **argv) } #endif - sa.sa_flags = 0; + sa = (struct sigaction){ + .sa_flags = 0, + .sa_handler = flag_signal, + }; sigemptyset(&sa.sa_mask); sigaddset(&sa.sa_mask, SIGALRM); sigaddset(&sa.sa_mask, SIGCHLD); sigaddset(&sa.sa_mask, SIGHUP); - sa.sa_handler = flag_retry; sigaction(SIGALRM, &sa, &saalrm); config(); - sa.sa_handler = flag_config; sigaction(SIGHUP, &sa, &sahup); - sa.sa_handler = flag_reapchild; sigaction(SIGCHLD, &sa, &sachld); sa.sa_handler = SIG_IGN; sigaction(SIGPIPE, &sa, &sapipe); @@ -591,30 +588,34 @@ main(int argc, char **argv) } /* handle any queued signal flags */ if (FD_ISSET(signalpipe[0], &readable)) { - int nsig; + int nsig, signo; + if (ioctl(signalpipe[0], FIONREAD, &nsig) != 0) { - syslog(LOG_ERR, "ioctl: %m"); - exit(EX_OSERR); + syslog(LOG_ERR, "ioctl: %m"); + exit(EX_OSERR); } + nsig /= sizeof(signo); while (--nsig >= 0) { - char c; - if (read(signalpipe[0], &c, 1) != 1) { - syslog(LOG_ERR, "read: %m"); - exit(EX_OSERR); - } - if (debug) - warnx("handling signal flag %c", c); - switch(c) { - case 'A': /* sigalrm */ - retry(); - break; - case 'C': /* sigchld */ - reapchild(); - break; - case 'H': /* sighup */ - config(); - break; - } + size_t len; + + len = read(signalpipe[0], &signo, sizeof(signo)); + if (len != sizeof(signo)) { + syslog(LOG_ERR, "read: %m"); + exit(EX_OSERR); + } + if (debug) + warnx("handling signal flag %d", signo); + switch (signo) { + case SIGALRM: + retry(); + break; + case SIGCHLD: + reapchild(); + break; + case SIGHUP: + config(); + break; + } } } for (sep = servtab; n && sep; sep = sep->se_next) @@ -900,11 +901,12 @@ main(int argc, char **argv) */ static void -flag_signal(int c) +flag_signal(int signo) { - char ch = c; + size_t len; - if (write(signalpipe[1], &ch, 1) != 1) { + len = write(signalpipe[1], &signo, sizeof(signo)); + if (len != sizeof(signo)) { syslog(LOG_ERR, "write: %m"); _exit(EX_OSERR); } @@ -932,16 +934,6 @@ addchild(struct servtab *sep, pid_t pid) disable(sep); } -/* - * Some child process has exited. See if it's on somebody's list. - */ - -static void -flag_reapchild(int signo __unused) -{ - flag_signal('C'); -} - static void reapchild(void) { @@ -981,12 +973,6 @@ reapchild(void) } static void -flag_config(int signo __unused) -{ - flag_signal('H'); -} - -static void config(void) { struct servtab *sep, *new, **sepp; @@ -1250,12 +1236,6 @@ unregisterrpc(struct servtab *sep) } static void -flag_retry(int signo __unused) -{ - flag_signal('A'); -} - -static void retry(void) { struct servtab *sep; From owner-svn-src-head@freebsd.org Mon Mar 20 18:03:41 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B889DD14EC0; Mon, 20 Mar 2017 18:03:41 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 87EA4B43; Mon, 20 Mar 2017 18:03:41 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KI3eFs047370; Mon, 20 Mar 2017 18:03:40 GMT (envelope-from tsoome@FreeBSD.org) Received: (from tsoome@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KI3eC3047369; Mon, 20 Mar 2017 18:03:40 GMT (envelope-from tsoome@FreeBSD.org) Message-Id: <201703201803.v2KI3eC3047369@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tsoome set sender to tsoome@FreeBSD.org using -f From: Toomas Soome Date: Mon, 20 Mar 2017 18:03:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315645 - head/sys/boot/userboot/userboot X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 18:03:41 -0000 Author: tsoome Date: Mon Mar 20 18:03:40 2017 New Revision: 315645 URL: https://svnweb.freebsd.org/changeset/base/315645 Log: loader: disk_cleanup was left in userboot_disk.c In r315408, disk_cleanup was removed, which is called at sys/boot/userboot/userboot/userboot_disk.c:113. This causes bhyveload to fail. PR: 217935 Reported by: Fabian Freyer Reviewed by: allanjude Approved by: allanjude (mentor) Differential Revision: https://reviews.freebsd.org/D10060 Modified: head/sys/boot/userboot/userboot/userboot_disk.c Modified: head/sys/boot/userboot/userboot/userboot_disk.c ============================================================================== --- head/sys/boot/userboot/userboot/userboot_disk.c Mon Mar 20 17:57:24 2017 (r315644) +++ head/sys/boot/userboot/userboot/userboot_disk.c Mon Mar 20 18:03:40 2017 (r315645) @@ -110,7 +110,6 @@ userdisk_cleanup(void) if (userdisk_maxunit > 0) free(ud_info); - disk_cleanup(&userboot_disk); } /* From owner-svn-src-head@freebsd.org Mon Mar 20 18:15:38 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2DC6FD1463A; Mon, 20 Mar 2017 18:15:38 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EED011593; Mon, 20 Mar 2017 18:15:37 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KIFbl9051475; Mon, 20 Mar 2017 18:15:37 GMT (envelope-from tsoome@FreeBSD.org) Received: (from tsoome@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KIFbgH051474; Mon, 20 Mar 2017 18:15:37 GMT (envelope-from tsoome@FreeBSD.org) Message-Id: <201703201815.v2KIFbgH051474@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tsoome set sender to tsoome@FreeBSD.org using -f From: Toomas Soome Date: Mon, 20 Mar 2017 18:15:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315646 - head/sys/boot/i386/libi386 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 18:15:38 -0000 Author: tsoome Date: Mon Mar 20 18:15:36 2017 New Revision: 315646 URL: https://svnweb.freebsd.org/changeset/base/315646 Log: loader: pxe.h constants have wrong values FLTR_PRMSCS should be 0x4 and FLTR_SRC_RTG should be 0x8 PXE Specification 2.1 PXENV_UNDI_OPEN, page 59. http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf Reviewed by: allanjude Approved by: allanjude (mentor) Differential Revision: https://reviews.freebsd.org/D10056 Modified: head/sys/boot/i386/libi386/pxe.h Modified: head/sys/boot/i386/libi386/pxe.h ============================================================================== --- head/sys/boot/i386/libi386/pxe.h Mon Mar 20 18:03:40 2017 (r315645) +++ head/sys/boot/i386/libi386/pxe.h Mon Mar 20 18:15:36 2017 (r315646) @@ -175,8 +175,8 @@ typedef struct { uint16_t PktFilter; # define FLTR_DIRECTED 0x0001 # define FLTR_BRDCST 0x0002 -# define FLTR_PRMSCS 0x0003 -# define FLTR_SRC_RTG 0x0004 +# define FLTR_PRMSCS 0x0004 +# define FLTR_SRC_RTG 0x0008 t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf; } PACKED t_PXENV_UNDI_OPEN; From owner-svn-src-head@freebsd.org Mon Mar 20 18:28:24 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 01B46D14DCA; Mon, 20 Mar 2017 18:28:24 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C2B0B13D2; Mon, 20 Mar 2017 18:28:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KISMG5056258; Mon, 20 Mar 2017 18:28:22 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KISMMt056256; Mon, 20 Mar 2017 18:28:22 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703201828.v2KISMMt056256@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 18:28:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315647 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 18:28:24 -0000 Author: ngie Date: Mon Mar 20 18:28:22 2017 New Revision: 315647 URL: https://svnweb.freebsd.org/changeset/base/315647 Log: Handle kd == NULL gracefully with kvm_close(3) Don't segfault in kvm_close(3) if provided a NULL pointer. Instead, return -1 and set errno to EINVAL. Document this new behavior explicitly. MFC after: 1 week Reviewed by: vangyzen Sponsored by: Dell EMC Isilon Differential Revision: D10065 Modified: head/lib/libkvm/kvm.c head/lib/libkvm/kvm_open.3 Modified: head/lib/libkvm/kvm.c ============================================================================== --- head/lib/libkvm/kvm.c Mon Mar 20 18:15:36 2017 (r315646) +++ head/lib/libkvm/kvm.c Mon Mar 20 18:28:22 2017 (r315647) @@ -272,6 +272,10 @@ kvm_close(kvm_t *kd) { int error = 0; + if (kd == NULL) { + errno = EINVAL; + return (-1); + } if (kd->vmst != NULL) kd->arch->ka_freevtop(kd); if (kd->pmfd >= 0) Modified: head/lib/libkvm/kvm_open.3 ============================================================================== --- head/lib/libkvm/kvm_open.3 Mon Mar 20 18:15:36 2017 (r315646) +++ head/lib/libkvm/kvm_open.3 Mon Mar 20 18:28:22 2017 (r315647) @@ -32,7 +32,7 @@ .\" @(#)kvm_open.3 8.3 (Berkeley) 4/19/94 .\" $FreeBSD$ .\" -.Dd March 19, 2017 +.Dd March 20, 2017 .Dt KVM_OPEN 3 .Os .Sh NAME @@ -227,10 +227,29 @@ and write the error message into .Fa errbuf . .Pp +.Rv -std kvm_close +.Sh ERRORS The .Fn kvm_close -function returns 0 on success and -1 on failure. +function may fail and set the global variable +.Va errno +for any of the errors specified for +.Xr close 2 . +.Pp +The +.Fn kvm_close +function may also fail and set +.Va errno +if: +.Bl -tag -width Er +.It Bq Er EINVAL +The value passed via +.Fa kd +was +.Dv NULL . +.El .Sh SEE ALSO +.Xr close 2 , .Xr open 2 , .Xr kvm 3 , .Xr kvm_getargv 3 , From owner-svn-src-head@freebsd.org Mon Mar 20 19:16:30 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 27983D14D23; Mon, 20 Mar 2017 19:16:30 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CEF251039; Mon, 20 Mar 2017 19:16:29 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KJGSqA076941; Mon, 20 Mar 2017 19:16:28 GMT (envelope-from tsoome@FreeBSD.org) Received: (from tsoome@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KJGS9E076940; Mon, 20 Mar 2017 19:16:28 GMT (envelope-from tsoome@FreeBSD.org) Message-Id: <201703201916.v2KJGS9E076940@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tsoome set sender to tsoome@FreeBSD.org using -f From: Toomas Soome Date: Mon, 20 Mar 2017 19:16:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315648 - head/lib/libstand X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 19:16:30 -0000 Author: tsoome Date: Mon Mar 20 19:16:28 2017 New Revision: 315648 URL: https://svnweb.freebsd.org/changeset/base/315648 Log: libstand: verify value provided by nfs.read_size Implement simple value check and feedback. Reviewed by: allanjude, rpokala Approved by: allanjude (mentor) Differential Revision: https://reviews.freebsd.org/D8491 Modified: head/lib/libstand/nfs.c Modified: head/lib/libstand/nfs.c ============================================================================== --- head/lib/libstand/nfs.c Mon Mar 20 18:28:22 2017 (r315647) +++ head/lib/libstand/nfs.c Mon Mar 20 19:16:28 2017 (r315648) @@ -214,6 +214,38 @@ struct fs_ops nfs_fsops = { static int nfs_read_size = NFSREAD_MIN_SIZE; +/* + * Improve boot performance over NFS + */ +static void +set_nfs_read_size(void) +{ + char *env, *end; + char buf[10]; + + if ((env = getenv("nfs.read_size")) != NULL) { + errno = 0; + nfs_read_size = (int)strtol(env, &end, 0); + if (errno != 0 || *env == '\0' || *end != '\0') { + printf("%s: bad value: \"%s\", defaulting to %d\n", + "nfs.read_size", env, NFSREAD_MIN_SIZE); + nfs_read_size = NFSREAD_MIN_SIZE; + } + } + if (nfs_read_size < NFSREAD_MIN_SIZE) { + printf("%s: bad value: \"%d\", defaulting to %d\n", + "nfs.read_size", nfs_read_size, NFSREAD_MIN_SIZE); + nfs_read_size = NFSREAD_MIN_SIZE; + } + if (nfs_read_size > NFSREAD_MAX_SIZE) { + printf("%s: bad value: \"%d\", defaulting to %d\n", + "nfs.read_size", nfs_read_size, NFSREAD_MIN_SIZE); + nfs_read_size = NFSREAD_MAX_SIZE; + } + snprintf(buf, sizeof (buf), "%d", nfs_read_size); + setenv("nfs.read_size", buf, 1); +} + #ifdef OLD_NFSV2 /* * Fetch the root file handle (call mount daemon) @@ -269,16 +301,7 @@ nfs_getrootfh(struct iodesc *d, char *pa return (ntohl(repl->errno)); bcopy(repl->fh, fhp, sizeof(repl->fh)); - /* - * Improve boot performance over NFS - */ - if (getenv("nfs.read_size") != NULL) - nfs_read_size = strtol(getenv("nfs.read_size"), NULL, 0); - if (nfs_read_size < NFSREAD_MIN_SIZE) - nfs_read_size = NFSREAD_MIN_SIZE; - if (nfs_read_size > NFSREAD_MAX_SIZE) - nfs_read_size = NFSREAD_MAX_SIZE; - + set_nfs_read_size(); return (0); } @@ -885,6 +908,8 @@ nfs_getrootfh(struct iodesc *d, char *pa return (ntohl(repl->errno)); *fhlenp = ntohl(repl->fhsize); bcopy(repl->fh, fhp, *fhlenp); + + set_nfs_read_size(); return (0); } From owner-svn-src-head@freebsd.org Mon Mar 20 19:24:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EEF8DD143F0; Mon, 20 Mar 2017 19:24:17 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BC0F21806; Mon, 20 Mar 2017 19:24:17 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KJOGPm080814; Mon, 20 Mar 2017 19:24:16 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KJOGQL080813; Mon, 20 Mar 2017 19:24:16 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703201924.v2KJOGQL080813@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Mon, 20 Mar 2017 19:24:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315649 - head/usr.bin/diff X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 19:24:18 -0000 Author: bapt Date: Mon Mar 20 19:24:16 2017 New Revision: 315649 URL: https://svnweb.freebsd.org/changeset/base/315649 Log: Cache tzdata when running under capsicum PR: 217957 Reported by: tobik@ Modified: head/usr.bin/diff/diffreg.c Modified: head/usr.bin/diff/diffreg.c ============================================================================== --- head/usr.bin/diff/diffreg.c Mon Mar 20 19:16:28 2017 (r315648) +++ head/usr.bin/diff/diffreg.c Mon Mar 20 19:24:16 2017 (r315649) @@ -440,6 +440,7 @@ diffreg(char *file1, char *file2, int fl err(2, "unable to limit stdio"); caph_cache_catpages(); + caph_cache_tzdata(); if (cap_enter() < 0 && errno != ENOSYS) err(2, "unable to enter capability mode"); } From owner-svn-src-head@freebsd.org Mon Mar 20 19:25:43 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CB401D144FF; Mon, 20 Mar 2017 19:25:43 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9ABBE19F5; Mon, 20 Mar 2017 19:25:43 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KJPgjI080929; Mon, 20 Mar 2017 19:25:42 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KJPgNB080928; Mon, 20 Mar 2017 19:25:42 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201703201925.v2KJPgNB080928@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Mon, 20 Mar 2017 19:25:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315650 - head/sys/arm/freescale/imx X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 19:25:43 -0000 Author: andrew Date: Mon Mar 20 19:25:42 2017 New Revision: 315650 URL: https://svnweb.freebsd.org/changeset/base/315650 Log: Use tc_priv to find the softc in the i.MX timer driver. Sponsored by: ABT Systems Ltd Modified: head/sys/arm/freescale/imx/imx_gpt.c Modified: head/sys/arm/freescale/imx/imx_gpt.c ============================================================================== --- head/sys/arm/freescale/imx/imx_gpt.c Mon Mar 20 19:24:16 2017 (r315649) +++ head/sys/arm/freescale/imx/imx_gpt.c Mon Mar 20 19:25:42 2017 (r315650) @@ -271,6 +271,7 @@ imx_gpt_attach(device_t dev) /* Register as a timecounter. */ imx_gpt_timecounter.tc_frequency = sc->clkfreq; + imx_gpt_timecounter.tc_priv = sc; tc_init(&imx_gpt_timecounter); /* If this is the first unit, store the softc for use in DELAY. */ @@ -368,14 +369,13 @@ imx_gpt_intr(void *arg) return (FILTER_HANDLED); } -u_int +static u_int imx_gpt_get_timecount(struct timecounter *tc) { + struct imx_gpt_softc *sc; - if (imx_gpt_sc == NULL) - return (0); - - return (READ4(imx_gpt_sc, IMX_GPT_CNT)); + sc = tc->tc_priv; + return (READ4(sc, IMX_GPT_CNT)); } static device_method_t imx_gpt_methods[] = { From owner-svn-src-head@freebsd.org Mon Mar 20 19:27:36 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 951FAD14608; Mon, 20 Mar 2017 19:27:36 +0000 (UTC) (envelope-from landonf@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6FC121C16; Mon, 20 Mar 2017 19:27:36 +0000 (UTC) (envelope-from landonf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KJRZmL081065; Mon, 20 Mar 2017 19:27:35 GMT (envelope-from landonf@FreeBSD.org) Received: (from landonf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KJRZxP081062; Mon, 20 Mar 2017 19:27:35 GMT (envelope-from landonf@FreeBSD.org) Message-Id: <201703201927.v2KJRZxP081062@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: landonf set sender to landonf@FreeBSD.org using -f From: "Landon J. Fuller" Date: Mon, 20 Mar 2017 19:27:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315651 - in head/sys/dev/bhnd/cores: chipc pmu X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 19:27:36 -0000 Author: landonf Date: Mon Mar 20 19:27:35 2017 New Revision: 315651 URL: https://svnweb.freebsd.org/changeset/base/315651 Log: Integrate BCM4706 PMU (rev6) support, derived from the ISC-licensed Broadcom sbchipc.h and hndpmu.c sources included in the RT-N16 and later firmware source drops. Approved by: adrian (mentor, implicit) Modified: head/sys/dev/bhnd/cores/chipc/chipcreg.h head/sys/dev/bhnd/cores/pmu/bhnd_pmu_subr.c head/sys/dev/bhnd/cores/pmu/bhnd_pmureg.h Modified: head/sys/dev/bhnd/cores/chipc/chipcreg.h ============================================================================== --- head/sys/dev/bhnd/cores/chipc/chipcreg.h Mon Mar 20 19:25:42 2017 (r315650) +++ head/sys/dev/bhnd/cores/chipc/chipcreg.h Mon Mar 20 19:27:35 2017 (r315651) @@ -1,11 +1,11 @@ /*- * Copyright (c) 2015-2016 Landon Fuller - * Copyright (c) 2010 Broadcom Corporation + * Copyright (c) 2010-2015 Broadcom Corporation * All rights reserved. * - * This file is derived from the sbchipc.h header distributed with - * Broadcom's initial brcm80211 Linux driver release, as - * contributed to the Linux staging repository. + * This file is derived from the sbchipc.h header contributed by Broadcom + * to to the Linux staging repository, as well as later revisions of sbchipc.h + * distributed with the Asus RT-N16 firmware source code release. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -928,6 +928,29 @@ enum { #define CHIPC_CST43228_SDIO_OTP_PRESENT 0x10 #define CHIPC_CST43228_SDIO_RESET 0x20 +/* 4706 chipstatus reg bits */ +#define CHIPC_CST4706_LOWCOST_PKG (1<<0) /* 0: full-featured package 1: low-cost package */ +#define CHIPC_CST4706_SFLASH_PRESENT (1<<1) /* 0: parallel, 1: serial flash is present */ +#define CHIPC_CST4706_SFLASH_TYPE (1<<2) /* 0: 8b-p/ST-s flash, 1: 16b-p/Atmal-s flash */ +#define CHIPC_CST4706_MIPS_BENDIAN (1<<3) /* 0: little, 1: big endian */ +#define CHIPC_CST4706_PCIE1_DISABLE (1<<5) /* PCIE1 enable strap pin */ + +/* 4706 flashstrconfig reg bits */ +#define CHIPC_FLSTRCF4706_MASK 0x000000ff +#define CHIPC_FLSTRCF4706_SF1 0x00000001 /* 2nd serial flash present */ +#define CHIPC_FLSTRCF4706_PF1 0x00000002 /* 2nd parallel flash present */ +#define CHIPC_FLSTRCF4706_SF1_TYPE 0x00000004 /* 2nd serial flash type : 0 : ST, 1 : Atmel */ +#define CHIPC_FLSTRCF4706_NF1 0x00000008 /* 2nd NAND flash present */ +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_MASK 0x000000f0 /* Valid value mask */ +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_SHIFT 4 +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_4MB 0x1 /* 4MB */ +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_8MB 0x2 /* 8MB */ +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_16MB 0x3 /* 16MB */ +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_32MB 0x4 /* 32MB */ +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_64MB 0x5 /* 64MB */ +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_128MB 0x6 /* 128MB */ +#define CHIPC_FLSTRCF4706_1ST_MADDR_SEG_256MB 0x7 /* 256MB */ + /* * Register eci_inputlo bitfield values. * - BT packet type information bits [7:0] Modified: head/sys/dev/bhnd/cores/pmu/bhnd_pmu_subr.c ============================================================================== --- head/sys/dev/bhnd/cores/pmu/bhnd_pmu_subr.c Mon Mar 20 19:25:42 2017 (r315650) +++ head/sys/dev/bhnd/cores/pmu/bhnd_pmu_subr.c Mon Mar 20 19:27:35 2017 (r315651) @@ -69,6 +69,9 @@ static uint32_t bhnd_pmu1_alpclk0(struct static uint32_t bhnd_pmu5_clock(struct bhnd_pmu_query *sc, u_int pll0, u_int m); +static uint32_t bhnd_pmu6_4706_clock(struct bhnd_pmu_query *sc, u_int pll0, + u_int m); + /* PMU resources */ static bool bhnd_pmu_res_depfltr_bb(struct bhnd_pmu_softc *sc); static bool bhnd_pmu_res_depfltr_ncb(struct bhnd_pmu_softc *sc); @@ -2329,6 +2332,47 @@ bhnd_pmu5_clock(struct bhnd_pmu_query *s return ((fc / div) * 1000000); } +static uint32_t +bhnd_pmu6_4706_clock(struct bhnd_pmu_query *sc, u_int pll0, u_int m) +{ + uint32_t chipst, clock; + uint32_t ndiv, p1div, p2div, tmp; + + /* Get N, P1 and P2 dividers to determine CPU clock */ + BHND_PMU_WRITE_4(sc, BHND_PMU_PLL_CONTROL_ADDR, + pll0 + BHND_PMU6_4706_PROCPLL_OFF); + BHND_PMU_READ_4(sc, BHND_PMU_PLL_CONTROL_ADDR); + + tmp = BHND_PMU_READ_4(sc, BHND_PMU_PLL_CONTROL_DATA); + ndiv = BHND_PMU_GET_BITS(tmp, BHND_PMU6_4706_PROC_NDIV_INT); + p1div = BHND_PMU_GET_BITS(tmp, BHND_PMU6_4706_PROC_P1DIV); + p2div = BHND_PMU_GET_BITS(tmp, BHND_PMU6_4706_PROC_P2DIV); + + /* Fixed 25MHz reference clock */ + clock = 25 * 1000 * 1000; + + /* The low-cost bonding uses an input divider of 4; otherwise, 2 */ + chipst = sc->io->rd_chipst(sc->io_ctx); + if (chipst & CHIPC_CST4706_LOWCOST_PKG) + clock /= 4; + else + clock /= 2; + + clock *= ndiv * p2div / p1div; + + switch (m) { + case BHND_PMU6_MAINPLL_CPU: + return (clock); + case BHND_PMU6_MAINPLL_MEM: + return (clock / 2); + case BHND_PMU6_MAINPLL_SI: + return (clock / 4); + default: + PMU_LOG(sc, "bad m divider: %d", m); + return (0); + } +} + /** * Return the backplane clock frequency, in Hz. * @@ -2425,6 +2469,10 @@ bhnd_pmu_si_clock(struct bhnd_pmu_query clock = bhnd_pmu5_clock(sc, BHND_PMU5357_MAINPLL_PLL0, BHND_PMU5_MAINPLL_SI); break; + case BHND_CHIPID_BCM4706: + clock = bhnd_pmu6_4706_clock(sc, BHND_PMU4706_MAINPLL_PLL0, + BHND_PMU6_MAINPLL_SI); + break; case BHND_CHIPID_BCM53572: clock = 75000000; break; @@ -2446,8 +2494,6 @@ bhnd_pmu_si_clock(struct bhnd_pmu_query uint32_t bhnd_pmu_cpu_clock(struct bhnd_pmu_query *sc) { - uint32_t clock; - /* 5354 chip uses a non programmable PLL of frequency 240MHz */ if (sc->cid.chip_id == BHND_CHIPID_BCM5354) return (240 * 1000 * 1000); /* 240MHz */ @@ -2466,27 +2512,27 @@ bhnd_pmu_cpu_clock(struct bhnd_pmu_query sc->cid.chip_id != BHND_CHIPID_BCM4336 && sc->cid.chip_id != BHND_CHIPID_BCM4330) { - u_int pll; - switch (sc->cid.chip_id) { case BHND_CHIPID_BCM5356: - pll = BHND_PMU5356_MAINPLL_PLL0; - break; + return (bhnd_pmu5_clock(sc, BHND_PMU5356_MAINPLL_PLL0, + BHND_PMU5_MAINPLL_CPU)); + case BHND_CHIPID_BCM5357: case BHND_CHIPID_BCM4749: - pll = BHND_PMU5357_MAINPLL_PLL0; - break; + return (bhnd_pmu5_clock(sc, BHND_PMU5357_MAINPLL_PLL0, + BHND_PMU5_MAINPLL_CPU)); + + case BHND_CHIPID_BCM4706: + return (bhnd_pmu6_4706_clock(sc, + BHND_PMU4706_MAINPLL_PLL0, BHND_PMU6_MAINPLL_CPU)); + default: - pll = BHND_PMU4716_MAINPLL_PLL0; - break; + return (bhnd_pmu5_clock(sc, BHND_PMU4716_MAINPLL_PLL0, + BHND_PMU5_MAINPLL_CPU)); } - - clock = bhnd_pmu5_clock(sc, pll, BHND_PMU5_MAINPLL_CPU); } else { - clock = bhnd_pmu_si_clock(sc); + return (bhnd_pmu_si_clock(sc)); } - - return (clock); } /** @@ -2497,8 +2543,6 @@ bhnd_pmu_cpu_clock(struct bhnd_pmu_query uint32_t bhnd_pmu_mem_clock(struct bhnd_pmu_query *sc) { - uint32_t clock; - if (BHND_PMU_REV(sc) >= 5 && sc->cid.chip_id != BHND_CHIPID_BCM4329 && sc->cid.chip_id != BHND_CHIPID_BCM4319 && @@ -2510,27 +2554,28 @@ bhnd_pmu_mem_clock(struct bhnd_pmu_query sc->cid.chip_id != BHND_CHIPID_BCM4336 && sc->cid.chip_id != BHND_CHIPID_BCM4330) { - u_int pll; - switch (sc->cid.chip_id) { case BHND_CHIPID_BCM5356: - pll = BHND_PMU5356_MAINPLL_PLL0; - break; + return (bhnd_pmu5_clock(sc, BHND_PMU5356_MAINPLL_PLL0, + BHND_PMU5_MAINPLL_MEM)); + case BHND_CHIPID_BCM5357: case BHND_CHIPID_BCM4749: - pll = BHND_PMU5357_MAINPLL_PLL0; - break; + return (bhnd_pmu5_clock(sc, BHND_PMU5357_MAINPLL_PLL0, + BHND_PMU5_MAINPLL_MEM)); + + case BHND_CHIPID_BCM4706: + return (bhnd_pmu6_4706_clock(sc, + BHND_PMU4706_MAINPLL_PLL0, BHND_PMU6_MAINPLL_MEM)); + default: - pll = BHND_PMU4716_MAINPLL_PLL0; - break; + return (bhnd_pmu5_clock(sc, BHND_PMU4716_MAINPLL_PLL0, + BHND_PMU5_MAINPLL_MEM)); } - clock = bhnd_pmu5_clock(sc, pll, BHND_PMU5_MAINPLL_MEM); } else { - clock = bhnd_pmu_si_clock(sc); + return (bhnd_pmu_si_clock(sc)); } - - return (clock); } /* Measure ILP clock frequency */ Modified: head/sys/dev/bhnd/cores/pmu/bhnd_pmureg.h ============================================================================== --- head/sys/dev/bhnd/cores/pmu/bhnd_pmureg.h Mon Mar 20 19:25:42 2017 (r315650) +++ head/sys/dev/bhnd/cores/pmu/bhnd_pmureg.h Mon Mar 20 19:27:35 2017 (r315651) @@ -370,6 +370,24 @@ #define BHND_PMU5_MAINPLL_MEM 2 #define BHND_PMU5_MAINPLL_SI 3 +/* PMU rev 6 (BCM4706/Northstar) */ +#define BHND_PMU4706_MAINPLL_PLL0 0 +#define BHND_PMU6_4706_PROCPLL_OFF 4 /* The CPU PLL */ +#define BHND_PMU6_4706_PROC_P1DIV_MASK 0x000f0000 +#define BHND_PMU6_4706_PROC_P1DIV_SHIFT 16 +#define BHND_PMU6_4706_PROC_P2DIV_MASK 0x0000f000 +#define BHND_PMU6_4706_PROC_P2DIV_SHIFT 12 +#define BHND_PMU6_4706_PROC_NDIV_INT_MASK 0x00000ff8 +#define BHND_PMU6_4706_PROC_NDIV_INT_SHIFT 3 +#define BHND_PMU6_4706_PROC_NDIV_MODE_MASK 0x00000007 +#define BHND_PMU6_4706_PROC_NDIV_MODE_SHIFT 0 + +/* Divider allocation in 4706 */ +#define BHND_PMU6_MAINPLL_CPU 1 +#define BHND_PMU6_MAINPLL_MEM 2 +#define BHND_PMU6_MAINPLL_SI 3 + +/* PMU7 (?) */ #define BHND_PMU7_PLL_PLLCTL7 7 #define BHND_PMU7_PLL_PLLCTL8 8 #define BHND_PMU7_PLL_PLLCTL11 11 From owner-svn-src-head@freebsd.org Mon Mar 20 20:44:16 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 63DCDD14E03; Mon, 20 Mar 2017 20:44:16 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3DD4E1486; Mon, 20 Mar 2017 20:44:16 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KKiFSq013956; Mon, 20 Mar 2017 20:44:15 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KKiFkE013953; Mon, 20 Mar 2017 20:44:15 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703202044.v2KKiFkE013953@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 20 Mar 2017 20:44:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315652 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 20:44:16 -0000 Author: mav Date: Mon Mar 20 20:44:14 2017 New Revision: 315652 URL: https://svnweb.freebsd.org/changeset/base/315652 Log: Remove some more dead code. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_freebsd.h head/sys/dev/isp/ispvar.h Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Mon Mar 20 19:27:35 2017 (r315651) +++ head/sys/dev/isp/isp_freebsd.c Mon Mar 20 20:44:14 2017 (r315652) @@ -294,7 +294,6 @@ isp_attach(ispsoftc_t *isp) callout_init_mtx(&isp->isp_osinfo.tmo, &isp->isp_osinfo.lock, 0); isp_timer_count = hz >> 2; callout_reset(&isp->isp_osinfo.tmo, isp_timer_count, isp_timer, isp); - isp->isp_osinfo.timer_active = 1; isp->isp_osinfo.cdev = make_dev(&isp_cdevsw, du, UID_ROOT, GID_OPERATOR, 0600, "%s", nu); if (isp->isp_osinfo.cdev) { @@ -315,10 +314,6 @@ unwind: ISP_UNLOCK(isp); cam_sim_free(sim, FALSE); } - if (isp->isp_osinfo.cdev) { - destroy_dev(isp->isp_osinfo.cdev); - isp->isp_osinfo.cdev = NULL; - } cam_simq_free(isp->isp_osinfo.devq); isp->isp_osinfo.devq = NULL; return (-1); @@ -327,35 +322,20 @@ unwind: int isp_detach(ispsoftc_t *isp) { - struct cam_sim *sim; int chan; - ISP_LOCK(isp); - for (chan = isp->isp_nchan - 1; chan >= 0; chan -= 1) { - ISP_GET_PC(isp, chan, sim, sim); - if (sim->refcount > 2) { - ISP_UNLOCK(isp); - return (EBUSY); - } + if (isp->isp_osinfo.cdev) { + destroy_dev(isp->isp_osinfo.cdev); + isp->isp_osinfo.cdev = NULL; } + ISP_LOCK(isp); /* Tell spawned threads that we're exiting. */ isp->isp_osinfo.is_exiting = 1; - if (isp->isp_osinfo.timer_active) { - callout_stop(&isp->isp_osinfo.tmo); - isp->isp_osinfo.timer_active = 0; - } for (chan = isp->isp_nchan - 1; chan >= 0; chan -= 1) isp_detach_chan(isp, chan); ISP_UNLOCK(isp); - - if (isp->isp_osinfo.cdev) { - destroy_dev(isp->isp_osinfo.cdev); - isp->isp_osinfo.cdev = NULL; - } - if (isp->isp_osinfo.devq != NULL) { - cam_simq_free(isp->isp_osinfo.devq); - isp->isp_osinfo.devq = NULL; - } + callout_drain(&isp->isp_osinfo.tmo); + cam_simq_free(isp->isp_osinfo.devq); return (0); } Modified: head/sys/dev/isp/isp_freebsd.h ============================================================================== --- head/sys/dev/isp/isp_freebsd.h Mon Mar 20 19:27:35 2017 (r315651) +++ head/sys/dev/isp/isp_freebsd.h Mon Mar 20 20:44:14 2017 (r315652) @@ -297,16 +297,7 @@ struct isposinfo { struct isp_pcmd * pcmd_pool; struct isp_pcmd * pcmd_free; - uint32_t -#ifdef ISP_TARGET_MODE - tmwanted : 1, - tmbusy : 1, -#else - : 2, -#endif - sixtyfourbit : 1, /* sixtyfour bit platform */ - timer_active : 1, - autoconf : 1; + int sixtyfourbit; /* sixtyfour bit platform */ int mbox_sleeping; int mbox_sleep_ok; int mboxbsy; Modified: head/sys/dev/isp/ispvar.h ============================================================================== --- head/sys/dev/isp/ispvar.h Mon Mar 20 19:27:35 2017 (r315651) +++ head/sys/dev/isp/ispvar.h Mon Mar 20 20:44:14 2017 (r315652) @@ -532,9 +532,8 @@ struct ispsoftc { uint32_t isp_maxluns; /* maximum luns supported */ uint32_t isp_clock : 8, /* input clock */ - : 4, + : 5, isp_port : 1, /* 23XX/24XX only */ - isp_open : 1, /* opened (ioctl) */ isp_bustype : 1, /* SBus or PCI */ isp_loaded_fw : 1, /* loaded firmware */ isp_dblev : 16; /* debug log mask */ From owner-svn-src-head@freebsd.org Mon Mar 20 22:20:18 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BE6ADD1419A; Mon, 20 Mar 2017 22:20:18 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 80CD81E08; Mon, 20 Mar 2017 22:20:18 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KMKHwV050738; Mon, 20 Mar 2017 22:20:17 GMT (envelope-from tsoome@FreeBSD.org) Received: (from tsoome@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KMKHVP050735; Mon, 20 Mar 2017 22:20:17 GMT (envelope-from tsoome@FreeBSD.org) Message-Id: <201703202220.v2KMKHVP050735@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tsoome set sender to tsoome@FreeBSD.org using -f From: Toomas Soome Date: Mon, 20 Mar 2017 22:20:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315653 - in head: lib/libstand sys/boot/common sys/boot/i386/libi386 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 22:20:18 -0000 Author: tsoome Date: Mon Mar 20 22:20:17 2017 New Revision: 315653 URL: https://svnweb.freebsd.org/changeset/base/315653 Log: loader: verify the value from dhcp.interface-mtu and use snprintf to set mtu Since the uset can set dhcp.interface-mtu, we need to try to validate the value. So we verify if the conversion to int is successful and we will not allow to set value greater than max IPv4 packet size. Also use snprintf for safety. Reviewed by: allanjude, bapt Approved by: allanjude (mentor) Differential Revision: https://reviews.freebsd.org/D8492 Modified: head/lib/libstand/bootp.c head/sys/boot/common/dev_net.c head/sys/boot/i386/libi386/pxe.c Modified: head/lib/libstand/bootp.c ============================================================================== --- head/lib/libstand/bootp.c Mon Mar 20 20:44:14 2017 (r315652) +++ head/lib/libstand/bootp.c Mon Mar 20 22:20:17 2017 (r315653) @@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$"); #include +#include #include #include #include @@ -403,11 +404,29 @@ vend_rfc1048(cp, len) strlcpy(hostname, val, sizeof(hostname)); } if (tag == TAG_INTF_MTU) { + intf_mtu = 0; if ((val = getenv("dhcp.interface-mtu")) != NULL) { - intf_mtu = (u_int)strtoul(val, NULL, 0); - } else { - intf_mtu = be16dec(cp); + unsigned long tmp; + char *end; + + errno = 0; + /* + * Do not allow MTU to exceed max IPv4 packet + * size, max value of 16-bit word. + */ + tmp = strtoul(val, &end, 0); + if (errno != 0 || + *val == '\0' || *end != '\0' || + tmp > USHRT_MAX) { + printf("%s: bad value: \"%s\", " + "ignoring\n", + "dhcp.interface-mtu", val); + } else { + intf_mtu = (u_int)tmp; + } } + if (intf_mtu <= 0) + intf_mtu = be16dec(cp); } #ifdef SUPPORT_DHCP if (tag == TAG_DHCP_MSGTYPE) { Modified: head/sys/boot/common/dev_net.c ============================================================================== --- head/sys/boot/common/dev_net.c Mon Mar 20 20:44:14 2017 (r315652) +++ head/sys/boot/common/dev_net.c Mon Mar 20 22:20:17 2017 (r315653) @@ -175,7 +175,7 @@ net_open(struct open_file *f, ...) } if (intf_mtu != 0) { char mtu[16]; - sprintf(mtu, "%u", intf_mtu); + snprintf(mtu, sizeof(mtu), "%u", intf_mtu); setenv("boot.netif.mtu", mtu, 1); } Modified: head/sys/boot/i386/libi386/pxe.c ============================================================================== --- head/sys/boot/i386/libi386/pxe.c Mon Mar 20 20:44:14 2017 (r315652) +++ head/sys/boot/i386/libi386/pxe.c Mon Mar 20 22:20:17 2017 (r315653) @@ -342,7 +342,7 @@ pxe_open(struct open_file *f, ...) } if (intf_mtu != 0) { char mtu[16]; - sprintf(mtu, "%u", intf_mtu); + snprintf(sizeof(mtu), mtu, "%u", intf_mtu); setenv("boot.netif.mtu", mtu, 1); } printf("pxe_open: server addr: %s\n", inet_ntoa(rootip)); From owner-svn-src-head@freebsd.org Mon Mar 20 22:33:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A357DD145EB; Mon, 20 Mar 2017 22:33:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 72B4586F; Mon, 20 Mar 2017 22:33:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KMXMHR058835; Mon, 20 Mar 2017 22:33:22 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KMXM9r058834; Mon, 20 Mar 2017 22:33:22 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703202233.v2KMXM9r058834@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Mon, 20 Mar 2017 22:33:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315654 - head/rescue/rescue X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 22:33:23 -0000 Author: ngie Date: Mon Mar 20 22:33:22 2017 New Revision: 315654 URL: https://svnweb.freebsd.org/changeset/base/315654 Log: Fix linking /rescue/rescue to multiple programs in usr.bin after r315113 I meant for the line that conditionally added in /usr/bin/nc support to be `+=', not `=`. This restores hardlinks for all programs in usr.bin specified before nc(1), e.g., bunzip2 and tar. Reported by: Andrzej Tobola Submitted by: Scott Allendorf Pointyhat to: ngie MFC after: 3 days Sponsored by: Dell EMC Isilon Modified: head/rescue/rescue/Makefile Modified: head/rescue/rescue/Makefile ============================================================================== --- head/rescue/rescue/Makefile Mon Mar 20 22:20:17 2017 (r315653) +++ head/rescue/rescue/Makefile Mon Mar 20 22:33:22 2017 (r315654) @@ -210,7 +210,7 @@ CRUNCH_LIBS+= -lcrypto CRUNCH_LIBS+= -lmd .if ${MK_NETCAT} != "no" -CRUNCH_PROGS_usr.bin= nc +CRUNCH_PROGS_usr.bin+= nc .endif .if ${MK_VI} != "no" From owner-svn-src-head@freebsd.org Mon Mar 20 22:36:30 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0AF22D146F1; Mon, 20 Mar 2017 22:36:30 +0000 (UTC) (envelope-from gad@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B3A77C7E; Mon, 20 Mar 2017 22:36:29 +0000 (UTC) (envelope-from gad@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KMaS3Y059141; Mon, 20 Mar 2017 22:36:28 GMT (envelope-from gad@FreeBSD.org) Received: (from gad@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KMaSPT059140; Mon, 20 Mar 2017 22:36:28 GMT (envelope-from gad@FreeBSD.org) Message-Id: <201703202236.v2KMaSPT059140@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gad set sender to gad@FreeBSD.org using -f From: Garance A Drosehn Date: Mon, 20 Mar 2017 22:36:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315655 - head/usr.sbin/lpr/chkprintcap X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 22:36:30 -0000 Author: gad Date: Mon Mar 20 22:36:28 2017 New Revision: 315655 URL: https://svnweb.freebsd.org/changeset/base/315655 Log: Fixes to chkprintcap: - Check the return from a call to malloc() in skim_printcap(), and return a NULL if that fails. - Fix a small memory leak in main() that happens if skim_printcap() returns an error, including the new error-return of NULL. Submitted by: Tom Rix Reviewed by: pfg, ngie MFC after: 4 weeks Sponsored by: Dell EMC Isilon, Juniper Differential Revision: D9954, D9982 Modified: head/usr.sbin/lpr/chkprintcap/chkprintcap.c head/usr.sbin/lpr/chkprintcap/skimprintcap.c Modified: head/usr.sbin/lpr/chkprintcap/chkprintcap.c ============================================================================== --- head/usr.sbin/lpr/chkprintcap/chkprintcap.c Mon Mar 20 22:33:22 2017 (r315654) +++ head/usr.sbin/lpr/chkprintcap/chkprintcap.c Mon Mar 20 22:36:28 2017 (r315655) @@ -113,8 +113,13 @@ main(int argc, char **argv) * the printcap file. */ skres = skim_printcap(pcap_fname, verbosity); - if (skres->fatalerr) - return (skres->fatalerr); + if (skres == NULL) { + problems = 1; + goto main_ret; + } else if (skres->fatalerr) { + problems = skres->fatalerr; + goto main_ret; + } /* * Now use the standard capability-db routines to check the values @@ -156,6 +161,9 @@ next: warnx("WARNING: but only found %d queues to process!", queuecnt); } + +main_ret: + free(pcap_fname); return (problems); } Modified: head/usr.sbin/lpr/chkprintcap/skimprintcap.c ============================================================================== --- head/usr.sbin/lpr/chkprintcap/skimprintcap.c Mon Mar 20 22:33:22 2017 (r315654) +++ head/usr.sbin/lpr/chkprintcap/skimprintcap.c Mon Mar 20 22:36:28 2017 (r315655) @@ -82,6 +82,8 @@ skim_printcap(const char *pcap_fname, in enum {CMNT_LINE, ENTRY_LINE, TAB_LINE, TABERR_LINE} is_type, had_type; skinf = malloc(sizeof(struct skiminfo)); + if (skinf == NULL) + return (NULL); memset(skinf, 0, sizeof(struct skiminfo)); pc_file = fopen(pcap_fname, "r"); From owner-svn-src-head@freebsd.org Mon Mar 20 23:07:36 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 150B9D15161; Mon, 20 Mar 2017 23:07:36 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BFD2B1B6C; Mon, 20 Mar 2017 23:07:35 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2KN7Ypl071358; Mon, 20 Mar 2017 23:07:34 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2KN7Y5n071357; Mon, 20 Mar 2017 23:07:34 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201703202307.v2KN7Y5n071357@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Mon, 20 Mar 2017 23:07:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315656 - head/tests/sys/netinet X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2017 23:07:36 -0000 Author: asomers Date: Mon Mar 20 23:07:34 2017 New Revision: 315656 URL: https://svnweb.freebsd.org/changeset/base/315656 Log: Fix back-to-back runs of sys/netinet/fibs_test;slaac_on_nondefault_fib6 This test was failing if run twice because rtadvd takes too long to die. The rtadvd process from the first run was still running when the second run created its interfaces. The solution is to use SIGKILL during the cleanup instead of SIGTERM so rtadvd will die faster. While I'm here, randomize the addresses used for the test, which makes bugs like this easier to spot, and fix the cleanup order to be the opposite of the setup order PR: 217871 MFC after: 18 days X-MFC-With: 315458 Sponsored by: Spectra Logic Corp Modified: head/tests/sys/netinet/fibs_test.sh Modified: head/tests/sys/netinet/fibs_test.sh ============================================================================== --- head/tests/sys/netinet/fibs_test.sh Mon Mar 20 22:36:28 2017 (r315655) +++ head/tests/sys/netinet/fibs_test.sh Mon Mar 20 23:07:34 2017 (r315656) @@ -451,12 +451,12 @@ slaac_on_nondefault_fib6_head() } slaac_on_nondefault_fib6_body() { - atf_skip "BUG217871 SLAAC on a newly created epair sometimes fails to add routes" # Configure the epair interfaces to use nonrouteable RFC3849 # addresses and non-default FIBs - ADDR="2001:db8::2" - GATEWAY="2001:db8::1" - SUBNET="2001:db8:" + PREFIX="2001:db8:$(printf "%x" `jot -r 1 0 65535`):$(printf "%x" `jot -r 1 0 65535`)" + ADDR="$PREFIX::2" + GATEWAY="$PREFIX::1" + SUBNET="$PREFIX:" MASK="64" # Check system configuration @@ -509,19 +509,23 @@ slaac_on_nondefault_fib6_body() } slaac_on_nondefault_fib6_cleanup() { - cleanup_ifaces if [ -f "rtadvd.pid" ]; then - pkill -F rtadvd.pid + # rtadvd can take a long time to shutdown. Use SIGKILL to kill + # it right away. The downside to using SIGKILL is that it + # won't send final RAs to all interfaces, but we don't care + # because we're about to destroy its interface anyway. + pkill -kill -F rtadvd.pid rm -f rtadvd.pid fi - if [ -f "rfc6204w3.state" ] ; then - sysctl "net.inet6.ip6.rfc6204w3"=`cat "rfc6204w3.state"` - rm "rfc6204w3.state" - fi + cleanup_ifaces if [ -f "forwarding.state" ] ; then sysctl "net.inet6.ip6.forwarding"=`cat "forwarding.state"` rm "forwarding.state" fi + if [ -f "rfc6204w3.state" ] ; then + sysctl "net.inet6.ip6.rfc6204w3"=`cat "rfc6204w3.state"` + rm "rfc6204w3.state" + fi } # Regression test for kern/187550 From owner-svn-src-head@freebsd.org Tue Mar 21 00:55:40 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D0F6AD1309D; Tue, 21 Mar 2017 00:55:40 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-qk0-x235.google.com (mail-qk0-x235.google.com [IPv6:2607:f8b0:400d:c09::235]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8E6A1109C; Tue, 21 Mar 2017 00:55:40 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-qk0-x235.google.com with SMTP id p64so124320093qke.1; Mon, 20 Mar 2017 17:55:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=vd5SUBvfmHdDQaNimRfSN6mJb+QC/iBMseehxz+YVsU=; b=fXufamnXYQd2B1Wcug2NDv8v58SDlKOUxT0rSkUdnF13ftidyt1R36lT/oy+asIBRr FvFZW1cm/mqaQNjwnSTCMhv2fr0sf5i/luL7T26J1Td1e2dAfhTEG/WDhKB9EAJaS7FT pkPf+x2CzI8mU4tCdONiNsnz8vl9G35PXxneAvbHqSfhNWyRQ/MKftevABwgOujBGeGw X7cUf7Ru8ASV9XLpX+Eg24xaMSTfP6ZQXR8l5x3ml5zQl1vewAKaFEY1xIN3sbAp5hDR Bw/zu6kt0nSjWSpDV7dHhWCSRJmGHzywYK3xakpG3LkjG+AO5QXarIPEGQ2CrXWZ7Huo v9lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=vd5SUBvfmHdDQaNimRfSN6mJb+QC/iBMseehxz+YVsU=; b=jDdR+yZMdk1hFGcPMiXW8m5WpEEFYr/LXeOREaaAltthAuX/WoV45UpHGMEAIojaFj meWGGNH7E3p0/Pu4vQUpKtcTem+pUmbdDj507xGDUYVQYDqVJYlltQCT49KbFacJhbwh MuSm7e9Rg/Z3yyBYNQervR/kUkhL/6O895LbxN0lBnf7c2bm2An1HIBt6mcfmQKKb/5f H12WlJK38RpSfx5iTDjTRBg76SGf4iph46QJfvxv7eZuFajFLlTkfJSMO6Y8t0lg9poA zsVmSr29xdMqgJav1g7fPCluj1X5xG8T5sGJfH+ZaecGBica3g05PSDLqOrnfRjTiXkw sHXw== X-Gm-Message-State: AFeK/H29/wHU8lz9+87ulGx3XX2/SKm5opfpU1o7aK0QxwLTxo4QWkojShdd3Y7NNVA2E8VIANaUJcbfCDu7jw== X-Received: by 10.55.192.145 with SMTP id v17mr30624101qkv.3.1490057739505; Mon, 20 Mar 2017 17:55:39 -0700 (PDT) MIME-Version: 1.0 Received: by 10.140.93.18 with HTTP; Mon, 20 Mar 2017 17:55:39 -0700 (PDT) In-Reply-To: <201703202307.v2KN7Y5n071357@repo.freebsd.org> References: <201703202307.v2KN7Y5n071357@repo.freebsd.org> From: Ngie Cooper Date: Mon, 20 Mar 2017 17:55:39 -0700 Message-ID: Subject: Re: svn commit: r315656 - head/tests/sys/netinet To: Alan Somers Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 00:55:40 -0000 On Mon, Mar 20, 2017 at 4:07 PM, Alan Somers wrote: > Author: asomers > Date: Mon Mar 20 23:07:34 2017 > New Revision: 315656 > URL: https://svnweb.freebsd.org/changeset/base/315656 > > Log: > Fix back-to-back runs of sys/netinet/fibs_test;slaac_on_nondefault_fib6 > > This test was failing if run twice because rtadvd takes too long to die. > The rtadvd process from the first run was still running when the > second run created its interfaces. The solution is to use SIGKILL during > the cleanup instead of SIGTERM so rtadvd will die faster. > > While I'm here, randomize the addresses used for the test, which makes bugs > like this easier to spot, and fix the cleanup order to be the opposite of > the setup order > > PR: 217871 > MFC after: 18 days > X-MFC-With: 315458 > Sponsored by: Spectra Logic Corp Hi Alan, I wonder if another seatbelt needs to be added for this scenario because running a separate copy of rtadvd could adversely affect the running system behavior... Thanks, -Ngie From owner-svn-src-head@freebsd.org Tue Mar 21 01:58:58 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9E4EED15CED; Tue, 21 Mar 2017 01:58:58 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-yw0-x236.google.com (mail-yw0-x236.google.com [IPv6:2607:f8b0:4002:c05::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5CE39197B; Tue, 21 Mar 2017 01:58:58 +0000 (UTC) (envelope-from asomers@gmail.com) Received: by mail-yw0-x236.google.com with SMTP id v198so101603406ywc.2; Mon, 20 Mar 2017 18:58:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=jbRus3P+po6n+8Pys+sWnZ+nDOnhUsUTNMfo/cXO3WU=; b=ee2Up5ppI+yTpOEJIt2RT4rjKTOPG0GCK2ObcAP75T8UgTiTriiShR/XZWZWDbSwIe 06O3IJMIT084ylFYcbwTH6UJDqfC6gcN4nHrbnXfiOJu79+PNSSXu/BoJWiZQT0l/UE7 nc2ymBAtKYe3RhqkOXOcQYqEyQDmbhHLmfUDp2yC9k3ASadnLhbFFVyKkFCrsWWDYp+b 51kup7duRZptondl9R3OXw0uPc9/twQn+ITcmfEyuD+jQsemi39sHn5lX2g4i+ouCBYf q5UEDHlu34XoxNATqW4bELT1Jkfdv33z1Oo8m0illRw9hSc2w6vBHLychFzcYyaOHLuC lG7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=jbRus3P+po6n+8Pys+sWnZ+nDOnhUsUTNMfo/cXO3WU=; b=dYuucPdnqfyEvV2D/EbkPRU7Tzx/7MWnjCdDYfRVk0G1ey3kE8mRuGIP8WmyXKkAXH bNw6DDcccr75cw/e4UWndtCo2lKj1QkQ1XBeJR3iZbonJfVYbTcRAIrvw8Ri41jmRFOE rEijFNWeFX3ttOeY/uat3tjq3z+HSCjJK8ljDn37pNFhcvZv7XmgAkUazknDY4VFCc91 LAvN2Ps4pp0aUwvtvWSJYhfH9NAbM16m7+dKoToWZGOiSn1ReWcg+sGaYtoYP9H6DNWg M8NLIbsMBp8x0OqVLxg8+MFioalKcXGGg4RbI9gJfkrnNLVhTwcoZqipXoFDcrOul1v6 sULg== X-Gm-Message-State: AFeK/H3IJ8pY7VQVL1lIdPmFB8riHXCB40GWgvq7guJ0zn/AHp7vlVaN5vslTE5ZBo5oNnaDTa/nJwTuNY+BRg== X-Received: by 10.37.214.201 with SMTP id n192mr20499075ybg.34.1490061537373; Mon, 20 Mar 2017 18:58:57 -0700 (PDT) MIME-Version: 1.0 Sender: asomers@gmail.com Received: by 10.129.20.214 with HTTP; Mon, 20 Mar 2017 18:58:56 -0700 (PDT) In-Reply-To: References: <201703202307.v2KN7Y5n071357@repo.freebsd.org> From: Alan Somers Date: Mon, 20 Mar 2017 19:58:56 -0600 X-Google-Sender-Auth: YO_GctajtFXcifrFkhIMHlOPZCQ Message-ID: Subject: Re: svn commit: r315656 - head/tests/sys/netinet To: Ngie Cooper Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 01:58:58 -0000 On Mon, Mar 20, 2017 at 6:55 PM, Ngie Cooper wrote: > On Mon, Mar 20, 2017 at 4:07 PM, Alan Somers wrote: >> Author: asomers >> Date: Mon Mar 20 23:07:34 2017 >> New Revision: 315656 >> URL: https://svnweb.freebsd.org/changeset/base/315656 >> >> Log: >> Fix back-to-back runs of sys/netinet/fibs_test;slaac_on_nondefault_fib6 >> >> This test was failing if run twice because rtadvd takes too long to die. >> The rtadvd process from the first run was still running when the >> second run created its interfaces. The solution is to use SIGKILL during >> the cleanup instead of SIGTERM so rtadvd will die faster. >> >> While I'm here, randomize the addresses used for the test, which makes bugs >> like this easier to spot, and fix the cleanup order to be the opposite of >> the setup order >> >> PR: 217871 >> MFC after: 18 days >> X-MFC-With: 315458 >> Sponsored by: Spectra Logic Corp > > Hi Alan, > I wonder if another seatbelt needs to be added for this scenario > because running a separate copy of rtadvd could adversely affect the > running system behavior... > Thanks, > -Ngie I thought about that, but I decided against it, because rtadvd(8) requires you to specify which interfaces it should operate on, either on the command line or with rtadvctl(8). This test always creates a new interface and only runs rtadvd on the new interface. Also, rtadvd(8) allows you to override the default pidfile, configfile, and socket file, which this test does. So I don't think that the test rtadvd and the system rtadvd can ever affect each other. -Alan From owner-svn-src-head@freebsd.org Tue Mar 21 06:39:52 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9ED4ED164CF; Tue, 21 Mar 2017 06:39:52 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3CEC01ADF; Tue, 21 Mar 2017 06:39:52 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2L6dp9j055539; Tue, 21 Mar 2017 06:39:51 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2L6dnRf055522; Tue, 21 Mar 2017 06:39:49 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <201703210639.v2L6dnRf055522@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Tue, 21 Mar 2017 06:39:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 06:39:52 -0000 Author: glebius Date: Tue Mar 21 06:39:49 2017 New Revision: 315662 URL: https://svnweb.freebsd.org/changeset/base/315662 Log: Hide struct inpcb, struct tcpcb from the userland. This is a painful change, but it is needed. On the one hand, we avoid modifying them, and this slows down some ideas, on the other hand we still eventually modify them and tools like netstat(1) never work on next version of FreeBSD. We maintain a ton of spares in them, and we already got some ifdef hell at the end of tcpcb. Details: - Hide struct inpcb, struct tcpcb under _KERNEL || _WANT_FOO. - Make struct xinpcb, struct xtcpcb pure API structures, not including kernel structures inpcb and tcpcb inside. Export into these structures the fields from inpcb and tcpcb that are known to be used, and put there a ton of spare space. - Make kernel and userland utilities compilable after these changes. - Bump __FreeBSD_version. Reviewed by: rrs, gnn Differential Revision: D10018 Modified: head/contrib/bsnmp/snmp_mibII/mibII_tcp.c head/contrib/bsnmp/snmp_mibII/mibII_udp.c head/contrib/ipfilter/ipsend/sock.c head/lib/libprocstat/libprocstat.c head/sys/netinet/in_pcb.c head/sys/netinet/in_pcb.h head/sys/netinet/ip_divert.c head/sys/netinet/raw_ip.c head/sys/netinet/tcp_subr.c head/sys/netinet/tcp_syncache.c head/sys/netinet/tcp_timer.c head/sys/netinet/tcp_timer.h head/sys/netinet/tcp_var.h head/sys/netinet/udp_usrreq.c head/sys/sys/param.h head/usr.bin/netstat/inet.c head/usr.bin/sockstat/sockstat.c head/usr.bin/systat/extern.h head/usr.bin/systat/netcmds.c head/usr.bin/systat/netstat.c head/usr.sbin/tcpdrop/tcpdrop.c head/usr.sbin/trpt/trpt.c Modified: head/contrib/bsnmp/snmp_mibII/mibII_tcp.c ============================================================================== --- head/contrib/bsnmp/snmp_mibII/mibII_tcp.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/contrib/bsnmp/snmp_mibII/mibII_tcp.c Tue Mar 21 06:39:49 2017 (r315662) @@ -310,7 +310,7 @@ op_tcpconn(struct snmp_context *ctx __un switch (value->var.subs[sub - 1]) { case LEAF_tcpConnState: - switch (tcpoids[i].tp->xt_tp.t_state) { + switch (tcpoids[i].tp->t_state) { case TCPS_CLOSED: value->v.integer = 1; Modified: head/contrib/bsnmp/snmp_mibII/mibII_udp.c ============================================================================== --- head/contrib/bsnmp/snmp_mibII/mibII_udp.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/contrib/bsnmp/snmp_mibII/mibII_udp.c Tue Mar 21 06:39:49 2017 (r315662) @@ -105,8 +105,8 @@ fetch_udp(void) ptr->xig_len > sizeof(struct xinpgen); ptr = (struct xinpgen *)(void *)((char *)ptr + ptr->xig_len)) { inp = (struct xinpcb *)ptr; - if (inp->xi_inp.inp_gencnt > xinpgen->xig_gen || - (inp->xi_inp.inp_vflag & INP_IPV4) == 0) + if (inp->inp_gencnt > xinpgen->xig_gen || + (inp->inp_vflag & INP_IPV4) == 0) continue; udp_total++; @@ -128,17 +128,17 @@ fetch_udp(void) ptr->xig_len > sizeof(struct xinpgen); ptr = (struct xinpgen *)(void *)((char *)ptr + ptr->xig_len)) { inp = (struct xinpcb *)ptr; - if (inp->xi_inp.inp_gencnt > xinpgen->xig_gen || - (inp->xi_inp.inp_vflag & INP_IPV4) == 0) + if (inp->inp_gencnt > xinpgen->xig_gen || + (inp->inp_vflag & INP_IPV4) == 0) continue; oid->inp = inp; oid->index.len = 5; - inaddr = ntohl(inp->xi_inp.inp_laddr.s_addr); + inaddr = ntohl(inp->inp_laddr.s_addr); oid->index.subs[0] = (inaddr >> 24) & 0xff; oid->index.subs[1] = (inaddr >> 16) & 0xff; oid->index.subs[2] = (inaddr >> 8) & 0xff; oid->index.subs[3] = (inaddr >> 0) & 0xff; - oid->index.subs[4] = ntohs(inp->xi_inp.inp_lport); + oid->index.subs[4] = ntohs(inp->inp_lport); oid++; } Modified: head/contrib/ipfilter/ipsend/sock.c ============================================================================== --- head/contrib/ipfilter/ipsend/sock.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/contrib/ipfilter/ipsend/sock.c Tue Mar 21 06:39:49 2017 (r315662) @@ -78,8 +78,10 @@ typedef int boolean_t; # include #endif #include +#define _WANT_INPCB #include #include +#define _WANT_TCPCB #include #include #include Modified: head/lib/libprocstat/libprocstat.c ============================================================================== --- head/lib/libprocstat/libprocstat.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/lib/libprocstat/libprocstat.c Tue Mar 21 06:39:49 2017 (r315662) @@ -82,6 +82,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#define _WANT_INPCB #include #include Modified: head/sys/netinet/in_pcb.c ============================================================================== --- head/sys/netinet/in_pcb.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/in_pcb.c Tue Mar 21 06:39:49 2017 (r315662) @@ -2434,6 +2434,41 @@ so_sototcpcb(struct socket *so) return (sototcpcb(so)); } +/* + * Create an external-format (``xinpcb'') structure using the information in + * the kernel-format in_pcb structure pointed to by inp. This is done to + * reduce the spew of irrelevant information over this interface, to isolate + * user code from changes in the kernel structure, and potentially to provide + * information-hiding if we decide that some of this information should be + * hidden from users. + */ +void +in_pcbtoxinpcb(const struct inpcb *inp, struct xinpcb *xi) +{ + + xi->xi_len = sizeof(struct xinpcb); + if (inp->inp_socket) + sotoxsocket(inp->inp_socket, &xi->xi_socket); + else + bzero(&xi->xi_socket, sizeof(struct xsocket)); + bcopy(&inp->inp_inc, &xi->inp_inc, sizeof(struct in_conninfo)); + xi->inp_gencnt = inp->inp_gencnt; + xi->inp_ppcb = inp->inp_ppcb; + xi->inp_flow = inp->inp_flow; + xi->inp_flowid = inp->inp_flowid; + xi->inp_flowtype = inp->inp_flowtype; + xi->inp_flags = inp->inp_flags; + xi->inp_flags2 = inp->inp_flags2; + xi->inp_rss_listen_bucket = inp->inp_rss_listen_bucket; + xi->in6p_cksum = inp->in6p_cksum; + xi->in6p_hops = inp->in6p_hops; + xi->inp_ip_tos = inp->inp_ip_tos; + xi->inp_vflag = inp->inp_vflag; + xi->inp_ip_ttl = inp->inp_ip_ttl; + xi->inp_ip_p = inp->inp_ip_p; + xi->inp_ip_minttl = inp->inp_ip_minttl; +} + #ifdef DDB static void db_print_indent(int indent) Modified: head/sys/netinet/in_pcb.h ============================================================================== --- head/sys/netinet/in_pcb.h Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/in_pcb.h Tue Mar 21 06:39:49 2017 (r315662) @@ -53,7 +53,6 @@ #define in6pcb inpcb /* for KAME src sync over BSD*'s */ #define in6p_sp inp_sp /* for KAME src sync over BSD*'s */ -struct inpcbpolicy; /* * struct inpcb is the common protocol control block structure used in most @@ -65,7 +64,7 @@ struct inpcbpolicy; */ LIST_HEAD(inpcbhead, inpcb); LIST_HEAD(inpcbporthead, inpcbport); -typedef u_quad_t inp_gen_t; +typedef uint64_t inp_gen_t; /* * PCB with AF_INET6 null bind'ed laddr can receive AF_INET input packet. @@ -130,9 +129,8 @@ struct in_conninfo { #define inc6_laddr inc_ie.ie6_laddr #define inc6_zoneid inc_ie.ie6_zoneid -struct icmp6_filter; - -/*- +#if defined(_KERNEL) || defined(_WANT_INPCB) +/* * struct inpcb captures the network layer state for TCP, UDP, and raw IPv4 and * IPv6 sockets. In the case of TCP and UDP, further per-connection state is * hung off of inp_ppcb most of the time. Almost all fields of struct inpcb @@ -181,6 +179,8 @@ struct icmp6_filter; * read-lock usage during modification, this model can be applied to other * protocols (especially SCTP). */ +struct icmp6_filter; +struct inpcbpolicy; struct m_snd_tag; struct inpcb { LIST_ENTRY(inpcb) inp_hash; /* (h/i) hash list */ @@ -204,10 +204,8 @@ struct inpcb { uint32_t inp_flowid; /* (x) flow id / queue id */ u_int inp_refcount; /* (i) refcount */ struct m_snd_tag *inp_snd_tag; /* (i) send tag for outgoing mbufs */ - void *inp_pspare[4]; /* (x) 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) user cookie / general use */ /* Local and foreign ports, local and foreign addr. */ struct in_conninfo inp_inc; /* (i) list for PCB's local port */ @@ -218,23 +216,23 @@ struct inpcb { /* Protocol-dependent part; options. */ struct { - u_char inp4_ip_tos; /* (i) type of service proto */ - struct mbuf *inp4_options; /* (i) IP options */ - struct ip_moptions *inp4_moptions; /* (i) IP mcast options */ - } inp_depend4; + u_char inp_ip_tos; /* (i) type of service proto */ + struct mbuf *inp_options; /* (i) IP options */ + struct ip_moptions *inp_moptions; /* (i) mcast options */ + }; struct { /* (i) IP options */ - struct mbuf *inp6_options; + struct mbuf *in6p_options; /* (i) IP6 options for outgoing packets */ - struct ip6_pktopts *inp6_outputopts; + struct ip6_pktopts *in6p_outputopts; /* (i) IP multicast options */ - struct ip6_moptions *inp6_moptions; + struct ip6_moptions *in6p_moptions; /* (i) ICMPv6 code type filter */ - struct icmp6_filter *inp6_icmp6filt; + struct icmp6_filter *in6p_icmp6filt; /* (i) IPV6_CHECKSUM setsockopt */ - int inp6_cksum; - short inp6_hops; - } inp_depend6; + int in6p_cksum; + short in6p_hops; + }; LIST_ENTRY(inpcb) inp_portlist; /* (i/h) */ struct inpcbport *inp_phd; /* (i/h) head of this list */ #define inp_zero_size offsetof(struct inpcb, inp_gencnt) @@ -249,24 +247,17 @@ struct inpcb { #define inp_route inp_rtu.inpu_route #define inp_route6 inp_rtu.inpu_route6 }; +#endif /* _KERNEL */ + #define inp_fport inp_inc.inc_fport #define inp_lport inp_inc.inc_lport #define inp_faddr inp_inc.inc_faddr #define inp_laddr inp_inc.inc_laddr -#define inp_ip_tos inp_depend4.inp4_ip_tos -#define inp_options inp_depend4.inp4_options -#define inp_moptions inp_depend4.inp4_moptions #define in6p_faddr inp_inc.inc6_faddr #define in6p_laddr inp_inc.inc6_laddr #define in6p_zoneid inp_inc.inc6_zoneid -#define in6p_hops inp_depend6.inp6_hops /* default hop limit */ #define in6p_flowinfo inp_flow -#define in6p_options inp_depend6.inp6_options -#define in6p_outputopts inp_depend6.inp6_outputopts -#define in6p_moptions inp_depend6.inp6_moptions -#define in6p_icmp6filt inp_depend6.inp6_icmp6filt -#define in6p_cksum inp_depend6.inp6_cksum #define inp_vnet inp_pcbinfo->ipi_vnet @@ -280,21 +271,53 @@ struct inpcb { /* * Interface exported to userland by various protocols which use inpcbs. Hack * alert -- only define if struct xsocket is in scope. + * Fields prefixed with "xi_" are unique to this structure, and the rest + * match fields in the struct inpcb, to ease coding and porting. + * + * Legend: + * (s) - used by userland utilities in src + * (p) - used by utilities in ports + * (3) - is known to be used by third party software not in ports + * (n) - no known usage */ #ifdef _SYS_SOCKETVAR_H_ -struct xinpcb { - size_t xi_len; /* length of this structure */ - struct inpcb xi_inp; - struct xsocket xi_socket; - u_quad_t xi_alignment_hack; -}; - -struct xinpgen { - size_t xig_len; /* length of this structure */ - u_int xig_count; /* number of PCBs at this time */ - inp_gen_t xig_gen; /* generation count at this time */ - so_gen_t xig_sogen; /* socket generation count at this time */ +struct xinpcb { + size_t xi_len; /* length of this structure */ + struct xsocket xi_socket; /* (s,p) */ + struct in_conninfo inp_inc; /* (s,p) */ + uint64_t inp_gencnt; /* (s,p) */ + union { + void *inp_ppcb; /* (s) netstat(1) */ + int64_t ph_ppcb; + }; + int64_t inp_spare64[4]; + uint32_t inp_flow; /* (s) */ + uint32_t inp_flowid; /* (s) */ + uint32_t inp_flowtype; /* (s) */ + int32_t inp_flags; /* (s,p) */ + int32_t inp_flags2; /* (s) */ + int32_t inp_rss_listen_bucket; /* (n) */ + int32_t in6p_cksum; /* (n) */ + int32_t inp_spare32[4]; + uint16_t in6p_hops; /* (n) */ + uint8_t inp_ip_tos; /* (n) */ + int8_t pad8; + uint8_t inp_vflag; /* (s,p) */ + uint8_t inp_ip_ttl; /* (n) */ + uint8_t inp_ip_p; /* (n) */ + uint8_t inp_ip_minttl; /* (n) */ + int8_t inp_spare8[4]; +} __aligned(8); + +struct xinpgen { + size_t xig_len; /* length of this structure */ + u_int xig_count; /* number of PCBs at this time */ + inp_gen_t xig_gen; /* generation count at this time */ + so_gen_t xig_sogen; /* socket generation count this time */ }; +#ifdef _KERNEL +void in_pcbtoxinpcb(const struct inpcb *, struct xinpcb *); +#endif #endif /* _SYS_SOCKETVAR_H_ */ struct inpcbport { Modified: head/sys/netinet/ip_divert.c ============================================================================== --- head/sys/netinet/ip_divert.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/ip_divert.c Tue Mar 21 06:39:49 2017 (r315662) @@ -691,12 +691,8 @@ div_pcblist(SYSCTL_HANDLER_ARGS) INP_RLOCK(inp); if (inp->inp_gencnt <= gencnt) { struct xinpcb xi; - bzero(&xi, sizeof(xi)); - xi.xi_len = sizeof xi; - /* XXX should avoid extra copy */ - bcopy(inp, &xi.xi_inp, sizeof *inp); - if (inp->inp_socket) - sotoxsocket(inp->inp_socket, &xi.xi_socket); + + in_pcbtoxinpcb(inp, &xi); INP_RUNLOCK(inp); error = SYSCTL_OUT(req, &xi, sizeof xi); } else Modified: head/sys/netinet/raw_ip.c ============================================================================== --- head/sys/netinet/raw_ip.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/raw_ip.c Tue Mar 21 06:39:49 2017 (r315662) @@ -1077,12 +1077,7 @@ rip_pcblist(SYSCTL_HANDLER_ARGS) if (inp->inp_gencnt <= gencnt) { struct xinpcb xi; - bzero(&xi, sizeof(xi)); - xi.xi_len = sizeof xi; - /* XXX should avoid extra copy */ - bcopy(inp, &xi.xi_inp, sizeof *inp); - if (inp->inp_socket) - sotoxsocket(inp->inp_socket, &xi.xi_socket); + in_pcbtoxinpcb(inp, &xi); INP_RUNLOCK(inp); error = SYSCTL_OUT(req, &xi, sizeof xi); } else Modified: head/sys/netinet/tcp_subr.c ============================================================================== --- head/sys/netinet/tcp_subr.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/tcp_subr.c Tue Mar 21 06:39:49 2017 (r315662) @@ -1773,30 +1773,8 @@ tcp_pcblist(SYSCTL_HANDLER_ARGS) INP_RLOCK(inp); if (inp->inp_gencnt <= gencnt) { struct xtcpcb xt; - void *inp_ppcb; - bzero(&xt, sizeof(xt)); - xt.xt_len = sizeof xt; - /* XXX should avoid extra copy */ - bcopy(inp, &xt.xt_inp, sizeof *inp); - inp_ppcb = inp->inp_ppcb; - if (inp_ppcb == NULL) - bzero((char *) &xt.xt_tp, sizeof xt.xt_tp); - else if (inp->inp_flags & INP_TIMEWAIT) { - bzero((char *) &xt.xt_tp, sizeof xt.xt_tp); - xt.xt_tp.t_state = TCPS_TIME_WAIT; - } else { - bcopy(inp_ppcb, &xt.xt_tp, sizeof xt.xt_tp); - if (xt.xt_tp.t_timers) - tcp_timer_to_xtimer(&xt.xt_tp, xt.xt_tp.t_timers, &xt.xt_timer); - } - if (inp->inp_socket != NULL) - sotoxsocket(inp->inp_socket, &xt.xt_socket); - else { - bzero(&xt.xt_socket, sizeof xt.xt_socket); - xt.xt_socket.xso_protocol = IPPROTO_TCP; - } - xt.xt_inp.inp_gencnt = inp->inp_gencnt; + tcp_inptoxtp(inp, &xt); INP_RUNLOCK(inp); error = SYSCTL_OUT(req, &xt, sizeof xt); } else @@ -2765,3 +2743,53 @@ tcp_state_change(struct tcpcb *tp, int n tp->t_state = newstate; TCP_PROBE6(state__change, NULL, tp, NULL, tp, NULL, pstate); } + +/* + * Create an external-format (``xtcpcb'') structure using the information in + * the kernel-format tcpcb structure pointed to by tp. This is done to + * reduce the spew of irrelevant information over this interface, to isolate + * user code from changes in the kernel structure, and potentially to provide + * information-hiding if we decide that some of this information should be + * hidden from users. + */ +void +tcp_inptoxtp(const struct inpcb *inp, struct xtcpcb *xt) +{ + struct tcpcb *tp = intotcpcb(inp); + sbintime_t now; + + if (inp->inp_flags & INP_TIMEWAIT) { + bzero(xt, sizeof(struct xtcpcb)); + xt->t_state = TCPS_TIME_WAIT; + } else { + xt->t_state = tp->t_state; + xt->t_flags = tp->t_flags; + xt->t_sndzerowin = tp->t_sndzerowin; + xt->t_sndrexmitpack = tp->t_sndrexmitpack; + xt->t_rcvoopack = tp->t_rcvoopack; + + now = getsbinuptime(); +#define COPYTIMER(ttt) do { \ + if (callout_active(&tp->t_timers->ttt)) \ + xt->ttt = (tp->t_timers->ttt.c_time - now) / \ + SBT_1MS; \ + else \ + xt->ttt = 0; \ +} while (0) + COPYTIMER(tt_delack); + COPYTIMER(tt_rexmt); + COPYTIMER(tt_persist); + COPYTIMER(tt_keep); + COPYTIMER(tt_2msl); +#undef COPYTIMER + xt->t_rcvtime = 1000 * (ticks - tp->t_rcvtime) / hz; + + bcopy(tp->t_fb->tfb_tcp_block_name, xt->xt_stack, + TCP_FUNCTION_NAME_LEN_MAX); + } + + xt->xt_len = sizeof(struct xtcpcb); + in_pcbtoxinpcb(inp, &xt->xt_inp); + if (inp->inp_socket == NULL) + xt->xt_inp.xi_socket.xso_protocol = IPPROTO_TCP; +} Modified: head/sys/netinet/tcp_syncache.c ============================================================================== --- head/sys/netinet/tcp_syncache.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/tcp_syncache.c Tue Mar 21 06:39:49 2017 (r315662) @@ -2217,13 +2217,13 @@ syncache_pcblist(struct sysctl_req *req, xt.xt_inp.inp_vflag = INP_IPV6; else xt.xt_inp.inp_vflag = INP_IPV4; - bcopy(&sc->sc_inc, &xt.xt_inp.inp_inc, sizeof (struct in_conninfo)); - xt.xt_tp.t_inpcb = &xt.xt_inp; - xt.xt_tp.t_state = TCPS_SYN_RECEIVED; - xt.xt_socket.xso_protocol = IPPROTO_TCP; - xt.xt_socket.xso_len = sizeof (struct xsocket); - xt.xt_socket.so_type = SOCK_STREAM; - xt.xt_socket.so_state = SS_ISCONNECTING; + bcopy(&sc->sc_inc, &xt.xt_inp.inp_inc, + sizeof (struct in_conninfo)); + xt.t_state = TCPS_SYN_RECEIVED; + xt.xt_inp.xi_socket.xso_protocol = IPPROTO_TCP; + xt.xt_inp.xi_socket.xso_len = sizeof (struct xsocket); + xt.xt_inp.xi_socket.so_type = SOCK_STREAM; + xt.xt_inp.xi_socket.so_state = SS_ISCONNECTING; error = SYSCTL_OUT(req, &xt, sizeof xt); if (error) { SCH_UNLOCK(sch); Modified: head/sys/netinet/tcp_timer.c ============================================================================== --- head/sys/netinet/tcp_timer.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/tcp_timer.c Tue Mar 21 06:39:49 2017 (r315662) @@ -1006,28 +1006,3 @@ tcp_timer_stop(struct tcpcb *tp, uint32_ tp->t_timers->tt_draincnt++; } } - -#define ticks_to_msecs(t) (1000*(t) / hz) - -void -tcp_timer_to_xtimer(struct tcpcb *tp, struct tcp_timer *timer, - struct xtcp_timer *xtimer) -{ - sbintime_t now; - - bzero(xtimer, sizeof(*xtimer)); - if (timer == NULL) - return; - now = getsbinuptime(); - if (callout_active(&timer->tt_delack)) - xtimer->tt_delack = (timer->tt_delack.c_time - now) / SBT_1MS; - if (callout_active(&timer->tt_rexmt)) - xtimer->tt_rexmt = (timer->tt_rexmt.c_time - now) / SBT_1MS; - if (callout_active(&timer->tt_persist)) - xtimer->tt_persist = (timer->tt_persist.c_time - now) / SBT_1MS; - if (callout_active(&timer->tt_keep)) - xtimer->tt_keep = (timer->tt_keep.c_time - now) / SBT_1MS; - if (callout_active(&timer->tt_2msl)) - xtimer->tt_2msl = (timer->tt_2msl.c_time - now) / SBT_1MS; - xtimer->t_rcvtime = ticks_to_msecs(ticks - tp->t_rcvtime); -} Modified: head/sys/netinet/tcp_timer.h ============================================================================== --- head/sys/netinet/tcp_timer.h Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/tcp_timer.h Tue Mar 21 06:39:49 2017 (r315662) @@ -210,8 +210,6 @@ void tcp_timer_keep(void *xtp); void tcp_timer_persist(void *xtp); void tcp_timer_rexmt(void *xtp); void tcp_timer_delack(void *xtp); -void tcp_timer_to_xtimer(struct tcpcb *tp, struct tcp_timer *timer, - struct xtcp_timer *xtimer); #endif /* _KERNEL */ Modified: head/sys/netinet/tcp_var.h ============================================================================== --- head/sys/netinet/tcp_var.h Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/tcp_var.h Tue Mar 21 06:39:49 2017 (r315662) @@ -39,15 +39,9 @@ #ifdef _KERNEL #include #include +#endif -/* - * Kernel variables for tcp. - */ -VNET_DECLARE(int, tcp_do_rfc1323); -#define V_tcp_do_rfc1323 VNET(tcp_do_rfc1323) - -#endif /* _KERNEL */ - +#if defined(_KERNEL) || defined(_WANT_TCPCB) /* TCP segment queue entry */ struct tseg_qent { LIST_ENTRY(tseg_qent) tqe_q; @@ -83,90 +77,12 @@ struct sackhint { uint64_t _pad[1]; /* TBD */ }; -struct tcptemp { - u_char tt_ipgen[40]; /* the size must be of max ip header, now IPv6 */ - struct tcphdr tt_t; -}; - -#define tcp6cb tcpcb /* for KAME src sync over BSD*'s */ - -/* - * TODO: We yet need to brave plowing in - * to tcp_input() and the pru_usrreq() block. - * Right now these go to the old standards which - * are somewhat ok, but in the long term may - * need to be changed. If we do tackle tcp_input() - * then we need to get rid of the tcp_do_segment() - * function below. - */ -/* Flags for tcp functions */ -#define TCP_FUNC_BEING_REMOVED 0x01 /* Can no longer be referenced */ -struct tcpcb; -struct inpcb; -struct sockopt; -struct socket; - -/* - * If defining the optional tcp_timers, in the - * tfb_tcp_timer_stop call you must use the - * callout_async_drain() function with the - * tcp_timer_discard callback. You should check - * the return of callout_async_drain() and if 0 - * increment tt_draincnt. Since the timer sub-system - * does not know your callbacks you must provide a - * stop_all function that loops through and calls - * tcp_timer_stop() with each of your defined timers. - * Adding a tfb_tcp_handoff_ok function allows the socket - * option to change stacks to query you even if the - * connection is in a later stage. You return 0 to - * say you can take over and run your stack, you return - * non-zero (an error number) to say no you can't. - * If the function is undefined you can only change - * in the early states (before connect or listen). - * tfb_tcp_fb_fini is changed to add a flag to tell - * the old stack if the tcb is being destroyed or - * not. A one in the flag means the TCB is being - * destroyed, a zero indicates its transitioning to - * another stack (via socket option). - */ -struct tcp_function_block { - char tfb_tcp_block_name[TCP_FUNCTION_NAME_LEN_MAX]; - int (*tfb_tcp_output)(struct tcpcb *); - void (*tfb_tcp_do_segment)(struct mbuf *, struct tcphdr *, - struct socket *, struct tcpcb *, - int, int, uint8_t, - int); - int (*tfb_tcp_ctloutput)(struct socket *so, struct sockopt *sopt, - struct inpcb *inp, struct tcpcb *tp); - /* Optional memory allocation/free routine */ - void (*tfb_tcp_fb_init)(struct tcpcb *); - void (*tfb_tcp_fb_fini)(struct tcpcb *, int); - /* Optional timers, must define all if you define one */ - int (*tfb_tcp_timer_stop_all)(struct tcpcb *); - void (*tfb_tcp_timer_activate)(struct tcpcb *, - uint32_t, u_int); - int (*tfb_tcp_timer_active)(struct tcpcb *, uint32_t); - void (*tfb_tcp_timer_stop)(struct tcpcb *, uint32_t); - void (*tfb_tcp_rexmit_tmr)(struct tcpcb *); - int (*tfb_tcp_handoff_ok)(struct tcpcb *); - volatile uint32_t tfb_refcnt; - uint32_t tfb_flags; -}; - -struct tcp_function { - TAILQ_ENTRY(tcp_function) tf_next; - struct tcp_function_block *tf_fb; -}; - -TAILQ_HEAD(tcp_funchead, tcp_function); - /* * Tcp control block, one per tcp; fields: * Organized for 16 byte cacheline efficiency. */ struct tcpcb { struct tsegqe_head t_segq; /* segment reassembly queue */ - void *t_pspare[2]; /* new reassembly queue */ int t_segqlen; /* segment reassembly queue length */ int t_dupacks; /* consecutive dup acks recd */ @@ -197,12 +113,10 @@ struct tcpcb { uint32_t snd_wnd; /* send window */ uint32_t snd_cwnd; /* congestion-controlled window */ - u_long snd_spare1; /* unused */ uint32_t snd_ssthresh; /* snd_cwnd size threshold for * for slow start exponential to * linear switch */ - u_long snd_spare2; /* unused */ tcp_seq snd_recover; /* for use in NewReno Fast Recovery */ u_int t_rcvtime; /* inactivity time */ @@ -210,9 +124,6 @@ struct tcpcb { u_int t_rtttime; /* RTT measurement start time */ tcp_seq t_rtseq; /* sequence number being timed */ - u_int t_bw_spare1; /* unused */ - tcp_seq t_bw_spare2; /* unused */ - int t_rxtcur; /* current retransmit value (ticks) */ u_int t_maxseg; /* maximum segment size */ u_int t_pmtud_saved_maxseg; /* pre-blackhole MSS */ @@ -276,32 +187,97 @@ struct tcpcb { u_int t_tsomaxsegcount; /* TSO maximum segment count */ u_int t_tsomaxsegsize; /* TSO maximum segment size in bytes */ u_int t_flags2; /* More tcpcb flags storage */ -#if defined(_KERNEL) && defined(TCP_RFC7413) - uint32_t t_ispare[6]; /* 5 UTO, 1 TBD */ - uint64_t t_tfo_cookie; /* TCP Fast Open cookie */ -#else - uint32_t t_ispare[8]; /* 5 UTO, 3 TBD */ -#endif struct tcp_function_block *t_fb;/* TCP function call block */ void *t_fb_ptr; /* Pointer to t_fb specific data */ -#if defined(_KERNEL) && defined(TCP_RFC7413) +#ifdef TCP_RFC7413 + uint64_t t_tfo_cookie; /* TCP Fast Open cookie */ unsigned int *t_tfo_pending; /* TCP Fast Open pending counter */ - void *t_pspare2[1]; /* 1 TCP_SIGNATURE */ -#else - void *t_pspare2[2]; /* 1 TCP_SIGNATURE, 1 TBD */ #endif -#if defined(_KERNEL) && defined(TCPPCAP) +#ifdef TCPPCAP struct mbufq t_inpkts; /* List of saved input packets. */ struct mbufq t_outpkts; /* List of saved output packets. */ -#ifdef _LP64 - uint64_t _pad[0]; /* all used! */ -#else - uint64_t _pad[2]; /* 2 are available */ -#endif /* _LP64 */ -#else - uint64_t _pad[6]; -#endif /* defined(_KERNEL) && defined(TCPPCAP) */ +#endif }; +#endif /* _KERNEL || _WANT_TCPCB */ + +#ifdef _KERNEL +/* + * Kernel variables for tcp. + */ +VNET_DECLARE(int, tcp_do_rfc1323); +#define V_tcp_do_rfc1323 VNET(tcp_do_rfc1323) + +struct tcptemp { + u_char tt_ipgen[40]; /* the size must be of max ip header, now IPv6 */ + struct tcphdr tt_t; +}; + +/* + * TODO: We yet need to brave plowing in + * to tcp_input() and the pru_usrreq() block. + * Right now these go to the old standards which + * are somewhat ok, but in the long term may + * need to be changed. If we do tackle tcp_input() + * then we need to get rid of the tcp_do_segment() + * function below. + */ +/* Flags for tcp functions */ +#define TCP_FUNC_BEING_REMOVED 0x01 /* Can no longer be referenced */ + +/* + * If defining the optional tcp_timers, in the + * tfb_tcp_timer_stop call you must use the + * callout_async_drain() function with the + * tcp_timer_discard callback. You should check + * the return of callout_async_drain() and if 0 + * increment tt_draincnt. Since the timer sub-system + * does not know your callbacks you must provide a + * stop_all function that loops through and calls + * tcp_timer_stop() with each of your defined timers. + * Adding a tfb_tcp_handoff_ok function allows the socket + * option to change stacks to query you even if the + * connection is in a later stage. You return 0 to + * say you can take over and run your stack, you return + * non-zero (an error number) to say no you can't. + * If the function is undefined you can only change + * in the early states (before connect or listen). + * tfb_tcp_fb_fini is changed to add a flag to tell + * the old stack if the tcb is being destroyed or + * not. A one in the flag means the TCB is being + * destroyed, a zero indicates its transitioning to + * another stack (via socket option). + */ +struct tcp_function_block { + char tfb_tcp_block_name[TCP_FUNCTION_NAME_LEN_MAX]; + int (*tfb_tcp_output)(struct tcpcb *); + void (*tfb_tcp_do_segment)(struct mbuf *, struct tcphdr *, + struct socket *, struct tcpcb *, + int, int, uint8_t, + int); + int (*tfb_tcp_ctloutput)(struct socket *so, struct sockopt *sopt, + struct inpcb *inp, struct tcpcb *tp); + /* Optional memory allocation/free routine */ + void (*tfb_tcp_fb_init)(struct tcpcb *); + void (*tfb_tcp_fb_fini)(struct tcpcb *, int); + /* Optional timers, must define all if you define one */ + int (*tfb_tcp_timer_stop_all)(struct tcpcb *); + void (*tfb_tcp_timer_activate)(struct tcpcb *, + uint32_t, u_int); + int (*tfb_tcp_timer_active)(struct tcpcb *, uint32_t); + void (*tfb_tcp_timer_stop)(struct tcpcb *, uint32_t); + void (*tfb_tcp_rexmit_tmr)(struct tcpcb *); + int (*tfb_tcp_handoff_ok)(struct tcpcb *); + volatile uint32_t tfb_refcnt; + uint32_t tfb_flags; +}; + +struct tcp_function { + TAILQ_ENTRY(tcp_function) tf_next; + struct tcp_function_block *tf_fb; +}; + +TAILQ_HEAD(tcp_funchead, tcp_function); +#endif /* _KERNEL */ /* * Flags and utility macros for the t_flags field. @@ -656,26 +632,41 @@ struct tcp_hhook_data { /* * TCB structure exported to user-land via sysctl(3). + * + * Fields prefixed with "xt_" are unique to the export structure, and fields + * with "t_" or other prefixes match corresponding fields of 'struct tcpcb'. + * + * Legend: + * (s) - used by userland utilities in src + * (p) - used by utilities in ports + * (3) - is known to be used by third party software not in ports + * (n) - no known usage + * * Evil hack: declare only if in_pcb.h and sys/socketvar.h have been * included. Not all of our clients do. */ #if defined(_NETINET_IN_PCB_H_) && defined(_SYS_SOCKETVAR_H_) -struct xtcp_timer { - int tt_rexmt; /* retransmit timer */ - int tt_persist; /* retransmit persistence */ - int tt_keep; /* keepalive */ - int tt_2msl; /* 2*msl TIME_WAIT timer */ - int tt_delack; /* delayed ACK timer */ - int t_rcvtime; /* Time since last packet received */ -}; -struct xtcpcb { - size_t xt_len; - struct inpcb xt_inp; - struct tcpcb xt_tp; - struct xsocket xt_socket; - struct xtcp_timer xt_timer; - u_quad_t xt_alignment_hack; -}; +struct xtcpcb { + size_t xt_len; /* length of this structure */ + struct xinpcb xt_inp; + char xt_stack[TCP_FUNCTION_NAME_LEN_MAX]; /* (n) */ + int64_t spare64[8]; + int32_t t_state; /* (s,p) */ + uint32_t t_flags; /* (s,p) */ + int32_t t_sndzerowin; /* (s) */ + int32_t t_sndrexmitpack; /* (s) */ + int32_t t_rcvoopack; /* (s) */ + int32_t t_rcvtime; /* (s) */ + int32_t tt_rexmt; /* (s) */ + int32_t tt_persist; /* (s) */ + int32_t tt_keep; /* (s) */ + int32_t tt_2msl; /* (s) */ + int32_t tt_delack; /* (s) */ + int32_t spare32[32]; +} __aligned(8); +#ifdef _KERNEL +void tcp_inptoxtp(const struct inpcb *, struct xtcpcb *); +#endif #endif /* Modified: head/sys/netinet/udp_usrreq.c ============================================================================== --- head/sys/netinet/udp_usrreq.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/netinet/udp_usrreq.c Tue Mar 21 06:39:49 2017 (r315662) @@ -905,13 +905,7 @@ udp_pcblist(SYSCTL_HANDLER_ARGS) if (inp->inp_gencnt <= gencnt) { struct xinpcb xi; - bzero(&xi, sizeof(xi)); - xi.xi_len = sizeof xi; - /* XXX should avoid extra copy */ - bcopy(inp, &xi.xi_inp, sizeof *inp); - if (inp->inp_socket) - sotoxsocket(inp->inp_socket, &xi.xi_socket); - xi.xi_inp.inp_gencnt = inp->inp_gencnt; + in_pcbtoxinpcb(inp, &xi); INP_RUNLOCK(inp); error = SYSCTL_OUT(req, &xi, sizeof xi); } else Modified: head/sys/sys/param.h ============================================================================== --- head/sys/sys/param.h Tue Mar 21 05:15:10 2017 (r315661) +++ head/sys/sys/param.h Tue Mar 21 06:39:49 2017 (r315662) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1200025 /* Master, propagated to newvers */ +#define __FreeBSD_version 1200026 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, Modified: head/usr.bin/netstat/inet.c ============================================================================== --- head/usr.bin/netstat/inet.c Tue Mar 21 05:15:10 2017 (r315661) +++ head/usr.bin/netstat/inet.c Tue Mar 21 06:39:49 2017 (r315662) @@ -91,7 +91,7 @@ static int udp_done, tcp_done, sdp_done; #endif /* INET6 */ static int -pcblist_sysctl(int proto, const char *name, char **bufp, int istcp __unused) +pcblist_sysctl(int proto, const char *name, char **bufp) { const char *mibvar; char *buf; @@ -181,120 +181,6 @@ sotoxsocket(struct socket *so, struct xs return (0); } -static int -pcblist_kvm(u_long off, char **bufp, int istcp) -{ - struct inpcbinfo pcbinfo; - struct inpcbhead listhead; - struct inpcb *inp; - struct xinpcb xi; - struct xinpgen xig; - struct xtcpcb xt; - struct socket so; - struct xsocket *xso; - char *buf, *p; - size_t len; - - if (off == 0) - return (0); - kread(off, &pcbinfo, sizeof(pcbinfo)); - if (istcp) - len = 2 * sizeof(xig) + - (pcbinfo.ipi_count + pcbinfo.ipi_count / 8) * - sizeof(struct xtcpcb); - else - len = 2 * sizeof(xig) + - (pcbinfo.ipi_count + pcbinfo.ipi_count / 8) * - sizeof(struct xinpcb); - if ((buf = malloc(len)) == NULL) { - xo_warnx("malloc %lu bytes", (u_long)len); - return (0); - } - p = buf; - -#define COPYOUT(obj, size) do { \ - if (len < (size)) { \ - xo_warnx("buffer size exceeded"); \ - goto fail; \ - } \ - bcopy((obj), p, (size)); \ - len -= (size); \ - p += (size); \ -} while (0) - -#define KREAD(off, buf, len) do { \ - if (kread((uintptr_t)(off), (buf), (len)) != 0) \ - goto fail; \ -} while (0) - - /* Write out header. */ - xig.xig_len = sizeof xig; - xig.xig_count = pcbinfo.ipi_count; - xig.xig_gen = pcbinfo.ipi_gencnt; - xig.xig_sogen = 0; - COPYOUT(&xig, sizeof xig); - - /* Walk the PCB list. */ - xt.xt_len = sizeof xt; - xi.xi_len = sizeof xi; - if (istcp) - xso = &xt.xt_socket; - else - xso = &xi.xi_socket; - KREAD(pcbinfo.ipi_listhead, &listhead, sizeof(listhead)); - LIST_FOREACH(inp, &listhead, inp_list) { - if (istcp) { - KREAD(inp, &xt.xt_inp, sizeof(*inp)); - inp = &xt.xt_inp; - } else { - KREAD(inp, &xi.xi_inp, sizeof(*inp)); - inp = &xi.xi_inp; - } - - if (inp->inp_gencnt > pcbinfo.ipi_gencnt) - continue; - - if (istcp) { - if (inp->inp_ppcb == NULL) - bzero(&xt.xt_tp, sizeof xt.xt_tp); - else if (inp->inp_flags & INP_TIMEWAIT) { - bzero(&xt.xt_tp, sizeof xt.xt_tp); - xt.xt_tp.t_state = TCPS_TIME_WAIT; - } else - KREAD(inp->inp_ppcb, &xt.xt_tp, - sizeof xt.xt_tp); - } - if (inp->inp_socket) { - KREAD(inp->inp_socket, &so, sizeof(so)); - if (sotoxsocket(&so, xso) != 0) - goto fail; - } else { - bzero(xso, sizeof(*xso)); - if (istcp) - xso->xso_protocol = IPPROTO_TCP; - } - if (istcp) - COPYOUT(&xt, sizeof xt); - else - COPYOUT(&xi, sizeof xi); - } - - /* Reread the pcbinfo and write out the footer. */ - kread(off, &pcbinfo, sizeof(pcbinfo)); - xig.xig_count = pcbinfo.ipi_count; - xig.xig_gen = pcbinfo.ipi_gencnt; - COPYOUT(&xig, sizeof xig); - - *bufp = buf; - return (1); - -fail: - free(buf); - return (0); -#undef COPYOUT -#undef KREAD -} - /* * Print a summary of connections related to an Internet * protocol. For TCP, also give state of connection. @@ -304,15 +190,14 @@ fail: void protopr(u_long off, const char *name, int af1, int proto) { - int istcp; static int first = 1; + int istcp; char *buf; const char *vchar; - struct tcpcb *tp = NULL; - struct inpcb *inp; + struct xtcpcb *tp; + struct xinpcb *inp; struct xinpgen *xig, *oxig; struct xsocket *so; - struct xtcp_timer *timer; istcp = 0; switch (proto) { @@ -341,28 +226,21 @@ protopr(u_long off, const char *name, in #endif break; } - if (live) { - if (!pcblist_sysctl(proto, name, &buf, istcp)) - return; - } else { - if (!pcblist_kvm(off, &buf, istcp)) - return; - } + + if (!pcblist_sysctl(proto, name, &buf)) + return; oxig = xig = (struct xinpgen *)buf; for (xig = (struct xinpgen *)((char *)xig + xig->xig_len); xig->xig_len > sizeof(struct xinpgen); xig = (struct xinpgen *)((char *)xig + xig->xig_len)) { if (istcp) { - timer = &((struct xtcpcb *)xig)->xt_timer; - tp = &((struct xtcpcb *)xig)->xt_tp; - inp = &((struct xtcpcb *)xig)->xt_inp; - so = &((struct xtcpcb *)xig)->xt_socket; + tp = (struct xtcpcb *)xig; + inp = &tp->xt_inp; } else { - inp = &((struct xinpcb *)xig)->xi_inp; - so = &((struct xinpcb *)xig)->xi_socket; - timer = NULL; + inp = (struct xinpcb *)xig; } + so = &inp->xi_socket; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Tue Mar 21 06:41:55 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E4599D166D6; Tue, 21 Mar 2017 06:41:55 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (glebi.us [96.95.210.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id CF7801DDF; Tue, 21 Mar 2017 06:41:55 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (localhost [127.0.0.1]) by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id v2L6fshv058364 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 20 Mar 2017 23:41:54 -0700 (PDT) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebi.us (8.15.2/8.15.2/Submit) id v2L6fsRu058363; Mon, 20 Mar 2017 23:41:54 -0700 (PDT) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebi.us: glebius set sender to glebius@FreeBSD.org using -f Date: Mon, 20 Mar 2017 23:41:54 -0700 From: Gleb Smirnoff To: svn-src-all@freebsd.org, svn-src-head@freebsd.org, freebsd-ports@FreeBSD.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321064154.GL23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201703210639.v2L6dnRf055522@repo.freebsd.org> User-Agent: Mutt/1.7.2 (2016-11-26) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 06:41:56 -0000 Hi! This change is known to break a ton of ports. More than 100 if counting depends. I'm sorry for that and I already started to fix them. Please send all new breakages to me. On Tue, Mar 21, 2017 at 06:39:49AM +0000, Gleb Smirnoff wrote: T> Author: glebius T> Date: Tue Mar 21 06:39:49 2017 T> New Revision: 315662 T> URL: https://svnweb.freebsd.org/changeset/base/315662 T> T> Log: T> Hide struct inpcb, struct tcpcb from the userland. T> T> This is a painful change, but it is needed. On the one hand, we avoid T> modifying them, and this slows down some ideas, on the other hand we still T> eventually modify them and tools like netstat(1) never work on next version of T> FreeBSD. We maintain a ton of spares in them, and we already got some ifdef T> hell at the end of tcpcb. T> T> Details: T> - Hide struct inpcb, struct tcpcb under _KERNEL || _WANT_FOO. T> - Make struct xinpcb, struct xtcpcb pure API structures, not including T> kernel structures inpcb and tcpcb inside. Export into these structures T> the fields from inpcb and tcpcb that are known to be used, and put there T> a ton of spare space. T> - Make kernel and userland utilities compilable after these changes. T> - Bump __FreeBSD_version. T> T> Reviewed by: rrs, gnn T> Differential Revision: D10018 T> T> Modified: T> head/contrib/bsnmp/snmp_mibII/mibII_tcp.c T> head/contrib/bsnmp/snmp_mibII/mibII_udp.c T> head/contrib/ipfilter/ipsend/sock.c T> head/lib/libprocstat/libprocstat.c T> head/sys/netinet/in_pcb.c T> head/sys/netinet/in_pcb.h T> head/sys/netinet/ip_divert.c T> head/sys/netinet/raw_ip.c T> head/sys/netinet/tcp_subr.c T> head/sys/netinet/tcp_syncache.c T> head/sys/netinet/tcp_timer.c T> head/sys/netinet/tcp_timer.h T> head/sys/netinet/tcp_var.h T> head/sys/netinet/udp_usrreq.c T> head/sys/sys/param.h T> head/usr.bin/netstat/inet.c T> head/usr.bin/sockstat/sockstat.c T> head/usr.bin/systat/extern.h T> head/usr.bin/systat/netcmds.c T> head/usr.bin/systat/netstat.c T> head/usr.sbin/tcpdrop/tcpdrop.c T> head/usr.sbin/trpt/trpt.c T> T> Modified: head/contrib/bsnmp/snmp_mibII/mibII_tcp.c T> ============================================================================== T> --- head/contrib/bsnmp/snmp_mibII/mibII_tcp.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/contrib/bsnmp/snmp_mibII/mibII_tcp.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -310,7 +310,7 @@ op_tcpconn(struct snmp_context *ctx __un T> switch (value->var.subs[sub - 1]) { T> T> case LEAF_tcpConnState: T> - switch (tcpoids[i].tp->xt_tp.t_state) { T> + switch (tcpoids[i].tp->t_state) { T> T> case TCPS_CLOSED: T> value->v.integer = 1; T> T> Modified: head/contrib/bsnmp/snmp_mibII/mibII_udp.c T> ============================================================================== T> --- head/contrib/bsnmp/snmp_mibII/mibII_udp.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/contrib/bsnmp/snmp_mibII/mibII_udp.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -105,8 +105,8 @@ fetch_udp(void) T> ptr->xig_len > sizeof(struct xinpgen); T> ptr = (struct xinpgen *)(void *)((char *)ptr + ptr->xig_len)) { T> inp = (struct xinpcb *)ptr; T> - if (inp->xi_inp.inp_gencnt > xinpgen->xig_gen || T> - (inp->xi_inp.inp_vflag & INP_IPV4) == 0) T> + if (inp->inp_gencnt > xinpgen->xig_gen || T> + (inp->inp_vflag & INP_IPV4) == 0) T> continue; T> T> udp_total++; T> @@ -128,17 +128,17 @@ fetch_udp(void) T> ptr->xig_len > sizeof(struct xinpgen); T> ptr = (struct xinpgen *)(void *)((char *)ptr + ptr->xig_len)) { T> inp = (struct xinpcb *)ptr; T> - if (inp->xi_inp.inp_gencnt > xinpgen->xig_gen || T> - (inp->xi_inp.inp_vflag & INP_IPV4) == 0) T> + if (inp->inp_gencnt > xinpgen->xig_gen || T> + (inp->inp_vflag & INP_IPV4) == 0) T> continue; T> oid->inp = inp; T> oid->index.len = 5; T> - inaddr = ntohl(inp->xi_inp.inp_laddr.s_addr); T> + inaddr = ntohl(inp->inp_laddr.s_addr); T> oid->index.subs[0] = (inaddr >> 24) & 0xff; T> oid->index.subs[1] = (inaddr >> 16) & 0xff; T> oid->index.subs[2] = (inaddr >> 8) & 0xff; T> oid->index.subs[3] = (inaddr >> 0) & 0xff; T> - oid->index.subs[4] = ntohs(inp->xi_inp.inp_lport); T> + oid->index.subs[4] = ntohs(inp->inp_lport); T> oid++; T> } T> T> T> Modified: head/contrib/ipfilter/ipsend/sock.c T> ============================================================================== T> --- head/contrib/ipfilter/ipsend/sock.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/contrib/ipfilter/ipsend/sock.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -78,8 +78,10 @@ typedef int boolean_t; T> # include T> #endif T> #include T> +#define _WANT_INPCB T> #include T> #include T> +#define _WANT_TCPCB T> #include T> #include T> #include T> T> Modified: head/lib/libprocstat/libprocstat.c T> ============================================================================== T> --- head/lib/libprocstat/libprocstat.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/lib/libprocstat/libprocstat.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -82,6 +82,7 @@ __FBSDID("$FreeBSD$"); T> #include T> #include T> #include T> +#define _WANT_INPCB T> #include T> T> #include T> T> Modified: head/sys/netinet/in_pcb.c T> ============================================================================== T> --- head/sys/netinet/in_pcb.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/in_pcb.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -2434,6 +2434,41 @@ so_sototcpcb(struct socket *so) T> return (sototcpcb(so)); T> } T> T> +/* T> + * Create an external-format (``xinpcb'') structure using the information in T> + * the kernel-format in_pcb structure pointed to by inp. This is done to T> + * reduce the spew of irrelevant information over this interface, to isolate T> + * user code from changes in the kernel structure, and potentially to provide T> + * information-hiding if we decide that some of this information should be T> + * hidden from users. T> + */ T> +void T> +in_pcbtoxinpcb(const struct inpcb *inp, struct xinpcb *xi) T> +{ T> + T> + xi->xi_len = sizeof(struct xinpcb); T> + if (inp->inp_socket) T> + sotoxsocket(inp->inp_socket, &xi->xi_socket); T> + else T> + bzero(&xi->xi_socket, sizeof(struct xsocket)); T> + bcopy(&inp->inp_inc, &xi->inp_inc, sizeof(struct in_conninfo)); T> + xi->inp_gencnt = inp->inp_gencnt; T> + xi->inp_ppcb = inp->inp_ppcb; T> + xi->inp_flow = inp->inp_flow; T> + xi->inp_flowid = inp->inp_flowid; T> + xi->inp_flowtype = inp->inp_flowtype; T> + xi->inp_flags = inp->inp_flags; T> + xi->inp_flags2 = inp->inp_flags2; T> + xi->inp_rss_listen_bucket = inp->inp_rss_listen_bucket; T> + xi->in6p_cksum = inp->in6p_cksum; T> + xi->in6p_hops = inp->in6p_hops; T> + xi->inp_ip_tos = inp->inp_ip_tos; T> + xi->inp_vflag = inp->inp_vflag; T> + xi->inp_ip_ttl = inp->inp_ip_ttl; T> + xi->inp_ip_p = inp->inp_ip_p; T> + xi->inp_ip_minttl = inp->inp_ip_minttl; T> +} T> + T> #ifdef DDB T> static void T> db_print_indent(int indent) T> T> Modified: head/sys/netinet/in_pcb.h T> ============================================================================== T> --- head/sys/netinet/in_pcb.h Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/in_pcb.h Tue Mar 21 06:39:49 2017 (r315662) T> @@ -53,7 +53,6 @@ T> T> #define in6pcb inpcb /* for KAME src sync over BSD*'s */ T> #define in6p_sp inp_sp /* for KAME src sync over BSD*'s */ T> -struct inpcbpolicy; T> T> /* T> * struct inpcb is the common protocol control block structure used in most T> @@ -65,7 +64,7 @@ struct inpcbpolicy; T> */ T> LIST_HEAD(inpcbhead, inpcb); T> LIST_HEAD(inpcbporthead, inpcbport); T> -typedef u_quad_t inp_gen_t; T> +typedef uint64_t inp_gen_t; T> T> /* T> * PCB with AF_INET6 null bind'ed laddr can receive AF_INET input packet. T> @@ -130,9 +129,8 @@ struct in_conninfo { T> #define inc6_laddr inc_ie.ie6_laddr T> #define inc6_zoneid inc_ie.ie6_zoneid T> T> -struct icmp6_filter; T> - T> -/*- T> +#if defined(_KERNEL) || defined(_WANT_INPCB) T> +/* T> * struct inpcb captures the network layer state for TCP, UDP, and raw IPv4 and T> * IPv6 sockets. In the case of TCP and UDP, further per-connection state is T> * hung off of inp_ppcb most of the time. Almost all fields of struct inpcb T> @@ -181,6 +179,8 @@ struct icmp6_filter; T> * read-lock usage during modification, this model can be applied to other T> * protocols (especially SCTP). T> */ T> +struct icmp6_filter; T> +struct inpcbpolicy; T> struct m_snd_tag; T> struct inpcb { T> LIST_ENTRY(inpcb) inp_hash; /* (h/i) hash list */ T> @@ -204,10 +204,8 @@ struct inpcb { T> uint32_t inp_flowid; /* (x) flow id / queue id */ T> u_int inp_refcount; /* (i) refcount */ T> struct m_snd_tag *inp_snd_tag; /* (i) send tag for outgoing mbufs */ T> - void *inp_pspare[4]; /* (x) general use */ T> uint32_t inp_flowtype; /* (x) M_HASHTYPE value */ T> uint32_t inp_rss_listen_bucket; /* (x) overridden RSS listen bucket */ T> - u_int inp_ispare[4]; /* (x) user cookie / general use */ T> T> /* Local and foreign ports, local and foreign addr. */ T> struct in_conninfo inp_inc; /* (i) list for PCB's local port */ T> @@ -218,23 +216,23 @@ struct inpcb { T> T> /* Protocol-dependent part; options. */ T> struct { T> - u_char inp4_ip_tos; /* (i) type of service proto */ T> - struct mbuf *inp4_options; /* (i) IP options */ T> - struct ip_moptions *inp4_moptions; /* (i) IP mcast options */ T> - } inp_depend4; T> + u_char inp_ip_tos; /* (i) type of service proto */ T> + struct mbuf *inp_options; /* (i) IP options */ T> + struct ip_moptions *inp_moptions; /* (i) mcast options */ T> + }; T> struct { T> /* (i) IP options */ T> - struct mbuf *inp6_options; T> + struct mbuf *in6p_options; T> /* (i) IP6 options for outgoing packets */ T> - struct ip6_pktopts *inp6_outputopts; T> + struct ip6_pktopts *in6p_outputopts; T> /* (i) IP multicast options */ T> - struct ip6_moptions *inp6_moptions; T> + struct ip6_moptions *in6p_moptions; T> /* (i) ICMPv6 code type filter */ T> - struct icmp6_filter *inp6_icmp6filt; T> + struct icmp6_filter *in6p_icmp6filt; T> /* (i) IPV6_CHECKSUM setsockopt */ T> - int inp6_cksum; T> - short inp6_hops; T> - } inp_depend6; T> + int in6p_cksum; T> + short in6p_hops; T> + }; T> LIST_ENTRY(inpcb) inp_portlist; /* (i/h) */ T> struct inpcbport *inp_phd; /* (i/h) head of this list */ T> #define inp_zero_size offsetof(struct inpcb, inp_gencnt) T> @@ -249,24 +247,17 @@ struct inpcb { T> #define inp_route inp_rtu.inpu_route T> #define inp_route6 inp_rtu.inpu_route6 T> }; T> +#endif /* _KERNEL */ T> + T> #define inp_fport inp_inc.inc_fport T> #define inp_lport inp_inc.inc_lport T> #define inp_faddr inp_inc.inc_faddr T> #define inp_laddr inp_inc.inc_laddr T> -#define inp_ip_tos inp_depend4.inp4_ip_tos T> -#define inp_options inp_depend4.inp4_options T> -#define inp_moptions inp_depend4.inp4_moptions T> T> #define in6p_faddr inp_inc.inc6_faddr T> #define in6p_laddr inp_inc.inc6_laddr T> #define in6p_zoneid inp_inc.inc6_zoneid T> -#define in6p_hops inp_depend6.inp6_hops /* default hop limit */ T> #define in6p_flowinfo inp_flow T> -#define in6p_options inp_depend6.inp6_options T> -#define in6p_outputopts inp_depend6.inp6_outputopts T> -#define in6p_moptions inp_depend6.inp6_moptions T> -#define in6p_icmp6filt inp_depend6.inp6_icmp6filt T> -#define in6p_cksum inp_depend6.inp6_cksum T> T> #define inp_vnet inp_pcbinfo->ipi_vnet T> T> @@ -280,21 +271,53 @@ struct inpcb { T> /* T> * Interface exported to userland by various protocols which use inpcbs. Hack T> * alert -- only define if struct xsocket is in scope. T> + * Fields prefixed with "xi_" are unique to this structure, and the rest T> + * match fields in the struct inpcb, to ease coding and porting. T> + * T> + * Legend: T> + * (s) - used by userland utilities in src T> + * (p) - used by utilities in ports T> + * (3) - is known to be used by third party software not in ports T> + * (n) - no known usage T> */ T> #ifdef _SYS_SOCKETVAR_H_ T> -struct xinpcb { T> - size_t xi_len; /* length of this structure */ T> - struct inpcb xi_inp; T> - struct xsocket xi_socket; T> - u_quad_t xi_alignment_hack; T> -}; T> - T> -struct xinpgen { T> - size_t xig_len; /* length of this structure */ T> - u_int xig_count; /* number of PCBs at this time */ T> - inp_gen_t xig_gen; /* generation count at this time */ T> - so_gen_t xig_sogen; /* socket generation count at this time */ T> +struct xinpcb { T> + size_t xi_len; /* length of this structure */ T> + struct xsocket xi_socket; /* (s,p) */ T> + struct in_conninfo inp_inc; /* (s,p) */ T> + uint64_t inp_gencnt; /* (s,p) */ T> + union { T> + void *inp_ppcb; /* (s) netstat(1) */ T> + int64_t ph_ppcb; T> + }; T> + int64_t inp_spare64[4]; T> + uint32_t inp_flow; /* (s) */ T> + uint32_t inp_flowid; /* (s) */ T> + uint32_t inp_flowtype; /* (s) */ T> + int32_t inp_flags; /* (s,p) */ T> + int32_t inp_flags2; /* (s) */ T> + int32_t inp_rss_listen_bucket; /* (n) */ T> + int32_t in6p_cksum; /* (n) */ T> + int32_t inp_spare32[4]; T> + uint16_t in6p_hops; /* (n) */ T> + uint8_t inp_ip_tos; /* (n) */ T> + int8_t pad8; T> + uint8_t inp_vflag; /* (s,p) */ T> + uint8_t inp_ip_ttl; /* (n) */ T> + uint8_t inp_ip_p; /* (n) */ T> + uint8_t inp_ip_minttl; /* (n) */ T> + int8_t inp_spare8[4]; T> +} __aligned(8); T> + T> +struct xinpgen { T> + size_t xig_len; /* length of this structure */ T> + u_int xig_count; /* number of PCBs at this time */ T> + inp_gen_t xig_gen; /* generation count at this time */ T> + so_gen_t xig_sogen; /* socket generation count this time */ T> }; T> +#ifdef _KERNEL T> +void in_pcbtoxinpcb(const struct inpcb *, struct xinpcb *); T> +#endif T> #endif /* _SYS_SOCKETVAR_H_ */ T> T> struct inpcbport { T> T> Modified: head/sys/netinet/ip_divert.c T> ============================================================================== T> --- head/sys/netinet/ip_divert.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/ip_divert.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -691,12 +691,8 @@ div_pcblist(SYSCTL_HANDLER_ARGS) T> INP_RLOCK(inp); T> if (inp->inp_gencnt <= gencnt) { T> struct xinpcb xi; T> - bzero(&xi, sizeof(xi)); T> - xi.xi_len = sizeof xi; T> - /* XXX should avoid extra copy */ T> - bcopy(inp, &xi.xi_inp, sizeof *inp); T> - if (inp->inp_socket) T> - sotoxsocket(inp->inp_socket, &xi.xi_socket); T> + T> + in_pcbtoxinpcb(inp, &xi); T> INP_RUNLOCK(inp); T> error = SYSCTL_OUT(req, &xi, sizeof xi); T> } else T> T> Modified: head/sys/netinet/raw_ip.c T> ============================================================================== T> --- head/sys/netinet/raw_ip.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/raw_ip.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -1077,12 +1077,7 @@ rip_pcblist(SYSCTL_HANDLER_ARGS) T> if (inp->inp_gencnt <= gencnt) { T> struct xinpcb xi; T> T> - bzero(&xi, sizeof(xi)); T> - xi.xi_len = sizeof xi; T> - /* XXX should avoid extra copy */ T> - bcopy(inp, &xi.xi_inp, sizeof *inp); T> - if (inp->inp_socket) T> - sotoxsocket(inp->inp_socket, &xi.xi_socket); T> + in_pcbtoxinpcb(inp, &xi); T> INP_RUNLOCK(inp); T> error = SYSCTL_OUT(req, &xi, sizeof xi); T> } else T> T> Modified: head/sys/netinet/tcp_subr.c T> ============================================================================== T> --- head/sys/netinet/tcp_subr.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/tcp_subr.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -1773,30 +1773,8 @@ tcp_pcblist(SYSCTL_HANDLER_ARGS) T> INP_RLOCK(inp); T> if (inp->inp_gencnt <= gencnt) { T> struct xtcpcb xt; T> - void *inp_ppcb; T> T> - bzero(&xt, sizeof(xt)); T> - xt.xt_len = sizeof xt; T> - /* XXX should avoid extra copy */ T> - bcopy(inp, &xt.xt_inp, sizeof *inp); T> - inp_ppcb = inp->inp_ppcb; T> - if (inp_ppcb == NULL) T> - bzero((char *) &xt.xt_tp, sizeof xt.xt_tp); T> - else if (inp->inp_flags & INP_TIMEWAIT) { T> - bzero((char *) &xt.xt_tp, sizeof xt.xt_tp); T> - xt.xt_tp.t_state = TCPS_TIME_WAIT; T> - } else { T> - bcopy(inp_ppcb, &xt.xt_tp, sizeof xt.xt_tp); T> - if (xt.xt_tp.t_timers) T> - tcp_timer_to_xtimer(&xt.xt_tp, xt.xt_tp.t_timers, &xt.xt_timer); T> - } T> - if (inp->inp_socket != NULL) T> - sotoxsocket(inp->inp_socket, &xt.xt_socket); T> - else { T> - bzero(&xt.xt_socket, sizeof xt.xt_socket); T> - xt.xt_socket.xso_protocol = IPPROTO_TCP; T> - } T> - xt.xt_inp.inp_gencnt = inp->inp_gencnt; T> + tcp_inptoxtp(inp, &xt); T> INP_RUNLOCK(inp); T> error = SYSCTL_OUT(req, &xt, sizeof xt); T> } else T> @@ -2765,3 +2743,53 @@ tcp_state_change(struct tcpcb *tp, int n T> tp->t_state = newstate; T> TCP_PROBE6(state__change, NULL, tp, NULL, tp, NULL, pstate); T> } T> + T> +/* T> + * Create an external-format (``xtcpcb'') structure using the information in T> + * the kernel-format tcpcb structure pointed to by tp. This is done to T> + * reduce the spew of irrelevant information over this interface, to isolate T> + * user code from changes in the kernel structure, and potentially to provide T> + * information-hiding if we decide that some of this information should be T> + * hidden from users. T> + */ T> +void T> +tcp_inptoxtp(const struct inpcb *inp, struct xtcpcb *xt) T> +{ T> + struct tcpcb *tp = intotcpcb(inp); T> + sbintime_t now; T> + T> + if (inp->inp_flags & INP_TIMEWAIT) { T> + bzero(xt, sizeof(struct xtcpcb)); T> + xt->t_state = TCPS_TIME_WAIT; T> + } else { T> + xt->t_state = tp->t_state; T> + xt->t_flags = tp->t_flags; T> + xt->t_sndzerowin = tp->t_sndzerowin; T> + xt->t_sndrexmitpack = tp->t_sndrexmitpack; T> + xt->t_rcvoopack = tp->t_rcvoopack; T> + T> + now = getsbinuptime(); T> +#define COPYTIMER(ttt) do { \ T> + if (callout_active(&tp->t_timers->ttt)) \ T> + xt->ttt = (tp->t_timers->ttt.c_time - now) / \ T> + SBT_1MS; \ T> + else \ T> + xt->ttt = 0; \ T> +} while (0) T> + COPYTIMER(tt_delack); T> + COPYTIMER(tt_rexmt); T> + COPYTIMER(tt_persist); T> + COPYTIMER(tt_keep); T> + COPYTIMER(tt_2msl); T> +#undef COPYTIMER T> + xt->t_rcvtime = 1000 * (ticks - tp->t_rcvtime) / hz; T> + T> + bcopy(tp->t_fb->tfb_tcp_block_name, xt->xt_stack, T> + TCP_FUNCTION_NAME_LEN_MAX); T> + } T> + T> + xt->xt_len = sizeof(struct xtcpcb); T> + in_pcbtoxinpcb(inp, &xt->xt_inp); T> + if (inp->inp_socket == NULL) T> + xt->xt_inp.xi_socket.xso_protocol = IPPROTO_TCP; T> +} T> T> Modified: head/sys/netinet/tcp_syncache.c T> ============================================================================== T> --- head/sys/netinet/tcp_syncache.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/tcp_syncache.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -2217,13 +2217,13 @@ syncache_pcblist(struct sysctl_req *req, T> xt.xt_inp.inp_vflag = INP_IPV6; T> else T> xt.xt_inp.inp_vflag = INP_IPV4; T> - bcopy(&sc->sc_inc, &xt.xt_inp.inp_inc, sizeof (struct in_conninfo)); T> - xt.xt_tp.t_inpcb = &xt.xt_inp; T> - xt.xt_tp.t_state = TCPS_SYN_RECEIVED; T> - xt.xt_socket.xso_protocol = IPPROTO_TCP; T> - xt.xt_socket.xso_len = sizeof (struct xsocket); T> - xt.xt_socket.so_type = SOCK_STREAM; T> - xt.xt_socket.so_state = SS_ISCONNECTING; T> + bcopy(&sc->sc_inc, &xt.xt_inp.inp_inc, T> + sizeof (struct in_conninfo)); T> + xt.t_state = TCPS_SYN_RECEIVED; T> + xt.xt_inp.xi_socket.xso_protocol = IPPROTO_TCP; T> + xt.xt_inp.xi_socket.xso_len = sizeof (struct xsocket); T> + xt.xt_inp.xi_socket.so_type = SOCK_STREAM; T> + xt.xt_inp.xi_socket.so_state = SS_ISCONNECTING; T> error = SYSCTL_OUT(req, &xt, sizeof xt); T> if (error) { T> SCH_UNLOCK(sch); T> T> Modified: head/sys/netinet/tcp_timer.c T> ============================================================================== T> --- head/sys/netinet/tcp_timer.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/tcp_timer.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -1006,28 +1006,3 @@ tcp_timer_stop(struct tcpcb *tp, uint32_ T> tp->t_timers->tt_draincnt++; T> } T> } T> - T> -#define ticks_to_msecs(t) (1000*(t) / hz) T> - T> -void T> -tcp_timer_to_xtimer(struct tcpcb *tp, struct tcp_timer *timer, T> - struct xtcp_timer *xtimer) T> -{ T> - sbintime_t now; T> - T> - bzero(xtimer, sizeof(*xtimer)); T> - if (timer == NULL) T> - return; T> - now = getsbinuptime(); T> - if (callout_active(&timer->tt_delack)) T> - xtimer->tt_delack = (timer->tt_delack.c_time - now) / SBT_1MS; T> - if (callout_active(&timer->tt_rexmt)) T> - xtimer->tt_rexmt = (timer->tt_rexmt.c_time - now) / SBT_1MS; T> - if (callout_active(&timer->tt_persist)) T> - xtimer->tt_persist = (timer->tt_persist.c_time - now) / SBT_1MS; T> - if (callout_active(&timer->tt_keep)) T> - xtimer->tt_keep = (timer->tt_keep.c_time - now) / SBT_1MS; T> - if (callout_active(&timer->tt_2msl)) T> - xtimer->tt_2msl = (timer->tt_2msl.c_time - now) / SBT_1MS; T> - xtimer->t_rcvtime = ticks_to_msecs(ticks - tp->t_rcvtime); T> -} T> T> Modified: head/sys/netinet/tcp_timer.h T> ============================================================================== T> --- head/sys/netinet/tcp_timer.h Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/tcp_timer.h Tue Mar 21 06:39:49 2017 (r315662) T> @@ -210,8 +210,6 @@ void tcp_timer_keep(void *xtp); T> void tcp_timer_persist(void *xtp); T> void tcp_timer_rexmt(void *xtp); T> void tcp_timer_delack(void *xtp); T> -void tcp_timer_to_xtimer(struct tcpcb *tp, struct tcp_timer *timer, T> - struct xtcp_timer *xtimer); T> T> #endif /* _KERNEL */ T> T> T> Modified: head/sys/netinet/tcp_var.h T> ============================================================================== T> --- head/sys/netinet/tcp_var.h Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/tcp_var.h Tue Mar 21 06:39:49 2017 (r315662) T> @@ -39,15 +39,9 @@ T> #ifdef _KERNEL T> #include T> #include T> +#endif T> T> -/* T> - * Kernel variables for tcp. T> - */ T> -VNET_DECLARE(int, tcp_do_rfc1323); T> -#define V_tcp_do_rfc1323 VNET(tcp_do_rfc1323) T> - T> -#endif /* _KERNEL */ T> - T> +#if defined(_KERNEL) || defined(_WANT_TCPCB) T> /* TCP segment queue entry */ T> struct tseg_qent { T> LIST_ENTRY(tseg_qent) tqe_q; T> @@ -83,90 +77,12 @@ struct sackhint { T> uint64_t _pad[1]; /* TBD */ T> }; T> T> -struct tcptemp { T> - u_char tt_ipgen[40]; /* the size must be of max ip header, now IPv6 */ T> - struct tcphdr tt_t; T> -}; T> - T> -#define tcp6cb tcpcb /* for KAME src sync over BSD*'s */ T> - T> -/* T> - * TODO: We yet need to brave plowing in T> - * to tcp_input() and the pru_usrreq() block. T> - * Right now these go to the old standards which T> - * are somewhat ok, but in the long term may T> - * need to be changed. If we do tackle tcp_input() T> - * then we need to get rid of the tcp_do_segment() T> - * function below. T> - */ T> -/* Flags for tcp functions */ T> -#define TCP_FUNC_BEING_REMOVED 0x01 /* Can no longer be referenced */ T> -struct tcpcb; T> -struct inpcb; T> -struct sockopt; T> -struct socket; T> - T> -/* T> - * If defining the optional tcp_timers, in the T> - * tfb_tcp_timer_stop call you must use the T> - * callout_async_drain() function with the T> - * tcp_timer_discard callback. You should check T> - * the return of callout_async_drain() and if 0 T> - * increment tt_draincnt. Since the timer sub-system T> - * does not know your callbacks you must provide a T> - * stop_all function that loops through and calls T> - * tcp_timer_stop() with each of your defined timers. T> - * Adding a tfb_tcp_handoff_ok function allows the socket T> - * option to change stacks to query you even if the T> - * connection is in a later stage. You return 0 to T> - * say you can take over and run your stack, you return T> - * non-zero (an error number) to say no you can't. T> - * If the function is undefined you can only change T> - * in the early states (before connect or listen). T> - * tfb_tcp_fb_fini is changed to add a flag to tell T> - * the old stack if the tcb is being destroyed or T> - * not. A one in the flag means the TCB is being T> - * destroyed, a zero indicates its transitioning to T> - * another stack (via socket option). T> - */ T> -struct tcp_function_block { T> - char tfb_tcp_block_name[TCP_FUNCTION_NAME_LEN_MAX]; T> - int (*tfb_tcp_output)(struct tcpcb *); T> - void (*tfb_tcp_do_segment)(struct mbuf *, struct tcphdr *, T> - struct socket *, struct tcpcb *, T> - int, int, uint8_t, T> - int); T> - int (*tfb_tcp_ctloutput)(struct socket *so, struct sockopt *sopt, T> - struct inpcb *inp, struct tcpcb *tp); T> - /* Optional memory allocation/free routine */ T> - void (*tfb_tcp_fb_init)(struct tcpcb *); T> - void (*tfb_tcp_fb_fini)(struct tcpcb *, int); T> - /* Optional timers, must define all if you define one */ T> - int (*tfb_tcp_timer_stop_all)(struct tcpcb *); T> - void (*tfb_tcp_timer_activate)(struct tcpcb *, T> - uint32_t, u_int); T> - int (*tfb_tcp_timer_active)(struct tcpcb *, uint32_t); T> - void (*tfb_tcp_timer_stop)(struct tcpcb *, uint32_t); T> - void (*tfb_tcp_rexmit_tmr)(struct tcpcb *); T> - int (*tfb_tcp_handoff_ok)(struct tcpcb *); T> - volatile uint32_t tfb_refcnt; T> - uint32_t tfb_flags; T> -}; T> - T> -struct tcp_function { T> - TAILQ_ENTRY(tcp_function) tf_next; T> - struct tcp_function_block *tf_fb; T> -}; T> - T> -TAILQ_HEAD(tcp_funchead, tcp_function); T> - T> /* T> * Tcp control block, one per tcp; fields: T> * Organized for 16 byte cacheline efficiency. T> */ T> struct tcpcb { T> struct tsegqe_head t_segq; /* segment reassembly queue */ T> - void *t_pspare[2]; /* new reassembly queue */ T> int t_segqlen; /* segment reassembly queue length */ T> int t_dupacks; /* consecutive dup acks recd */ T> T> @@ -197,12 +113,10 @@ struct tcpcb { T> T> uint32_t snd_wnd; /* send window */ T> uint32_t snd_cwnd; /* congestion-controlled window */ T> - u_long snd_spare1; /* unused */ T> uint32_t snd_ssthresh; /* snd_cwnd size threshold for T> * for slow start exponential to T> * linear switch T> */ T> - u_long snd_spare2; /* unused */ T> tcp_seq snd_recover; /* for use in NewReno Fast Recovery */ T> T> u_int t_rcvtime; /* inactivity time */ T> @@ -210,9 +124,6 @@ struct tcpcb { T> u_int t_rtttime; /* RTT measurement start time */ T> tcp_seq t_rtseq; /* sequence number being timed */ T> T> - u_int t_bw_spare1; /* unused */ T> - tcp_seq t_bw_spare2; /* unused */ T> - T> int t_rxtcur; /* current retransmit value (ticks) */ T> u_int t_maxseg; /* maximum segment size */ T> u_int t_pmtud_saved_maxseg; /* pre-blackhole MSS */ T> @@ -276,32 +187,97 @@ struct tcpcb { T> u_int t_tsomaxsegcount; /* TSO maximum segment count */ T> u_int t_tsomaxsegsize; /* TSO maximum segment size in bytes */ T> u_int t_flags2; /* More tcpcb flags storage */ T> -#if defined(_KERNEL) && defined(TCP_RFC7413) T> - uint32_t t_ispare[6]; /* 5 UTO, 1 TBD */ T> - uint64_t t_tfo_cookie; /* TCP Fast Open cookie */ T> -#else T> - uint32_t t_ispare[8]; /* 5 UTO, 3 TBD */ T> -#endif T> struct tcp_function_block *t_fb;/* TCP function call block */ T> void *t_fb_ptr; /* Pointer to t_fb specific data */ T> -#if defined(_KERNEL) && defined(TCP_RFC7413) T> +#ifdef TCP_RFC7413 T> + uint64_t t_tfo_cookie; /* TCP Fast Open cookie */ T> unsigned int *t_tfo_pending; /* TCP Fast Open pending counter */ T> - void *t_pspare2[1]; /* 1 TCP_SIGNATURE */ T> -#else T> - void *t_pspare2[2]; /* 1 TCP_SIGNATURE, 1 TBD */ T> #endif T> -#if defined(_KERNEL) && defined(TCPPCAP) T> +#ifdef TCPPCAP T> struct mbufq t_inpkts; /* List of saved input packets. */ T> struct mbufq t_outpkts; /* List of saved output packets. */ T> -#ifdef _LP64 T> - uint64_t _pad[0]; /* all used! */ T> -#else T> - uint64_t _pad[2]; /* 2 are available */ T> -#endif /* _LP64 */ T> -#else T> - uint64_t _pad[6]; T> -#endif /* defined(_KERNEL) && defined(TCPPCAP) */ T> +#endif T> }; T> +#endif /* _KERNEL || _WANT_TCPCB */ T> + T> +#ifdef _KERNEL T> +/* T> + * Kernel variables for tcp. T> + */ T> +VNET_DECLARE(int, tcp_do_rfc1323); T> +#define V_tcp_do_rfc1323 VNET(tcp_do_rfc1323) T> + T> +struct tcptemp { T> + u_char tt_ipgen[40]; /* the size must be of max ip header, now IPv6 */ T> + struct tcphdr tt_t; T> +}; T> + T> +/* T> + * TODO: We yet need to brave plowing in T> + * to tcp_input() and the pru_usrreq() block. T> + * Right now these go to the old standards which T> + * are somewhat ok, but in the long term may T> + * need to be changed. If we do tackle tcp_input() T> + * then we need to get rid of the tcp_do_segment() T> + * function below. T> + */ T> +/* Flags for tcp functions */ T> +#define TCP_FUNC_BEING_REMOVED 0x01 /* Can no longer be referenced */ T> + T> +/* T> + * If defining the optional tcp_timers, in the T> + * tfb_tcp_timer_stop call you must use the T> + * callout_async_drain() function with the T> + * tcp_timer_discard callback. You should check T> + * the return of callout_async_drain() and if 0 T> + * increment tt_draincnt. Since the timer sub-system T> + * does not know your callbacks you must provide a T> + * stop_all function that loops through and calls T> + * tcp_timer_stop() with each of your defined timers. T> + * Adding a tfb_tcp_handoff_ok function allows the socket T> + * option to change stacks to query you even if the T> + * connection is in a later stage. You return 0 to T> + * say you can take over and run your stack, you return T> + * non-zero (an error number) to say no you can't. T> + * If the function is undefined you can only change T> + * in the early states (before connect or listen). T> + * tfb_tcp_fb_fini is changed to add a flag to tell T> + * the old stack if the tcb is being destroyed or T> + * not. A one in the flag means the TCB is being T> + * destroyed, a zero indicates its transitioning to T> + * another stack (via socket option). T> + */ T> +struct tcp_function_block { T> + char tfb_tcp_block_name[TCP_FUNCTION_NAME_LEN_MAX]; T> + int (*tfb_tcp_output)(struct tcpcb *); T> + void (*tfb_tcp_do_segment)(struct mbuf *, struct tcphdr *, T> + struct socket *, struct tcpcb *, T> + int, int, uint8_t, T> + int); T> + int (*tfb_tcp_ctloutput)(struct socket *so, struct sockopt *sopt, T> + struct inpcb *inp, struct tcpcb *tp); T> + /* Optional memory allocation/free routine */ T> + void (*tfb_tcp_fb_init)(struct tcpcb *); T> + void (*tfb_tcp_fb_fini)(struct tcpcb *, int); T> + /* Optional timers, must define all if you define one */ T> + int (*tfb_tcp_timer_stop_all)(struct tcpcb *); T> + void (*tfb_tcp_timer_activate)(struct tcpcb *, T> + uint32_t, u_int); T> + int (*tfb_tcp_timer_active)(struct tcpcb *, uint32_t); T> + void (*tfb_tcp_timer_stop)(struct tcpcb *, uint32_t); T> + void (*tfb_tcp_rexmit_tmr)(struct tcpcb *); T> + int (*tfb_tcp_handoff_ok)(struct tcpcb *); T> + volatile uint32_t tfb_refcnt; T> + uint32_t tfb_flags; T> +}; T> + T> +struct tcp_function { T> + TAILQ_ENTRY(tcp_function) tf_next; T> + struct tcp_function_block *tf_fb; T> +}; T> + T> +TAILQ_HEAD(tcp_funchead, tcp_function); T> +#endif /* _KERNEL */ T> T> /* T> * Flags and utility macros for the t_flags field. T> @@ -656,26 +632,41 @@ struct tcp_hhook_data { T> T> /* T> * TCB structure exported to user-land via sysctl(3). T> + * T> + * Fields prefixed with "xt_" are unique to the export structure, and fields T> + * with "t_" or other prefixes match corresponding fields of 'struct tcpcb'. T> + * T> + * Legend: T> + * (s) - used by userland utilities in src T> + * (p) - used by utilities in ports T> + * (3) - is known to be used by third party software not in ports T> + * (n) - no known usage T> + * T> * Evil hack: declare only if in_pcb.h and sys/socketvar.h have been T> * included. Not all of our clients do. T> */ T> #if defined(_NETINET_IN_PCB_H_) && defined(_SYS_SOCKETVAR_H_) T> -struct xtcp_timer { T> - int tt_rexmt; /* retransmit timer */ T> - int tt_persist; /* retransmit persistence */ T> - int tt_keep; /* keepalive */ T> - int tt_2msl; /* 2*msl TIME_WAIT timer */ T> - int tt_delack; /* delayed ACK timer */ T> - int t_rcvtime; /* Time since last packet received */ T> -}; T> -struct xtcpcb { T> - size_t xt_len; T> - struct inpcb xt_inp; T> - struct tcpcb xt_tp; T> - struct xsocket xt_socket; T> - struct xtcp_timer xt_timer; T> - u_quad_t xt_alignment_hack; T> -}; T> +struct xtcpcb { T> + size_t xt_len; /* length of this structure */ T> + struct xinpcb xt_inp; T> + char xt_stack[TCP_FUNCTION_NAME_LEN_MAX]; /* (n) */ T> + int64_t spare64[8]; T> + int32_t t_state; /* (s,p) */ T> + uint32_t t_flags; /* (s,p) */ T> + int32_t t_sndzerowin; /* (s) */ T> + int32_t t_sndrexmitpack; /* (s) */ T> + int32_t t_rcvoopack; /* (s) */ T> + int32_t t_rcvtime; /* (s) */ T> + int32_t tt_rexmt; /* (s) */ T> + int32_t tt_persist; /* (s) */ T> + int32_t tt_keep; /* (s) */ T> + int32_t tt_2msl; /* (s) */ T> + int32_t tt_delack; /* (s) */ T> + int32_t spare32[32]; T> +} __aligned(8); T> +#ifdef _KERNEL T> +void tcp_inptoxtp(const struct inpcb *, struct xtcpcb *); T> +#endif T> #endif T> T> /* T> T> Modified: head/sys/netinet/udp_usrreq.c T> ============================================================================== T> --- head/sys/netinet/udp_usrreq.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/netinet/udp_usrreq.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -905,13 +905,7 @@ udp_pcblist(SYSCTL_HANDLER_ARGS) T> if (inp->inp_gencnt <= gencnt) { T> struct xinpcb xi; T> T> - bzero(&xi, sizeof(xi)); T> - xi.xi_len = sizeof xi; T> - /* XXX should avoid extra copy */ T> - bcopy(inp, &xi.xi_inp, sizeof *inp); T> - if (inp->inp_socket) T> - sotoxsocket(inp->inp_socket, &xi.xi_socket); T> - xi.xi_inp.inp_gencnt = inp->inp_gencnt; T> + in_pcbtoxinpcb(inp, &xi); T> INP_RUNLOCK(inp); T> error = SYSCTL_OUT(req, &xi, sizeof xi); T> } else T> T> Modified: head/sys/sys/param.h T> ============================================================================== T> --- head/sys/sys/param.h Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/sys/sys/param.h Tue Mar 21 06:39:49 2017 (r315662) T> @@ -58,7 +58,7 @@ T> * in the range 5 to 9. T> */ T> #undef __FreeBSD_version T> -#define __FreeBSD_version 1200025 /* Master, propagated to newvers */ T> +#define __FreeBSD_version 1200026 /* Master, propagated to newvers */ T> T> /* T> * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, T> T> Modified: head/usr.bin/netstat/inet.c T> ============================================================================== T> --- head/usr.bin/netstat/inet.c Tue Mar 21 05:15:10 2017 (r315661) T> +++ head/usr.bin/netstat/inet.c Tue Mar 21 06:39:49 2017 (r315662) T> @@ -91,7 +91,7 @@ static int udp_done, tcp_done, sdp_done; T> #endif /* INET6 */ T> T> static int T> -pcblist_sysctl(int proto, const char *name, char **bufp, int istcp __unused) T> +pcblist_sysctl(int proto, const char *name, char **bufp) T> { T> const char *mibvar; T> char *buf; T> @@ -181,120 +181,6 @@ sotoxsocket(struct socket *so, struct xs T> return (0); T> } T> T> -static int T> -pcblist_kvm(u_long off, char **bufp, int istcp) T> -{ T> - struct inpcbinfo pcbinfo; T> - struct inpcbhead listhead; T> - struct inpcb *inp; T> - struct xinpcb xi; T> - struct xinpgen xig; T> - struct xtcpcb xt; T> - struct socket so; T> - struct xsocket *xso; T> - char *buf, *p; T> - size_t len; T> - T> - if (off == 0) T> - return (0); T> - kread(off, &pcbinfo, sizeof(pcbinfo)); T> - if (istcp) T> - len = 2 * sizeof(xig) + T> - (pcbinfo.ipi_count + pcbinfo.ipi_count / 8) * T> - sizeof(struct xtcpcb); T> - else T> - len = 2 * sizeof(xig) + T> - (pcbinfo.ipi_count + pcbinfo.ipi_count / 8) * T> - sizeof(struct xinpcb); T> - if ((buf = malloc(len)) == NULL) { T> - xo_warnx("malloc %lu bytes", (u_long)len); T> - return (0); T> - } T> - p = buf; T> - T> -#define COPYOUT(obj, size) do { \ T> - if (len < (size)) { \ T> - xo_warnx("buffer size exceeded"); \ T> - goto fail; \ T> - } \ T> - bcopy((obj), p, (size)); \ T> - len -= (size); \ T> - p += (size); \ T> -} while (0) T> - T> -#define KREAD(off, buf, len) do { \ T> - if (kread((uintptr_t)(off), (buf), (len)) != 0) \ T> - goto fail; \ T> -} while (0) T> - T> - /* Write out header. */ T> - xig.xig_len = sizeof xig; T> - xig.xig_count = pcbinfo.ipi_count; T> - xig.xig_gen = pcbinfo.ipi_gencnt; T> - xig.xig_sogen = 0; T> - COPYOUT(&xig, sizeof xig); T> - T> - /* Walk the PCB list. */ T> - xt.xt_len = sizeof xt; T> - xi.xi_len = sizeof xi; T> - if (istcp) T> - xso = &xt.xt_socket; T> - else T> - xso = &xi.xi_socket; T> - KREAD(pcbinfo.ipi_listhead, &listhead, sizeof(listhead)); T> - LIST_FOREACH(inp, &listhead, inp_list) { T> - if (istcp) { T> - KREAD(inp, &xt.xt_inp, sizeof(*inp)); T> - inp = &xt.xt_inp; T> - } else { T> - KREAD(inp, &xi.xi_inp, sizeof(*inp)); T> - inp = &xi.xi_inp; T> - } T> - T> - if (inp->inp_gencnt > pcbinfo.ipi_gencnt) T> - continue; T> - T> - if (istcp) { T> - if (inp->inp_ppcb == NULL) T> - bzero(&xt.xt_tp, sizeof xt.xt_tp); T> - else if (inp->inp_flags & INP_TIMEWAIT) { T> - bzero(&xt.xt_tp, sizeof xt.xt_tp); T> - xt.xt_tp.t_state = TCPS_TIME_WAIT; T> - } else T> - KREAD(inp->inp_ppcb, &xt.xt_tp, T> - sizeof xt.xt_tp); T> - } T> - if (inp->inp_socket) { T> - KREAD(inp->inp_socket, &so, sizeof(so)); T> - if (sotoxsocket(&so, xso) != 0) T> - goto fail; T> - } else { T> - bzero(xso, sizeof(*xso)); T> - if (istcp) T> - xso->xso_protocol = IPPROTO_TCP; T> - } T> - if (istcp) T> - COPYOUT(&xt, sizeof xt); T> - else T> - COPYOUT(&xi, sizeof xi); T> - } T> - T> - /* Reread the pcbinfo and write out the footer. */ T> - kread(off, &pcbinfo, sizeof(pcbinfo)); T> - xig.xig_count = pcbinfo.ipi_count; T> - xig.xig_gen = pcbinfo.ipi_gencnt; T> - COPYOUT(&xig, sizeof xig); T> - T> - *bufp = buf; T> - return (1); T> - T> -fail: T> - free(buf); T> - return (0); T> -#undef COPYOUT T> -#undef KREAD T> -} T> - T> /* T> * Print a summary of connections related to an Internet T> * protocol. For TCP, also give state of connection. T> @@ -304,15 +190,14 @@ fail: T> void T> protopr(u_long off, const char *name, int af1, int proto) T> { T> - int istcp; T> static int first = 1; T> + int istcp; T> char *buf; T> const char *vchar; T> - struct tcpcb *tp = NULL; T> - struct inpcb *inp; T> + struct xtcpcb *tp; T> + struct xinpcb *inp; T> struct xinpgen *xig, *oxig; T> struct xsocket *so; T> - struct xtcp_timer *timer; T> T> istcp = 0; T> switch (proto) { T> @@ -341,28 +226,21 @@ protopr(u_long off, const char *name, in T> #endif T> break; T> } T> - if (live) { T> - if (!pcblist_sysctl(proto, name, &buf, istcp)) T> - return; T> - } else { T> - if (!pcblist_kvm(off, &buf, istcp)) T> - return; T> - } T> + T> + if (!pcblist_sysctl(proto, name, &buf)) T> + return; T> T> oxig = xig = (struct xinpgen *)buf; T> for (xig = (struct xinpgen *)((char *)xig + xig->xig_len); T> xig->xig_len > sizeof(struct xinpgen); T> xig = (struct xinpgen *)((char *)xig + xig->xig_len)) { T> if (istcp) { T> - timer = &((struct xtcpcb *)xig)->xt_timer; T> - tp = &((struct xtcpcb *)xig)->xt_tp; T> - inp = &((struct xtcpcb *)xig)->xt_inp; T> - so = &((struct xtcpcb *)xig)->xt_socket; T> + tp = (struct xtcpcb *)xig; T> + inp = &tp->xt_inp; T> } else { T> - inp = &((struct xinpcb *)xig)->xi_inp; T> - so = &((struct xinpcb *)xig)->xi_socket; T> - timer = NULL; T> + inp = (struct xinpcb *)xig; T> } T> + so = &inp->xi_socket; T> T> T> *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** T> _______________________________________________ T> svn-src-all@freebsd.org mailing list T> https://lists.freebsd.org/mailman/listinfo/svn-src-all T> To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org" -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Tue Mar 21 06:50:33 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DD2A7D16A45; Tue, 21 Mar 2017 06:50:33 +0000 (UTC) (envelope-from antoine.brodin.freebsd@gmail.com) Received: from mail-io0-x22a.google.com (mail-io0-x22a.google.com [IPv6:2607:f8b0:4001:c06::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A589F310; Tue, 21 Mar 2017 06:50:33 +0000 (UTC) (envelope-from antoine.brodin.freebsd@gmail.com) Received: by mail-io0-x22a.google.com with SMTP id z13so43504089iof.2; Mon, 20 Mar 2017 23:50:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=EegxHUh6t6cGQDK5Kre0xHxO3/3UGvtOhHr/nG0yiMc=; b=Zgb9+0pn19Zh/Oo8zjIeY2DEuRrVdU+JxdP8AhwznqF+JwqTuXFuCxmNf9bBD2FGrW JyGawQXiZZNgfurclvB+iMCsYrRy9oWc7hW1oJnrewED0sablWpFBF1x2ewrI+mFDJyt pn61auxCCqZN1JUpIdOTU5+S3c8dcoGI0JEdmS2ONRsB/bUCrY68hAfHIaq62Zr3CH63 cUZXeFYfrzwmh3ptyTuqXA5LDmBZiXWCfJs7IRTsEi6tugYsntfHpOyuILSKbJPbazQ2 SaBdzET6HGPFs1/s3GG2h5rA/dcZanydYApHdP6Avk2X3TLYgaffZRJmEdwu6x7Y1aOI 81NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=EegxHUh6t6cGQDK5Kre0xHxO3/3UGvtOhHr/nG0yiMc=; b=YFNwj3jVxmGGdbX9o3xiSQIoqIxbyuj/9xDvgSC2VZ6lN1BgW+goZSc7uAyCE5ioTB YmzDTZbJwYN5ArAvKpx+CyXtBrmi+3He+Q7SSSYLwv3PG3wSWkbOKFd8fEs2a2KBH+nh hDmqgm8H9x2FhzTY1m8XRy8tS2YS3d0m0jCOH2mHfuiBufBIjoj7QjW9KErY0yUcrnRb /mHKDNrYvQF1VXcZtOUA8u3sWELJ6QNJZACQX6OdCl/mui56b/cGZ1HV5V+lD4zSP7OB n1tW/8UAYtfTCP3kgUTIWg0pgYoiYjVoNcCmIViIoMUecOQ5qD/7/PcapGP10Tv8xony 6BAA== X-Gm-Message-State: AFeK/H1k+UZtjl81MCRL9gDjNXFH7b9FEZaboZze3oPcu0ZsIjDYxTI+F/z6PQXGTfxzrkgSX6jSDHzOTzcQEg== X-Received: by 10.107.182.9 with SMTP id g9mr27115743iof.233.1490079032793; Mon, 20 Mar 2017 23:50:32 -0700 (PDT) MIME-Version: 1.0 Sender: antoine.brodin.freebsd@gmail.com Received: by 10.107.13.15 with HTTP; Mon, 20 Mar 2017 23:50:32 -0700 (PDT) In-Reply-To: <20170321064154.GL23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <20170321064154.GL23308@FreeBSD.org> From: Antoine Brodin Date: Tue, 21 Mar 2017 07:50:32 +0100 X-Google-Sender-Auth: XdoNhYmBrtILV6zrS-t8Y3VV20s Message-ID: Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt To: Gleb Smirnoff Cc: svn-src-all@freebsd.org, svn-src-head@freebsd.org, FreeBSD Ports Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 06:50:34 -0000 On Tue, Mar 21, 2017 at 7:41 AM, Gleb Smirnoff wrote: > Hi! > > This change is known to break a ton of ports. More than 100 if > counting depends. I'm sorry for that and I already started to fix > them. > > Please send all new breakages to me. Hi, Exp-runs should happen before breakage happens, not after. If you already know that it breaks hundreds of ports, please revert and request an exp-run. Antoine (with hat: portmgr) > On Tue, Mar 21, 2017 at 06:39:49AM +0000, Gleb Smirnoff wrote: > T> Author: glebius > T> Date: Tue Mar 21 06:39:49 2017 > T> New Revision: 315662 > T> URL: https://svnweb.freebsd.org/changeset/base/315662 > T> > T> Log: > T> Hide struct inpcb, struct tcpcb from the userland. > T> > T> This is a painful change, but it is needed. On the one hand, we avoid > T> modifying them, and this slows down some ideas, on the other hand we still > T> eventually modify them and tools like netstat(1) never work on next version of > T> FreeBSD. We maintain a ton of spares in them, and we already got some ifdef > T> hell at the end of tcpcb. > T> > T> Details: > T> - Hide struct inpcb, struct tcpcb under _KERNEL || _WANT_FOO. > T> - Make struct xinpcb, struct xtcpcb pure API structures, not including > T> kernel structures inpcb and tcpcb inside. Export into these structures > T> the fields from inpcb and tcpcb that are known to be used, and put there > T> a ton of spare space. > T> - Make kernel and userland utilities compilable after these changes. > T> - Bump __FreeBSD_version. > T> > T> Reviewed by: rrs, gnn > T> Differential Revision: D10018 From owner-svn-src-head@freebsd.org Tue Mar 21 06:54:35 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A04F1D16CA4; Tue, 21 Mar 2017 06:54:35 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (glebi.us [96.95.210.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 87CD6970; Tue, 21 Mar 2017 06:54:34 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (localhost [127.0.0.1]) by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id v2L6sX67058456 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 20 Mar 2017 23:54:34 -0700 (PDT) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebi.us (8.15.2/8.15.2/Submit) id v2L6sX3N058455; Mon, 20 Mar 2017 23:54:33 -0700 (PDT) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebi.us: glebius set sender to glebius@FreeBSD.org using -f Date: Mon, 20 Mar 2017 23:54:33 -0700 From: Gleb Smirnoff To: Antoine Brodin Cc: svn-src-all@freebsd.org, svn-src-head@freebsd.org, FreeBSD Ports Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321065433.GM23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <20170321064154.GL23308@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.7.2 (2016-11-26) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 06:54:35 -0000 On Tue, Mar 21, 2017 at 07:50:32AM +0100, Antoine Brodin wrote: A> > This change is known to break a ton of ports. More than 100 if A> > counting depends. I'm sorry for that and I already started to fix A> > them. A> > A> > Please send all new breakages to me. A> A> Hi, A> A> Exp-runs should happen before breakage happens, not after. A> If you already know that it breaks hundreds of ports, please revert A> and request an exp-run. The exp-run has already been made: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=210673 Wasn't very helpful. -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Tue Mar 21 07:22:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 116E2D162DF; Tue, 21 Mar 2017 07:22:23 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2610:1c1:1:6074::16:84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "freefall.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E285C1574; Tue, 21 Mar 2017 07:22:22 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: by freefall.freebsd.org (Postfix, from userid 1235) id 0D51F6ADF; Tue, 21 Mar 2017 07:22:20 +0000 (UTC) Date: Tue, 21 Mar 2017 08:22:19 +0100 From: Baptiste Daroussin To: Gleb Smirnoff Cc: Antoine Brodin , svn-src-head@freebsd.org, svn-src-all@freebsd.org, FreeBSD Ports Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321072219.ij2waf2rygmvezoh@ivaldir.net> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <20170321064154.GL23308@FreeBSD.org> <20170321065433.GM23308@FreeBSD.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="aawcudn53qgc4hn5" Content-Disposition: inline In-Reply-To: <20170321065433.GM23308@FreeBSD.org> User-Agent: NeoMutt/20170306 (1.8.0) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 07:22:23 -0000 --aawcudn53qgc4hn5 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Mar 20, 2017 at 11:54:33PM -0700, Gleb Smirnoff wrote: > On Tue, Mar 21, 2017 at 07:50:32AM +0100, Antoine Brodin wrote: > A> > This change is known to break a ton of ports. More than 100 if > A> > counting depends. I'm sorry for that and I already started to fix > A> > them. > A> > > A> > Please send all new breakages to me. > A>=20 > A> Hi, > A>=20 > A> Exp-runs should happen before breakage happens, not after. > A> If you already know that it breaks hundreds of ports, please revert > A> and request an exp-run. >=20 > The exp-run has already been made: >=20 > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D210673 >=20 > Wasn't very helpful. >=20 I disagree it was useful it showed you some ports that were breaking given = there was some high level one you were expected to provide patches to fix them. Best regards, Bapt --aawcudn53qgc4hn5 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEgOTj3suS2urGXVU3Y4mL3PG3PloFAljQ1KkACgkQY4mL3PG3 PloopQ//S1va85TnbVJ9egNEjG3kbpyhPeUCMxmkMWUvsYe5ajIAL/zUfGdqfodZ ynaOX8ofIuYKdke+Nw9h4AoFygOaBTb0meNYMb7UmYKkyiL3T9Q94mqF++GIib/Z ltQLriihcn7wxCydaufIvncS2Ah7nqFd5DN2fPN1maJ7hNRnp9t4mSqREd/wp/3A 9fKzcwHeVGJcH2UWA4WwHKMD/YA3xASCI899VvXKC37tZl945vxV3NwRqtLY8Ez3 TlJextlWUvoq8t0aAGQRHqCN1pm6tTRB6lqRZAj7ujetB1/QSO5vxcu7weYDNwaL fPO6RxJxaVnI5iNhPRxHU6EmEOqcQY1WfEf8Hw5wvDv3jHqPMHcMAVyvqgGD4Crc jBFhaU2r7l2mFR//comDbFoyskWUY9+6H+KWk4Lf6NPMwFGtQtzURo7VWxzx/Gxh 5TitXFuP+IWJw+veP7Si2a9fi5o6l7bu2XVLIDzM7H8j7zKRm/PiT5OQgyQ2IPuZ Ilcz9DbOooYRqeunMApdE+FmmqOC8ihldmAOPO/qOgdfM6GLDWckdL/Cu9CkBx/7 8CjX9lmPBZc5v9vaGHKMKIu3LFZ/LG4T6Io2i/9IT2FFJX6PUgBbRwXTSC5rJovt XRxaWHHQmojDZuTfXJrGK6Aspr7fLKgbxxBQpy51wHJbPcCzslE= =TWcn -----END PGP SIGNATURE----- --aawcudn53qgc4hn5-- From owner-svn-src-head@freebsd.org Tue Mar 21 07:27:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9C895D16708; Tue, 21 Mar 2017 07:27:15 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (glebi.us [96.95.210.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 3161418B9; Tue, 21 Mar 2017 07:27:15 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (localhost [127.0.0.1]) by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id v2L7REAS058662 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 21 Mar 2017 00:27:14 -0700 (PDT) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebi.us (8.15.2/8.15.2/Submit) id v2L7REES058661; Tue, 21 Mar 2017 00:27:14 -0700 (PDT) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebi.us: glebius set sender to glebius@FreeBSD.org using -f Date: Tue, 21 Mar 2017 00:27:14 -0700 From: Gleb Smirnoff To: Baptiste Daroussin Cc: Antoine Brodin , svn-src-head@freebsd.org, svn-src-all@freebsd.org, FreeBSD Ports Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321072714.GN23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <20170321064154.GL23308@FreeBSD.org> <20170321065433.GM23308@FreeBSD.org> <20170321072219.ij2waf2rygmvezoh@ivaldir.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170321072219.ij2waf2rygmvezoh@ivaldir.net> User-Agent: Mutt/1.7.2 (2016-11-26) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 07:27:15 -0000 On Tue, Mar 21, 2017 at 08:22:19AM +0100, Baptiste Daroussin wrote: B> On Mon, Mar 20, 2017 at 11:54:33PM -0700, Gleb Smirnoff wrote: B> > On Tue, Mar 21, 2017 at 07:50:32AM +0100, Antoine Brodin wrote: B> > A> > This change is known to break a ton of ports. More than 100 if B> > A> > counting depends. I'm sorry for that and I already started to fix B> > A> > them. B> > A> > B> > A> > Please send all new breakages to me. B> > A> B> > A> Hi, B> > A> B> > A> Exp-runs should happen before breakage happens, not after. B> > A> If you already know that it breaks hundreds of ports, please revert B> > A> and request an exp-run. B> > B> > The exp-run has already been made: B> > B> > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=210673 B> > B> > Wasn't very helpful. B> > B> B> I disagree it was useful it showed you some ports that were breaking given there B> was some high level one you were expected to provide patches to fix them. I'm working on them right now. -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Tue Mar 21 08:42:47 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 22C21D0A068; Tue, 21 Mar 2017 08:42:47 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pg0-x241.google.com (mail-pg0-x241.google.com [IPv6:2607:f8b0:400e:c05::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DCE221EAF; Tue, 21 Mar 2017 08:42:46 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pg0-x241.google.com with SMTP id b5so24226318pgg.1; Tue, 21 Mar 2017 01:42:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=9ajIGkCfMW/0OJFlUjIPiTk2YXShVKNX+LHuIxwebas=; b=kwjRWYDU+7jFFAJnOvfbMiRCndNd7zklrN2Xemtg5Ufcr3tcNSo1GqLz9HsHfOHt5y AaZW8VC7BAbDOquCaW0hYCTFk9s+nYIrx3ma1XY15xF404bbSIVnEWxyjsnj4z2yZ26z gUs4VcYfP8zoCVsTW+h7Qm47ld24L6jZ91jfAdXmv91mXdMPrXCDTnDC7dGS53+1/dvE NSlqI8s7OgaQRM6ZdSl1g11L+tZqMnpy8e56gJG2FTHRLbOQz6XQk/QfSVFedtZQZT8W x0r0DgmUpqHH6BOTS50K5Ark4OOLqkhvJebAGcuY+BwxWBDr7sCmpeR1saOs6Is/aN+f 17ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=9ajIGkCfMW/0OJFlUjIPiTk2YXShVKNX+LHuIxwebas=; b=uUSShsHQHuSiSz91HHBdpKvwNbo/x0+V0CTewFVBuryT7PXU9nPKEKU6zxWnqEFaIi PH6T8/Tm1f4H3rjtXlBo00q02Yyrma/pm3hvjdfK4xilJEqUVf782oZMajC203vaeFt4 NQ9DT/R7w8bln8gTiuDqTX/JZZsFUcgQ08bdGR2SVl0gBHdPZH0EvSHTbBsVBPphKhyK zC42I28SMlOzqAFc5SCIG+McKJdGRXPN6SdFPYeLxZ4xje5iOchCc+uXBiQDxn4Or4AE OviKd8brHrgzWNdQSCAJDZL7xzrabHAInCqx+v+1lmpUa52iHDYYUaYiZL3HTSFK497S sM7Q== X-Gm-Message-State: AFeK/H2g4VWt9W6R0N1DFj8B97Z90iU5kiauv3U9ZE/s2LjcZwMlZkHSQKdymjhrUXYysA== X-Received: by 10.98.93.150 with SMTP id n22mr38961703pfj.103.1490085766223; Tue, 21 Mar 2017 01:42:46 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id r66sm22396010pfi.49.2017.03.21.01.42.45 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 21 Mar 2017 01:42:45 -0700 (PDT) Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_29E8B198-32AF-47C9-94FF-0141A077604F"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: <201703210639.v2L6dnRf055522@repo.freebsd.org> Date: Tue, 21 Mar 2017 01:42:44 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org, Hans Petter Selasky Message-Id: <0D2EB76A-146A-4679-8C56-2A84AFFE1822@gmail.com> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> To: Gleb Smirnoff X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 08:42:47 -0000 --Apple-Mail=_29E8B198-32AF-47C9-94FF-0141A077604F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On Mar 20, 2017, at 23:39, Gleb Smirnoff wrote: >=20 > Author: glebius > Date: Tue Mar 21 06:39:49 2017 > New Revision: 315662 > URL: https://svnweb.freebsd.org/changeset/base/315662 >=20 > Log: > Hide struct inpcb, struct tcpcb from the userland. >=20 > This is a painful change, but it is needed. On the one hand, we = avoid > modifying them, and this slows down some ideas, on the other hand we = still > eventually modify them and tools like netstat(1) never work on next = version of > FreeBSD. We maintain a ton of spares in them, and we already got = some ifdef > hell at the end of tcpcb. >=20 > Details: > - Hide struct inpcb, struct tcpcb under _KERNEL || _WANT_FOO. > - Make struct xinpcb, struct xtcpcb pure API structures, not = including > kernel structures inpcb and tcpcb inside. Export into these = structures > the fields from inpcb and tcpcb that are known to be used, and put = there > a ton of spare space. > - Make kernel and userland utilities compilable after these changes. > - Bump __FreeBSD_version. >=20 > Reviewed by: rrs, gnn > Differential Revision: D10018 This change broke the sdp module: = https://ci.freebsd.org/job/FreeBSD-head-amd64-LINT/2294/console . Thanks, -Ngie --Apple-Mail=_29E8B198-32AF-47C9-94FF-0141A077604F Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJY0OeEAAoJEPWDqSZpMIYVOIAP/0G8/IDlCF/2vEK1lEUwlHES +aeOt0EOJwgwOJBZ0AyEYclZ779j/ES7tSHQh/z0xeNZzwtjw+K5kj+/FDZglE34 eFQOiI2WZZZqI8+1nf1YjZOmFg4u6gZpX1EWQL0g92/acIpy02GEVoj7pcy+luZm 0XIuWY91RNZVT60XdpYVPPSCP55G6IbmI3aFZxt6wCWauruVq+OtDwpmWs9T/3Ec OVKe4wY4FfDKB3t2JZEDxR/Tqbi2oMGjh3eFcD5XN4XgQWin6Dqipk6btpsIbsAo iLn1eYGLLTEMB96pl/bhAbwN74CCRE5K84BIaVm+cxPWQ5FXrpIhENxausOZgxhY hBUvXjlT+usUJy75jC4KAx5vlvR0BxaicwOCgl75QE2fI8LY9BmFKJ4BmnKgrZ9n J4RrtfqnmwRUi36rijDpCMiBuq7jNioTDQ2gcpqsu3COhc/hGNhx0zRymOq0XnMp boDvdyFG1CtYfJ3D/gMTYt8Sfbvw8sA60REZz1E6MVfZL+5dNwX/JJ/r/JE6DcfC 2GpcicXSPW6O9IWpaXSPweL8lTnqH0d+NJ7W/vki6uFHrwa4DASL+9MMNP3AKm2z IaANMGKrkPoA9S4x52VhutJwolRif/XTnlwXIHskmvUGjpwouKlsyZ3zQHn7NdFH SiG6wtezclpJFCqvoBm4 =76pq -----END PGP SIGNATURE----- --Apple-Mail=_29E8B198-32AF-47C9-94FF-0141A077604F-- From owner-svn-src-head@freebsd.org Tue Mar 21 08:44:19 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A773FD0A169; Tue, 21 Mar 2017 08:44:19 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pg0-x241.google.com (mail-pg0-x241.google.com [IPv6:2607:f8b0:400e:c05::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7273C183; Tue, 21 Mar 2017 08:44:19 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pg0-x241.google.com with SMTP id 79so15452261pgf.0; Tue, 21 Mar 2017 01:44:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=YsqrnxI9sPNHkAetG2B6zZpyqbX3xHZndgMTNnW4q44=; b=BWAJtVSO5mAUid/kIE72zup29tZXjN5VQoZeWP6gyv17b/O+zxuhtVDP2s3svJ6CC/ IriL7hju3jdWMpCMgcoA0gDWsp0SmRjRU4UIyhn9Lf12IFI57kIMVo7yZSEyXWFZDJko 02ENiIrU4UC8pxTOSKWAjP369faclGl+jm0CCYTJ+RCNiy9lULkHGdU0LX8yy0W/Bfyt KJAeiaTY3mFTl1P8/x4HWr8cV4lfCnG1z5CF2jPjnM824+agemcyhaxrbp+EZoB6KhVs H7snGBAsFKY+p/BgcYpWrl5xXOnk/tO7M0ulDTXQmYdWGZ3vSuxEf74Csu7RiiAdquWM jDlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=YsqrnxI9sPNHkAetG2B6zZpyqbX3xHZndgMTNnW4q44=; b=lTvlyZW6Gwn5n8qsvWGz3L+DdSFeK2vMud+Onr5QS2xeXPAyYp9BBGg8i+SWzPB1N3 /TPeM/tvRD03OwwdcgPT1Evuby8b5IVnU6726f5zljBSCvkOM1PZYwx6xDceborma4d4 /U0LAaJeACtwEf/WdZuinEMjwCRJedG6sovbou6FgwdR8T4f2CourLzRmSWiw1T28tYA 9GzvlruZOSn8x9hwe+AQQAMPSsKwSG1c+txR5GyLCV8H4D7mdomwegvNR9j6cb2a3p35 9ZYI1AnRlP0g5FIMlJJ0FsnUQy2faV1EIRYuEiJoe1PKvt3TYsyH/F0AMkNSJkigqM16 MMwg== X-Gm-Message-State: AFeK/H3C0raXogxk4wFoimcOFts8n/OV2C1DZfzmxXiWZV4zXWSYbUxWHuxfO/dsbw0sOQ== X-Received: by 10.84.225.2 with SMTP id t2mr29646403plj.14.1490085858889; Tue, 21 Mar 2017 01:44:18 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id 194sm37831223pfx.134.2017.03.21.01.44.17 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 21 Mar 2017 01:44:18 -0700 (PDT) Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_73FC7939-9E0A-4A14-81AE-A87D3D9BC12E"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: <0D2EB76A-146A-4679-8C56-2A84AFFE1822@gmail.com> Date: Tue, 21 Mar 2017 01:44:17 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org, Hans Petter Selasky Message-Id: References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <0D2EB76A-146A-4679-8C56-2A84AFFE1822@gmail.com> To: Gleb Smirnoff X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 08:44:19 -0000 --Apple-Mail=_73FC7939-9E0A-4A14-81AE-A87D3D9BC12E Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On Mar 21, 2017, at 01:42, Ngie Cooper (yaneurabeya) = wrote: >=20 >>=20 >> On Mar 20, 2017, at 23:39, Gleb Smirnoff wrote: >>=20 >> Author: glebius >> Date: Tue Mar 21 06:39:49 2017 >> New Revision: 315662 >> URL: https://svnweb.freebsd.org/changeset/base/315662 >>=20 >> Log: >> Hide struct inpcb, struct tcpcb from the userland. >>=20 >> This is a painful change, but it is needed. On the one hand, we = avoid >> modifying them, and this slows down some ideas, on the other hand we = still >> eventually modify them and tools like netstat(1) never work on next = version of >> FreeBSD. We maintain a ton of spares in them, and we already got = some ifdef >> hell at the end of tcpcb. >>=20 >> Details: >> - Hide struct inpcb, struct tcpcb under _KERNEL || _WANT_FOO. >> - Make struct xinpcb, struct xtcpcb pure API structures, not = including >> kernel structures inpcb and tcpcb inside. Export into these = structures >> the fields from inpcb and tcpcb that are known to be used, and put = there >> a ton of spare space. >> - Make kernel and userland utilities compilable after these changes. >> - Bump __FreeBSD_version. >>=20 >> Reviewed by: rrs, gnn >> Differential Revision: D10018 >=20 > This change broke the sdp module: = https://ci.freebsd.org/job/FreeBSD-head-amd64-LINT/2294/console . > Thanks, > -Ngie It also broke gcc buildworld: = https://ci.freebsd.org/job/FreeBSD-head-sparc64-build/47/console . Thanks, -Ngie --Apple-Mail=_73FC7939-9E0A-4A14-81AE-A87D3D9BC12E Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJY0OfhAAoJEPWDqSZpMIYVtbcP/3HET4HACQTkYWlhWCxJnR8T B3recApLMTdA+I+RwfClD4z1GvKrbDGY7MU/Qz/Ozz038/qJApCIa2dYadzwzUiy ZdFLRLuVKa8Y/bhCQzLgktHi/bIjWdIqP+w0Xz2MYcgXGtGyKm5MBgmknZpC1txE 5kkOBOmY2YVXIBFOtEfhhAVEl7FYwP7DnFNhAmBlrLKNzYK+e9hmiYQue3N8SGoB RYF3yP2PsG6U84lRJgo7DJEMX3zi3vHE39BwyuPgog7ZrECBxekrWfodvmuEK7+v brR1s41+50Bk4nfeZk/0c+hwC6d76npOZF7xZmbxT5/pA3Q/QHJBEfeys2Ki1J21 fkhk7njI8dKxZ9TZcAeiHT/rYdHKwG+6dSjtOz2ZJQoyfM14To1NyPXqfE2xWPj8 +FQvu4lgv13dOJXbOX7zTwORclsXJE7WVPT0zT+yQlDYdjvkVzhoszYRAoPvWy5w UDnUBbEoGDLxMqkMIsKkgTpp/7VHa6EZYFxzvqrbohHt60yXkqx+Cu1qZlJnJKbJ ewY2ZbeMXe6KCuiSHg3AdDc+ps/YwYrpouekrzZcyaXHzfenGHt9TNTfyH+Mux4g L6ZmalM065hp4GvHsI/+LXLpkDgGCXT4ZH0UjCgODYR1krq/SAuQFzuVdcKAcgL1 k3wQeiDS/7BadZpFXZMB =xFn8 -----END PGP SIGNATURE----- --Apple-Mail=_73FC7939-9E0A-4A14-81AE-A87D3D9BC12E-- From owner-svn-src-head@freebsd.org Tue Mar 21 08:56:14 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CFD9DD0A915; Tue, 21 Mar 2017 08:56:14 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9CE5BD76; Tue, 21 Mar 2017 08:56:14 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2L8uD3G014641; Tue, 21 Mar 2017 08:56:13 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2L8uDFi014640; Tue, 21 Mar 2017 08:56:13 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703210856.v2L8uDFi014640@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 21 Mar 2017 08:56:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315670 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 08:56:14 -0000 Author: mav Date: Tue Mar 21 08:56:13 2017 New Revision: 315670 URL: https://svnweb.freebsd.org/changeset/base/315670 Log: Addition to r315579: drop the lock while allocating IRQs. MFC after: 12 days Modified: head/sys/dev/isp/isp_pci.c Modified: head/sys/dev/isp/isp_pci.c ============================================================================== --- head/sys/dev/isp/isp_pci.c Tue Mar 21 08:39:36 2017 (r315669) +++ head/sys/dev/isp/isp_pci.c Tue Mar 21 08:56:13 2017 (r315670) @@ -2054,6 +2054,7 @@ isp_pci_irqsetup(ispsoftc_t *isp) if (isp->isp_nirq > 0) return (0); + ISP_UNLOCK(isp); if (ISP_CAP_MSIX(isp)) { max_irq = min(ISP_MAX_IRQS, IS_26XX(isp) ? 3 : 2); pcs->msicount = imin(pci_msix_count(dev), max_irq); @@ -2094,6 +2095,7 @@ isp_pci_irqsetup(ispsoftc_t *isp) } isp->isp_nirq = i + 1; } + ISP_LOCK(isp); return (isp->isp_nirq == 0); } From owner-svn-src-head@freebsd.org Tue Mar 21 08:57:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0F921D0A9AA; Tue, 21 Mar 2017 08:57:22 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D3270F22; Tue, 21 Mar 2017 08:57:21 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2L8vKYu014731; Tue, 21 Mar 2017 08:57:20 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2L8vK5X014730; Tue, 21 Mar 2017 08:57:20 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <201703210857.v2L8vK5X014730@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Tue, 21 Mar 2017 08:57:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315671 - head/usr.bin/sockstat X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 08:57:22 -0000 Author: glebius Date: Tue Mar 21 08:57:20 2017 New Revision: 315671 URL: https://svnweb.freebsd.org/changeset/base/315671 Log: Shut up gcc. Modified: head/usr.bin/sockstat/sockstat.c Modified: head/usr.bin/sockstat/sockstat.c ============================================================================== --- head/usr.bin/sockstat/sockstat.c Tue Mar 21 08:56:13 2017 (r315670) +++ head/usr.bin/sockstat/sockstat.c Tue Mar 21 08:57:20 2017 (r315671) @@ -561,7 +561,7 @@ gather_inet(int proto) { struct xinpgen *xig, *exig; struct xinpcb *xip; - struct xtcpcb *xtp; + struct xtcpcb *xtp = NULL; struct xsocket *so; struct sock *sock; struct addr *laddr, *faddr; From owner-svn-src-head@freebsd.org Tue Mar 21 09:07:07 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 22354D141B5; Tue, 21 Mar 2017 09:07:07 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E2E0717E0; Tue, 21 Mar 2017 09:07:06 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2L975Dn019007; Tue, 21 Mar 2017 09:07:05 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2L975ga019006; Tue, 21 Mar 2017 09:07:05 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <201703210907.v2L975ga019006@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Tue, 21 Mar 2017 09:07:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315672 - head/sys/ofed/drivers/infiniband/ulp/sdp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 09:07:07 -0000 Author: glebius Date: Tue Mar 21 09:07:05 2017 New Revision: 315672 URL: https://svnweb.freebsd.org/changeset/base/315672 Log: Make sdp compilable after r315662. Modified: head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Modified: head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c ============================================================================== --- head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Tue Mar 21 08:57:20 2017 (r315671) +++ head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Tue Mar 21 09:07:05 2017 (r315672) @@ -1859,12 +1859,10 @@ sdp_pcblist(SYSCTL_HANDLER_ARGS) xt.xt_inp.inp_lport = ssk->lport; memcpy(&xt.xt_inp.inp_faddr, &ssk->faddr, sizeof(ssk->faddr)); xt.xt_inp.inp_fport = ssk->fport; - xt.xt_tp.t_state = ssk->state; + xt.t_state = ssk->state; if (ssk->socket != NULL) - sotoxsocket(ssk->socket, &xt.xt_socket); - else - bzero(&xt.xt_socket, sizeof xt.xt_socket); - xt.xt_socket.xso_protocol = IPPROTO_TCP; + sotoxsocket(ssk->socket, &xt.xt_inp.xi_socket); + xt.xt_inp.xi_socket.xso_protocol = IPPROTO_TCP; SDP_RUNLOCK(ssk); error = SYSCTL_OUT(req, &xt, sizeof xt); if (error) From owner-svn-src-head@freebsd.org Tue Mar 21 09:07:37 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F04FAD142FE; Tue, 21 Mar 2017 09:07:37 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (glebi.us [96.95.210.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id D7FF5197F; Tue, 21 Mar 2017 09:07:37 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (localhost [127.0.0.1]) by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id v2L97a9L059436 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 21 Mar 2017 02:07:36 -0700 (PDT) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebi.us (8.15.2/8.15.2/Submit) id v2L97at0059435; Tue, 21 Mar 2017 02:07:36 -0700 (PDT) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebi.us: glebius set sender to glebius@FreeBSD.org using -f Date: Tue, 21 Mar 2017 02:07:36 -0700 From: Gleb Smirnoff To: "Ngie Cooper (yaneurabeya)" Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org, Hans Petter Selasky Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321090736.GP23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <0D2EB76A-146A-4679-8C56-2A84AFFE1822@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <0D2EB76A-146A-4679-8C56-2A84AFFE1822@gmail.com> User-Agent: Mutt/1.7.2 (2016-11-26) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 09:07:38 -0000 Ngie, On Tue, Mar 21, 2017 at 01:42:44AM -0700, Ngie Cooper (yaneurabeya) wrote: N> This change broke the sdp module: https://ci.freebsd.org/job/FreeBSD-head-amd64-LINT/2294/console . N> Thanks, N> -Ngie Thanks for heads up. Fixed. -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Tue Mar 21 09:12:43 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 45F96D146C8; Tue, 21 Mar 2017 09:12:43 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1E1161FAF; Tue, 21 Mar 2017 09:12:43 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2L9Cgjo023173; Tue, 21 Mar 2017 09:12:42 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2L9CfmS023170; Tue, 21 Mar 2017 09:12:41 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703210912.v2L9CfmS023170@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 21 Mar 2017 09:12:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315673 - in head/sys: cam sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 09:12:43 -0000 Author: mav Date: Tue Mar 21 09:12:41 2017 New Revision: 315673 URL: https://svnweb.freebsd.org/changeset/base/315673 Log: Make CAM SIM lock optional. For three years now CAM does not use SIM lock, but still enforces SIM to use it. Remove this requirement, allowing SIMs to have any locking they prefer, if they pass no mutex to cam_sim_alloc(). MFC after: 2 weeks Modified: head/sys/cam/cam_sim.c head/sys/cam/cam_xpt.c head/sys/sys/param.h Modified: head/sys/cam/cam_sim.c ============================================================================== --- head/sys/cam/cam_sim.c Tue Mar 21 09:07:05 2017 (r315672) +++ head/sys/cam/cam_sim.c Tue Mar 21 09:12:41 2017 (r315673) @@ -46,6 +46,9 @@ __FBSDID("$FreeBSD$"); static MALLOC_DEFINE(M_CAMSIM, "CAM SIM", "CAM SIM buffers"); +static struct mtx cam_sim_free_mtx; +MTX_SYSINIT(cam_sim_free_init, &cam_sim_free_mtx, "CAM SIM free lock", MTX_DEF); + struct cam_devq * cam_simq_alloc(u_int32_t max_sim_transactions) { @@ -66,9 +69,6 @@ cam_sim_alloc(sim_action_func sim_action { struct cam_sim *sim; - if (mtx == NULL) - return (NULL); - sim = (struct cam_sim *)malloc(sizeof(struct cam_sim), M_CAMSIM, M_ZERO | M_NOWAIT); @@ -101,16 +101,23 @@ cam_sim_alloc(sim_action_func sim_action void cam_sim_free(struct cam_sim *sim, int free_devq) { + struct mtx *mtx = sim->mtx; int error; - mtx_assert(sim->mtx, MA_OWNED); + if (mtx) { + mtx_assert(mtx, MA_OWNED); + } else { + mtx = &cam_sim_free_mtx; + mtx_lock(mtx); + } sim->refcount--; if (sim->refcount > 0) { - error = msleep(sim, sim->mtx, PRIBIO, "simfree", 0); + error = msleep(sim, mtx, PRIBIO, "simfree", 0); KASSERT(error == 0, ("invalid error value for msleep(9)")); } - KASSERT(sim->refcount == 0, ("sim->refcount == 0")); + if (sim->mtx == NULL) + mtx_unlock(mtx); if (free_devq) cam_simq_free(sim->devq); @@ -120,31 +127,43 @@ cam_sim_free(struct cam_sim *sim, int fr void cam_sim_release(struct cam_sim *sim) { - int lock; + struct mtx *mtx = sim->mtx; - lock = (mtx_owned(sim->mtx) == 0); - if (lock) - CAM_SIM_LOCK(sim); + if (mtx) { + if (!mtx_owned(mtx)) + mtx_lock(mtx); + else + mtx = NULL; + } else { + mtx = &cam_sim_free_mtx; + mtx_lock(mtx); + } KASSERT(sim->refcount >= 1, ("sim->refcount >= 1")); sim->refcount--; if (sim->refcount == 0) wakeup(sim); - if (lock) - CAM_SIM_UNLOCK(sim); + if (mtx) + mtx_unlock(mtx); } void cam_sim_hold(struct cam_sim *sim) { - int lock; + struct mtx *mtx = sim->mtx; - lock = (mtx_owned(sim->mtx) == 0); - if (lock) - CAM_SIM_LOCK(sim); + if (mtx) { + if (!mtx_owned(mtx)) + mtx_lock(mtx); + else + mtx = NULL; + } else { + mtx = &cam_sim_free_mtx; + mtx_lock(mtx); + } KASSERT(sim->refcount >= 1, ("sim->refcount >= 1")); sim->refcount++; - if (lock) - CAM_SIM_UNLOCK(sim); + if (mtx) + mtx_unlock(mtx); } void Modified: head/sys/cam/cam_xpt.c ============================================================================== --- head/sys/cam/cam_xpt.c Tue Mar 21 09:07:05 2017 (r315672) +++ head/sys/cam/cam_xpt.c Tue Mar 21 09:12:41 2017 (r315673) @@ -2523,7 +2523,7 @@ xpt_action_default(union ccb *start_ccb) { struct cam_path *path; struct cam_sim *sim; - int lock; + struct mtx *mtx; path = start_ccb->ccb_h.path; CAM_DEBUG(path, CAM_DEBUG_TRACE, @@ -2681,16 +2681,18 @@ xpt_action_default(union ccb *start_ccb) case XPT_PATH_INQ: call_sim: sim = path->bus->sim; - lock = (mtx_owned(sim->mtx) == 0); - if (lock) - CAM_SIM_LOCK(sim); + mtx = sim->mtx; + if (mtx && !mtx_owned(mtx)) + mtx_lock(mtx); + else + mtx = NULL; CAM_DEBUG(path, CAM_DEBUG_TRACE, ("sim->sim_action: func=%#x\n", start_ccb->ccb_h.func_code)); (*(sim->sim_action))(sim, start_ccb); CAM_DEBUG(path, CAM_DEBUG_TRACE, ("sim->sim_action: status=%#x\n", start_ccb->ccb_h.status)); - if (lock) - CAM_SIM_UNLOCK(sim); + if (mtx) + mtx_unlock(mtx); break; case XPT_PATH_STATS: start_ccb->cpis.last_reset = path->bus->last_reset; @@ -2914,8 +2916,8 @@ call_sim: break; } cur_entry->event_enable = csa->event_enable; - cur_entry->event_lock = - mtx_owned(path->bus->sim->mtx) ? 1 : 0; + cur_entry->event_lock = (path->bus->sim->mtx && + mtx_owned(path->bus->sim->mtx)) ? 1 : 0; cur_entry->callback_arg = csa->callback_arg; cur_entry->callback = csa->callback; SLIST_INSERT_HEAD(async_head, cur_entry, links); @@ -3082,10 +3084,12 @@ xpt_polled_action(union ccb *start_ccb) struct cam_sim *sim; struct cam_devq *devq; struct cam_ed *dev; + struct mtx *mtx; timeout = start_ccb->ccb_h.timeout * 10; sim = start_ccb->ccb_h.path->bus->sim; devq = sim->devq; + mtx = sim->mtx; dev = start_ccb->ccb_h.path->device; mtx_unlock(&dev->device_mtx); @@ -3100,9 +3104,11 @@ xpt_polled_action(union ccb *start_ccb) (--timeout > 0)) { mtx_unlock(&devq->send_mtx); DELAY(100); - CAM_SIM_LOCK(sim); + if (mtx) + mtx_lock(mtx); (*(sim->sim_poll))(sim); - CAM_SIM_UNLOCK(sim); + if (mtx) + mtx_unlock(mtx); camisr_runqueue(); mtx_lock(&devq->send_mtx); } @@ -3112,9 +3118,11 @@ xpt_polled_action(union ccb *start_ccb) if (timeout != 0) { xpt_action(start_ccb); while(--timeout > 0) { - CAM_SIM_LOCK(sim); + if (mtx) + mtx_lock(mtx); (*(sim->sim_poll))(sim); - CAM_SIM_UNLOCK(sim); + if (mtx) + mtx_unlock(mtx); camisr_runqueue(); if ((start_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_INPROG) @@ -3271,7 +3279,7 @@ restart: static void xpt_run_devq(struct cam_devq *devq) { - int lock; + struct mtx *mtx; CAM_DEBUG_PRINT(CAM_DEBUG_XPT, ("xpt_run_devq\n")); @@ -3361,13 +3369,15 @@ xpt_run_devq(struct cam_devq *devq) * queued device, rather than the one from the calling bus. */ sim = device->sim; - lock = (mtx_owned(sim->mtx) == 0); - if (lock) - CAM_SIM_LOCK(sim); + mtx = sim->mtx; + if (mtx && !mtx_owned(mtx)) + mtx_lock(mtx); + else + mtx = NULL; work_ccb->ccb_h.qos.sim_data = sbinuptime(); // xxx uintprt_t too small 32bit platforms (*(sim->sim_action))(sim, work_ccb); - if (lock) - CAM_SIM_UNLOCK(sim); + if (mtx) + mtx_unlock(mtx); mtx_lock(&devq->send_mtx); } devq->send_queue.qfrozen_cnt--; @@ -3878,8 +3888,6 @@ xpt_bus_register(struct cam_sim *sim, de struct cam_path *path; cam_status status; - mtx_assert(sim->mtx, MA_OWNED); - sim->bus_id = bus; new_bus = (struct cam_eb *)malloc(sizeof(*new_bus), M_CAMXPT, M_NOWAIT|M_ZERO); Modified: head/sys/sys/param.h ============================================================================== --- head/sys/sys/param.h Tue Mar 21 09:07:05 2017 (r315672) +++ head/sys/sys/param.h Tue Mar 21 09:12:41 2017 (r315673) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1200026 /* Master, propagated to newvers */ +#define __FreeBSD_version 1200027 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, From owner-svn-src-head@freebsd.org Tue Mar 21 09:19:27 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BC2DED149CD; Tue, 21 Mar 2017 09:19:27 +0000 (UTC) (envelope-from mat@FreeBSD.org) Received: from prod2.absolight.net (mx3.absolight.net [IPv6:2a01:678:2:100::25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "plouf.absolight.net", Issuer "CAcert Class 3 Root" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 739C977D; Tue, 21 Mar 2017 09:19:27 +0000 (UTC) (envelope-from mat@FreeBSD.org) Received: from prod2.absolight.net (localhost [127.0.0.1]) by prod2.absolight.net (Postfix) with ESMTP id E8CD2BDC9F; Tue, 21 Mar 2017 10:19:25 +0100 (CET) Received: from atuin.in.mat.cc (atuin.in.mat.cc [79.143.241.205]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by prod2.absolight.net (Postfix) with ESMTPSA id 88506BDC85; Tue, 21 Mar 2017 10:19:25 +0100 (CET) Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt To: Gleb Smirnoff , Baptiste Daroussin References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <20170321064154.GL23308@FreeBSD.org> <20170321065433.GM23308@FreeBSD.org> <20170321072219.ij2waf2rygmvezoh@ivaldir.net> <20170321072714.GN23308@FreeBSD.org> Cc: svn-src-head@freebsd.org, Antoine Brodin , svn-src-all@freebsd.org, FreeBSD Ports From: Mathieu Arnold Organization: Absolight / The FreeBSD Foundation Message-ID: <81f57d51-8ccf-e0a7-ec9a-5ef816998e76@FreeBSD.org> Date: Tue, 21 Mar 2017 10:19:24 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170321072714.GN23308@FreeBSD.org> Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="ctH08Red9og3IeD3F9I9jDBxnJW5TtNjq" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 09:19:27 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --ctH08Red9og3IeD3F9I9jDBxnJW5TtNjq Content-Type: multipart/mixed; boundary="3G6t57FRSj5oxA7wT2xXjEinbLQtHvp8S"; protected-headers="v1" From: Mathieu Arnold To: Gleb Smirnoff , Baptiste Daroussin Cc: svn-src-head@freebsd.org, Antoine Brodin , svn-src-all@freebsd.org, FreeBSD Ports Message-ID: <81f57d51-8ccf-e0a7-ec9a-5ef816998e76@FreeBSD.org> Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <20170321064154.GL23308@FreeBSD.org> <20170321065433.GM23308@FreeBSD.org> <20170321072219.ij2waf2rygmvezoh@ivaldir.net> <20170321072714.GN23308@FreeBSD.org> In-Reply-To: <20170321072714.GN23308@FreeBSD.org> --3G6t57FRSj5oxA7wT2xXjEinbLQtHvp8S Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Le 21/03/2017 =C3=A0 08:27, Gleb Smirnoff a =C3=A9crit : > On Tue, Mar 21, 2017 at 08:22:19AM +0100, Baptiste Daroussin wrote: > B> On Mon, Mar 20, 2017 at 11:54:33PM -0700, Gleb Smirnoff wrote: > B> > On Tue, Mar 21, 2017 at 07:50:32AM +0100, Antoine Brodin wrote: > B> > A> > This change is known to break a ton of ports. More than 100= if > B> > A> > counting depends. I'm sorry for that and I already started to= fix > B> > A> > them. > B> > A> > > B> > A> > Please send all new breakages to me. > B> > A>=20 > B> > A> Hi, > B> > A>=20 > B> > A> Exp-runs should happen before breakage happens, not after. > B> > A> If you already know that it breaks hundreds of ports, please re= vert > B> > A> and request an exp-run. > B> >=20 > B> > The exp-run has already been made: > B> >=20 > B> > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D210673 > B> >=20 > B> > Wasn't very helpful. > B> >=20 > B>=20 > B> I disagree it was useful it showed you some ports that were breaking= given there > B> was some high level one you were expected to provide patches to fix = them. > > I'm working on them right now. You should have worked on it *before* the patch breaking everything landed, providing patches for the ports that were reported as broken, and repeat until all the ports that were building before were building again. You should **not** have committed the patch to the src tree before all those patches were created, and you should have committed all the patches at once, preferably before committing the patch to the src tree. --=20 Mathieu Arnold --3G6t57FRSj5oxA7wT2xXjEinbLQtHvp8S-- --ctH08Red9og3IeD3F9I9jDBxnJW5TtNjq Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQJ8BAEBCgBmBQJY0PAdXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQzQUI2OTc4OUQyRUQxMjEwNjQ0MEJBNUIz QTQ1MTZGMzUxODNDRTQ4AAoJEDpFFvNRg85IbrkP/A9iqvNzbJz2BlimQXIFJqXn qqA1IejQOWf5hTqQGAbgwYMgqF7z2V3/7uVCx/8TOw1aBFqhkGnr8jHfhcjCrrDu 2HcUxkhAmj4BsmiuqY+xdcCsjp1sT6YsDd9bfxWM+hZVpPx/X9Rsn9v6ovI0C9f7 e6njzGWakw4M2QU9aVasFfEU6IdaD3OMvHhzuqmfNtPse0Wdn3HxN49VQYOb4MjJ 5QwXqorwVoP3BYfLqWtUwXp6H6p//pLOZN5aLXG5P5eIwXbSBss48I1wPolSauV/ 87v7dAnfLZpKBsGW4wDW9jAzIR6ueQRzxcrlcayqab9zRuiIs60KylTOzzGacpwm q+O9RitGhOGJCAK8sore2/bJ61xkzab3bf0eeMgwSixlYEqO4bwkAF0D4jvQQCH8 1oagASi6AlCUlFjcf9dgu3CMCrqt9OMzHWwlTVGi8HxOb0mMTM9SanGgV9Hl5EkT 2pibjNjW2/9Niby5BXiHNO2eVHYrSv0exFKrJJfno8VfDgwKLeEyN52BOzOKP22G sQkhYrbpdIHWUo3s4H6ILR/uHsEetImCanvGp6qxRmgqW0f4C2cldjcrEH7rDzJg sN4iRpNpMp5NYahUaC00viGKe++N3VMx8Ho1H0qLFuyTJpB3yaj8kl1YAnvmJ7j0 6xM5QkGq165PfJ61yMwn =rNRe -----END PGP SIGNATURE----- --ctH08Red9og3IeD3F9I9jDBxnJW5TtNjq-- From owner-svn-src-head@freebsd.org Tue Mar 21 09:24:09 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 19504D14CBC; Tue, 21 Mar 2017 09:24:09 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DD3DCB6C; Tue, 21 Mar 2017 09:24:08 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2L9O8n4027361; Tue, 21 Mar 2017 09:24:08 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2L9O7WA027360; Tue, 21 Mar 2017 09:24:07 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703210924.v2L9O7WA027360@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 21 Mar 2017 09:24:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315674 - head/sys/cam X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 09:24:09 -0000 Author: mav Date: Tue Mar 21 09:24:07 2017 New Revision: 315674 URL: https://svnweb.freebsd.org/changeset/base/315674 Log: Minor cosmetic addition to r315673. Now CAM_SIM_LOCK() macros are not used and may be removed later. MFC after: 2 weeks Modified: head/sys/cam/cam_xpt.c Modified: head/sys/cam/cam_xpt.c ============================================================================== --- head/sys/cam/cam_xpt.c Tue Mar 21 09:12:41 2017 (r315673) +++ head/sys/cam/cam_xpt.c Tue Mar 21 09:24:07 2017 (r315674) @@ -4241,7 +4241,7 @@ xpt_async_bcast(struct async_list *async struct cam_path *path, void *async_arg) { struct async_node *cur_entry; - int lock; + struct mtx *mtx; cur_entry = SLIST_FIRST(async_head); while (cur_entry != NULL) { @@ -4253,14 +4253,15 @@ xpt_async_bcast(struct async_list *async */ next_entry = SLIST_NEXT(cur_entry, links); if ((cur_entry->event_enable & async_code) != 0) { - lock = cur_entry->event_lock; - if (lock) - CAM_SIM_LOCK(path->device->sim); + mtx = cur_entry->event_lock ? + path->device->sim->mtx : NULL; + if (mtx) + mtx_lock(mtx); cur_entry->callback(cur_entry->callback_arg, async_code, path, async_arg); - if (lock) - CAM_SIM_UNLOCK(path->device->sim); + if (mtx) + mtx_unlock(mtx); } cur_entry = next_entry; } From owner-svn-src-head@freebsd.org Tue Mar 21 10:34:36 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 25510D1449D; Tue, 21 Mar 2017 10:34:36 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DB395DFF; Tue, 21 Mar 2017 10:34:35 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LAYYTd055514; Tue, 21 Mar 2017 10:34:34 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LAYYJT055510; Tue, 21 Mar 2017 10:34:34 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703211034.v2LAYYJT055510@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 21 Mar 2017 10:34:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315677 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 10:34:36 -0000 Author: mav Date: Tue Mar 21 10:34:34 2017 New Revision: 315677 URL: https://svnweb.freebsd.org/changeset/base/315677 Log: Clean/unify some macro usage. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_freebsd.h head/sys/dev/isp/isp_pci.c head/sys/dev/isp/isp_sbus.c Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Tue Mar 21 09:38:59 2017 (r315676) +++ head/sys/dev/isp/isp_freebsd.c Tue Mar 21 10:34:34 2017 (r315677) @@ -112,14 +112,11 @@ isp_attach_chan(ispsoftc_t *isp, struct int i; #endif - /* - * Construct our SIM entry. - */ - sim = cam_sim_alloc(isp_action, isp_poll, "isp", isp, device_get_unit(isp->isp_dev), &isp->isp_osinfo.lock, isp->isp_maxcmds, isp->isp_maxcmds, devq); - - if (sim == NULL) { + sim = cam_sim_alloc(isp_action, isp_poll, "isp", isp, + device_get_unit(isp->isp_dev), &isp->isp_lock, + isp->isp_maxcmds, isp->isp_maxcmds, devq); + if (sim == NULL) return (ENOMEM); - } ISP_LOCK(isp); if (xpt_bus_register(sim, isp->isp_dev, chan) != CAM_SUCCESS) { @@ -173,7 +170,7 @@ isp_attach_chan(ispsoftc_t *isp, struct fc->isp = isp; fc->ready = 1; - callout_init_mtx(&fc->gdt, &isp->isp_osinfo.lock, 0); + callout_init_mtx(&fc->gdt, &isp->isp_lock, 0); TASK_INIT(&fc->gtask, 1, isp_gdt_task, fc); #ifdef ISP_TARGET_MODE TAILQ_INIT(&fc->waitq); @@ -267,7 +264,7 @@ isp_detach_chan(ispsoftc_t *isp, int cha /* Wait for the channel's spawned threads to exit. */ wakeup(isp->isp_osinfo.pc.ptr); while (*num_threads != 0) - mtx_sleep(isp, &isp->isp_osinfo.lock, PRIBIO, "isp_reap", 100); + mtx_sleep(isp, &isp->isp_lock, PRIBIO, "isp_reap", 100); } int @@ -291,7 +288,7 @@ isp_attach(ispsoftc_t *isp) } } - callout_init_mtx(&isp->isp_osinfo.tmo, &isp->isp_osinfo.lock, 0); + callout_init_mtx(&isp->isp_osinfo.tmo, &isp->isp_lock, 0); isp_timer_count = hz >> 2; callout_reset(&isp->isp_osinfo.tmo, isp_timer_count, isp_timer, isp); @@ -2805,8 +2802,7 @@ isp_kthread(void *arg) int slp = 0, d; int lb, lim; - mtx_lock(&isp->isp_osinfo.lock); - + ISP_LOCK(isp); while (isp->isp_osinfo.is_exiting == 0) { isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Checking FC state", chan); @@ -2860,10 +2856,10 @@ isp_kthread(void *arg) isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d sleep for %d seconds", chan, slp); - msleep(fc, &isp->isp_osinfo.lock, PRIBIO, "ispf", slp * hz); + msleep(fc, &isp->isp_lock, PRIBIO, "ispf", slp * hz); } fc->num_threads -= 1; - mtx_unlock(&isp->isp_osinfo.lock); + ISP_UNLOCK(isp); kthread_exit(); } @@ -2969,13 +2965,13 @@ isp_action(struct cam_sim *sim, union cc CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("isp_action\n")); isp = (ispsoftc_t *)cam_sim_softc(sim); - mtx_assert(&isp->isp_lock, MA_OWNED); + ISP_ASSERT_LOCKED(isp); + bus = cam_sim_bus(sim); isp_prt(isp, ISP_LOGDEBUG2, "isp_action code %x", ccb->ccb_h.func_code); ISP_PCMD(ccb) = NULL; switch (ccb->ccb_h.func_code) { case XPT_SCSI_IO: /* Execute the requested I/O operation */ - bus = XS_CHANNEL(ccb); /* * Do a couple of preliminary checks... */ @@ -3133,7 +3129,6 @@ isp_action(struct cam_sim *sim, union cc break; #endif case XPT_RESET_DEV: /* BDR the specified SCSI device */ - bus = cam_sim_bus(xpt_path_sim(ccb->ccb_h.path)); tgt = ccb->ccb_h.target_id; tgt |= (bus << 16); @@ -3192,7 +3187,6 @@ isp_action(struct cam_sim *sim, union cc break; } tgt = cts->ccb_h.target_id; - bus = cam_sim_bus(xpt_path_sim(cts->ccb_h.path)); if (IS_SCSI(isp)) { struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi; struct ccb_trans_settings_spi *spi = &cts->xport_specific.spi; @@ -3257,7 +3251,6 @@ isp_action(struct cam_sim *sim, union cc case XPT_GET_TRAN_SETTINGS: cts = &ccb->cts; tgt = cts->ccb_h.target_id; - bus = cam_sim_bus(xpt_path_sim(cts->ccb_h.path)); if (IS_FC(isp)) { fcparam *fcp = FCPARAM(isp, bus); struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi; @@ -3346,7 +3339,6 @@ isp_action(struct cam_sim *sim, union cc break; case XPT_RESET_BUS: /* Reset the specified bus */ - bus = cam_sim_bus(sim); error = isp_control(isp, ISPCTL_RESET_BUS, bus); if (error) { ccb->ccb_h.status = CAM_REQ_CMP_ERR; @@ -3381,7 +3373,6 @@ isp_action(struct cam_sim *sim, union cc break; } - bus = cam_sim_bus(xpt_path_sim(kp->ccb_h.path)); fcp = FCPARAM(isp, bus); if (kp->xport_specific.fc.valid & KNOB_VALID_ADDRESS) { @@ -3441,7 +3432,6 @@ isp_action(struct cam_sim *sim, union cc if (IS_FC(isp)) { fcparam *fcp; - bus = cam_sim_bus(xpt_path_sim(kp->ccb_h.path)); fcp = FCPARAM(isp, bus); kp->xport_specific.fc.wwnn = fcp->isp_wwnn; @@ -3489,7 +3479,6 @@ isp_action(struct cam_sim *sim, union cc else cpi->maxio = (ISP_NSEG_MAX - 1) * PAGE_SIZE; - bus = cam_sim_bus(xpt_path_sim(cpi->ccb_h.path)); if (IS_FC(isp)) { fcparam *fcp = FCPARAM(isp, bus); @@ -4059,7 +4048,7 @@ isp_mbox_wait_complete(ispsoftc_t *isp, if (isp->isp_osinfo.mbox_sleep_ok) { isp->isp_osinfo.mbox_sleep_ok = 0; isp->isp_osinfo.mbox_sleeping = 1; - msleep_sbt(&isp->isp_osinfo.mboxcmd_done, &isp->isp_osinfo.lock, + msleep_sbt(&isp->isp_osinfo.mboxcmd_done, &isp->isp_lock, PRIBIO, "ispmbx_sleep", to * SBT_1US, 0, 0); isp->isp_osinfo.mbox_sleep_ok = 1; isp->isp_osinfo.mbox_sleeping = 0; Modified: head/sys/dev/isp/isp_freebsd.h ============================================================================== --- head/sys/dev/isp/isp_freebsd.h Tue Mar 21 09:38:59 2017 (r315676) +++ head/sys/dev/isp/isp_freebsd.h Tue Mar 21 10:34:34 2017 (r315677) @@ -356,9 +356,9 @@ struct isposinfo { /* * Locking macros... */ -#define ISP_LOCK(isp) mtx_lock(&(isp)->isp_osinfo.lock) -#define ISP_UNLOCK(isp) mtx_unlock(&(isp)->isp_osinfo.lock) -#define ISP_ASSERT_LOCKED(isp) mtx_assert(&(isp)->isp_osinfo.lock, MA_OWNED) +#define ISP_LOCK(isp) mtx_lock(&(isp)->isp_lock) +#define ISP_UNLOCK(isp) mtx_unlock(&(isp)->isp_lock) +#define ISP_ASSERT_LOCKED(isp) mtx_assert(&(isp)->isp_lock, MA_OWNED) /* * Required Macros/Defines @@ -370,7 +370,7 @@ struct isposinfo { #define ISP_SNPRINTF snprintf #define ISP_DELAY(x) DELAY(x) #define ISP_SLEEP(isp, x) msleep_sbt(&(isp)->isp_osinfo.is_exiting, \ - &(isp)->isp_osinfo.lock, 0, "isp_sleep", (x) * SBT_1US, 0, 0) + &(isp)->isp_lock, 0, "isp_sleep", (x) * SBT_1US, 0, 0) #define ISP_MIN imin @@ -722,14 +722,6 @@ int isp_fcp_next_crn(ispsoftc_t *, uint8 /* * Platform Version specific defines */ -#define BUS_DMA_ROOTARG(x) bus_get_dma_tag(x) -#define isp_dma_tag_create(a, b, c, d, e, f, g, h, i, j, k, z) \ - bus_dma_tag_create(a, b, c, d, e, f, g, h, i, j, k, \ - busdma_lock_mutex, &isp->isp_osinfo.lock, z) - -#define isp_sim_alloc(a, b, c, d, e, f, g, h) \ - cam_sim_alloc(a, b, c, d, e, &(d)->isp_osinfo.lock, f, g, h) - #define ISP_PATH_PRT(i, l, p, ...) \ if ((l) == ISP_LOGALL || ((l)& (i)->isp_dblev) != 0) { \ xpt_print(p, __VA_ARGS__); \ Modified: head/sys/dev/isp/isp_pci.c ============================================================================== --- head/sys/dev/isp/isp_pci.c Tue Mar 21 09:38:59 2017 (r315676) +++ head/sys/dev/isp/isp_pci.c Tue Mar 21 10:34:34 2017 (r315677) @@ -684,7 +684,7 @@ isp_pci_attach(device_t dev) isp->isp_nchan = 1; if (sizeof (bus_addr_t) > 4) isp->isp_osinfo.sixtyfourbit = 1; - mtx_init(&isp->isp_osinfo.lock, "isp", NULL, MTX_DEF); + mtx_init(&isp->isp_lock, "isp", NULL, MTX_DEF); /* * Get Generic Options @@ -981,7 +981,7 @@ bad: free(pcs->pci_isp.isp_osinfo.pc.ptr, M_DEVBUF); pcs->pci_isp.isp_osinfo.pc.ptr = NULL; } - mtx_destroy(&isp->isp_osinfo.lock); + mtx_destroy(&isp->isp_lock); return (ENXIO); } @@ -1019,7 +1019,7 @@ isp_pci_detach(device_t dev) free(pcs->pci_isp.isp_osinfo.pc.ptr, M_DEVBUF); pcs->pci_isp.isp_osinfo.pc.ptr = NULL; } - mtx_destroy(&isp->isp_osinfo.lock); + mtx_destroy(&isp->isp_lock); return (0); } @@ -1532,9 +1532,9 @@ isp_pci_mbxdma(ispsoftc_t *isp) else nsegs = ISP_NSEG_MAX; - if (isp_dma_tag_create(BUS_DMA_ROOTARG(ISP_PCD(isp)), 1, + if (bus_dma_tag_create(bus_get_dma_tag(ISP_PCD(isp)), 1, slim, llim, hlim, NULL, NULL, BUS_SPACE_MAXSIZE, nsegs, slim, 0, - &isp->isp_osinfo.dmat)) { + busdma_lock_mutex, &isp->isp_lock, &isp->isp_osinfo.dmat)) { ISP_LOCK(isp); isp_prt(isp, ISP_LOGERR, "could not create master dma tag"); return (1); @@ -1547,9 +1547,10 @@ isp_pci_mbxdma(ispsoftc_t *isp) len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); if (isp->isp_type >= ISP_HA_FC_2200) len += (N_XCMDS * XCMD_SIZE); - if (isp_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, + if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, - len, 1, len, 0, &isp->isp_osinfo.reqdmat)) { + len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, + &isp->isp_osinfo.reqdmat)) { isp_prt(isp, ISP_LOGERR, "cannot create request DMA tag"); goto bad; } @@ -1588,9 +1589,10 @@ isp_pci_mbxdma(ispsoftc_t *isp) * Allocate and map the result queue. */ len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); - if (isp_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, + if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, - len, 1, len, 0, &isp->isp_osinfo.respdmat)) { + len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, + &isp->isp_osinfo.respdmat)) { isp_prt(isp, ISP_LOGERR, "cannot create response DMA tag"); goto bad; } @@ -1617,9 +1619,10 @@ isp_pci_mbxdma(ispsoftc_t *isp) */ if (IS_24XX(isp)) { len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); - if (isp_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, + if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, - len, 1, len, 0, &isp->isp_osinfo.atiodmat)) { + len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, + &isp->isp_osinfo.atiodmat)) { isp_prt(isp, ISP_LOGERR, "cannot create ATIO DMA tag"); goto bad; } @@ -1643,9 +1646,10 @@ isp_pci_mbxdma(ispsoftc_t *isp) #endif if (IS_FC(isp)) { - if (isp_dma_tag_create(isp->isp_osinfo.dmat, 64, slim, + if (bus_dma_tag_create(isp->isp_osinfo.dmat, 64, slim, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, - 2*QENTRY_LEN, 1, 2*QENTRY_LEN, 0, &isp->isp_osinfo.iocbdmat)) { + 2*QENTRY_LEN, 1, 2*QENTRY_LEN, 0, busdma_lock_mutex, + &isp->isp_lock, &isp->isp_osinfo.iocbdmat)) { goto bad; } if (bus_dmamem_alloc(isp->isp_osinfo.iocbdmat, @@ -1658,9 +1662,10 @@ isp_pci_mbxdma(ispsoftc_t *isp) goto bad; isp->isp_iocb_dma = im.maddr; - if (isp_dma_tag_create(isp->isp_osinfo.dmat, 64, slim, + if (bus_dma_tag_create(isp->isp_osinfo.dmat, 64, slim, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, - ISP_FC_SCRLEN, 1, ISP_FC_SCRLEN, 0, &isp->isp_osinfo.scdmat)) + ISP_FC_SCRLEN, 1, ISP_FC_SCRLEN, 0, busdma_lock_mutex, + &isp->isp_lock, &isp->isp_osinfo.scdmat)) goto bad; for (cmap = 0; cmap < isp->isp_nchan; cmap++) { struct isp_fc *fc = ISP_FC_PC(isp, cmap); @@ -1715,7 +1720,7 @@ gotmaxcmds: } goto bad; } - callout_init_mtx(&pcmd->wdog, &isp->isp_osinfo.lock, 0); + callout_init_mtx(&pcmd->wdog, &isp->isp_lock, 0); if (i == isp->isp_maxcmds-1) pcmd->next = NULL; else Modified: head/sys/dev/isp/isp_sbus.c ============================================================================== --- head/sys/dev/isp/isp_sbus.c Tue Mar 21 09:38:59 2017 (r315676) +++ head/sys/dev/isp/isp_sbus.c Tue Mar 21 10:34:34 2017 (r315677) @@ -143,7 +143,7 @@ isp_sbus_attach(device_t dev) sbs->sbus_dev = dev; sbs->sbus_mdvec = mdvec; isp->isp_dev = dev; - mtx_init(&isp->isp_osinfo.lock, "isp", NULL, MTX_DEF); + mtx_init(&isp->isp_lock, "isp", NULL, MTX_DEF); role = 0; if (resource_int_value(device_get_name(dev), device_get_unit(dev), @@ -310,7 +310,7 @@ bad: (void) bus_release_resource(dev, SYS_RES_MEMORY, sbs->rgd, sbs->regs); } - mtx_destroy(&isp->isp_osinfo.lock); + mtx_destroy(&isp->isp_lock); return (ENXIO); } @@ -334,7 +334,7 @@ isp_sbus_detach(device_t dev) } (void) bus_release_resource(dev, SYS_RES_MEMORY, sbs->rgd, sbs->regs); isp_sbus_mbxdmafree(isp); - mtx_destroy(&isp->isp_osinfo.lock); + mtx_destroy(&isp->isp_lock); return (0); } @@ -429,10 +429,11 @@ isp_sbus_mbxdma(ispsoftc_t *isp) if (isp->isp_rquest != NULL) goto gotmaxcmds; - if (isp_dma_tag_create(BUS_DMA_ROOTARG(ISP_SBD(isp)), 1, + if (bus_dma_tag_create(bus_get_dma_tag(ISP_SBD(isp)), 1, BUS_SPACE_MAXADDR_24BIT+1, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR_32BIT, NULL, NULL, BUS_SPACE_MAXSIZE_32BIT, - ISP_NSEG_MAX, BUS_SPACE_MAXADDR_24BIT, 0, &isp->isp_osinfo.dmat)) { + ISP_NSEG_MAX, BUS_SPACE_MAXADDR_24BIT, 0, + busdma_lock_mutex, &isp->isp_lock, &isp->isp_osinfo.dmat)) { isp_prt(isp, ISP_LOGERR, "could not create master dma tag"); goto bad; } @@ -441,9 +442,10 @@ isp_sbus_mbxdma(ispsoftc_t *isp) * Allocate and map the request queue. */ len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); - if (isp_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, BUS_SPACE_MAXADDR_24BIT+1, + if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, BUS_SPACE_MAXADDR_24BIT+1, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, - len, 1, len, 0, &isp->isp_osinfo.reqdmat)) { + len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, + &isp->isp_osinfo.reqdmat)) { isp_prt(isp, ISP_LOGERR, "cannot create request DMA tag"); goto bad; } @@ -468,9 +470,10 @@ isp_sbus_mbxdma(ispsoftc_t *isp) * Allocate and map the result queue. */ len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); - if (isp_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, BUS_SPACE_MAXADDR_24BIT+1, + if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, BUS_SPACE_MAXADDR_24BIT+1, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, - len, 1, len, 0, &isp->isp_osinfo.respdmat)) { + len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, + &isp->isp_osinfo.respdmat)) { isp_prt(isp, ISP_LOGERR, "cannot create response DMA tag"); goto bad; } @@ -512,7 +515,7 @@ gotmaxcmds: } goto bad; } - callout_init_mtx(&pcmd->wdog, &isp->isp_osinfo.lock, 0); + callout_init_mtx(&pcmd->wdog, &isp->isp_lock, 0); if (i == isp->isp_maxcmds-1) { pcmd->next = NULL; } else { From owner-svn-src-head@freebsd.org Tue Mar 21 11:26:32 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 60066D16446; Tue, 21 Mar 2017 11:26:32 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2EDEF19AE; Tue, 21 Mar 2017 11:26:32 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LBQVcK076729; Tue, 21 Mar 2017 11:26:31 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LBQVRu076728; Tue, 21 Mar 2017 11:26:31 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703211126.v2LBQVRu076728@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 21 Mar 2017 11:26:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315678 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 11:26:32 -0000 Author: mav Date: Tue Mar 21 11:26:31 2017 New Revision: 315678 URL: https://svnweb.freebsd.org/changeset/base/315678 Log: Remove questionable reqp->req_time access. MFC after: 2 weeks Modified: head/sys/dev/isp/isp.c Modified: head/sys/dev/isp/isp.c ============================================================================== --- head/sys/dev/isp/isp.c Tue Mar 21 10:34:34 2017 (r315677) +++ head/sys/dev/isp/isp.c Tue Mar 21 11:26:31 2017 (r315678) @@ -4424,8 +4424,6 @@ isp_start(XS_T *xs) } } - tptr = &reqp->req_time; - /* * NB: we do not support long CDBs (yet) */ @@ -4439,8 +4437,9 @@ isp_start(XS_T *xs) } reqp->req_target = target | (XS_CHANNEL(xs) << 7); reqp->req_lun_trn = XS_LUN(xs); - cdbp = reqp->req_cdb; reqp->req_cdblen = cdblen; + tptr = &reqp->req_time; + cdbp = reqp->req_cdb; } else if (IS_24XX(isp)) { ispreqt7_t *t7 = (ispreqt7_t *)local; @@ -4487,15 +4486,17 @@ isp_start(XS_T *xs) ispreqt2e_t *t2e = (ispreqt2e_t *)local; t2e->req_target = lp->handle; t2e->req_scclun = XS_LUN(xs); + tptr = &t2e->req_time; cdbp = t2e->req_cdb; } else if (ISP_CAP_SCCFW(isp)) { - ispreqt2_t *t2 = (ispreqt2_t *)local; t2->req_target = lp->handle; t2->req_scclun = XS_LUN(xs); + tptr = &t2->req_time; cdbp = t2->req_cdb; } else { t2->req_target = lp->handle; t2->req_lun_trn = XS_LUN(xs); + tptr = &t2->req_time; cdbp = t2->req_cdb; } } From owner-svn-src-head@freebsd.org Tue Mar 21 11:27:43 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 37DE8D16684; Tue, 21 Mar 2017 11:27:43 +0000 (UTC) (envelope-from ronald-lists@klop.ws) Received: from smarthost1.greenhost.nl (smarthost1.greenhost.nl [195.190.28.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EA6D11C18; Tue, 21 Mar 2017 11:27:42 +0000 (UTC) (envelope-from ronald-lists@klop.ws) Received: from smtp.greenhost.nl ([213.108.104.138]) by smarthost1.greenhost.nl with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1cqHwy-0003sf-9W; Tue, 21 Mar 2017 12:27:40 +0100 Content-Type: text/plain; charset=utf-8; format=flowed; delsp=yes To: "Gleb Smirnoff" , "Baptiste Daroussin" , "Mathieu Arnold" Cc: svn-src-head@freebsd.org, "Antoine Brodin" , svn-src-all@freebsd.org, "FreeBSD Ports" Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <20170321064154.GL23308@FreeBSD.org> <20170321065433.GM23308@FreeBSD.org> <20170321072219.ij2waf2rygmvezoh@ivaldir.net> <20170321072714.GN23308@FreeBSD.org> <81f57d51-8ccf-e0a7-ec9a-5ef816998e76@FreeBSD.org> Date: Tue, 21 Mar 2017 12:27:39 +0100 MIME-Version: 1.0 Content-Transfer-Encoding: Quoted-Printable From: "Ronald Klop" Message-ID: In-Reply-To: <81f57d51-8ccf-e0a7-ec9a-5ef816998e76@FreeBSD.org> User-Agent: Opera Mail/12.16 (FreeBSD) X-Authenticated-As-Hash: 398f5522cb258ce43cb679602f8cfe8b62a256d1 X-Virus-Scanned: by clamav at smarthost1.samage.net X-Spam-Level: / X-Spam-Score: -0.2 X-Spam-Status: No, score=-0.2 required=5.0 tests=ALL_TRUSTED, BAYES_50 autolearn=disabled version=3.4.0 X-Scan-Signature: 388a8ff653e0601f0215f26536afca72 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 11:27:43 -0000 On Tue, 21 Mar 2017 10:19:24 +0100, Mathieu Arnold wro= te: > Le 21/03/2017 =C3=A0 08:27, Gleb Smirnoff a =C3=A9crit : >> On Tue, Mar 21, 2017 at 08:22:19AM +0100, Baptiste Daroussin wrote: >> B> On Mon, Mar 20, 2017 at 11:54:33PM -0700, Gleb Smirnoff wrote: >> B> > On Tue, Mar 21, 2017 at 07:50:32AM +0100, Antoine Brodin wrote: >> B> > A> > This change is known to break a ton of ports. More than 1= 00 = >> if >> B> > A> > counting depends. I'm sorry for that and I already started = to = >> fix >> B> > A> > them. >> B> > A> > >> B> > A> > Please send all new breakages to me. >> B> > A> >> B> > A> Hi, >> B> > A> >> B> > A> Exp-runs should happen before breakage happens, not after. >> B> > A> If you already know that it breaks hundreds of ports, please = = >> revert >> B> > A> and request an exp-run. >> B> > >> B> > The exp-run has already been made: >> B> > >> B> > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D210673 >> B> > >> B> > Wasn't very helpful. >> B> > >> B> >> B> I disagree it was useful it showed you some ports that were breaki= ng = >> given there >> B> was some high level one you were expected to provide patches to fi= x = >> them. >> >> I'm working on them right now. > > You should have worked on it *before* the patch breaking everything > landed, providing patches for the ports that were reported as broken, > and repeat until all the ports that were building before were building= > again. > > You should **not** have committed the patch to the src tree before all= > those patches were created, and you should have committed all the > patches at once, preferably before committing the patch to the src tre= e. > > People should... No ports are broken on released version of FreeBSD. The broken ones are = = being fixed. And a very good improvement of code has happened. Maybe a notice in = UPDATING helps third-party people. I don't see a real problem. Only progress. Ronald. From owner-svn-src-head@freebsd.org Tue Mar 21 12:35:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 441CCD1604C; Tue, 21 Mar 2017 12:35:56 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from zxy.spb.ru (zxy.spb.ru [195.70.199.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 06C6915B5; Tue, 21 Mar 2017 12:35:56 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1cqJ0t-000IX4-IT; Tue, 21 Mar 2017 15:35:47 +0300 Date: Tue, 21 Mar 2017 15:35:47 +0300 From: Slawa Olhovchenkov To: Toomas Soome Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315653 - in head: lib/libstand sys/boot/common sys/boot/i386/libi386 Message-ID: <20170321123547.GC86500@zxy.spb.ru> References: <201703202220.v2KMKHVP050735@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201703202220.v2KMKHVP050735@repo.freebsd.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: slw@zxy.spb.ru X-SA-Exim-Scanned: No (on zxy.spb.ru); SAEximRunCond expanded to false X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 12:35:56 -0000 On Mon, Mar 20, 2017 at 10:20:17PM +0000, Toomas Soome wrote: > Author: tsoome > Date: Mon Mar 20 22:20:17 2017 > New Revision: 315653 > URL: https://svnweb.freebsd.org/changeset/base/315653 > > Log: > loader: verify the value from dhcp.interface-mtu and use snprintf to set mtu > > Since the uset can set dhcp.interface-mtu, we need to try to validate the > value. So we verify if the conversion to int is successful and we will not > allow to set value greater than max IPv4 packet size. > > + tmp > USHRT_MAX) { > + printf("%s: bad value: \"%s\", " > + "ignoring\n", > + "dhcp.interface-mtu", val); === USHRT_MAX Maximum value for an object of type unsigned short int 65535 (216-1) or greater* * the actual value depends on the particular system and library implementation, but shall reflect the limits of these types in the target platform. === I mean IF_MAXMTU more correct. From owner-svn-src-head@freebsd.org Tue Mar 21 13:01:09 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AE324D16B1A; Tue, 21 Mar 2017 13:01:09 +0000 (UTC) (envelope-from maxim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7B552C93; Tue, 21 Mar 2017 13:01:09 +0000 (UTC) (envelope-from maxim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LD18wC015385; Tue, 21 Mar 2017 13:01:08 GMT (envelope-from maxim@FreeBSD.org) Received: (from maxim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LD18jG015384; Tue, 21 Mar 2017 13:01:08 GMT (envelope-from maxim@FreeBSD.org) Message-Id: <201703211301.v2LD18jG015384@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: maxim set sender to maxim@FreeBSD.org using -f From: Maxim Konovalov Date: Tue, 21 Mar 2017 13:01:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315680 - head/sbin/ifconfig X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 13:01:09 -0000 Author: maxim Date: Tue Mar 21 13:01:08 2017 New Revision: 315680 URL: https://svnweb.freebsd.org/changeset/base/315680 Log: The .Cm macro usage fixed. PR: 217977 Submitted by: tobik Modified: head/sbin/ifconfig/ifconfig.8 Modified: head/sbin/ifconfig/ifconfig.8 ============================================================================== --- head/sbin/ifconfig/ifconfig.8 Tue Mar 21 11:56:21 2017 (r315679) +++ head/sbin/ifconfig/ifconfig.8 Tue Mar 21 13:01:08 2017 (r315680) @@ -832,13 +832,13 @@ is one of .Cm sta , .Cm ahdemo (or -.Cm adhoc-demo ), +.Cm adhoc-demo ) , .Cm ibss , (or -.Cm adhoc ), +.Cm adhoc ) , .Cm ap , (or -.Cm hostap ), +.Cm hostap ) , .Cm wds , .Cm tdma , .Cm mesh , From owner-svn-src-head@freebsd.org Tue Mar 21 13:10:39 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3A313D16EEF; Tue, 21 Mar 2017 13:10:39 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F04E713D0; Tue, 21 Mar 2017 13:10:38 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LDAcIT019775; Tue, 21 Mar 2017 13:10:38 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LDAbfI019771; Tue, 21 Mar 2017 13:10:37 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703211310.v2LDAbfI019771@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 21 Mar 2017 13:10:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315681 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 13:10:39 -0000 Author: mav Date: Tue Mar 21 13:10:37 2017 New Revision: 315681 URL: https://svnweb.freebsd.org/changeset/base/315681 Log: Improve command timeout handling. Let firmware do its best first, and if it can't, try software recovery. I would remove software timeout handler completely, but found bunch of complains on command timeout on sparc64 mailing list few years ago, so better be safe in case of interrupt loss. MFC after: 2 weeks Modified: head/sys/dev/isp/isp.c head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_freebsd.h head/sys/dev/isp/ispvar.h Modified: head/sys/dev/isp/isp.c ============================================================================== --- head/sys/dev/isp/isp.c Tue Mar 21 13:01:08 2017 (r315680) +++ head/sys/dev/isp/isp.c Tue Mar 21 13:10:37 2017 (r315681) @@ -4500,13 +4500,9 @@ isp_start(XS_T *xs) cdbp = t2->req_cdb; } } + *tptr = XS_TIME(xs); ISP_MEMCPY(cdbp, XS_CDBP(xs), cdblen); - *tptr = (XS_TIME(xs) + 999) / 1000; - if (IS_24XX(isp) && *tptr > 0x1999) { - *tptr = 0x1999; - } - /* Whew. Thankfully the same for type 7 requests */ reqp->req_handle = isp_allocate_handle(isp, xs, ISP_HANDLE_INITIATOR); if (reqp->req_handle == 0) { Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Tue Mar 21 13:01:08 2017 (r315680) +++ head/sys/dev/isp/isp_freebsd.c Tue Mar 21 13:10:37 2017 (r315681) @@ -1241,7 +1241,7 @@ isp_target_start_ctio(ispsoftc_t *isp, u cto->ct_iid_hi = atp->sid >> 16; cto->ct_oxid = atp->oxid; cto->ct_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(ccb)); - cto->ct_timeout = (XS_TIME(ccb) + 999) / 1000; + cto->ct_timeout = XS_TIME(ccb); cto->ct_flags = atp->tattr << CT7_TASK_ATTR_SHIFT; /* @@ -1390,7 +1390,7 @@ isp_target_start_ctio(ispsoftc_t *isp, u cto->ct_lun = ccb->ccb_h.target_lun; } } - cto->ct_timeout = (XS_TIME(ccb) + 999) / 1000; + cto->ct_timeout = XS_TIME(ccb); cto->ct_rxid = cso->tag_id; /* @@ -2958,9 +2958,10 @@ isp_abort_inot(ispsoftc_t *isp, union cc static void isp_action(struct cam_sim *sim, union ccb *ccb) { - int bus, tgt, ts, error; + int bus, tgt, error; ispsoftc_t *isp; struct ccb_trans_settings *cts; + sbintime_t ts; CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("isp_action\n")); @@ -3010,15 +3011,12 @@ isp_action(struct cam_sim *sim, union cc switch (error) { case CMD_QUEUED: ccb->ccb_h.status |= CAM_SIM_QUEUED; - if (ccb->ccb_h.timeout == CAM_TIME_INFINITY) { + if (ccb->ccb_h.timeout == CAM_TIME_INFINITY) break; - } - ts = ccb->ccb_h.timeout; - if (ts == CAM_TIME_DEFAULT) { - ts = 60*1000; - } - ts = isp_mstohz(ts); - callout_reset(&PISP_PCMD(ccb)->wdog, ts, isp_watchdog, ccb); + /* Give firmware extra 10s to handle timeout. */ + ts = SBT_1MS * ccb->ccb_h.timeout + 10 * SBT_1S; + callout_reset_sbt(&PISP_PCMD(ccb)->wdog, ts, 0, + isp_watchdog, ccb, 0); break; case CMD_RQLATER: isp_prt(isp, ISP_LOGDEBUG0, "%d.%jx retry later", @@ -4097,23 +4095,6 @@ isp_fc_scratch_acquire(ispsoftc_t *isp, return (ret); } -int -isp_mstohz(int ms) -{ - int hz; - struct timeval t; - t.tv_sec = ms / 1000; - t.tv_usec = (ms % 1000) * 1000; - hz = tvtohz(&t); - if (hz < 0) { - hz = 0x7fffffff; - } - if (hz == 0) { - hz = 1; - } - return (hz); -} - void isp_platform_intr(void *arg) { Modified: head/sys/dev/isp/isp_freebsd.h ============================================================================== --- head/sys/dev/isp/isp_freebsd.h Tue Mar 21 13:01:08 2017 (r315680) +++ head/sys/dev/isp/isp_freebsd.h Tue Mar 21 13:10:37 2017 (r315681) @@ -520,7 +520,9 @@ default: \ #define XS_CDBLEN(ccb) (ccb)->cdb_len #define XS_XFRLEN(ccb) (ccb)->dxfer_len -#define XS_TIME(ccb) (ccb)->ccb_h.timeout +#define XS_TIME(ccb) \ + (((ccb)->ccb_h.timeout > 0xffff * 1000 - 999) ? 0 : \ + (((ccb)->ccb_h.timeout + 999) / 1000)) #define XS_GET_RESID(ccb) (ccb)->resid #define XS_SET_RESID(ccb, r) (ccb)->resid = r #define XS_STSP(ccb) (&(ccb)->scsi_status) @@ -711,7 +713,6 @@ void isp_mbox_wait_complete(ispsoftc_t * void isp_mbox_notify_done(ispsoftc_t *); void isp_mbox_release(ispsoftc_t *); int isp_fc_scratch_acquire(ispsoftc_t *, int); -int isp_mstohz(int); void isp_platform_intr(void *); void isp_platform_intr_resp(void *); void isp_platform_intr_atio(void *); Modified: head/sys/dev/isp/ispvar.h ============================================================================== --- head/sys/dev/isp/ispvar.h Tue Mar 21 13:01:08 2017 (r315680) +++ head/sys/dev/isp/ispvar.h Tue Mar 21 13:10:37 2017 (r315681) @@ -1011,7 +1011,7 @@ void isp_prt_endcmd(ispsoftc_t *, XS_T * * XS_CDBP(xs) gets a pointer to the scsi CDB "" * XS_CDBLEN(xs) gets the CDB's length "" * XS_XFRLEN(xs) gets the associated data transfer length "" - * XS_TIME(xs) gets the time (in milliseconds) for this command + * XS_TIME(xs) gets the time (in seconds) for this command * XS_GET_RESID(xs) gets the current residual count * XS_GET_RESID(xs, resid) sets the current residual count * XS_STSP(xs) gets a pointer to the SCSI status byte "" From owner-svn-src-head@freebsd.org Tue Mar 21 13:49:44 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8F1A4D16CCC; Tue, 21 Mar 2017 13:49:44 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4DD0DD4B; Tue, 21 Mar 2017 13:49:44 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LDnh6g036679; Tue, 21 Mar 2017 13:49:43 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LDnhmE036676; Tue, 21 Mar 2017 13:49:43 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703211349.v2LDnhmE036676@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 21 Mar 2017 13:49:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315682 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 13:49:44 -0000 Author: mav Date: Tue Mar 21 13:49:43 2017 New Revision: 315682 URL: https://svnweb.freebsd.org/changeset/base/315682 Log: Remove some dead code left after r246713. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_pci.c head/sys/dev/isp/isp_sbus.c Modified: head/sys/dev/isp/isp_pci.c ============================================================================== --- head/sys/dev/isp/isp_pci.c Tue Mar 21 13:10:37 2017 (r315681) +++ head/sys/dev/isp/isp_pci.c Tue Mar 21 13:49:43 2017 (r315682) @@ -1841,18 +1841,6 @@ typedef struct { #define MUSHERR_NOQENTRIES -2 #ifdef ISP_TARGET_MODE -static void tdma2_2(void *, bus_dma_segment_t *, int, bus_size_t, int); -static void tdma2(void *, bus_dma_segment_t *, int, int); - -static void -tdma2_2(void *arg, bus_dma_segment_t *dm_segs, int nseg, bus_size_t mapsize, int error) -{ - mush_t *mp; - mp = (mush_t *)arg; - mp->mapsize = mapsize; - tdma2(arg, dm_segs, nseg, error); -} - static void tdma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) { @@ -1916,18 +1904,6 @@ tdma2(void *arg, bus_dma_segment_t *dm_s } #endif -static void dma2_2(void *, bus_dma_segment_t *, int, bus_size_t, int); -static void dma2(void *, bus_dma_segment_t *, int, int); - -static void -dma2_2(void *arg, bus_dma_segment_t *dm_segs, int nseg, bus_size_t mapsize, int error) -{ - mush_t *mp; - mp = (mush_t *)arg; - mp->mapsize = mapsize; - dma2(arg, dm_segs, nseg, error); -} - static void dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) { @@ -1997,7 +1973,6 @@ isp_pci_dmasetup(ispsoftc_t *isp, struct { mush_t mush, *mp; void (*eptr)(void *, bus_dma_segment_t *, int, int); - void (*eptr2)(void *, bus_dma_segment_t *, int, bus_size_t, int); int error; mp = &mush; @@ -2008,16 +1983,11 @@ isp_pci_dmasetup(ispsoftc_t *isp, struct mp->mapsize = 0; #ifdef ISP_TARGET_MODE - if (csio->ccb_h.func_code == XPT_CONT_TARGET_IO) { + if (csio->ccb_h.func_code == XPT_CONT_TARGET_IO) eptr = tdma2; - eptr2 = tdma2_2; - } else + else #endif - { eptr = dma2; - eptr2 = dma2_2; - } - error = bus_dmamap_load_ccb(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, (union ccb *)csio, eptr, mp, 0); Modified: head/sys/dev/isp/isp_sbus.c ============================================================================== --- head/sys/dev/isp/isp_sbus.c Tue Mar 21 13:10:37 2017 (r315681) +++ head/sys/dev/isp/isp_sbus.c Tue Mar 21 13:49:43 2017 (r315682) @@ -590,8 +590,6 @@ typedef struct { #define MUSHERR_NOQENTRIES -2 -static void dma2(void *, bus_dma_segment_t *, int, int); - static void dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) { @@ -634,7 +632,6 @@ static int isp_sbus_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff) { mush_t mush, *mp; - void (*eptr)(void *, bus_dma_segment_t *, int, int); int error; mp = &mush; @@ -644,10 +641,8 @@ isp_sbus_dmasetup(ispsoftc_t *isp, struc mp->error = 0; mp->mapsize = 0; - eptr = dma2; - error = bus_dmamap_load_ccb(isp->isp_osinfo.dmat, - PISP_PCMD(csio)->dmap, (union ccb *)csio, eptr, mp, 0); + PISP_PCMD(csio)->dmap, (union ccb *)csio, dma2, mp, 0); if (error == EINPROGRESS) { bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap); mp->error = EINVAL; From owner-svn-src-head@freebsd.org Tue Mar 21 14:14:13 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 24185D16504; Tue, 21 Mar 2017 14:14:13 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E55C41EDD; Tue, 21 Mar 2017 14:14:12 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LEEBSY048886; Tue, 21 Mar 2017 14:14:11 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LEEB0g048884; Tue, 21 Mar 2017 14:14:11 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703211414.v2LEEB0g048884@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 21 Mar 2017 14:14:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315683 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 14:14:13 -0000 Author: mav Date: Tue Mar 21 14:14:11 2017 New Revision: 315683 URL: https://svnweb.freebsd.org/changeset/base/315683 Log: Remove another remnants left after r246713. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_pci.c head/sys/dev/isp/isp_sbus.c Modified: head/sys/dev/isp/isp_pci.c ============================================================================== --- head/sys/dev/isp/isp_pci.c Tue Mar 21 13:49:43 2017 (r315682) +++ head/sys/dev/isp/isp_pci.c Tue Mar 21 14:14:11 2017 (r315683) @@ -1835,7 +1835,6 @@ typedef struct { void *cmd_token; void *rq; /* original request */ int error; - bus_size_t mapsize; } mush_t; #define MUSHERR_NOQENTRIES -2 @@ -1980,7 +1979,6 @@ isp_pci_dmasetup(ispsoftc_t *isp, struct mp->cmd_token = csio; mp->rq = ff; mp->error = 0; - mp->mapsize = 0; #ifdef ISP_TARGET_MODE if (csio->ccb_h.func_code == XPT_CONT_TARGET_IO) Modified: head/sys/dev/isp/isp_sbus.c ============================================================================== --- head/sys/dev/isp/isp_sbus.c Tue Mar 21 13:49:43 2017 (r315682) +++ head/sys/dev/isp/isp_sbus.c Tue Mar 21 14:14:11 2017 (r315683) @@ -585,7 +585,6 @@ typedef struct { void *cmd_token; void *rq; /* original request */ int error; - bus_size_t mapsize; } mush_t; #define MUSHERR_NOQENTRIES -2 @@ -639,7 +638,6 @@ isp_sbus_dmasetup(ispsoftc_t *isp, struc mp->cmd_token = csio; mp->rq = ff; mp->error = 0; - mp->mapsize = 0; error = bus_dmamap_load_ccb(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, (union ccb *)csio, dma2, mp, 0); From owner-svn-src-head@freebsd.org Tue Mar 21 15:15:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1288BD1681F for ; Tue, 21 Mar 2017 15:15:22 +0000 (UTC) (envelope-from ian@freebsd.org) Received: from outbound1b.ore.mailhop.org (outbound1b.ore.mailhop.org [54.200.247.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E47D71D5 for ; Tue, 21 Mar 2017 15:15:21 +0000 (UTC) (envelope-from ian@freebsd.org) X-MHO-User: 2f72926c-0e49-11e7-bfb5-0d159cd3c324 X-Report-Abuse-To: https://support.duocircle.com/support/solutions/articles/5000540958-duocircle-standard-smtp-abuse-information X-Originating-IP: 73.78.92.27 X-Mail-Handler: DuoCircle Outbound SMTP Received: from ilsoft.org (unknown [73.78.92.27]) by outbound1.ore.mailhop.org (Halon) with ESMTPSA id 2f72926c-0e49-11e7-bfb5-0d159cd3c324; Tue, 21 Mar 2017 15:15:15 +0000 (UTC) Received: from rev (rev [172.22.42.240]) by ilsoft.org (8.15.2/8.15.2) with ESMTP id v2LFFCYm003800; Tue, 21 Mar 2017 09:15:12 -0600 (MDT) (envelope-from ian@freebsd.org) Message-ID: <1490109312.13094.41.camel@freebsd.org> Subject: Re: svn commit: r315653 - in head: lib/libstand sys/boot/common sys/boot/i386/libi386 From: Ian Lepore To: Slawa Olhovchenkov , Toomas Soome Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Date: Tue, 21 Mar 2017 09:15:12 -0600 In-Reply-To: <20170321123547.GC86500@zxy.spb.ru> References: <201703202220.v2KMKHVP050735@repo.freebsd.org> <20170321123547.GC86500@zxy.spb.ru> Content-Type: text/plain; charset="ISO-8859-1" X-Mailer: Evolution 3.18.5.1 FreeBSD GNOME Team Port Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 15:15:22 -0000 On Tue, 2017-03-21 at 15:35 +0300, Slawa Olhovchenkov wrote: > On Mon, Mar 20, 2017 at 10:20:17PM +0000, Toomas Soome wrote: > > > > > Author: tsoome > > Date: Mon Mar 20 22:20:17 2017 > > New Revision: 315653 > > URL: https://svnweb.freebsd.org/changeset/base/315653 > > > > Log: > >   loader: verify the value from dhcp.interface-mtu and use snprintf > > to set mtu > >    > >   Since the uset can set dhcp.interface-mtu, we need to try to > > validate the > >   value. So we verify if the conversion to int is successful and we > > will not > >   allow to set value greater than max IPv4 packet size. > >    > > +     tmp > USHRT_MAX) { > > + printf("%s: bad value: > > \"%s\", " > > +     "ignoring\n", > > +     "dhcp.interface-mtu", > > val); > === > USHRT_MAX Maximum value for an object of type unsigned short > int > 65535 (216-1) or greater* > > * the actual value depends on the particular system and library > implementation, but shall reflect the limits of these types in the > target platform. > === > > I mean IF_MAXMTU more correct. > The context here is libstand; because it is standalone by design, the code doesn't have access to IF_MAXMTU or other kernel/userland constants.  There is also no question that a short is 16 bits or that USHRT_MAX will be anything other than 65535 in that environment.  If some platform did appear that had a different-sized short by default, we would add whatever flags are necessary to force it back to 16 bits in src/share/mk/bsd.stand.mk. -- Ian From owner-svn-src-head@freebsd.org Tue Mar 21 15:53:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 61276D164A4; Tue, 21 Mar 2017 15:53:17 +0000 (UTC) (envelope-from tsoome@me.com) Received: from st13p35im-asmtp002.me.com (st13p35im-asmtp002.me.com [17.164.199.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 362791A0A; Tue, 21 Mar 2017 15:53:17 +0000 (UTC) (envelope-from tsoome@me.com) Received: from process-dkim-sign-daemon.st13p35im-asmtp002.me.com by st13p35im-asmtp002.me.com (Oracle Communications Messaging Server 7.0.5.38.0 64bit (built Feb 26 2016)) id <0ON60040097YIS00@st13p35im-asmtp002.me.com>; Tue, 21 Mar 2017 15:53:15 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=me.com; s=4d515a; t=1490111595; bh=fITmj41mfUOOS2+5wzqbvjXRwmsbMSBrKjXwSdUyUHA=; h=Content-type:MIME-version:Subject:From:Date:Message-id:To; b=Tuu/GmFxhHmtgVrenQ7rXJ8JZUNQP7lEn57ERyvf4M0rFUm4wxuDeBJ48QwnZ8plh Yj/fCnTYw8dwjI7vQw5nIfJX0vAu7aIIU9mhKTNjlF/tjateV5HMYw1APHfWk48cxz IiiRZs7qsnwQyvVw1m4EOCITFj+Pec3FcBYJbY382M8dyXu1hJLftyCDE2EPn+0Zq9 qWzfamPWyrrN4E+k8TRyPrRbnV4+ASWjc5EF9eVr9c6wA3qsBTSEHsEYFYKIrdfEaQ dtxl/P6a2uY8BcGoKda7qLI9MPFHgzGYKUUgWtEFguFpsk3582SaQDrileJiSYSyG4 2XHtarLfnv8lA== Received: from icloud.com ([127.0.0.1]) by st13p35im-asmtp002.me.com (Oracle Communications Messaging Server 7.0.5.38.0 64bit (built Feb 26 2016)) with ESMTPSA id <0ON600N619GOMM20@st13p35im-asmtp002.me.com>; Tue, 21 Mar 2017 15:53:15 +0000 (GMT) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-03-21_12:,, signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 clxscore=1034 suspectscore=2 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1701120000 definitions=main-1703210136 Content-type: text/plain; charset=utf-8 MIME-version: 1.0 (Mac OS X Mail 10.2 \(3259\)) Subject: Re: svn commit: r315653 - in head: lib/libstand sys/boot/common sys/boot/i386/libi386 From: Toomas Soome In-reply-to: <1490109312.13094.41.camel@freebsd.org> Date: Tue, 21 Mar 2017 17:53:12 +0200 Cc: Slawa Olhovchenkov , Toomas Soome , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-transfer-encoding: quoted-printable Message-id: References: <201703202220.v2KMKHVP050735@repo.freebsd.org> <20170321123547.GC86500@zxy.spb.ru> <1490109312.13094.41.camel@freebsd.org> To: Ian Lepore X-Mailer: Apple Mail (2.3259) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 15:53:17 -0000 > On 21. m=C3=A4rts 2017, at 17:15, Ian Lepore wrote: >=20 > On Tue, 2017-03-21 at 15:35 +0300, Slawa Olhovchenkov wrote: >> On Mon, Mar 20, 2017 at 10:20:17PM +0000, Toomas Soome wrote: >>=20 >>>=20 >>> Author: tsoome >>> Date: Mon Mar 20 22:20:17 2017 >>> New Revision: 315653 >>> URL: https://svnweb.freebsd.org/changeset/base/315653 >>>=20 >>> Log: >>> loader: verify the value from dhcp.interface-mtu and use snprintf >>> to set mtu >>> =20 >>> Since the uset can set dhcp.interface-mtu, we need to try to >>> validate the >>> value. So we verify if the conversion to int is successful and we >>> will not >>> allow to set value greater than max IPv4 packet size. >>> =20 >>> + tmp > USHRT_MAX) { >>> + printf("%s: bad value: >>> \"%s\", " >>> + "ignoring\n", >>> + "dhcp.interface-mtu", >>> val); >> =3D=3D=3D >> USHRT_MAX Maximum value for an object of type unsigned short >> int >> 65535 (216-1) or greater* >>=20 >> * the actual value depends on the particular system and library >> implementation, but shall reflect the limits of these types in the >> target platform. >> =3D=3D=3D >>=20 >> I mean IF_MAXMTU more correct. >>=20 >=20 > The context here is libstand; because it is standalone by design, the > code doesn't have access to IF_MAXMTU or other kernel/userland > constants. There is also no question that a short is 16 bits or that > USHRT_MAX will be anything other than 65535 in that environment. If > some platform did appear that had a different-sized short by default, > we would add whatever flags are necessary to force it back to 16 bits > in src/share/mk/bsd.stand.mk. >=20 Also note the =E2=80=9Cupper=E2=80=9D value is entirely fictional - we = felt we need to pick some =E2=80=9Csane=E2=80=9D default, with current = (common 1Gb/s) ethernet hardware you will be in trouble long before = reaching that value;) rgds, toomas From owner-svn-src-head@freebsd.org Tue Mar 21 16:06:18 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 189F1D169BC; Tue, 21 Mar 2017 16:06:18 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from zxy.spb.ru (zxy.spb.ru [195.70.199.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CD0C212ED; Tue, 21 Mar 2017 16:06:17 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1cqMIZ-000M8g-Gf; Tue, 21 Mar 2017 19:06:15 +0300 Date: Tue, 21 Mar 2017 19:06:15 +0300 From: Slawa Olhovchenkov To: Toomas Soome Cc: Ian Lepore , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers , Toomas Soome Subject: Re: svn commit: r315653 - in head: lib/libstand sys/boot/common sys/boot/i386/libi386 Message-ID: <20170321160615.GD86500@zxy.spb.ru> References: <201703202220.v2KMKHVP050735@repo.freebsd.org> <20170321123547.GC86500@zxy.spb.ru> <1490109312.13094.41.camel@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: slw@zxy.spb.ru X-SA-Exim-Scanned: No (on zxy.spb.ru); SAEximRunCond expanded to false X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 16:06:18 -0000 On Tue, Mar 21, 2017 at 05:53:12PM +0200, Toomas Soome wrote: > > > On 21. märts 2017, at 17:15, Ian Lepore wrote: > > > > On Tue, 2017-03-21 at 15:35 +0300, Slawa Olhovchenkov wrote: > >> On Mon, Mar 20, 2017 at 10:20:17PM +0000, Toomas Soome wrote: > >> > >>> > >>> Author: tsoome > >>> Date: Mon Mar 20 22:20:17 2017 > >>> New Revision: 315653 > >>> URL: https://svnweb.freebsd.org/changeset/base/315653 > >>> > >>> Log: > >>> loader: verify the value from dhcp.interface-mtu and use snprintf > >>> to set mtu > >>> > >>> Since the uset can set dhcp.interface-mtu, we need to try to > >>> validate the > >>> value. So we verify if the conversion to int is successful and we > >>> will not > >>> allow to set value greater than max IPv4 packet size. > >>> > >>> + tmp > USHRT_MAX) { > >>> + printf("%s: bad value: > >>> \"%s\", " > >>> + "ignoring\n", > >>> + "dhcp.interface-mtu", > >>> val); > >> === > >> USHRT_MAX Maximum value for an object of type unsigned short > >> int > >> 65535 (216-1) or greater* > >> > >> * the actual value depends on the particular system and library > >> implementation, but shall reflect the limits of these types in the > >> target platform. > >> === > >> > >> I mean IF_MAXMTU more correct. > >> > > > > The context here is libstand; because it is standalone by design, the > > code doesn't have access to IF_MAXMTU or other kernel/userland > > constants. There is also no question that a short is 16 bits or that > > USHRT_MAX will be anything other than 65535 in that environment. If > > some platform did appear that had a different-sized short by default, > > we would add whatever flags are necessary to force it back to 16 bits > > in src/share/mk/bsd.stand.mk. > > > > > Also note the “upper†value is entirely fictional - we felt we need to pick some “sane†default, with current (common 1Gb/s) ethernet hardware you will be in trouble long before reaching that value;) 18000? IMHO, max found in different spec is about 16K. Mostly jumbo is 9000-9198. From owner-svn-src-head@freebsd.org Tue Mar 21 16:23:45 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C00D7D162A8; Tue, 21 Mar 2017 16:23:45 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8FC40116; Tue, 21 Mar 2017 16:23:45 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LGNicu001858; Tue, 21 Mar 2017 16:23:44 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LGNiXs001857; Tue, 21 Mar 2017 16:23:44 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <201703211623.v2LGNiXs001857@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Tue, 21 Mar 2017 16:23:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315684 - head/sys/netinet X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 16:23:45 -0000 Author: glebius Date: Tue Mar 21 16:23:44 2017 New Revision: 315684 URL: https://svnweb.freebsd.org/changeset/base/315684 Log: Force same alignment on struct xinpgen as we have on struct xinpcb. This fixes 32-bit builds. Modified: head/sys/netinet/in_pcb.h Modified: head/sys/netinet/in_pcb.h ============================================================================== --- head/sys/netinet/in_pcb.h Tue Mar 21 14:14:11 2017 (r315683) +++ head/sys/netinet/in_pcb.h Tue Mar 21 16:23:44 2017 (r315684) @@ -314,7 +314,7 @@ struct xinpgen { u_int xig_count; /* number of PCBs at this time */ inp_gen_t xig_gen; /* generation count at this time */ so_gen_t xig_sogen; /* socket generation count this time */ -}; +} __aligned(8); #ifdef _KERNEL void in_pcbtoxinpcb(const struct inpcb *, struct xinpcb *); #endif From owner-svn-src-head@freebsd.org Tue Mar 21 17:46:44 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EE052D1678D; Tue, 21 Mar 2017 17:46:44 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from mail.baldwin.cx (bigwig.baldwin.cx [96.47.65.170]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C1CF91D2; Tue, 21 Mar 2017 17:46:44 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from ralph.baldwin.cx (c-73-231-226-104.hsd1.ca.comcast.net [73.231.226.104]) by mail.baldwin.cx (Postfix) with ESMTPSA id 3300A10A7DB; Tue, 21 Mar 2017 13:46:37 -0400 (EDT) From: John Baldwin To: Gleb Smirnoff Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Date: Tue, 21 Mar 2017 10:40:34 -0700 Message-ID: <1782817.djIc6TfI1t@ralph.baldwin.cx> User-Agent: KMail/4.14.10 (FreeBSD/11.0-STABLE; KDE/4.14.10; amd64; ; ) In-Reply-To: <201703210639.v2L6dnRf055522@repo.freebsd.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.4.3 (mail.baldwin.cx); Tue, 21 Mar 2017 13:46:37 -0400 (EDT) X-Virus-Scanned: clamav-milter 0.99.2 at mail.baldwin.cx X-Virus-Status: Clean X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 17:46:45 -0000 On Tuesday, March 21, 2017 06:39:49 AM Gleb Smirnoff wrote: > Author: glebius > Date: Tue Mar 21 06:39:49 2017 > New Revision: 315662 > URL: https://svnweb.freebsd.org/changeset/base/315662 > > Log: > Hide struct inpcb, struct tcpcb from the userland. > > This is a painful change, but it is needed. On the one hand, we avoid > modifying them, and this slows down some ideas, on the other hand we still > eventually modify them and tools like netstat(1) never work on next version of > FreeBSD. We maintain a ton of spares in them, and we already got some ifdef > hell at the end of tcpcb. > > Details: > - Hide struct inpcb, struct tcpcb under _KERNEL || _WANT_FOO. > - Make struct xinpcb, struct xtcpcb pure API structures, not including > kernel structures inpcb and tcpcb inside. Export into these structures > the fields from inpcb and tcpcb that are known to be used, and put there > a ton of spare space. > - Make kernel and userland utilities compilable after these changes. > - Bump __FreeBSD_version. > > Reviewed by: rrs, gnn > Differential Revision: D10018 First, this is a very good change and long overdue in divorcing the user-facing structure for live system reporting vs the kernel structure. However, I realize you don't use info from netstat when debugging kernel crash dumps, but other people _do_. It's ok if the kvm bits of netstat require a matching kernel and thus require recompiling everytime the ABI changes, but it is useful to have them. Please restore those. -- John Baldwin From owner-svn-src-head@freebsd.org Tue Mar 21 18:02:16 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 02838D16ECF; Tue, 21 Mar 2017 18:02:16 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C2A571011; Tue, 21 Mar 2017 18:02:15 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LI2ExF042391; Tue, 21 Mar 2017 18:02:14 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LI2E1R042390; Tue, 21 Mar 2017 18:02:14 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201703211802.v2LI2E1R042390@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Tue, 21 Mar 2017 18:02:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315685 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 18:02:16 -0000 Author: emaste Date: Tue Mar 21 18:02:14 2017 New Revision: 315685 URL: https://svnweb.freebsd.org/changeset/base/315685 Log: tighten buffer bounds in imgact_binmisc_populate_interp We must ensure there's space for the terminating null in the temporary buffer in imgact_binmisc_populate_interp(). Note that there's no buffer overflow here because xbe->xbe_interpreter's length and null termination is checked in imgact_binmisc_add_entry() before imgact_binmisc_populate_interp() is called. However, the latter should correctly enforce its own bounds. Reviewed by: sbruno MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D10042 Modified: head/sys/kern/imgact_binmisc.c Modified: head/sys/kern/imgact_binmisc.c ============================================================================== --- head/sys/kern/imgact_binmisc.c Tue Mar 21 16:23:44 2017 (r315684) +++ head/sys/kern/imgact_binmisc.c Tue Mar 21 18:02:14 2017 (r315685) @@ -120,7 +120,7 @@ imgact_binmisc_populate_interp(char *str sp = str; tp = t; while (*sp != '\0') { if (*sp == ' ' || *sp == '\t') { - if (++len > IBE_INTERP_LEN_MAX) + if (++len >= IBE_INTERP_LEN_MAX) break; *tp++ = ' '; argc++; From owner-svn-src-head@freebsd.org Tue Mar 21 18:50:10 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D5143D16FC6; Tue, 21 Mar 2017 18:50:10 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (glebi.us [96.95.210.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id A212E1ACA; Tue, 21 Mar 2017 18:50:10 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (localhost [127.0.0.1]) by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id v2LIo4sf063369 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 21 Mar 2017 11:50:04 -0700 (PDT) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebi.us (8.15.2/8.15.2/Submit) id v2LIo4Z5063368; Tue, 21 Mar 2017 11:50:04 -0700 (PDT) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebi.us: glebius set sender to glebius@FreeBSD.org using -f Date: Tue, 21 Mar 2017 11:50:04 -0700 From: Gleb Smirnoff To: John Baldwin Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321185004.GW23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <1782817.djIc6TfI1t@ralph.baldwin.cx> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1782817.djIc6TfI1t@ralph.baldwin.cx> User-Agent: Mutt/1.7.2 (2016-11-26) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 18:50:10 -0000 John, On Tue, Mar 21, 2017 at 10:40:34AM -0700, John Baldwin wrote: J> First, this is a very good change and long overdue in divorcing the J> user-facing structure for live system reporting vs the kernel structure. J> J> However, I realize you don't use info from netstat when debugging kernel J> crash dumps, but other people _do_. It's ok if the kvm bits of netstat J> require a matching kernel and thus require recompiling everytime the ABI J> changes, but it is useful to have them. Please restore those. I have very much anticipated this comment from you, John. I would like to remind you, that we have had this very exact conversation back when I removed kvm support from netstat/route.c. Let me search the archives: https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html This conversation has had a continuation on IRC, which I don't archive. AFAIR, first I told that with all my involvement into networking stack, I never ever had experienced a need to run route stats on a core. The debugger were the only useful tool. And that opinion was seconded by other network hackers. Then we discussed that a proper tool chould use dynamic type parsing and not kvm(3). You said that future gdb has python scripting and that would work fine. Meanwhile, you insisted that I restore the functionality. I resisted to put kvm(3) back into netstat/route.c, and instead I created a gdb script that prints exactly what 'nestat -anr -M core' prints. And I committed the script just to satisfy your demand: tools/debugscripts/netstat-anr.gdb Can you please fairly answer, have you (or anyone else) ever used the script during these 2 years? I believe, the inpcb/tcpcb printing from a core functionality has the same level of real usefulness. I could create the same script for pcbs, and I am afraid it is going to share fate of netstat-anr.gdb. Today, I can actually bring yet another point on kvm(3) in netstat, which I didn't bring in 2015. Now netstat is dependent on libxo, which has a lot of complex things in it and was never reviewed wrt security implications. Now netstat has only one last bit of kvm functionality remaining - UNIX pcbs printing, which also has close to zero level of usefulness. Once we remove it, we can remove setgid bit and kmem access from /usr/bin/netstat and sleep better. -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Tue Mar 21 19:02:19 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 18A5FD1635C; Tue, 21 Mar 2017 19:02:19 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C43003FD; Tue, 21 Mar 2017 19:02:18 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LJ2Hng068683; Tue, 21 Mar 2017 19:02:17 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LJ2HZL068540; Tue, 21 Mar 2017 19:02:17 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703211902.v2LJ2HZL068540@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Tue, 21 Mar 2017 19:02:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315686 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 19:02:19 -0000 Author: ngie Date: Tue Mar 21 19:02:17 2017 New Revision: 315686 URL: https://svnweb.freebsd.org/changeset/base/315686 Log: kvm_geterr: handle `kd` == NULL in a deterministic/graceful manner Return a NUL string instead of just working by accident with kvm_geterr(3) when MALLOC_PRODUCTION is disabled (I didn't confirm the MALLOC_PRODUCTION being enabled path). Document the new explicit return behavior for kvm_geterr(3), as well as the previous implicit behavior, i.e., the buffer attached to returned via kvm_geterr(3) would be empty if a previous error hadn't been stored in `kd`. Differential Revision: D10022 MFC after: 1 week Reviewed by: vangyzen Sponsored by: Dell EMC Isilon Modified: head/lib/libkvm/kvm.c head/lib/libkvm/kvm_geterr.3 Modified: head/lib/libkvm/kvm.c ============================================================================== --- head/lib/libkvm/kvm.c Tue Mar 21 18:02:14 2017 (r315685) +++ head/lib/libkvm/kvm.c Tue Mar 21 19:02:17 2017 (r315686) @@ -66,9 +66,14 @@ static char sccsid[] = "@(#)kvm.c 8.2 (B SET_DECLARE(kvm_arch, struct kvm_arch); +static char _kd_is_null[] = ""; + char * kvm_geterr(kvm_t *kd) { + + if (kd == NULL) + return (_kd_is_null); return (kd->errbuf); } Modified: head/lib/libkvm/kvm_geterr.3 ============================================================================== --- head/lib/libkvm/kvm_geterr.3 Tue Mar 21 18:02:14 2017 (r315685) +++ head/lib/libkvm/kvm_geterr.3 Tue Mar 21 19:02:17 2017 (r315686) @@ -32,7 +32,7 @@ .\" @(#)kvm_geterr.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd June 4, 1993 +.Dd March 21, 2017 .Dt KVM_GETERR 3 .Os .Sh NAME @@ -54,6 +54,15 @@ library call did not produce an error. The string returned is stored in memory owned by .Xr kvm 3 so the message should be copied out and saved elsewhere if necessary. +.Sh RETURN VALUES +The function +.Fn kvm_geterr +will return "" if +.Fa kd +is +.Dv NULL +or an error has not been captured for +.Fa kd . .Sh SEE ALSO .Xr kvm 3 , .Xr kvm_close 3 , From owner-svn-src-head@freebsd.org Tue Mar 21 19:10:08 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A503FD16604; Tue, 21 Mar 2017 19:10:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 71ECB8FC; Tue, 21 Mar 2017 19:10:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LJA7TC069108; Tue, 21 Mar 2017 19:10:07 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LJA7N0069107; Tue, 21 Mar 2017 19:10:07 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703211910.v2LJA7N0069107@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Tue, 21 Mar 2017 19:10:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315687 - head/lib/libutil X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 19:10:08 -0000 Author: ngie Date: Tue Mar 21 19:10:07 2017 New Revision: 315687 URL: https://svnweb.freebsd.org/changeset/base/315687 Log: Document sbuf_hexdump(9) in just sbuf(9) - Remove duplicate references to sbuf_hexdump(9) from hexdump(3). sbuf_hexdump(9) already pointed back to hexdump(3) for implementation details. - Refer to sbuf_hexdump(9) instead of sbuf(9) for completeness MFC after: 1 week Reviewed by: vangyzen (earlier diff) Sponsored by: Dell EMC Isilon Differential Revision: D9912 Modified: head/lib/libutil/hexdump.3 Modified: head/lib/libutil/hexdump.3 ============================================================================== --- head/lib/libutil/hexdump.3 Tue Mar 21 19:02:17 2017 (r315686) +++ head/lib/libutil/hexdump.3 Tue Mar 21 19:10:07 2017 (r315687) @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 8, 2017 +.Dd March 21, 2017 .Dt HEXDUMP 3 .Os .Sh NAME @@ -38,16 +38,6 @@ .In libutil.h .Ft void .Fn hexdump "void *ptr" "int length" "const char *hdr" "int flags" -.In sys/types.h -.In sys/sbuf.h -.Ft void -.Fo sbuf_hexdump -.Fa "struct sbuf *sb" -.Fa "void *ptr" -.Fa "int length" -.Fa "const char *hdr" -.Fa "int flags" -.Fc .Sh DESCRIPTION The .Fn hexdump @@ -60,11 +50,6 @@ output will start with an offset count, followed by 16 .Tn ASCII characters. -.Pp -The -.Fn sbuf_hexdump -function prints the hexdump to the supplied -.Xr sbuf 9 . .Bl -tag -width indent .It Fa ptr Pointer to the array of bytes to print. @@ -104,7 +89,7 @@ Do not print the character values on eac .El .Sh SEE ALSO .Xr ascii 7 , -.Xr sbuf 9 +.Xr sbuf_hexdump 9 .Sh AUTHORS This manual page was written by .An Scott Long . From owner-svn-src-head@freebsd.org Tue Mar 21 19:52:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AC398CD740C; Tue, 21 Mar 2017 19:52:05 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from zxy.spb.ru (zxy.spb.ru [195.70.199.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6ECDB12C2; Tue, 21 Mar 2017 19:52:05 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1cqPp4-0000ac-3M; Tue, 21 Mar 2017 22:52:02 +0300 Date: Tue, 21 Mar 2017 22:52:02 +0300 From: Slawa Olhovchenkov To: Gleb Smirnoff Cc: John Baldwin , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321195202.GF86500@zxy.spb.ru> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <1782817.djIc6TfI1t@ralph.baldwin.cx> <20170321185004.GW23308@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170321185004.GW23308@FreeBSD.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: slw@zxy.spb.ru X-SA-Exim-Scanned: No (on zxy.spb.ru); SAEximRunCond expanded to false X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 19:52:05 -0000 On Tue, Mar 21, 2017 at 11:50:04AM -0700, Gleb Smirnoff wrote: > John, > > On Tue, Mar 21, 2017 at 10:40:34AM -0700, John Baldwin wrote: > J> First, this is a very good change and long overdue in divorcing the > J> user-facing structure for live system reporting vs the kernel structure. > J> > J> However, I realize you don't use info from netstat when debugging kernel > J> crash dumps, but other people _do_. It's ok if the kvm bits of netstat > J> require a matching kernel and thus require recompiling everytime the ABI > J> changes, but it is useful to have them. Please restore those. > > I have very much anticipated this comment from you, John. > > I would like to remind you, that we have had this very exact conversation > back when I removed kvm support from netstat/route.c. Let me search the > archives: > > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html > > This conversation has had a continuation on IRC, which I don't archive. > > AFAIR, first I told that with all my involvement into networking stack, > I never ever had experienced a need to run route stats on a core. The > debugger were the only useful tool. And that opinion was seconded by > other network hackers. Then we discussed that a proper tool chould use > dynamic type parsing and not kvm(3). You said that future gdb has python > scripting and that would work fine. Meanwhile, you insisted that I restore > the functionality. I resisted to put kvm(3) back into netstat/route.c, and > instead I created a gdb script that prints exactly what 'nestat -anr -M core' > prints. And I committed the script just to satisfy your demand: > > tools/debugscripts/netstat-anr.gdb > > Can you please fairly answer, have you (or anyone else) ever used the > script during these 2 years? > > I believe, the inpcb/tcpcb printing from a core functionality has the > same level of real usefulness. I could create the same script for pcbs, > and I am afraid it is going to share fate of netstat-anr.gdb. How long run this script for core file w/ 40K TCP connections? From owner-svn-src-head@freebsd.org Tue Mar 21 20:07:49 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2E193CD7961; Tue, 21 Mar 2017 20:07:49 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from smtp-out-no.shaw.ca (smtp-out-no.shaw.ca [64.59.134.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id CB8221EE5; Tue, 21 Mar 2017 20:07:48 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from spqr.komquats.com ([96.50.22.10]) by shaw.ca with SMTP id qQ4FcSkTCUiwTqQ4Hc4hNV; Tue, 21 Mar 2017 14:07:46 -0600 X-Authority-Analysis: v=2.2 cv=Qo0u5R6d c=1 sm=1 tr=0 a=jvE2nwUzI0ECrNeyr98KWA==:117 a=jvE2nwUzI0ECrNeyr98KWA==:17 a=kj9zAlcOel0A:10 a=6Iz7jQTuP9IA:10 a=KawIFhhbAAAA:8 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=sLuI7U-jbgtSMACEDd4A:9 a=CjuIK1q_8ugA:10 a=Ijv1rhU9Br0A:10 a=sDZbbUVwIjaXAAecbMhh:22 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 Received: from slippy.cwsent.com (slippy8 [10.2.2.6]) by spqr.komquats.com (Postfix) with ESMTPS id 41F501F74; Tue, 21 Mar 2017 13:07:43 -0700 (PDT) Received: from slippy (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id v2LK7gG8070455; Tue, 21 Mar 2017 13:07:42 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <201703212007.v2LK7gG8070455@slippy.cwsent.com> X-Mailer: exmh version 2.8.0 04/21/2012 with nmh-1.6 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Slawa Olhovchenkov cc: Gleb Smirnoff , John Baldwin , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt In-Reply-To: Message from Slawa Olhovchenkov of "Tue, 21 Mar 2017 22:52:02 +0300." <20170321195202.GF86500@zxy.spb.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Tue, 21 Mar 2017 13:07:42 -0700 X-CMAE-Envelope: MS4wfLDm5CNn9QOxTyq9waMKuY6YBPdfZbVEhl8vSD47pzVTvhhSSPud8cSpZAz/65lM8P9iXvZXcelSLQs/DQth5XD4HVNJnEmXbgPRzd4Dr4RtGQFy8mRC d1U2EGBiXMwNvyGQQnX1QIP2VIJA+D/S6l+Cb5Rdm10qOCVeIt8y4p8hHTzi67cbXMvnCmDQyArky5Oght8Jc2rbJLsF3epN1P4XpCF0/7Qo395h6A5NwqmD yZ8/afWBrElpzN4oDUDzSj47gGLUShGbgmNvBnmgUm1+aPqDv1Y+5m7RCQ2qB31bl+L/Z8KJl7xNXs1EIH8vP8UXM1BO9rWhj78U9YYTzWY= X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 20:07:49 -0000 In message <20170321195202.GF86500@zxy.spb.ru>, Slawa Olhovchenkov writes: > On Tue, Mar 21, 2017 at 11:50:04AM -0700, Gleb Smirnoff wrote: > > > John, > > > > On Tue, Mar 21, 2017 at 10:40:34AM -0700, John Baldwin wrote: > > J> First, this is a very good change and long overdue in divorcing the > > J> user-facing structure for live system reporting vs the kernel structure. > > J> > > J> However, I realize you don't use info from netstat when debugging kernel > > J> crash dumps, but other people _do_. It's ok if the kvm bits of netstat > > J> require a matching kernel and thus require recompiling everytime the ABI > > J> changes, but it is useful to have them. Please restore those. > > > > I have very much anticipated this comment from you, John. > > > > I would like to remind you, that we have had this very exact conversation > > back when I removed kvm support from netstat/route.c. Let me search the > > archives: > > > > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html > > > > This conversation has had a continuation on IRC, which I don't archive. > > > > AFAIR, first I told that with all my involvement into networking stack, > > I never ever had experienced a need to run route stats on a core. The > > debugger were the only useful tool. And that opinion was seconded by > > other network hackers. Then we discussed that a proper tool chould use > > dynamic type parsing and not kvm(3). You said that future gdb has python > > scripting and that would work fine. Meanwhile, you insisted that I restore > > the functionality. I resisted to put kvm(3) back into netstat/route.c, and > > instead I created a gdb script that prints exactly what 'nestat -anr -M cor > e' > > prints. And I committed the script just to satisfy your demand: > > > > tools/debugscripts/netstat-anr.gdb > > > > Can you please fairly answer, have you (or anyone else) ever used the > > script during these 2 years? > > > > I believe, the inpcb/tcpcb printing from a core functionality has the > > same level of real usefulness. I could create the same script for pcbs, > > and I am afraid it is going to share fate of netstat-anr.gdb. > > How long run this script for core file w/ 40K TCP connections? Would it be possible to replace this script with new DTrace probes and a DTrace script? -- Cheers, Cy Schubert FreeBSD UNIX: Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few. From owner-svn-src-head@freebsd.org Tue Mar 21 20:18:42 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1C529CD7C0D; Tue, 21 Mar 2017 20:18:42 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from zxy.spb.ru (zxy.spb.ru [195.70.199.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D0CF56AA; Tue, 21 Mar 2017 20:18:41 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1cqQEo-0001D3-D9; Tue, 21 Mar 2017 23:18:38 +0300 Date: Tue, 21 Mar 2017 23:18:38 +0300 From: Slawa Olhovchenkov To: Cy Schubert Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, Gleb Smirnoff , src-committers@freebsd.org, John Baldwin Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321201838.GG86500@zxy.spb.ru> References: <20170321195202.GF86500@zxy.spb.ru> <201703212007.v2LK7gG8070455@slippy.cwsent.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201703212007.v2LK7gG8070455@slippy.cwsent.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: slw@zxy.spb.ru X-SA-Exim-Scanned: No (on zxy.spb.ru); SAEximRunCond expanded to false X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 20:18:42 -0000 On Tue, Mar 21, 2017 at 01:07:42PM -0700, Cy Schubert wrote: > In message <20170321195202.GF86500@zxy.spb.ru>, Slawa Olhovchenkov writes: > > On Tue, Mar 21, 2017 at 11:50:04AM -0700, Gleb Smirnoff wrote: > > > > > John, > > > > > > On Tue, Mar 21, 2017 at 10:40:34AM -0700, John Baldwin wrote: > > > J> First, this is a very good change and long overdue in divorcing the > > > J> user-facing structure for live system reporting vs the kernel structure. > > > J> > > > J> However, I realize you don't use info from netstat when debugging kernel > > > J> crash dumps, but other people _do_. It's ok if the kvm bits of netstat > > > J> require a matching kernel and thus require recompiling everytime the ABI > > > J> changes, but it is useful to have them. Please restore those. > > > > > > I have very much anticipated this comment from you, John. > > > > > > I would like to remind you, that we have had this very exact conversation > > > back when I removed kvm support from netstat/route.c. Let me search the > > > archives: > > > > > > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html > > > > > > This conversation has had a continuation on IRC, which I don't archive. > > > > > > AFAIR, first I told that with all my involvement into networking stack, > > > I never ever had experienced a need to run route stats on a core. The > > > debugger were the only useful tool. And that opinion was seconded by > > > other network hackers. Then we discussed that a proper tool chould use > > > dynamic type parsing and not kvm(3). You said that future gdb has python > > > scripting and that would work fine. Meanwhile, you insisted that I restore > > > the functionality. I resisted to put kvm(3) back into netstat/route.c, and > > > instead I created a gdb script that prints exactly what 'nestat -anr -M cor > > e' > > > prints. And I committed the script just to satisfy your demand: > > > > > > tools/debugscripts/netstat-anr.gdb > > > > > > Can you please fairly answer, have you (or anyone else) ever used the > > > script during these 2 years? > > > > > > I believe, the inpcb/tcpcb printing from a core functionality has the > > > same level of real usefulness. I could create the same script for pcbs, > > > and I am afraid it is going to share fate of netstat-anr.gdb. > > > > How long run this script for core file w/ 40K TCP connections? > > Would it be possible to replace this script with new DTrace probes and a > DTrace script? DTrace probes in /etc/rc.d/savecore? Realy? From owner-svn-src-head@freebsd.org Tue Mar 21 20:23:26 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2EDD2CD7EA3; Tue, 21 Mar 2017 20:23:26 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from smtp-out-so.shaw.ca (smtp-out-so.shaw.ca [64.59.136.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id CB565BE9; Tue, 21 Mar 2017 20:23:25 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from spqr.komquats.com ([96.50.22.10]) by shaw.ca with SMTP id qQJNcBODBC3JIqQJOccE83; Tue, 21 Mar 2017 14:23:24 -0600 X-Authority-Analysis: v=2.2 cv=XbT59Mx5 c=1 sm=1 tr=0 a=jvE2nwUzI0ECrNeyr98KWA==:117 a=jvE2nwUzI0ECrNeyr98KWA==:17 a=kj9zAlcOel0A:10 a=6Iz7jQTuP9IA:10 a=KawIFhhbAAAA:8 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=vsL1ZULAZ7TolKXOxSoA:9 a=CjuIK1q_8ugA:10 a=Ijv1rhU9Br0A:10 a=sDZbbUVwIjaXAAecbMhh:22 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 Received: from slippy.cwsent.com (slippy8 [10.2.2.6]) by spqr.komquats.com (Postfix) with ESMTPS id 016F31F9F; Tue, 21 Mar 2017 13:23:20 -0700 (PDT) Received: from slippy (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id v2LKNK7o098584; Tue, 21 Mar 2017 13:23:20 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <201703212023.v2LKNK7o098584@slippy.cwsent.com> X-Mailer: exmh version 2.8.0 04/21/2012 with nmh-1.6 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Slawa Olhovchenkov cc: Cy Schubert , svn-src-head@freebsd.org, svn-src-all@freebsd.org, Gleb Smirnoff , src-committers@freebsd.org, John Baldwin Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt In-Reply-To: Message from Slawa Olhovchenkov of "Tue, 21 Mar 2017 23:18:38 +0300." <20170321201838.GG86500@zxy.spb.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Tue, 21 Mar 2017 13:23:20 -0700 X-CMAE-Envelope: MS4wfC3VE3nDpHvKZbUGDViLaD9Ex4o6R7VJLLTw2ONmwJT4GA9gZBmsWW5AxiQURUcUy6vwXudM+3hAk4xT9FjnzrZmzGXFOSIYjKqrULNltXnGW0BQqQl4 zaK4h7/laavIhHu3hXnDLJBnC4AX6i9IpjAT+vR7TBv9mVisDFod6yWoUbFnVks0ijOHOTVTCFOTUrIf/dH0QIEwpKxzffVNUtxycVSNPZxTqPLnagaILpW0 MtssvU5d/d89zxntnm2TLm7TD6R2igh2pN1Qruj90G3Q18Cfd5sW+GwPcheSiPbz1+184yHTVQ9mwIMrwcJkiupjp9jZGvmulStlZZk/s1E= X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 20:23:26 -0000 In message <20170321201838.GG86500@zxy.spb.ru>, Slawa Olhovchenkov writes: > On Tue, Mar 21, 2017 at 01:07:42PM -0700, Cy Schubert wrote: > > > In message <20170321195202.GF86500@zxy.spb.ru>, Slawa Olhovchenkov writes: > > > On Tue, Mar 21, 2017 at 11:50:04AM -0700, Gleb Smirnoff wrote: > > > > > > > John, > > > > > > > > On Tue, Mar 21, 2017 at 10:40:34AM -0700, John Baldwin wrote: > > > > J> First, this is a very good change and long overdue in divorcing the > > > > J> user-facing structure for live system reporting vs the kernel struct > ure. > > > > J> > > > > J> However, I realize you don't use info from netstat when debugging ke > rnel > > > > J> crash dumps, but other people _do_. It's ok if the kvm bits of nets > tat > > > > J> require a matching kernel and thus require recompiling everytime the > ABI > > > > J> changes, but it is useful to have them. Please restore those. > > > > > > > > I have very much anticipated this comment from you, John. > > > > > > > > I would like to remind you, that we have had this very exact conversati > on > > > > back when I removed kvm support from netstat/route.c. Let me search the > > > > archives: > > > > > > > > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html > > > > > > > > This conversation has had a continuation on IRC, which I don't archive. > > > > > > > > AFAIR, first I told that with all my involvement into networking stack, > > > > I never ever had experienced a need to run route stats on a core. The > > > > debugger were the only useful tool. And that opinion was seconded by > > > > other network hackers. Then we discussed that a proper tool chould use > > > > dynamic type parsing and not kvm(3). You said that future gdb has pytho > n > > > > scripting and that would work fine. Meanwhile, you insisted that I rest > ore > > > > the functionality. I resisted to put kvm(3) back into netstat/route.c, > and > > > > instead I created a gdb script that prints exactly what 'nestat -anr -M > cor > > > e' > > > > prints. And I committed the script just to satisfy your demand: > > > > > > > > tools/debugscripts/netstat-anr.gdb > > > > > > > > Can you please fairly answer, have you (or anyone else) ever used the > > > > script during these 2 years? > > > > > > > > I believe, the inpcb/tcpcb printing from a core functionality has the > > > > same level of real usefulness. I could create the same script for pcbs, > > > > and I am afraid it is going to share fate of netstat-anr.gdb. > > > > > > How long run this script for core file w/ 40K TCP connections? > > > > Would it be possible to replace this script with new DTrace probes and a > > DTrace script? > > DTrace probes in /etc/rc.d/savecore? Realy? > Sorry, rushing through the noon hour. I should have read this thread more carefully. -- Cheers, Cy Schubert FreeBSD UNIX: Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few. From owner-svn-src-head@freebsd.org Tue Mar 21 20:23:49 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6010ECD7F06; Tue, 21 Mar 2017 20:23:49 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pg0-x243.google.com (mail-pg0-x243.google.com [IPv6:2607:f8b0:400e:c05::243]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2B206D3B; Tue, 21 Mar 2017 20:23:49 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pg0-x243.google.com with SMTP id w20so2041774pgc.1; Tue, 21 Mar 2017 13:23:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=TSZRMb97vXnuG6Ttz7PSyO9J5fG5R8+BF26p/BIel5c=; b=Mea6LwEqJytGjRgjivJ8EiTnWdGjiTJr789zB3X7bzUOU6p6WIM4JT7Kayr/toglst erV/IQUx0mYGAvYmD1Y1TxbqjtKzLA2+8xQVqIxWyIhanzl4GoQsp5Tu21B2H9TVRtdJ HCI3lxF/R/G2WD3XbzYE/NSY8N2Lm5ieteLPgvnNN4rKlrK72rpFVmX754NYD2jJmUWJ jYCMpmffzkjTT8+t7TSszucgIGMSN7AhRtpd+dMQ42AoqXnAuBATVutAcVG6iMGvhCeM 8UsWBfW1InN4VH8rUYcAzvhdJOEQqnE8DJaVZYt3chgukz/aAQ+29+jgQcJWIfDxZnbo ZyDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=TSZRMb97vXnuG6Ttz7PSyO9J5fG5R8+BF26p/BIel5c=; b=LD8kKQ5arI+xeMxaOJBDfK3gldUSONeg2W8RlLYHRtj+2o1l9HQJXmTtmfwYXm4wXk b60oBWd/bXIf8OymX6twpwRqieMfiMZirWz3+4Bs2tHmomErU3tR6Xbah7uoo/zmeACY PtZNex/82PgyYPnCUxUklF8VtnQEAtDXoJ3V4k4JZqgIO7OG4C+C3pWBXTnZFPuFC1TQ UrNwQUYhB1DAeBlG7NNTzs0KPxAOtCa+BaXX8NxYFTghq+w+FT8nvGBJUO3OtesZs0D3 pcXShs7jpInG9zxzogzutOgtf2dfdEeZWP7O6SXw1EO9c5SMnDecjZHmYiY9cgFRRuSH vRYQ== X-Gm-Message-State: AFeK/H0ndfFN6lhO5YX+e7wXJD4rjLEHK4bBFzdh+3n6xUNuVYtIkq+pK3VX/8MztFGzQA== X-Received: by 10.84.168.69 with SMTP id e63mr50072563plb.124.1490127828730; Tue, 21 Mar 2017 13:23:48 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id 23sm41265020pfw.94.2017.03.21.13.23.47 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 21 Mar 2017 13:23:47 -0700 (PDT) Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_C07E06AD-3829-414B-974E-98AD723D833D"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: <201703212007.v2LK7gG8070455@slippy.cwsent.com> Date: Tue, 21 Mar 2017 13:23:46 -0700 Cc: Slawa Olhovchenkov , Gleb Smirnoff , John Baldwin , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Message-Id: References: <201703212007.v2LK7gG8070455@slippy.cwsent.com> To: Cy Schubert X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 20:23:49 -0000 --Apple-Mail=_C07E06AD-3829-414B-974E-98AD723D833D Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 21, 2017, at 13:07, Cy Schubert = wrote: =E2=80=A6 > Would it be possible to replace this script with new DTrace probes and = a > DTrace script? I don=E2=80=99t genuinely think that using DTrace probes on a = kernel coredump would work today, and even if it did, I don=E2=80=99t = think it would make sense (DTrace -> Dynamic Trace). What gjb/jhb are = discussing is post-mortem analysis of a coredump (netstat uses sysctl(3) = to query the routing socket on live kernels). Thanks, -Ngie --Apple-Mail=_C07E06AD-3829-414B-974E-98AD723D833D Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJY0YvTAAoJEPWDqSZpMIYV+G8QAJSIwlXGi6jVfwWz2GYU/5UI smkdf+wzTPZkllujsEYfS48OuiM1/61PtYTzm6Nlbp4UWAN2hpPKAW/LZOZyf4vg T8G5TCXqJsY2yJB5OYNuiyrLTqQpse/xEu5GIj75wnL+mUs2wHVb+b2wl5o7yNUy ISwQcGlXPq6ponIB4cibIiR6LfBJJjdOTybOtN1+sdmYS9Dp61nA74l4A5YdyyNp mYFkjXS6tYU+1GaJyXNbGYRx+M7r018rPZRtLV1fW4AaJp4lgL/z+XhMyedFEDC7 WV0LGgxhsfF6gKLSLDl6r3LfoecNbZhHQzwzf4J/54YMgwaQQ0Sf8nS7HkGbN1z7 H7YL+b2zul5ZeP0KGhOySV7/HEf97I1gwqDTAOsObGSxApJaa0Z85wR53+2Fomrw MFLK6S2uiJeSaBETyMohZiKvliruToKNa08jrKI6irKsV5I0ddxbwX+d022k7+Zr 4J3cKfaA6l97IrMyxcmZhki7YLfhq6w/jX0Hf7oDRBfLs9U8SELKU2EoJEyK4AFN o4PAvXztgMqk7YCWF3TZp+7k/EWhWMzDV4tJPcz+3GWwK1U7RzMax7nsVmJ9f4hB F8CYcKnL7pF0qA0RNC2FwlmqTFRU2DqcsMlIwiD++3c+QEbl6cQKhB6ELslR7xay FH3XcJWo4xT3duhcu03i =4Kh4 -----END PGP SIGNATURE----- --Apple-Mail=_C07E06AD-3829-414B-974E-98AD723D833D-- From owner-svn-src-head@freebsd.org Tue Mar 21 20:31:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6FECBD160FB; Tue, 21 Mar 2017 20:31:06 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from smtp-out-so.shaw.ca (smtp-out-so.shaw.ca [64.59.136.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 1860B12CD; Tue, 21 Mar 2017 20:31:05 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from spqr.komquats.com ([96.50.22.10]) by shaw.ca with SMTP id qQQpcBR9mC3JIqQQqccGGo; Tue, 21 Mar 2017 14:31:05 -0600 X-Authority-Analysis: v=2.2 cv=XbT59Mx5 c=1 sm=1 tr=0 a=jvE2nwUzI0ECrNeyr98KWA==:117 a=jvE2nwUzI0ECrNeyr98KWA==:17 a=kj9zAlcOel0A:10 a=6Iz7jQTuP9IA:10 a=pGLkceISAAAA:8 a=BWvPGDcYAAAA:8 a=YxBL1-UpAAAA:8 a=6I5d2MoRAAAA:8 a=pXxtvBy-4bPsNJX8NnYA:9 a=CjuIK1q_8ugA:10 a=6kGIvZw6iX1k4Y-7sg4_:22 a=pxhY87DP9d2VeQe4joPk:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=IjZwj45LgO3ly-622nXo:22 Received: from slippy.cwsent.com (slippy8 [10.2.2.6]) by spqr.komquats.com (Postfix) with ESMTPS id 9279A1FDD; Tue, 21 Mar 2017 13:31:03 -0700 (PDT) Received: from slippy (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id v2LKV2sr012532; Tue, 21 Mar 2017 13:31:02 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <201703212031.v2LKV2sr012532@slippy.cwsent.com> X-Mailer: exmh version 2.8.0 04/21/2012 with nmh-1.6 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: "Ngie Cooper (yaneurabeya)" cc: Cy Schubert , Slawa Olhovchenkov , Gleb Smirnoff , John Baldwin , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt In-Reply-To: Message from "Ngie Cooper (yaneurabeya)" of "Tue, 21 Mar 2017 13:23:46 -0700." Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Tue, 21 Mar 2017 13:31:02 -0700 X-CMAE-Envelope: MS4wfJ+y8nmHoRQR639Tew660t6NpSUZShgZvqbmUDMZ6Y0TFTBc8aBZVxK3K7iqvamSqqx9XDJT2NsI4t+FPNmPs9W3520W7I4+6QJ94A/il8j6NrB7ExXk 3CkFLPwTTLY0InFDkbIW+lHaKpr6mpnGRUIynBK6Chje+TZy0LKMNVfYp1tRuM1D3X36CcY3jHkLOfvJn8tjGrisB60u+f+3xdYB8P4amO/5tZsz9YIP5PhJ qU6s3ONIPLAD35hx2v3DgewD32LbqvHOX6tVc2qcBd/vdiSFTRVPUYAz3WEQzeEtWTBmBe5qTu/WYYXeIxNrT0DqWkYXL4GQfkQ1pqLxShQq1vJ5UMwOV8Pe ae+eiO/T0mZpJsWBr2wHVefMfOGK2Q== X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 20:31:06 -0000 In message , "Ngie Cooper (yane urabeya)" writes: > > > --Apple-Mail=_C07E06AD-3829-414B-974E-98AD723D833D > Content-Transfer-Encoding: quoted-printable > Content-Type: text/plain; > charset=utf-8 > > > > On Mar 21, 2017, at 13:07, Cy Schubert = > wrote: > > =E2=80=A6 > > > Would it be possible to replace this script with new DTrace probes and = > a > > DTrace script? > > I don=E2=80=99t genuinely think that using DTrace probes on a = > kernel coredump would work today, and even if it did, I don=E2=80=99t = > think it would make sense (DTrace -> Dynamic Trace). What gjb/jhb are = > discussing is post-mortem analysis of a coredump (netstat uses sysctl(3) = > to query the routing socket on live kernels). My mistake. I replied before I read through the whole thread in what was left of my not so long noon "half hour". Got it now. :~ -- Cheers, Cy Schubert FreeBSD UNIX: Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few. From owner-svn-src-head@freebsd.org Tue Mar 21 20:40:24 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D2645D16706; Tue, 21 Mar 2017 20:40:24 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (glebi.us [96.95.210.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id A132C1F3A; Tue, 21 Mar 2017 20:40:24 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (localhost [127.0.0.1]) by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id v2LKeMWF064217 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 21 Mar 2017 13:40:22 -0700 (PDT) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebi.us (8.15.2/8.15.2/Submit) id v2LKeM8e064216; Tue, 21 Mar 2017 13:40:22 -0700 (PDT) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebi.us: glebius set sender to glebius@FreeBSD.org using -f Date: Tue, 21 Mar 2017 13:40:22 -0700 From: Gleb Smirnoff To: Slawa Olhovchenkov Cc: John Baldwin , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321204022.GX23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <1782817.djIc6TfI1t@ralph.baldwin.cx> <20170321185004.GW23308@FreeBSD.org> <20170321195202.GF86500@zxy.spb.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170321195202.GF86500@zxy.spb.ru> User-Agent: Mutt/1.7.2 (2016-11-26) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 20:40:24 -0000 On Tue, Mar 21, 2017 at 10:52:02PM +0300, Slawa Olhovchenkov wrote: S> > On Tue, Mar 21, 2017 at 10:40:34AM -0700, John Baldwin wrote: S> > J> First, this is a very good change and long overdue in divorcing the S> > J> user-facing structure for live system reporting vs the kernel structure. S> > J> S> > J> However, I realize you don't use info from netstat when debugging kernel S> > J> crash dumps, but other people _do_. It's ok if the kvm bits of netstat S> > J> require a matching kernel and thus require recompiling everytime the ABI S> > J> changes, but it is useful to have them. Please restore those. S> > S> > I have very much anticipated this comment from you, John. S> > S> > I would like to remind you, that we have had this very exact conversation S> > back when I removed kvm support from netstat/route.c. Let me search the S> > archives: S> > S> > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html S> > S> > This conversation has had a continuation on IRC, which I don't archive. S> > S> > AFAIR, first I told that with all my involvement into networking stack, S> > I never ever had experienced a need to run route stats on a core. The S> > debugger were the only useful tool. And that opinion was seconded by S> > other network hackers. Then we discussed that a proper tool chould use S> > dynamic type parsing and not kvm(3). You said that future gdb has python S> > scripting and that would work fine. Meanwhile, you insisted that I restore S> > the functionality. I resisted to put kvm(3) back into netstat/route.c, and S> > instead I created a gdb script that prints exactly what 'nestat -anr -M core' S> > prints. And I committed the script just to satisfy your demand: S> > S> > tools/debugscripts/netstat-anr.gdb S> > S> > Can you please fairly answer, have you (or anyone else) ever used the S> > script during these 2 years? S> > S> > I believe, the inpcb/tcpcb printing from a core functionality has the S> > same level of real usefulness. I could create the same script for pcbs, S> > and I am afraid it is going to share fate of netstat-anr.gdb. S> S> How long run this script for core file w/ 40K TCP connections? You tell me. When I analyze cores, I don't read through 40K TCP connections. -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Tue Mar 21 20:48:37 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6DBE3D16C63; Tue, 21 Mar 2017 20:48:37 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3D7F41D2E; Tue, 21 Mar 2017 20:48:37 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LKmaPQ011863; Tue, 21 Mar 2017 20:48:36 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LKmaFJ011862; Tue, 21 Mar 2017 20:48:36 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703212048.v2LKmaFJ011862@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Tue, 21 Mar 2017 20:48:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315688 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 20:48:37 -0000 Author: ngie Date: Tue Mar 21 20:48:36 2017 New Revision: 315688 URL: https://svnweb.freebsd.org/changeset/base/315688 Log: kvm_write: fix -Wcast-qual warning in pointer arithmetic argument Cast buf to `const char *` when doing arithmetic operation to match `cp`'s type [1]. Differential Revision: D10082 MFC after: 1 week Reviewed by: cem (earlier diff), vangyzen Submitted by: cem [1] Sponsored by: Dell EMC Isilon Modified: head/lib/libkvm/kvm.c Modified: head/lib/libkvm/kvm.c ============================================================================== --- head/lib/libkvm/kvm.c Tue Mar 21 19:10:07 2017 (r315687) +++ head/lib/libkvm/kvm.c Tue Mar 21 20:48:36 2017 (r315688) @@ -476,7 +476,7 @@ kvm_write(kvm_t *kd, u_long kva, const v len -= cw; } - return (cp - (char *)buf); + return (cp - (const char *)buf); } int From owner-svn-src-head@freebsd.org Tue Mar 21 21:07:39 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 21A31D174AC; Tue, 21 Mar 2017 21:07:39 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E2CF11E12; Tue, 21 Mar 2017 21:07:38 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LL7bTB020477; Tue, 21 Mar 2017 21:07:37 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LL7bYE020476; Tue, 21 Mar 2017 21:07:37 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201703212107.v2LL7bYE020476@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Tue, 21 Mar 2017 21:07:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315689 - head/lib/libcompiler_rt X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 21:07:39 -0000 Author: dim Date: Tue Mar 21 21:07:37 2017 New Revision: 315689 URL: https://svnweb.freebsd.org/changeset/base/315689 Log: Gcc has incompatible internal declarations for __divtc3 and __multc3 as defined in compiler-rt, but it has no option to silence its warning, so make gcc warnings for libcompiler_rt non-fatal. Noticed by: lwhsu MFC after: 3 days Modified: head/lib/libcompiler_rt/Makefile Modified: head/lib/libcompiler_rt/Makefile ============================================================================== --- head/lib/libcompiler_rt/Makefile Tue Mar 21 20:48:36 2017 (r315688) +++ head/lib/libcompiler_rt/Makefile Tue Mar 21 21:07:37 2017 (r315689) @@ -16,6 +16,10 @@ CFLAGS+= -I${SRCTOP}/contrib/libcxxrt CWARNFLAGS.gcc_personality_v0.c+= -Wno-typedef-redefinition .endif +# gcc has incompatible internal declarations for __divtc3 and __multc3, but has +# no option to silence its warning, so make warnings non-fatal. +NO_WERROR.gcc= + .include "Makefile.inc" .if ${MK_INSTALLLIB} != "no" From owner-svn-src-head@freebsd.org Tue Mar 21 21:32:43 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C140ED17BF3; Tue, 21 Mar 2017 21:32:43 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from zxy.spb.ru (zxy.spb.ru [195.70.199.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7BB3D12EE; Tue, 21 Mar 2017 21:32:43 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1cqROR-0002e8-Ab; Wed, 22 Mar 2017 00:32:39 +0300 Date: Wed, 22 Mar 2017 00:32:39 +0300 From: Slawa Olhovchenkov To: Gleb Smirnoff Cc: John Baldwin , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170321213239.GX70430@zxy.spb.ru> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <1782817.djIc6TfI1t@ralph.baldwin.cx> <20170321185004.GW23308@FreeBSD.org> <20170321195202.GF86500@zxy.spb.ru> <20170321204022.GX23308@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170321204022.GX23308@FreeBSD.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: slw@zxy.spb.ru X-SA-Exim-Scanned: No (on zxy.spb.ru); SAEximRunCond expanded to false X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 21:32:43 -0000 On Tue, Mar 21, 2017 at 01:40:22PM -0700, Gleb Smirnoff wrote: > On Tue, Mar 21, 2017 at 10:52:02PM +0300, Slawa Olhovchenkov wrote: > S> > On Tue, Mar 21, 2017 at 10:40:34AM -0700, John Baldwin wrote: > S> > J> First, this is a very good change and long overdue in divorcing the > S> > J> user-facing structure for live system reporting vs the kernel structure. > S> > J> > S> > J> However, I realize you don't use info from netstat when debugging kernel > S> > J> crash dumps, but other people _do_. It's ok if the kvm bits of netstat > S> > J> require a matching kernel and thus require recompiling everytime the ABI > S> > J> changes, but it is useful to have them. Please restore those. > S> > > S> > I have very much anticipated this comment from you, John. > S> > > S> > I would like to remind you, that we have had this very exact conversation > S> > back when I removed kvm support from netstat/route.c. Let me search the > S> > archives: > S> > > S> > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html > S> > > S> > This conversation has had a continuation on IRC, which I don't archive. > S> > > S> > AFAIR, first I told that with all my involvement into networking stack, > S> > I never ever had experienced a need to run route stats on a core. The > S> > debugger were the only useful tool. And that opinion was seconded by > S> > other network hackers. Then we discussed that a proper tool chould use > S> > dynamic type parsing and not kvm(3). You said that future gdb has python > S> > scripting and that would work fine. Meanwhile, you insisted that I restore > S> > the functionality. I resisted to put kvm(3) back into netstat/route.c, and > S> > instead I created a gdb script that prints exactly what 'nestat -anr -M core' > S> > prints. And I committed the script just to satisfy your demand: > S> > > S> > tools/debugscripts/netstat-anr.gdb > S> > > S> > Can you please fairly answer, have you (or anyone else) ever used the > S> > script during these 2 years? > S> > > S> > I believe, the inpcb/tcpcb printing from a core functionality has the > S> > same level of real usefulness. I could create the same script for pcbs, > S> > and I am afraid it is going to share fate of netstat-anr.gdb. > S> > S> How long run this script for core file w/ 40K TCP connections? > > You tell me. When I analyze cores, I don't read through 40K TCP connections. Real, frech core: # grep netstat /var/crash/core.txt.3 netstat -s netstat -m netstat: memstat_kvm_all: invalid address (0x0) netstat -anA netstat -aL # grep -c tcp4 /var/crash/core.txt.3 38172 This created automaticly at reboot and boot paused until core.txt created. From owner-svn-src-head@freebsd.org Tue Mar 21 22:00:53 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E0E1DD17430; Tue, 21 Mar 2017 22:00:53 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B0C9813D9; Tue, 21 Mar 2017 22:00:53 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LM0qsp043459; Tue, 21 Mar 2017 22:00:52 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LM0qvQ043458; Tue, 21 Mar 2017 22:00:52 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703212200.v2LM0qvQ043458@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Tue, 21 Mar 2017 22:00:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315690 - head/sbin/route X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 22:00:54 -0000 Author: ngie Date: Tue Mar 21 22:00:52 2017 New Revision: 315690 URL: https://svnweb.freebsd.org/changeset/base/315690 Log: Delete trailing whitespace (no functional change) MFC after: 3 days Sponsored by: Dell EMC Isilon Modified: head/sbin/route/route.c Modified: head/sbin/route/route.c ============================================================================== --- head/sbin/route/route.c Tue Mar 21 21:07:37 2017 (r315689) +++ head/sbin/route/route.c Tue Mar 21 22:00:52 2017 (r315690) @@ -288,7 +288,7 @@ fiboptlist_range(const char *arg, struct if (errno == 0) { if (*endptr != '\0' || fib[i] < 0 || - (numfibs != -1 && fib[i] > numfibs - 1)) + (numfibs != -1 && fib[i] > numfibs - 1)) errno = EINVAL; } if (errno) @@ -1136,7 +1136,7 @@ inet_makenetandmask(u_long net, struct s j <<= 8; } /* i holds the first non zero bit */ - bits = 32 - (i*8); + bits = 32 - (i*8); } if (bits != 0) mask = 0xffffffff << (32 - bits); @@ -1356,7 +1356,7 @@ prefixlen(const char *str) int max; char *p; - rtm_addrs |= RTA_NETMASK; + rtm_addrs |= RTA_NETMASK; switch (af) { #ifdef INET6 case AF_INET6: @@ -1390,7 +1390,7 @@ prefixlen(const char *str) if (len < 0 || max < len) errx(EX_USAGE, "%s: invalid prefixlen", str); - + q = len >> 3; r = len & 7; memset((void *)p, 0, max / 8); From owner-svn-src-head@freebsd.org Tue Mar 21 22:09:01 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 78D34D1761A; Tue, 21 Mar 2017 22:09:01 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 45D7B17AB; Tue, 21 Mar 2017 22:09:01 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LM90wU046501; Tue, 21 Mar 2017 22:09:00 GMT (envelope-from bdrewery@FreeBSD.org) Received: (from bdrewery@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LM902L046500; Tue, 21 Mar 2017 22:09:00 GMT (envelope-from bdrewery@FreeBSD.org) Message-Id: <201703212209.v2LM902L046500@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bdrewery set sender to bdrewery@FreeBSD.org using -f From: Bryan Drewery Date: Tue, 21 Mar 2017 22:09:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315691 - head X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 22:09:01 -0000 Author: bdrewery Date: Tue Mar 21 22:09:00 2017 New Revision: 315691 URL: https://svnweb.freebsd.org/changeset/base/315691 Log: Rename _cc to _gcc to be more clear. MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Tue Mar 21 22:00:52 2017 (r315690) +++ head/Makefile.inc1 Tue Mar 21 22:09:00 2017 (r315691) @@ -1843,7 +1843,7 @@ _clang= usr.bin/clang _clang_libs= lib/clang .endif .if ${MK_GCC_BOOTSTRAP} != "no" -_cc= gnu/usr.bin/cc +_gcc= gnu/usr.bin/cc .endif .if ${MK_USB} != "no" _usb_tools= sys/boot/usb/tools @@ -1858,7 +1858,7 @@ cross-tools: .MAKE .PHONY ${_binutils} \ ${_elftctools} \ ${_dtrace_tools} \ - ${_cc} \ + ${_gcc} \ ${_btxld} \ ${_usb_tools} ${_+_}@${ECHODIR} "===> ${_tool} (obj,all,install)"; \ @@ -1930,7 +1930,7 @@ native-xtools: .PHONY usr.bin/ar \ ${_binutils} \ ${_elftctools} \ - ${_cc} \ + ${_gcc} \ ${_gcc_tools} \ ${_clang_libs} \ ${_clang} \ @@ -2589,7 +2589,7 @@ _xb-cross-tools: .PHONY usr.bin/ar \ ${_clang_libs} \ ${_clang} \ - ${_cc} + ${_gcc} ${_+_}@${ECHODIR} "===> xdev ${_tool} (obj,all)"; \ cd ${.CURDIR}/${_tool}; \ ${CDMAKE} DIRPRFX=${_tool}/ obj; \ @@ -2626,7 +2626,7 @@ _xi-cross-tools: .PHONY usr.bin/ar \ ${_clang_libs} \ ${_clang} \ - ${_cc} + ${_gcc} ${_+_}@${ECHODIR} "===> xdev ${_tool} (install)"; \ cd ${.CURDIR}/${_tool}; \ ${CDMAKE} DIRPRFX=${_tool}/ install DESTDIR=${XDDESTDIR} From owner-svn-src-head@freebsd.org Tue Mar 21 22:21:31 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2907BD177D0; Tue, 21 Mar 2017 22:21:31 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EA6671EB5; Tue, 21 Mar 2017 22:21:30 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LMLT61050462; Tue, 21 Mar 2017 22:21:29 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LMLTlS050461; Tue, 21 Mar 2017 22:21:29 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201703212221.v2LMLTlS050461@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Tue, 21 Mar 2017 22:21:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315692 - head/tools/test/ppsapi X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 22:21:31 -0000 Author: ian Date: Tue Mar 21 22:21:29 2017 New Revision: 315692 URL: https://svnweb.freebsd.org/changeset/base/315692 Log: Eliminate a "format string is not a string literal" warning. Modified: head/tools/test/ppsapi/ppsapitest.c Modified: head/tools/test/ppsapi/ppsapitest.c ============================================================================== --- head/tools/test/ppsapi/ppsapitest.c Tue Mar 21 22:09:00 2017 (r315691) +++ head/tools/test/ppsapi/ppsapitest.c Tue Mar 21 22:21:29 2017 (r315692) @@ -72,7 +72,7 @@ main(int argc, char **argv) if (argc > 0) { fd = open(argv[0], O_RDONLY); if (fd < 0) - err(1, argv[0]); + err(1, "%s", argv[0]); } else { fd = 0; } From owner-svn-src-head@freebsd.org Tue Mar 21 22:41:38 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E7032D17B40; Tue, 21 Mar 2017 22:41:38 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B6EE41789; Tue, 21 Mar 2017 22:41:38 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2LMfb2E059369; Tue, 21 Mar 2017 22:41:37 GMT (envelope-from cem@FreeBSD.org) Received: (from cem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2LMfbYG059368; Tue, 21 Mar 2017 22:41:37 GMT (envelope-from cem@FreeBSD.org) Message-Id: <201703212241.v2LMfbYG059368@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cem set sender to cem@FreeBSD.org using -f From: Conrad Meyer Date: Tue, 21 Mar 2017 22:41:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315693 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 22:41:39 -0000 Author: cem Date: Tue Mar 21 22:41:37 2017 New Revision: 315693 URL: https://svnweb.freebsd.org/changeset/base/315693 Log: kern_fail: Allow sleeping for more than 2147483/hz seconds Because of integer types, the timeout calculation result was limited to INT_MAX / (1000 * hz) seconds. For systems with hz=10000, this is only 215 seconds. Perform the calculation with 64-bit math to allow sleeping for the full INT_MAX / hz interval (215000 seconds on such hz=10000 systems). Submitted by: Scott Ferris Sponsored by: Dell EMC Isilon Modified: head/sys/kern/kern_fail.c Modified: head/sys/kern/kern_fail.c ============================================================================== --- head/sys/kern/kern_fail.c Tue Mar 21 22:21:29 2017 (r315692) +++ head/sys/kern/kern_fail.c Tue Mar 21 22:41:37 2017 (r315693) @@ -425,7 +425,7 @@ fail_point_sleep(struct fail_point *fp, int timo; /* Convert from millisecs to ticks, rounding up */ - timo = howmany(msecs * hz, 1000); + timo = howmany((int64_t)msecs * hz, 1000L); if (timo > 0) { if (!(fp->fp_flags & FAIL_POINT_USE_TIMEOUT_PATH)) { From owner-svn-src-head@freebsd.org Wed Mar 22 00:50:38 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3A726D1640C; Wed, 22 Mar 2017 00:50:38 +0000 (UTC) (envelope-from vangyzen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E1F531B06; Wed, 22 Mar 2017 00:50:37 +0000 (UTC) (envelope-from vangyzen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2M0obsg012507; Wed, 22 Mar 2017 00:50:37 GMT (envelope-from vangyzen@FreeBSD.org) Received: (from vangyzen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2M0ob0p012506; Wed, 22 Mar 2017 00:50:37 GMT (envelope-from vangyzen@FreeBSD.org) Message-Id: <201703220050.v2M0ob0p012506@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: vangyzen set sender to vangyzen@FreeBSD.org using -f From: Eric van Gyzen Date: Wed, 22 Mar 2017 00:50:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315694 - head/lib/libc/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 00:50:38 -0000 Author: vangyzen Date: Wed Mar 22 00:50:36 2017 New Revision: 315694 URL: https://svnweb.freebsd.org/changeset/base/315694 Log: clock_gettime.2: add some clock IDs Add the CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID clock_id values to the clock_gettime(2) man page. Reformat the excessively long paragraph (sentence!) into a tag list. Reported by: jilles in https://reviews.freebsd.org/D10020 MFC after: 3 days Sponsored by: Dell EMC Modified: head/lib/libc/sys/clock_gettime.2 Modified: head/lib/libc/sys/clock_gettime.2 ============================================================================== --- head/lib/libc/sys/clock_gettime.2 Tue Mar 21 22:41:37 2017 (r315693) +++ head/lib/libc/sys/clock_gettime.2 Wed Mar 22 00:50:36 2017 (r315694) @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd December 27, 2015 +.Dd March 20, 2017 .Dt CLOCK_GETTIME 2 .Os .Sh NAME @@ -58,31 +58,39 @@ used by a clock which is specified by .Pp The .Fa clock_id -argument -can be one of the following values: -.Dv CLOCK_REALTIME , -.Dv CLOCK_REALTIME_PRECISE , -.Dv CLOCK_REALTIME_FAST -for time that increments as -a wall clock should; -.Dv CLOCK_MONOTONIC , -.Dv CLOCK_MONOTONIC_PRECISE , -.Dv CLOCK_MONOTONIC_FAST -which increments in SI seconds; -.Dv CLOCK_UPTIME , -.Dv CLOCK_UPTIME_PRECISE , -.Dv CLOCK_UPTIME_FAST -which starts at zero when the kernel boots and increments -monotonically in SI seconds while the machine is running; -.Dv CLOCK_VIRTUAL -for time that increments only when -the CPU is running in user mode on behalf of the calling process; -.Dv CLOCK_PROF -for time that increments when the CPU is running in user or -kernel mode; or -.Dv CLOCK_SECOND -which returns the current second without performing a full time counter -query, using in-kernel cached value of current second. +argument can be a value obtained from +.Xr clock_getcpuclockid 3 +or +.Xr pthread_getcpuclockid 3 +as well as the following values: +.Pp +.Bl -tag -width indent -compact +.It Dv CLOCK_REALTIME +.It Dv CLOCK_REALTIME_PRECISE +.It Dv CLOCK_REALTIME_FAST +Increments as a wall clock should. +.It Dv CLOCK_MONOTONIC +.It Dv CLOCK_MONOTONIC_PRECISE +.It Dv CLOCK_MONOTONIC_FAST +Increments in SI seconds. +.It Dv CLOCK_UPTIME +.It Dv CLOCK_UPTIME_PRECISE +.It Dv CLOCK_UPTIME_FAST +Starts at zero when the kernel boots and increments +monotonically in SI seconds while the machine is running. +.It Dv CLOCK_VIRTUAL +Increments only when +the CPU is running in user mode on behalf of the calling process. +.It Dv CLOCK_PROF +Increments when the CPU is running in user or kernel mode. +.It Dv CLOCK_SECOND +Returns the current second without performing a full time counter +query, using an in-kernel cached value of the current second. +.It Dv CLOCK_PROCESS_CPUTIME_ID +Returns the execution time of the calling process. +.It Dv CLOCK_THREAD_CPUTIME_ID +Returns the execution time of the calling thread. +.El .Pp The clock IDs .Fa CLOCK_REALTIME_FAST , @@ -144,7 +152,9 @@ A user other than the super-user attempt .Sh SEE ALSO .Xr date 1 , .Xr adjtime 2 , +.Xr clock_getcpuclockid 3 , .Xr ctime 3 , +.Xr pthread_getcpuclockid 3 , .Xr timed 8 .Sh STANDARDS The From owner-svn-src-head@freebsd.org Wed Mar 22 02:42:03 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 44316D1771B; Wed, 22 Mar 2017 02:42:03 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F22CC18E3; Wed, 22 Mar 2017 02:42:02 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2M2g1W8060062; Wed, 22 Mar 2017 02:42:01 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2M2g00f060051; Wed, 22 Mar 2017 02:42:00 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703220242.v2M2g00f060051@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 02:42:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315697 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 02:42:03 -0000 Author: ngie Date: Wed Mar 22 02:42:00 2017 New Revision: 315697 URL: https://svnweb.freebsd.org/changeset/base/315697 Log: libkvm: fix warning issues post-r291406 - Fix -Wunused warnings with *_native detection handlers by marking `kd` __unused, except with arm/mips, where a slightly more complicated scheme is required to handle the native case vs the non-native case. - Fix -Wmissing-variable-declarations warnings by marking struct kvm_arch objects static. Differential Revision: D10071 MFC after: 1 week Reviewed by: vangyzen Tested with: WIP test code (D10024) // kgdb7121 (i386 crash/kernel on amd64) Sponsored by: Dell EMC Isilon Modified: head/lib/libkvm/kvm_amd64.c head/lib/libkvm/kvm_arm.c head/lib/libkvm/kvm_i386.c head/lib/libkvm/kvm_minidump_aarch64.c head/lib/libkvm/kvm_minidump_amd64.c head/lib/libkvm/kvm_minidump_arm.c head/lib/libkvm/kvm_minidump_i386.c head/lib/libkvm/kvm_minidump_mips.c head/lib/libkvm/kvm_powerpc.c head/lib/libkvm/kvm_powerpc64.c head/lib/libkvm/kvm_sparc64.c Modified: head/lib/libkvm/kvm_amd64.c ============================================================================== --- head/lib/libkvm/kvm_amd64.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_amd64.c Wed Mar 22 02:42:00 2017 (r315697) @@ -316,7 +316,7 @@ _amd64_kvatop(kvm_t *kd, kvaddr_t va, of } int -_amd64_native(kvm_t *kd) +_amd64_native(kvm_t *kd __unused) { #ifdef __amd64__ @@ -326,7 +326,7 @@ _amd64_native(kvm_t *kd) #endif } -struct kvm_arch kvm_amd64 = { +static struct kvm_arch kvm_amd64 = { .ka_probe = _amd64_probe, .ka_initvtop = _amd64_initvtop, .ka_freevtop = _amd64_freevtop, Modified: head/lib/libkvm/kvm_arm.c ============================================================================== --- head/lib/libkvm/kvm_arm.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_arm.c Wed Mar 22 02:42:00 2017 (r315697) @@ -249,7 +249,11 @@ _kvm_mdopen(kvm_t *kd) #endif int +#ifdef __arm__ _arm_native(kvm_t *kd) +#else +_arm_native(kvm_t *kd __unused) +#endif { #ifdef __arm__ @@ -263,7 +267,7 @@ _arm_native(kvm_t *kd) #endif } -struct kvm_arch kvm_arm = { +static struct kvm_arch kvm_arm = { .ka_probe = _arm_probe, .ka_initvtop = _arm_initvtop, .ka_freevtop = _arm_freevtop, Modified: head/lib/libkvm/kvm_i386.c ============================================================================== --- head/lib/libkvm/kvm_i386.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_i386.c Wed Mar 22 02:42:00 2017 (r315697) @@ -409,7 +409,7 @@ _i386_kvatop(kvm_t *kd, kvaddr_t va, off } int -_i386_native(kvm_t *kd) +_i386_native(kvm_t *kd __unused) { #ifdef __i386__ @@ -419,7 +419,7 @@ _i386_native(kvm_t *kd) #endif } -struct kvm_arch kvm_i386 = { +static struct kvm_arch kvm_i386 = { .ka_probe = _i386_probe, .ka_initvtop = _i386_initvtop, .ka_freevtop = _i386_freevtop, Modified: head/lib/libkvm/kvm_minidump_aarch64.c ============================================================================== --- head/lib/libkvm/kvm_minidump_aarch64.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_minidump_aarch64.c Wed Mar 22 02:42:00 2017 (r315697) @@ -215,7 +215,7 @@ _aarch64_minidump_kvatop(kvm_t *kd, kvad } static int -_aarch64_native(kvm_t *kd) +_aarch64_native(kvm_t *kd __unused) { #ifdef __aarch64__ @@ -225,7 +225,7 @@ _aarch64_native(kvm_t *kd) #endif } -struct kvm_arch kvm_aarch64_minidump = { +static struct kvm_arch kvm_aarch64_minidump = { .ka_probe = _aarch64_minidump_probe, .ka_initvtop = _aarch64_minidump_initvtop, .ka_freevtop = _aarch64_minidump_freevtop, Modified: head/lib/libkvm/kvm_minidump_amd64.c ============================================================================== --- head/lib/libkvm/kvm_minidump_amd64.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_minidump_amd64.c Wed Mar 22 02:42:00 2017 (r315697) @@ -297,7 +297,7 @@ _amd64_minidump_kvatop(kvm_t *kd, kvaddr return (_amd64_minidump_vatop(kd, va, pa)); } -struct kvm_arch kvm_amd64_minidump = { +static struct kvm_arch kvm_amd64_minidump = { .ka_probe = _amd64_minidump_probe, .ka_initvtop = _amd64_minidump_initvtop, .ka_freevtop = _amd64_minidump_freevtop, Modified: head/lib/libkvm/kvm_minidump_arm.c ============================================================================== --- head/lib/libkvm/kvm_minidump_arm.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_minidump_arm.c Wed Mar 22 02:42:00 2017 (r315697) @@ -209,7 +209,7 @@ invalid: return (0); } -struct kvm_arch kvm_arm_minidump = { +static struct kvm_arch kvm_arm_minidump = { .ka_probe = _arm_minidump_probe, .ka_initvtop = _arm_minidump_initvtop, .ka_freevtop = _arm_minidump_freevtop, Modified: head/lib/libkvm/kvm_minidump_i386.c ============================================================================== --- head/lib/libkvm/kvm_minidump_i386.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_minidump_i386.c Wed Mar 22 02:42:00 2017 (r315697) @@ -238,7 +238,7 @@ _i386_minidump_kvatop(kvm_t *kd, kvaddr_ return (_i386_minidump_vatop(kd, va, pa)); } -struct kvm_arch kvm_i386_minidump = { +static struct kvm_arch kvm_i386_minidump = { .ka_probe = _i386_minidump_probe, .ka_initvtop = _i386_minidump_initvtop, .ka_freevtop = _i386_minidump_freevtop, Modified: head/lib/libkvm/kvm_minidump_mips.c ============================================================================== --- head/lib/libkvm/kvm_minidump_mips.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_minidump_mips.c Wed Mar 22 02:42:00 2017 (r315697) @@ -241,7 +241,11 @@ invalid: } static int +#ifdef __mips__ _mips_native(kvm_t *kd) +#else +_mips_native(kvm_t *kd __unused) +#endif { #ifdef __mips__ @@ -269,7 +273,7 @@ _mips_native(kvm_t *kd) #endif } -struct kvm_arch kvm_mips_minidump = { +static struct kvm_arch kvm_mips_minidump = { .ka_probe = _mips_minidump_probe, .ka_initvtop = _mips_minidump_initvtop, .ka_freevtop = _mips_minidump_freevtop, Modified: head/lib/libkvm/kvm_powerpc.c ============================================================================== --- head/lib/libkvm/kvm_powerpc.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_powerpc.c Wed Mar 22 02:42:00 2017 (r315697) @@ -214,7 +214,7 @@ _powerpc_kvatop(kvm_t *kd, kvaddr_t va, } static int -_powerpc_native(kvm_t *kd) +_powerpc_native(kvm_t *kd __unused) { #if defined(__powerpc__) && !defined(__powerpc64__) @@ -224,7 +224,7 @@ _powerpc_native(kvm_t *kd) #endif } -struct kvm_arch kvm_powerpc = { +static struct kvm_arch kvm_powerpc = { .ka_probe = _powerpc_probe, .ka_initvtop = _powerpc_initvtop, .ka_freevtop = _powerpc_freevtop, Modified: head/lib/libkvm/kvm_powerpc64.c ============================================================================== --- head/lib/libkvm/kvm_powerpc64.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_powerpc64.c Wed Mar 22 02:42:00 2017 (r315697) @@ -215,7 +215,7 @@ _powerpc64_kvatop(kvm_t *kd, kvaddr_t va } static int -_powerpc64_native(kvm_t *kd) +_powerpc64_native(kvm_t *kd __unused) { #ifdef __powerpc64__ @@ -225,7 +225,7 @@ _powerpc64_native(kvm_t *kd) #endif } -struct kvm_arch kvm_powerpc64 = { +static struct kvm_arch kvm_powerpc64 = { .ka_probe = _powerpc64_probe, .ka_initvtop = _powerpc64_initvtop, .ka_freevtop = _powerpc64_freevtop, Modified: head/lib/libkvm/kvm_sparc64.c ============================================================================== --- head/lib/libkvm/kvm_sparc64.c Wed Mar 22 01:11:13 2017 (r315696) +++ head/lib/libkvm/kvm_sparc64.c Wed Mar 22 02:42:00 2017 (r315697) @@ -221,7 +221,7 @@ invalid: } static int -_sparc64_native(kvm_t *kd) +_sparc64_native(kvm_t *kd __unused) { #ifdef __sparc64__ @@ -231,7 +231,7 @@ _sparc64_native(kvm_t *kd) #endif } -struct kvm_arch kvm_sparc64 = { +static struct kvm_arch kvm_sparc64 = { .ka_probe = _sparc64_probe, .ka_initvtop = _sparc64_initvtop, .ka_freevtop = _sparc64_freevtop, From owner-svn-src-head@freebsd.org Wed Mar 22 02:44:41 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 047B0D177B7; Wed, 22 Mar 2017 02:44:41 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C54E21AF0; Wed, 22 Mar 2017 02:44:40 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2M2idkm061072; Wed, 22 Mar 2017 02:44:39 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2M2idLt061071; Wed, 22 Mar 2017 02:44:39 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703220244.v2M2idLt061071@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 02:44:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315698 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 02:44:41 -0000 Author: ngie Date: Wed Mar 22 02:44:39 2017 New Revision: 315698 URL: https://svnweb.freebsd.org/changeset/base/315698 Log: libkvm: bump WARNS to 6 after recent commits done to resolve warnings issues MFC after: 1 month Tested with: make tinderbox; clang 4.0.0 (amd64), gcc 4.2.1/6.3.0 (amd64) Sponsored by: Dell EMC Isilon Modified: head/lib/libkvm/Makefile Modified: head/lib/libkvm/Makefile ============================================================================== --- head/lib/libkvm/Makefile Wed Mar 22 02:42:00 2017 (r315697) +++ head/lib/libkvm/Makefile Wed Mar 22 02:44:39 2017 (r315698) @@ -8,7 +8,7 @@ SHLIBDIR?= /lib SHLIB_MAJOR= 7 CFLAGS+=-DLIBC_SCCS -I${.CURDIR} -WARNS?= 3 +WARNS?= 6 SRCS= kvm.c kvm_cptime.c kvm_getloadavg.c \ kvm_getswapinfo.c kvm_pcpu.c kvm_private.c kvm_proc.c kvm_vnet.c \ From owner-svn-src-head@freebsd.org Wed Mar 22 02:51:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ACCD4D17865; Wed, 22 Mar 2017 02:51:17 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from mail.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 824791D35; Wed, 22 Mar 2017 02:51:17 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from ralph.baldwin.cx (c-73-231-226-104.hsd1.ca.comcast.net [73.231.226.104]) by mail.baldwin.cx (Postfix) with ESMTPSA id 5CBCE10A7B9; Tue, 21 Mar 2017 22:51:16 -0400 (EDT) From: John Baldwin To: Gleb Smirnoff Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Date: Tue, 21 Mar 2017 14:24:30 -0700 Message-ID: <2618830.hTJSphVT4p@ralph.baldwin.cx> User-Agent: KMail/4.14.10 (FreeBSD/11.0-STABLE; KDE/4.14.10; amd64; ; ) In-Reply-To: <20170321185004.GW23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <1782817.djIc6TfI1t@ralph.baldwin.cx> <20170321185004.GW23308@FreeBSD.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.4.3 (mail.baldwin.cx); Tue, 21 Mar 2017 22:51:16 -0400 (EDT) X-Virus-Scanned: clamav-milter 0.99.2 at mail.baldwin.cx X-Virus-Status: Clean X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 02:51:17 -0000 On Tuesday, March 21, 2017 11:50:04 AM Gleb Smirnoff wrote: > John, > > On Tue, Mar 21, 2017 at 10:40:34AM -0700, John Baldwin wrote: > J> First, this is a very good change and long overdue in divorcing the > J> user-facing structure for live system reporting vs the kernel structure. > J> > J> However, I realize you don't use info from netstat when debugging kernel > J> crash dumps, but other people _do_. It's ok if the kvm bits of netstat > J> require a matching kernel and thus require recompiling everytime the ABI > J> changes, but it is useful to have them. Please restore those. > > I have very much anticipated this comment from you, John. > > I would like to remind you, that we have had this very exact conversation > back when I removed kvm support from netstat/route.c. Let me search the > archives: > > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html > > This conversation has had a continuation on IRC, which I don't archive. > > AFAIR, first I told that with all my involvement into networking stack, > I never ever had experienced a need to run route stats on a core. The > debugger were the only useful tool. And that opinion was seconded by > other network hackers. Then we discussed that a proper tool chould use > dynamic type parsing and not kvm(3). You said that future gdb has python > scripting and that would work fine. Meanwhile, you insisted that I restore > the functionality. I resisted to put kvm(3) back into netstat/route.c, and > instead I created a gdb script that prints exactly what 'nestat -anr -M core' > prints. And I committed the script just to satisfy your demand: > > tools/debugscripts/netstat-anr.gdb > > Can you please fairly answer, have you (or anyone else) ever used the > script during these 2 years? You never updated crashinfo to use the script (the point of crashinfo is to give an automated bit of information users can include in bug reports). crashinfo came from Yahoo! where knowing the active state of the system during a crash was indeed useful. It wasn't necessarily about debugging a panic in the network stack, but about obtaining information about the system useful in debugging crashes in arbitrary parts of the kernel. I don't work at Y! anymore, so I'm not in the same environment. Those things tend to be more useful when dealing with a large deployment of hetergenous systems rather than doing focused development on a driver or a bunch of identical systems with the same workload / role (e.g. appliances). Also, the setgid thing is a red herring. You don't need setgid to read from a core, only to use kvm against a live system. I'm all for using sysctls to fetch data against live system and only keeping kvm for use with core dumps which doesn't require setgid. -- John Baldwin From owner-svn-src-head@freebsd.org Wed Mar 22 03:45:00 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 297A3D17710; Wed, 22 Mar 2017 03:45:00 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail107.syd.optusnet.com.au (mail107.syd.optusnet.com.au [211.29.132.53]) by mx1.freebsd.org (Postfix) with ESMTP id CC5491DC3; Wed, 22 Mar 2017 03:44:59 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from besplex.bde.org (c122-106-153-191.carlnfd1.nsw.optusnet.com.au [122.106.153.191]) by mail107.syd.optusnet.com.au (Postfix) with ESMTPS id A591DD43AE4; Wed, 22 Mar 2017 14:44:51 +1100 (AEDT) Date: Wed, 22 Mar 2017 14:44:50 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Eric van Gyzen cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315694 - head/lib/libc/sys In-Reply-To: <201703220050.v2M0ob0p012506@repo.freebsd.org> Message-ID: <20170322120102.P963@besplex.bde.org> References: <201703220050.v2M0ob0p012506@repo.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.2 cv=VbSHBBh9 c=1 sm=1 tr=0 a=Tj3pCpwHnMupdyZSltBt7Q==:117 a=Tj3pCpwHnMupdyZSltBt7Q==:17 a=kj9zAlcOel0A:10 a=_9wxYhfm8z9f399oXpcA:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 03:45:00 -0000 On Wed, 22 Mar 2017, Eric van Gyzen wrote: > Log: > clock_gettime.2: add some clock IDs > > Add the CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID clock_id > values to the clock_gettime(2) man page. Reformat the excessively > long paragraph (sentence!) into a tag list. Some old bugs are now clearer. > Modified: head/lib/libc/sys/clock_gettime.2 > ============================================================================== > --- head/lib/libc/sys/clock_gettime.2 Tue Mar 21 22:41:37 2017 (r315693) > +++ head/lib/libc/sys/clock_gettime.2 Wed Mar 22 00:50:36 2017 (r315694) > ... > +.Pp > +.Bl -tag -width indent -compact > +.It Dv CLOCK_REALTIME > +.It Dv CLOCK_REALTIME_PRECISE > +.It Dv CLOCK_REALTIME_FAST > +Increments as a wall clock should. How should a wall clock increment? :-) Not with leap seconds adjustments or even DST adjustments, since those are confusing for humans, and normally aren't even increments. Some DST adjustments are large decrements, and all leap seconds adjustments have been positive, which causes the wall clock to sort of decrement, but this is usually implemented by not incrementing. I haven't seen a wall clock that displays the 61st second of a minute as ":60" or even stops at ":59". Implementing this extra or sticking for a real clockwork clock would be interesting. Certainly wall clocks in POSIX time, which are what this syscall exists. POSIX time is broken as designed, especially for real times, so nothing "should" track it. I think FreeBSD currently implements leap seconds in POSIX time, so its CLOCK_REALTIME doesn't increment, but leaps back by 1 second, then increments across the second again. This is very bad or large networks, so some systems use a hack to slew the adjustment over a very long period. Also, CLOCK_REALTIME_PRECISE is an unportable alias for CLOCK_REALTIME, and CLOCK_REALTIME_FAST is a bad optimization which doesn't increment like a wall clock should. > +.It Dv CLOCK_MONOTONIC > +.It Dv CLOCK_MONOTONIC_PRECISE > +.It Dv CLOCK_MONOTONIC_FAST > +Increments in SI seconds. These don't increment in SI seconds, since they are the same as CLOCK_UPTIME_* which are documented to not increment in some cases. CLOCK_MONOTONIC_PRECISE and CLOCK_MONOTONIC_FAST are unportable, so they can do anything, but POSIX requires CLOCK_MONOTONIC to increment like a clock should, except even more fuzzily than that. POSIX requires that CLOCK_MONOTONIC returns a value "representing" the amount of time (in seconds or nanoseconds) since an unspecified time in the past which does not change after system startup. I don't know exactly what an SI second is, or how an "amount of time" differs from a time or how bad the "representation" can be (it is not required to be accurate to any amount in SI seconds, whatever they are), but clearly the value "should" be as close as the system can get to physical seconds. In another section, POSIX specifies that CLOCK_MONOTONIC shall not jump backwards and that the implementation shall have an implementation-defined limit on forward jumps. "Implementation-defined" requires documentation, but there is nothing about this near here. Of course, since the "representation" doesn't seem to have any limits or require documentation, it can conceal arbitrary large jumps. > +.It Dv CLOCK_UPTIME > +.It Dv CLOCK_UPTIME_PRECISE > +.It Dv CLOCK_UPTIME_FAST > +Starts at zero when the kernel boots and increments > +monotonically in SI seconds while the machine is running. This is almost correct, but means that CLOCK_UPTIME doesn't give the uptime. It is not stated when the machine is running, but in practice it isn't running for the purposes of this statement when it is suspended. On resume, CLOCK_REALTIME is updated (not like a wall clock should be, but with larger jumps and inaccuracies (usually acpi does it and it is off by a few seconds and ntpd struggles to fix this, but sometimes acpi doesn't do this so it is off by a few hours and ntpd gives up and it takes the user restarting ntpd or a more manual fixup to fix this). CLOCK_REALTIME is is not updated on resume, except accidentally by the next bug. CLOCK_UPTIME is also broken by stepping CLOCK_REALTIME. This is misimplemented by stepping boottime. If the step is to adjust for an initially wrong (boot) time, then this adjustment is correct -- the boot time was wrong, so it should change; the real time was wrong so it should change; the step is not to fix drift so CLOCK_MONOTONIC shouldn't change, and CLOCK_UPTIME is CLOCK_MONOTONIC so it shouldn't change. Otherwise, the step is to fix up drift and all clock should change but the boot time shouldn't change. CLOCK_UPTIME* should always CLOCK_MONOTONIC* (and shouldn't exist) once the latter is implemented correctly. The latter is required to be the time since some fixed time, and this time can be the boot time once the latter is fixed (invariant, with its current variation fixed). Adjustments on resume are an example of such a step. They are large jumps forwards and represent reality, so there is no problem in making them (except thundering heres of timeouts, but making CLOCK_MONOTONIC not advance is not the way to fix timeouts). In general, adjustments to fix drift might be backwards, but they can't be for CLOCK_MONOTONIC. They should be handled by slewing the clock backwards over a long period. This already happens for ntpd micro- adjustments. > +.It Dv CLOCK_VIRTUAL > +Increments only when > +the CPU is running in user mode on behalf of the calling process. > +.It Dv CLOCK_PROF > +Increments when the CPU is running in user or kernel mode. It's more obvious that the clock stops incrementing for the other timeouts. > +.It Dv CLOCK_SECOND > +Returns the current second without performing a full time counter > +query, using an in-kernel cached value of the current second. This doeesn't say that the current second is a for a "FAST" CLOCK_REALTIME_FAST, or as usual document any incoherencies. CLOCK_SECOND is another unportability that shouldn't exist. It is useless for its intended purpose in most cases when it is implemented in libc, and then it doesn't do what the man page says that it does -- libc always does a full timecounter query (so the other "FAST" clocks aren't efficient either, but just throw away precision). The "FAST" clocks are incoherent with the "PRECISE" clocks since they use different rounding (round down in more cases). Except when FAST libc versions are mixed with FAST syscall versions. Then user FAST is coherent with user and kernel PRECISE, but not with kernel FAST. The bug is most obvious for CLOCK_SECOND since it has largest granularity: now = user_CLOCK_SECOND; // value n later = kernel_CLOCK_SECOND; // value n - 1 assert(now <= later); // fail Ignore the complication that CLOCK_SECOND is a real time so it can go backwards, and assume that it is monotonic. The user should be aware that FAST clocks are only coherent with each other and that CLOCK_SECOND is FAST and not do assertions similar to the above but with 'now' obtained from a non-FAST clock (e.g., from CLOCK_REALTIME rounded down explicitly). But it is difficult for users to know the coherency classes of clocks when these are not only undocumented but depend on the library. E.g., versions of time(1) used CLOCK_REALTIME, so time() was coherent with CLOCK_REALTIME but not with CLOCK_SECOND. time() was changed to use CLOCK_SECOND, so it became incoherent with CLOCK_REALTIME but coherent with FAST clocks. Then CLOCK_SECOND was changed to be in libc on most arches/hardware, so time() usually because coherent with CLOCK_REALTIME again, but incoherent with kernel CLOCK_SECOND and other FAST clocks. The incoherency is most obvious for file times, since file times normally use CLOCK_SECOND or a FAST clock. These are incoherent with user times if user times are read on a clock in a different coherency class (e.g., old time(), and current time() if user CLOCK_SECOND is not in the FAST class). The general description of the FAST and PRECISE versions still give incomplete old implementation details but no new implementation details: - FAST is documented to not do a full timecounter query and thus have accuracy 1 timer tick - actually, some implementations do do a full timecounter query - FASTness might be dominated by syscall overhead and not by timecounter query time. This is why the FAST versions shouldn't exist. When they are syscalls, they are still slow, and when they aren't syscalls they do they do do a full timecounter query. - it doesn't follow that accuracy is 1 timer tick. The authors of this man page and API should know better than to conflate accuracy with precision, and didn't make that mistake for the PRECISE versions. FAST really means the opposite of PRECISE, and sometimes significantly more efficient. The accuracy is the same as that of the PRECISE version, less the granularity of the precision. - the precision isn't 1 timer tick for kernel versions. It is of course 1 second for CLOCK_SECOND, and for the others it is tc_tick ticks. About max(1 tick, 1 msec). - the precision isn't 1 timer tick for user versions. It is of course 1 second for CLOCK_SECOND, and for the others it is the same as for the PRECISE version (should be the timecounter period, but this is impossible for TSC clocks at a few GHz so we advertise 1 nsec and depend on the accuracy being much worse than 1 nsec so the wrong precision doesn't matter). - PRECISE is documented to get the most "exact" value possible at the expense of execution time. I guess "exact" can be read as "accurate && precise", but since precision is invariant and accuracy is not under control of clock_gettime(), what the PRECISE versions actually give is correctness possibly at the expense of execution time. - it isn't documented that the PRECISE are no different from the standard versions - there is a problem with clock_getres()'s name, design and implemenation. I forget the difference between resolution and precision. Anyway, clock_getres() clearly has the same resolution as timespecs (1 nsec), and was standardized just in time for that to be not fine enough. It needs to return the precision (or is it the resolution?) of the underlying clock. We conflate resolution with precision and mostly return the precision. This is only clearly wrong for the FAST clocks. We return the same resolution for them as for the PRECISE clocks. This is probably technically correct as a resolution, but it would be more useful to return the precision. E.g, for a TSC at 4GHz, the TSC's resolution is clearly 1/4 nsec, but clock_getres() can't return that so we return 1 nsec since normal rounding down would give a physically impossible resolution. But even the PRECISE version can't read the clock every nsec, so it has a practical precision/resolution of much larger than 1 nsec. Perhaps it is 10 nsec, but we don't know what it is and just return the counter's resolution (rounded) to avoid surprising callers with values not a multiple of the resolution. We do the same for the FAST versions, although now the practical precision/resolution is 1 msec or larger. It takes unportable code to use the FAST versions, and this code must know that clock_getres() is useless for determining the practical precision, and calculate it as 1/hz times the undocumented tc_tick, or just not care if the result is correct provided it is FAST. > +.Xr clock_getcpuclockid 3 , > .Xr ctime 3 , > +.Xr pthread_getcpuclockid 3 , > .Xr timed 8 > .Sh STANDARDS > The Not very standard. There seem to be 14 extensions and only 8 listed in the extensions list (mainly ones that shouldn't exist). Bruce From owner-svn-src-head@freebsd.org Wed Mar 22 05:27:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 178F7D155C7; Wed, 22 Mar 2017 05:27:22 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D06201078; Wed, 22 Mar 2017 05:27:21 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2M5RKtN026078; Wed, 22 Mar 2017 05:27:20 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2M5RKoD026077; Wed, 22 Mar 2017 05:27:20 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703220527.v2M5RKoD026077@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 05:27:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315699 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 05:27:22 -0000 Author: ngie Date: Wed Mar 22 05:27:20 2017 New Revision: 315699 URL: https://svnweb.freebsd.org/changeset/base/315699 Log: Print out name of non-dynamic sysctl in sysctl_remove_oid_locked This will provide a slightly better smoking gun than just stating "can't remove non-dynamic nodes!" when calling sysctl_ctx_free(9) and sysctl_remove_{name,oid}(9) with a non-dynamic (likely static) sysctl. MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/sys/kern/kern_sysctl.c Modified: head/sys/kern/kern_sysctl.c ============================================================================== --- head/sys/kern/kern_sysctl.c Wed Mar 22 02:44:39 2017 (r315698) +++ head/sys/kern/kern_sysctl.c Wed Mar 22 05:27:20 2017 (r315699) @@ -628,7 +628,8 @@ sysctl_remove_oid_locked(struct sysctl_o if (oidp == NULL) return(EINVAL); if ((oidp->oid_kind & CTLFLAG_DYN) == 0) { - printf("can't remove non-dynamic nodes!\n"); + printf("Warning: can't remove non-dynamic nodes (%s)!\n", + oidp->oid_name); return (EINVAL); } /* From owner-svn-src-head@freebsd.org Wed Mar 22 06:43:11 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D811AD169C3; Wed, 22 Mar 2017 06:43:11 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9611811D9; Wed, 22 Mar 2017 06:43:11 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2M6hAEt057918; Wed, 22 Mar 2017 06:43:10 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2M6hArU057914; Wed, 22 Mar 2017 06:43:10 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201703220643.v2M6hArU057914@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 22 Mar 2017 06:43:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315700 - in head/sys/compat: cloudabi cloudabi32 cloudabi64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 06:43:11 -0000 Author: ed Date: Wed Mar 22 06:43:10 2017 New Revision: 315700 URL: https://svnweb.freebsd.org/changeset/base/315700 Log: Make file descriptor passing work for CloudABI's sendmsg(). Reduce the potential amount of code duplication between cloudabi32 and cloudabi64 by creating a cloudabi_sock_recv() utility function. The cloudabi32 and cloudabi64 modules will then only contain code to convert the iovecs to the native pointer size. In cloudabi_sock_recv(), we can now construct an SCM_RIGHTS cmsghdr in an mbuf and pass that on to kern_sendit(). Modified: head/sys/compat/cloudabi/cloudabi_sock.c head/sys/compat/cloudabi/cloudabi_util.h head/sys/compat/cloudabi32/cloudabi32_sock.c head/sys/compat/cloudabi64/cloudabi64_sock.c Modified: head/sys/compat/cloudabi/cloudabi_sock.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_sock.c Wed Mar 22 05:27:20 2017 (r315699) +++ head/sys/compat/cloudabi/cloudabi_sock.c Wed Mar 22 06:43:10 2017 (r315700) @@ -30,7 +30,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include +#include #include #include #include @@ -243,3 +245,51 @@ cloudabi_sys_sock_stat_get(struct thread fdrop(fp, td); return (copyout(&ss, uap->buf, sizeof(ss))); } + +int +cloudabi_sock_send(struct thread *td, cloudabi_fd_t fd, struct iovec *data, + size_t datalen, const cloudabi_fd_t *fds, size_t fdslen, + cloudabi_msgflags_t flags, size_t *rdatalen) +{ + struct msghdr hdr = { + .msg_iov = data, + .msg_iovlen = datalen, + }; + struct mbuf *control; + int error, mflags; + + /* Convert flags. */ + mflags = MSG_NOSIGNAL; + if (flags & CLOUDABI_MSG_EOR) + mflags |= MSG_EOR; + + /* Convert file descriptor array to an SCM_RIGHTS message. */ + if (fdslen > MCLBYTES || CMSG_SPACE(fdslen * sizeof(int)) > MCLBYTES) { + return (EINVAL); + } else if (fdslen > 0) { + struct cmsghdr *chdr; + + control = m_get2(CMSG_SPACE(fdslen * sizeof(int)), + M_WAITOK, MT_CONTROL, 0); + control->m_len = CMSG_SPACE(fdslen * sizeof(int)); + + chdr = mtod(control, struct cmsghdr *); + chdr->cmsg_len = CMSG_LEN(fdslen * sizeof(int)); + chdr->cmsg_level = SOL_SOCKET; + chdr->cmsg_type = SCM_RIGHTS; + error = copyin(fds, CMSG_DATA(chdr), fdslen * sizeof(int)); + if (error != 0) { + m_free(control); + return (error); + } + } else { + control = NULL; + } + + error = kern_sendit(td, fd, &hdr, mflags, control, UIO_USERSPACE); + if (error != 0) + return (error); + *rdatalen = td->td_retval[0]; + td->td_retval[0] = 0; + return (0); +} Modified: head/sys/compat/cloudabi/cloudabi_util.h ============================================================================== --- head/sys/compat/cloudabi/cloudabi_util.h Wed Mar 22 05:27:20 2017 (r315699) +++ head/sys/compat/cloudabi/cloudabi_util.h Wed Mar 22 06:43:10 2017 (r315700) @@ -77,6 +77,10 @@ int cloudabi_futex_lock_wrlock(struct th cloudabi_scope_t, cloudabi_clockid_t, cloudabi_timestamp_t, cloudabi_timestamp_t); +/* Socket operations. */ +int cloudabi_sock_send(struct thread *, cloudabi_fd_t, struct iovec *, size_t, + const cloudabi_fd_t *, size_t, cloudabi_msgflags_t, size_t *); + /* vDSO setup and teardown. */ void cloudabi_vdso_init(struct sysentvec *, char *, char *); void cloudabi_vdso_destroy(struct sysentvec *); Modified: head/sys/compat/cloudabi32/cloudabi32_sock.c ============================================================================== --- head/sys/compat/cloudabi32/cloudabi32_sock.c Wed Mar 22 05:27:20 2017 (r315699) +++ head/sys/compat/cloudabi32/cloudabi32_sock.c Wed Mar 22 06:43:10 2017 (r315700) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2015 Nuxi, https://nuxi.nl/ + * Copyright (c) 2015-2017 Nuxi, https://nuxi.nl/ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -105,44 +105,37 @@ cloudabi32_sys_sock_send(struct thread * cloudabi32_send_in_t si; cloudabi32_send_out_t so = {}; cloudabi32_ciovec_t iovobj; - struct msghdr msghdr = {}; + struct iovec *iov; const cloudabi32_ciovec_t *user_iov; - size_t i; - int error, flags; + size_t datalen, i; + int error; error = copyin(uap->in, &si, sizeof(si)); if (error != 0) return (error); - /* Convert results in cloudabi_send_in_t to struct msghdr. */ + /* Convert iovecs to native format. */ if (si.si_data_len > UIO_MAXIOV) return (EINVAL); - msghdr.msg_iovlen = si.si_data_len; - msghdr.msg_iov = malloc(msghdr.msg_iovlen * sizeof(struct iovec), + iov = malloc(si.si_data_len * sizeof(struct iovec), M_SOCKET, M_WAITOK); user_iov = TO_PTR(si.si_data); - for (i = 0; i < msghdr.msg_iovlen; i++) { + for (i = 0; i < si.si_data_len; i++) { error = copyin(&user_iov[i], &iovobj, sizeof(iovobj)); if (error != 0) { - free(msghdr.msg_iov, M_SOCKET); + free(iov, M_SOCKET); return (error); } - msghdr.msg_iov[i].iov_base = TO_PTR(iovobj.buf); - msghdr.msg_iov[i].iov_len = iovobj.buf_len; + iov[i].iov_base = TO_PTR(iovobj.buf); + iov[i].iov_len = iovobj.buf_len; } - flags = MSG_NOSIGNAL; - if (si.si_flags & CLOUDABI_MSG_EOR) - flags |= MSG_EOR; - - /* TODO(ed): Add file descriptor passing. */ - error = kern_sendit(td, uap->sock, &msghdr, flags, NULL, UIO_USERSPACE); - free(msghdr.msg_iov, M_SOCKET); + error = cloudabi_sock_send(td, uap->sock, iov, si.si_data_len, + TO_PTR(si.si_fds), si.si_fds_len, si.si_flags, &datalen); + free(iov, M_SOCKET); if (error != 0) return (error); - /* Convert results in msghdr to cloudabi_send_out_t. */ - so.so_datalen = td->td_retval[0]; - td->td_retval[0] = 0; + so.so_datalen = datalen; return (copyout(&so, uap->out, sizeof(so))); } Modified: head/sys/compat/cloudabi64/cloudabi64_sock.c ============================================================================== --- head/sys/compat/cloudabi64/cloudabi64_sock.c Wed Mar 22 05:27:20 2017 (r315699) +++ head/sys/compat/cloudabi64/cloudabi64_sock.c Wed Mar 22 06:43:10 2017 (r315700) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2015 Nuxi, https://nuxi.nl/ + * Copyright (c) 2015-2017 Nuxi, https://nuxi.nl/ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -105,44 +105,37 @@ cloudabi64_sys_sock_send(struct thread * cloudabi64_send_in_t si; cloudabi64_send_out_t so = {}; cloudabi64_ciovec_t iovobj; - struct msghdr msghdr = {}; + struct iovec *iov; const cloudabi64_ciovec_t *user_iov; - size_t i; - int error, flags; + size_t datalen, i; + int error; error = copyin(uap->in, &si, sizeof(si)); if (error != 0) return (error); - /* Convert results in cloudabi_send_in_t to struct msghdr. */ + /* Convert iovecs to native format. */ if (si.si_data_len > UIO_MAXIOV) return (EINVAL); - msghdr.msg_iovlen = si.si_data_len; - msghdr.msg_iov = malloc(msghdr.msg_iovlen * sizeof(struct iovec), + iov = malloc(si.si_data_len * sizeof(struct iovec), M_SOCKET, M_WAITOK); user_iov = TO_PTR(si.si_data); - for (i = 0; i < msghdr.msg_iovlen; i++) { + for (i = 0; i < si.si_data_len; i++) { error = copyin(&user_iov[i], &iovobj, sizeof(iovobj)); if (error != 0) { - free(msghdr.msg_iov, M_SOCKET); + free(iov, M_SOCKET); return (error); } - msghdr.msg_iov[i].iov_base = TO_PTR(iovobj.buf); - msghdr.msg_iov[i].iov_len = iovobj.buf_len; + iov[i].iov_base = TO_PTR(iovobj.buf); + iov[i].iov_len = iovobj.buf_len; } - flags = MSG_NOSIGNAL; - if (si.si_flags & CLOUDABI_MSG_EOR) - flags |= MSG_EOR; - - /* TODO(ed): Add file descriptor passing. */ - error = kern_sendit(td, uap->sock, &msghdr, flags, NULL, UIO_USERSPACE); - free(msghdr.msg_iov, M_SOCKET); + error = cloudabi_sock_send(td, uap->sock, iov, si.si_data_len, + TO_PTR(si.si_fds), si.si_fds_len, si.si_flags, &datalen); + free(iov, M_SOCKET); if (error != 0) return (error); - /* Convert results in msghdr to cloudabi_send_out_t. */ - so.so_datalen = td->td_retval[0]; - td->td_retval[0] = 0; + so.so_datalen = datalen; return (copyout(&so, uap->out, sizeof(so))); } From owner-svn-src-head@freebsd.org Wed Mar 22 07:05:28 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C7AEFD16E6D; Wed, 22 Mar 2017 07:05:28 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9FB3A1AE0; Wed, 22 Mar 2017 07:05:28 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2M75RBB066489; Wed, 22 Mar 2017 07:05:27 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2M75RHE066483; Wed, 22 Mar 2017 07:05:27 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201703220705.v2M75RHE066483@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 22 Mar 2017 07:05:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 07:05:28 -0000 Author: ed Date: Wed Mar 22 07:05:27 2017 New Revision: 315701 URL: https://svnweb.freebsd.org/changeset/base/315701 Log: Set the interpreter path to /nonexistent. CloudABI executables are statically linked and don't have an interpreter. Setting the interpreter path to NULL used to work previously, but r314851 introduced code that checks the string unconditionally. Running CloudABI executables now causes a null pointer dereference. Looking at the rest of imgact_elf.c, it seems various other codepaths already leaned on the fact that the interpreter path is set. Let's just go ahead and pick an obviously incorrect interpreter path to appease imgact_elf.c. MFC after: 1 week Modified: head/sys/amd64/cloudabi32/cloudabi32_sysvec.c head/sys/amd64/cloudabi64/cloudabi64_sysvec.c head/sys/arm/cloudabi32/cloudabi32_sysvec.c head/sys/arm64/cloudabi64/cloudabi64_sysvec.c head/sys/i386/cloudabi32/cloudabi32_sysvec.c Modified: head/sys/amd64/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 06:43:10 2017 (r315700) +++ head/sys/amd64/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 07:05:27 2017 (r315701) @@ -228,4 +228,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", + .interp_path = "/nonexistent", }; Modified: head/sys/amd64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 06:43:10 2017 (r315700) +++ head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 07:05:27 2017 (r315701) @@ -214,4 +214,5 @@ Elf64_Brandinfo cloudabi64_brand = { .sysvec = &cloudabi64_elf_sysvec, .flags = BI_CAN_EXEC_DYN, .compat_3_brand = "CloudABI", + .interp_path = "/nonexistent", }; Modified: head/sys/arm/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/arm/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 06:43:10 2017 (r315700) +++ head/sys/arm/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 07:05:27 2017 (r315701) @@ -190,4 +190,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_ARM, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", + .interp_path = "/nonexistent", }; Modified: head/sys/arm64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/arm64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 06:43:10 2017 (r315700) +++ head/sys/arm64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 07:05:27 2017 (r315701) @@ -183,4 +183,5 @@ Elf64_Brandinfo cloudabi64_brand = { .sysvec = &cloudabi64_elf_sysvec, .flags = BI_CAN_EXEC_DYN, .compat_3_brand = "CloudABI", + .interp_path = "/nonexistent", }; Modified: head/sys/i386/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/i386/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 06:43:10 2017 (r315700) +++ head/sys/i386/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 07:05:27 2017 (r315701) @@ -201,4 +201,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", + .interp_path = "/nonexistent", }; From owner-svn-src-head@freebsd.org Wed Mar 22 08:56:04 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A0CCAD16B3B; Wed, 22 Mar 2017 08:56:04 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6551F1F5A; Wed, 22 Mar 2017 08:56:04 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2M8u3iL011084; Wed, 22 Mar 2017 08:56:03 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2M8u3VD011080; Wed, 22 Mar 2017 08:56:03 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703220856.v2M8u3VD011080@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 22 Mar 2017 08:56:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315708 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 08:56:04 -0000 Author: mav Date: Wed Mar 22 08:56:03 2017 New Revision: 315708 URL: https://svnweb.freebsd.org/changeset/base/315708 Log: Cleanup response queue processing. MFC after: 2 weeks Modified: head/sys/dev/isp/isp.c head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_freebsd.h head/sys/dev/isp/ispvar.h Modified: head/sys/dev/isp/isp.c ============================================================================== --- head/sys/dev/isp/isp.c Wed Mar 22 08:55:32 2017 (r315707) +++ head/sys/dev/isp/isp.c Wed Mar 22 08:56:03 2017 (r315708) @@ -68,7 +68,7 @@ __FBSDID("$FreeBSD$"); /* * Local static data */ -static const char notresp[] = "Not RESPONSE in RESPONSE Queue (type 0x%x) @ idx %d (next %d) nlooked %d"; +static const char notresp[] = "Unknown IOCB in RESPONSE Queue (type 0x%x) @ idx %d (next %d)"; static const char bun[] = "bad underrun (count %d, resid %d, status %s)"; static const char lipd[] = "Chan %d LIP destroyed %d active commands"; static const char sacq[] = "unable to acquire scratch area"; @@ -98,8 +98,8 @@ static const uint8_t alpa_map[] = { static void isp_parse_async(ispsoftc_t *, uint16_t); static void isp_parse_async_fc(ispsoftc_t *, uint16_t); static int isp_handle_other_response(ispsoftc_t *, int, isphdr_t *, uint32_t *); -static void isp_parse_status(ispsoftc_t *, ispstatusreq_t *, XS_T *, long *); -static void isp_parse_status_24xx(ispsoftc_t *, isp24xx_statusreq_t *, XS_T *, long *); +static void isp_parse_status(ispsoftc_t *, ispstatusreq_t *, XS_T *, uint32_t *); +static void isp_parse_status_24xx(ispsoftc_t *, isp24xx_statusreq_t *, XS_T *, uint32_t *); static void isp_fastpost_complete(ispsoftc_t *, uint32_t); static void isp_scsi_init(ispsoftc_t *); static void isp_scsi_channel_init(ispsoftc_t *, int); @@ -4970,21 +4970,18 @@ isp_intr_mbox(ispsoftc_t *isp, uint16_t MBOX_NOTIFY_COMPLETE(isp); } -/* - * Limit our stack depth by sticking with the max likely number - * of completions on a request queue at any one time. - */ -#ifndef MAX_REQUESTQ_COMPLETIONS -#define MAX_REQUESTQ_COMPLETIONS 32 -#endif - void isp_intr_respq(ispsoftc_t *isp) { - XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs; - uint32_t iptr, optr, junk; - int i, nlooked = 0, ndone = 0, continuations_expected = 0; - int etype, last_etype = 0; + XS_T *xs, *cont_xs; + uint8_t qe[QENTRY_LEN]; + ispstatusreq_t *sp = (ispstatusreq_t *)qe; + isp24xx_statusreq_t *sp2 = (isp24xx_statusreq_t *)qe; + isphdr_t *hp; + uint8_t *resp, *snsp; + int buddaboom, completion_status, cont = 0, etype, i; + int req_status_flags, req_state_flags, scsi_status; + uint32_t iptr, junk, cptr, optr, rlen, slen, sptr, totslen, resid; /* * We can't be getting this now. @@ -5006,38 +5003,30 @@ isp_intr_respq(ispsoftc_t *isp) optr = isp->isp_resodx; while (optr != iptr) { - uint8_t qe[QENTRY_LEN]; - ispstatusreq_t *sp = (ispstatusreq_t *) qe; - isphdr_t *hp; - int buddaboom, scsi_status, completion_status; - int req_status_flags, req_state_flags; - uint8_t *snsp, *resp; - uint32_t rlen, slen, totslen; - long resid; - uint16_t oop; - - hp = (isphdr_t *) ISP_QUEUE_ENTRY(isp->isp_result, optr); - oop = optr; + sptr = cptr = optr; + hp = (isphdr_t *) ISP_QUEUE_ENTRY(isp->isp_result, cptr); optr = ISP_NXT_QENTRY(optr, RESULT_QUEUE_LEN(isp)); - nlooked++; - read_again: - buddaboom = req_status_flags = req_state_flags = 0; - resid = 0L; /* * Synchronize our view of this response queue entry. */ - MEMORYBARRIER(isp, SYNC_RESULT, oop, QENTRY_LEN, -1); + MEMORYBARRIER(isp, SYNC_RESULT, cptr, QENTRY_LEN, -1); if (isp->isp_dblev & ISP_LOGDEBUG1) - isp_print_qentry(isp, "Response Queue Entry", oop, hp); + isp_print_qentry(isp, "Response Queue Entry", cptr, hp); isp_get_hdr(isp, hp, &sp->req_header); etype = sp->req_header.rqs_entry_type; + /* We expected Status Continuation, but got different IOCB. */ + if (cont > 0 && etype != RQSTYPE_STATUS_CONT) { + cont = 0; + isp_done(cont_xs); + } + if (IS_24XX(isp) && etype == RQSTYPE_RESPONSE) { - isp24xx_statusreq_t *sp2 = (isp24xx_statusreq_t *)qe; isp_get_24xx_response(isp, (isp24xx_statusreq_t *)hp, sp2); scsi_status = sp2->req_scsi_status; completion_status = sp2->req_completion_status; + req_status_flags = 0; if ((scsi_status & 0xff) != 0) req_state_flags = RQSF_GOT_STATUS; else @@ -5057,79 +5046,52 @@ isp_intr_respq(ispsoftc_t *isp) isp_fastpost_complete(isp, rio->req_handles[i]); } ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ - last_etype = etype; continue; } else if (etype == RQSTYPE_RIO2) { isp_prt(isp, ISP_LOGERR, "dropping RIO2 response"); ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ - last_etype = etype; continue; } else if (etype == RQSTYPE_STATUS_CONT) { - isp_get_cont_response(isp, (ispstatus_cont_t *) hp, (ispstatus_cont_t *) sp); - if (last_etype == RQSTYPE_RESPONSE && continuations_expected && ndone > 0 && (xs = complist[ndone-1]) != NULL) { - ispstatus_cont_t *scp = (ispstatus_cont_t *) sp; - XS_SENSE_APPEND(xs, scp->req_sense_data, sizeof (scp->req_sense_data)); - isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "%d more Status Continuations expected", --continuations_expected); + ispstatus_cont_t *scp = (ispstatus_cont_t *)qe; + isp_get_cont_response(isp, (ispstatus_cont_t *)hp, scp); + if (cont > 0) { + i = min(cont, sizeof(scp->req_sense_data)); + XS_SENSE_APPEND(cont_xs, scp->req_sense_data, i); + cont -= i; + if (cont == 0) { + isp_done(cont_xs); + } else { + isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, + "Expecting Status Continuations for %u bytes", + cont); + } } else { isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response"); } ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ continue; - } else { - /* - * Somebody reachable via isp_handle_other_response - * may have updated the response queue pointers for - * us, so we reload our goal index. - */ - int r; - uint32_t tsto = oop; - r = isp_handle_other_response(isp, etype, hp, &tsto); - if (r < 0) { - goto read_again; - } - /* - * If somebody updated the output pointer, then reset - * optr to be one more than the updated amount. - */ - while (tsto != oop) { - optr = ISP_NXT_QENTRY(tsto, RESULT_QUEUE_LEN(isp)); - } - if (r > 0) { - ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ - last_etype = etype; - continue; - } - - /* - * After this point, we'll just look at the header as - * we don't know how to deal with the rest of the - * response. - */ - - /* - * It really has to be a bounced request just copied - * from the request queue to the response queue. If - * not, something bad has happened. - */ - if (etype != RQSTYPE_REQUEST) { - isp_prt(isp, ISP_LOGERR, notresp, etype, oop, optr, nlooked); + } else if (isp_handle_other_response(isp, etype, hp, &cptr)) { + /* More then one IOCB could be consumed. */ + while (sptr != cptr) { ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ - last_etype = etype; - continue; + sptr = ISP_NXT_QENTRY(sptr, RESULT_QUEUE_LEN(isp)); + hp = (isphdr_t *)ISP_QUEUE_ENTRY(isp->isp_result, sptr); } - buddaboom = 1; - scsi_status = sp->req_scsi_status; - completion_status = sp->req_completion_status; - req_status_flags = sp->req_status_flags; - req_state_flags = sp->req_state_flags; - resid = sp->req_resid; + ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ + optr = ISP_NXT_QENTRY(cptr, RESULT_QUEUE_LEN(isp)); + continue; + } else { + /* We don't know what was this -- log and skip. */ + isp_prt(isp, ISP_LOGERR, notresp, etype, cptr, optr); + ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ + continue; } + buddaboom = 0; if (sp->req_header.rqs_flags & RQSFLAG_MASK) { if (sp->req_header.rqs_flags & RQSFLAG_CONTINUATION) { isp_print_qentry(isp, "unexpected continuation segment", - oop, hp); - last_etype = etype; + cptr, hp); continue; } if (sp->req_header.rqs_flags & RQSFLAG_FULL) { @@ -5140,23 +5102,22 @@ isp_intr_respq(ispsoftc_t *isp) } if (sp->req_header.rqs_flags & RQSFLAG_BADHEADER) { isp_print_qentry(isp, "bad header flag", - oop, hp); + cptr, hp); buddaboom++; } if (sp->req_header.rqs_flags & RQSFLAG_BADPACKET) { isp_print_qentry(isp, "bad request packet", - oop, hp); + cptr, hp); buddaboom++; } if (sp->req_header.rqs_flags & RQSFLAG_BADCOUNT) { isp_print_qentry(isp, "invalid entry count", - oop, hp); + cptr, hp); buddaboom++; } if (sp->req_header.rqs_flags & RQSFLAG_BADORDER) { isp_print_qentry(isp, "invalid IOCB ordering", - oop, hp); - last_etype = etype; + cptr, hp); continue; } } @@ -5174,7 +5135,6 @@ isp_intr_respq(ispsoftc_t *isp) isp_prt(isp, ISP_LOGERR, "cannot find handle 0x%x (status 0x%x)", sp->req_handle, ts); } ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ - last_etype = etype; continue; } if (req_status_flags & RQSTF_BUS_RESET) { @@ -5189,13 +5149,11 @@ isp_intr_respq(ispsoftc_t *isp) XS_SETERR(xs, HBA_BOTCH); } - resp = NULL; - rlen = 0; - snsp = NULL; - totslen = slen = 0; + resp = snsp = NULL; + rlen = slen = totslen = 0; if (IS_24XX(isp) && (scsi_status & (RQCS_RV|RQCS_SV)) != 0) { - resp = ((isp24xx_statusreq_t *)sp)->req_rsp_sense; - rlen = ((isp24xx_statusreq_t *)sp)->req_response_len; + resp = sp2->req_rsp_sense; + rlen = sp2->req_response_len; } else if (IS_FC(isp) && (scsi_status & RQCS_RV) != 0) { resp = sp->req_response; rlen = sp->req_response_len; @@ -5208,203 +5166,115 @@ isp_intr_respq(ispsoftc_t *isp) */ req_state_flags |= RQSF_GOT_STATUS|RQSF_GOT_SENSE; if (IS_24XX(isp)) { - snsp = ((isp24xx_statusreq_t *)sp)->req_rsp_sense; + snsp = sp2->req_rsp_sense; snsp += rlen; - totslen = ((isp24xx_statusreq_t *)sp)->req_sense_len; - slen = (sizeof (((isp24xx_statusreq_t *)sp)->req_rsp_sense)) - rlen; - if (totslen < slen) - slen = totslen; + totslen = sp2->req_sense_len; + slen = sizeof(sp2->req_rsp_sense) - rlen; } else { snsp = sp->req_sense_data; totslen = sp->req_sense_len; - slen = sizeof (sp->req_sense_data); - if (totslen < slen) - slen = totslen; + slen = sizeof(sp->req_sense_data); } } else if (IS_SCSI(isp) && (req_state_flags & RQSF_GOT_SENSE)) { snsp = sp->req_sense_data; totslen = sp->req_sense_len; slen = sizeof (sp->req_sense_data); - if (totslen < slen) - slen = totslen; } - if (req_state_flags & RQSF_GOT_STATUS) { + if (slen > totslen) + slen = totslen; + if (req_state_flags & RQSF_GOT_STATUS) *XS_STSP(xs) = scsi_status & 0xff; - } - switch (etype) { - case RQSTYPE_RESPONSE: - if (resp && rlen >= 4 && resp[FCP_RSPNS_CODE_OFFSET] != 0) { - const char *ptr; - char lb[64]; - const char *rnames[10] = { - "Task Management function complete", - "FCP_DATA length different than FCP_BURST_LEN", - "FCP_CMND fields invalid", - "FCP_DATA parameter mismatch with FCP_DATA_RO", - "Task Management function rejected", - "Task Management function failed", - NULL, - NULL, - "Task Management function succeeded", - "Task Management function incorrect logical unit number", - }; - uint8_t code = resp[FCP_RSPNS_CODE_OFFSET]; - if (code >= 10 || rnames[code] == NULL) { - ISP_SNPRINTF(lb, sizeof(lb), - "Unknown FCP Response Code 0x%x", - code); - ptr = lb; - } else { - ptr = rnames[code]; - } - isp_xs_prt(isp, xs, ISP_LOGWARN, - "FCP RESPONSE, LENGTH %u: %s CDB0=0x%02x", - rlen, ptr, XS_CDBP(xs)[0] & 0xff); - if (code != 0 && code != 8) - XS_SETERR(xs, HBA_BOTCH); - } - if (IS_24XX(isp)) { - isp_parse_status_24xx(isp, (isp24xx_statusreq_t *)sp, xs, &resid); + if (rlen >= 4 && resp[FCP_RSPNS_CODE_OFFSET] != 0) { + const char *ptr; + char lb[64]; + const char *rnames[10] = { + "Task Management function complete", + "FCP_DATA length different than FCP_BURST_LEN", + "FCP_CMND fields invalid", + "FCP_DATA parameter mismatch with FCP_DATA_RO", + "Task Management function rejected", + "Task Management function failed", + NULL, + NULL, + "Task Management function succeeded", + "Task Management function incorrect logical unit number", + }; + uint8_t code = resp[FCP_RSPNS_CODE_OFFSET]; + if (code >= 10 || rnames[code] == NULL) { + ISP_SNPRINTF(lb, sizeof(lb), + "Unknown FCP Response Code 0x%x", code); + ptr = lb; } else { - isp_parse_status(isp, (void *)sp, xs, &resid); + ptr = rnames[code]; } - if ((XS_NOERR(xs) || XS_ERR(xs) == HBA_NOERROR) && (*XS_STSP(xs) == SCSI_BUSY)) { - XS_SETERR(xs, HBA_TGTBSY); + isp_xs_prt(isp, xs, ISP_LOGWARN, + "FCP RESPONSE, LENGTH %u: %s CDB0=0x%02x", + rlen, ptr, XS_CDBP(xs)[0] & 0xff); + if (code != 0 && code != 8) + XS_SETERR(xs, HBA_BOTCH); + } + if (IS_24XX(isp)) + isp_parse_status_24xx(isp, sp2, xs, &resid); + else + isp_parse_status(isp, sp, xs, &resid); + if ((XS_NOERR(xs) || XS_ERR(xs) == HBA_NOERROR) && + (*XS_STSP(xs) == SCSI_BUSY)) + XS_SETERR(xs, HBA_TGTBSY); + if (IS_SCSI(isp)) { + XS_SET_RESID(xs, resid); + /* + * A new synchronous rate was negotiated for + * this target. Mark state such that we'll go + * look up that which has changed later. + */ + if (req_status_flags & RQSTF_NEGOTIATION) { + int t = XS_TGT(xs); + sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); + sdp->isp_devparam[t].dev_refresh = 1; + sdp->update = 1; } - if (IS_SCSI(isp)) { + } else { + if (req_status_flags & RQSF_XFER_COMPLETE) { + XS_SET_RESID(xs, 0); + } else if (scsi_status & RQCS_RESID) { XS_SET_RESID(xs, resid); - /* - * A new synchronous rate was negotiated for - * this target. Mark state such that we'll go - * look up that which has changed later. - */ - if (req_status_flags & RQSTF_NEGOTIATION) { - int t = XS_TGT(xs); - sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); - sdp->isp_devparam[t].dev_refresh = 1; - sdp->update = 1; - } } else { - if (req_status_flags & RQSF_XFER_COMPLETE) { - XS_SET_RESID(xs, 0); - } else if (scsi_status & RQCS_RESID) { - XS_SET_RESID(xs, resid); - } else { - XS_SET_RESID(xs, 0); - } - } - if (snsp && slen) { - if (totslen > slen) { - continuations_expected += ((totslen - slen + QENTRY_LEN - 5) / (QENTRY_LEN - 4)); - if (ndone > (MAX_REQUESTQ_COMPLETIONS - continuations_expected - 1)) { - /* we'll lose some stats, but that's a small price to pay */ - for (i = 0; i < ndone; i++) { - if (complist[i]) - isp_done(complist[i]); - } - ndone = 0; - } - isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "Expecting %d more Status Continuations for total sense length of %u", - continuations_expected, totslen); - } - XS_SAVE_SENSE(xs, snsp, totslen, slen); - } else if ((req_status_flags & RQSF_GOT_STATUS) && (scsi_status & 0xff) == SCSI_CHECK && IS_FC(isp)) { - isp_prt(isp, ISP_LOGWARN, "CHECK CONDITION w/o sense data for CDB=0x%x", XS_CDBP(xs)[0] & 0xff); - isp_print_qentry(isp, "CC with no Sense", - oop, hp); - } - isp_prt(isp, ISP_LOGDEBUG2, "asked for %ld got raw resid %ld settled for %ld", (long) XS_XFRLEN(xs), resid, (long) XS_GET_RESID(xs)); - break; - case RQSTYPE_REQUEST: - case RQSTYPE_A64: - case RQSTYPE_T2RQS: - case RQSTYPE_T3RQS: - case RQSTYPE_T7RQS: - if (!IS_24XX(isp) && (sp->req_header.rqs_flags & RQSFLAG_FULL)) { - /* - * Force Queue Full status. - */ - *XS_STSP(xs) = SCSI_QFULL; - XS_SETERR(xs, HBA_NOERROR); - } else if (XS_NOERR(xs)) { - isp_prt(isp, ISP_LOG_WARN1, - "%d.%d.%jx badness at %s:%u", - XS_CHANNEL(xs), XS_TGT(xs), - (uintmax_t)XS_LUN(xs), - __func__, __LINE__); - XS_SETERR(xs, HBA_BOTCH); + XS_SET_RESID(xs, 0); } - XS_SET_RESID(xs, XS_XFRLEN(xs)); - break; - default: - isp_print_qentry(isp, "Unhandled Response Type", - oop, hp); - if (XS_NOERR(xs)) { - XS_SETERR(xs, HBA_BOTCH); + } + if (slen > 0) { + XS_SAVE_SENSE(xs, snsp, slen); + if (totslen > slen) { + cont = totslen - slen; + cont_xs = xs; + isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, + "Expecting Status Continuations for %u bytes", + cont); } - break; } + isp_prt(isp, ISP_LOGDEBUG2, "asked for %lu got raw resid %lu settled for %lu", + (u_long)XS_XFRLEN(xs), (u_long)resid, (u_long)XS_GET_RESID(xs)); - /* - * Free any DMA resources. As a side effect, this may - * also do any cache flushing necessary for data coherence. - */ - if (XS_XFRLEN(xs)) { + if (XS_XFRLEN(xs)) ISP_DMAFREE(isp, xs, sp->req_handle); - } isp_destroy_handle(isp, sp->req_handle); - complist[ndone++] = xs; /* defer completion call until later */ ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ - last_etype = etype; - if (ndone == MAX_REQUESTQ_COMPLETIONS) { - break; - } - } - - /* - * If we looked at any commands, then it's valid to find out - * what the outpointer is. It also is a trigger to update the - * ISP's notion of what we've seen so far. - */ - if (nlooked) { - ISP_WRITE(isp, isp->isp_respoutrp, optr); - isp->isp_resodx = optr; - } - for (i = 0; i < ndone; i++) { - xs = complist[i]; - if (xs) { - if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) || - ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)) || (*XS_STSP(xs) != SCSI_GOOD))))) { - isp_prt_endcmd(isp, xs); - } + /* Complete command if we expect no Status Continuations. */ + if (cont == 0) isp_done(xs); - } } -} - -/* - * Support routines. - */ -void -isp_prt_endcmd(ispsoftc_t *isp, XS_T *xs) -{ - char cdbstr[16 * 5 + 1]; - int i, lim; + /* We haven't received all Status Continuations, but that is it. */ + if (cont > 0) + isp_done(cont_xs); - lim = XS_CDBLEN(xs) > 16? 16 : XS_CDBLEN(xs); - ISP_SNPRINTF(cdbstr, sizeof (cdbstr), "0x%02x ", XS_CDBP(xs)[0]); - for (i = 1; i < lim; i++) { - ISP_SNPRINTF(cdbstr, sizeof (cdbstr), "%s0x%02x ", cdbstr, XS_CDBP(xs)[i]); - } - if (XS_SENSE_VALID(xs)) { - isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s SenseLength=%u/%u KEY/ASC/ASCQ=0x%02x/0x%02x/0x%02x", - XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_CUR_SNSLEN(xs), XS_TOT_SNSLEN(xs), XS_SNSKEY(xs), XS_SNSASC(xs), XS_SNSASCQ(xs)); - } else { - isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s STS 0x%x XS_ERR=0x%x", XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, *XS_STSP(xs), XS_ERR(xs)); + /* If we processed any IOCBs, let ISP know about it. */ + if (optr != isp->isp_resodx) { + ISP_WRITE(isp, isp->isp_respoutrp, optr); + isp->isp_resodx = optr; } } @@ -5989,34 +5859,17 @@ isp_handle_other_response(ispsoftc_t *is case RQSTYPE_ABTS_RCVD: case RQSTYPE_ABTS_RSP: #ifdef ISP_TARGET_MODE - if (isp_target_notify(isp, (ispstatusreq_t *) hp, optrp)) - return (1); + return (isp_target_notify(isp, (ispstatusreq_t *) hp, optrp)); #endif /* FALLTHROUGH */ case RQSTYPE_REQUEST: default: - ISP_DELAY(100); - if (type != isp_get_response_type(isp, hp)) { - /* - * This is questionable- we're just papering over - * something we've seen on SMP linux in target - * mode- we don't really know what's happening - * here that causes us to think we've gotten - * an entry, but that either the entry isn't - * filled out yet or our CPU read data is stale. - */ - isp_prt(isp, ISP_LOGINFO, - "unstable type in response queue"); - return (-1); - } - isp_prt(isp, ISP_LOGWARN, "Unhandled Response Type 0x%x", - isp_get_response_type(isp, hp)); return (0); } } static void -isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp) +isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, uint32_t *rp) { switch (sp->req_completion_status & 0xff) { case RQCS_COMPLETE: @@ -6344,7 +6197,7 @@ isp_parse_status(ispsoftc_t *isp, ispsta } static void -isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *rp) +isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, uint32_t *rp) { int ru_marked, sv_marked; int chan = XS_CHANNEL(xs); Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Wed Mar 22 08:55:32 2017 (r315707) +++ head/sys/dev/isp/isp_freebsd.c Wed Mar 22 08:56:03 2017 (r315708) @@ -731,8 +731,6 @@ isp_free_pcmd(ispsoftc_t *isp, union ccb if (ISP_PCMD(ccb)) { #ifdef ISP_TARGET_MODE PISP_PCMD(ccb)->datalen = 0; - PISP_PCMD(ccb)->totslen = 0; - PISP_PCMD(ccb)->cumslen = 0; PISP_PCMD(ccb)->crn = 0; #endif PISP_PCMD(ccb)->next = isp->isp_osinfo.pcmd_free; @@ -2581,7 +2579,6 @@ isp_watchdog(void *arg) isp_prt(isp, ISP_LOGERR, "%s: timeout for handle 0x%x", __func__, handle); xs->ccb_h.status &= ~CAM_STATUS_MASK; xs->ccb_h.status |= CAM_CMD_TIMEOUT; - isp_prt_endcmd(isp, xs); isp_done(xs); } else { if (ohandle != ISP_HANDLE_FREE) { Modified: head/sys/dev/isp/isp_freebsd.h ============================================================================== --- head/sys/dev/isp/isp_freebsd.h Wed Mar 22 08:55:32 2017 (r315707) +++ head/sys/dev/isp/isp_freebsd.h Wed Mar 22 08:56:03 2017 (r315708) @@ -176,8 +176,6 @@ struct isp_pcmd { struct ispsoftc * isp; /* containing isp */ struct callout wdog; /* watchdog timer */ uint32_t datalen; /* data length for this command (target mode only) */ - uint8_t totslen; /* sense length on status response */ - uint8_t cumslen; /* sense length on status response */ uint8_t crn; /* command reference number */ }; #define ISP_PCMD(ccb) (ccb)->ccb_h.spriv_ptr1 @@ -569,26 +567,19 @@ default: \ #define XS_INITERR(ccb) XS_SETERR(ccb, CAM_REQ_INPROG), ccb->sense_resid = ccb->sense_len -#define XS_SAVE_SENSE(xs, sense_ptr, totslen, slen) do { \ - uint32_t tlen = slen; \ - if (tlen > (xs)->sense_len) \ - tlen = (xs)->sense_len; \ - PISP_PCMD(xs)->totslen = imin((xs)->sense_len, totslen); \ - PISP_PCMD(xs)->cumslen = tlen; \ - memcpy(&(xs)->sense_data, sense_ptr, tlen); \ - (xs)->sense_resid = (xs)->sense_len - tlen; \ - (xs)->ccb_h.status |= CAM_AUTOSNS_VALID; \ +#define XS_SAVE_SENSE(xs, sp, len) do { \ + uint32_t amt = min(len, (xs)->sense_len); \ + memcpy(&(xs)->sense_data, sp, amt); \ + (xs)->sense_resid = (xs)->sense_len - amt; \ + (xs)->ccb_h.status |= CAM_AUTOSNS_VALID; \ } while (0) -#define XS_SENSE_APPEND(xs, xsnsp, xsnsl) do { \ - uint32_t off = PISP_PCMD(xs)->cumslen; \ - uint8_t *ptr = &((uint8_t *)(&(xs)->sense_data))[off]; \ - uint32_t amt = imin(xsnsl, PISP_PCMD(xs)->totslen - off); \ - if (amt) { \ - memcpy(ptr, xsnsp, amt); \ - (xs)->sense_resid -= amt; \ - PISP_PCMD(xs)->cumslen += amt; \ - } \ +#define XS_SENSE_APPEND(xs, sp, len) do { \ + uint8_t *ptr = (uint8_t *)(&(xs)->sense_data) + \ + ((xs)->sense_len - (xs)->sense_resid); \ + uint32_t amt = min((len), (xs)->sense_resid); \ + memcpy(ptr, sp, amt); \ + (xs)->sense_resid -= amt; \ } while (0) #define XS_SENSE_VALID(xs) (((xs)->ccb_h.status & CAM_AUTOSNS_VALID) != 0) Modified: head/sys/dev/isp/ispvar.h ============================================================================== --- head/sys/dev/isp/ispvar.h Wed Mar 22 08:55:32 2017 (r315707) +++ head/sys/dev/isp/ispvar.h Wed Mar 22 08:56:03 2017 (r315708) @@ -914,11 +914,6 @@ void isp_async(ispsoftc_t *, ispasync_t, #define ISPASYNC_CHANGE_OTHER 2 /* - * Platform Independent Error Prinout - */ -void isp_prt_endcmd(ispsoftc_t *, XS_T *); - -/* * Platform Dependent Error and Debug Printout * * Two required functions for each platform must be provided: @@ -1039,8 +1034,7 @@ void isp_prt_endcmd(ispsoftc_t *, XS_T * * XS_NOERR(xs) there is no error currently set * XS_INITERR(xs) initialize error state * - * XS_SAVE_SENSE(xs, sp, total_len, this_len) save sense data (total and current amount) - * + * XS_SAVE_SENSE(xs, sp, len) save sense data * XS_APPEND_SENSE(xs, sp, len) append more sense data * * XS_SENSE_VALID(xs) indicates whether sense is valid From owner-svn-src-head@freebsd.org Wed Mar 22 09:03:19 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3FC3CD15237; Wed, 22 Mar 2017 09:03:19 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C0D471810; Wed, 22 Mar 2017 09:03:18 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id v2M92xkU002110 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 22 Mar 2017 11:02:59 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua v2M92xkU002110 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id v2M92w6g002109; Wed, 22 Mar 2017 11:02:58 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Wed, 22 Mar 2017 11:02:58 +0200 From: Konstantin Belousov To: Ed Schouten Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 Message-ID: <20170322090258.GR43712@kib.kiev.ua> References: <201703220705.v2M75RHE066483@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201703220705.v2M75RHE066483@repo.freebsd.org> User-Agent: Mutt/1.8.0 (2017-02-23) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 09:03:19 -0000 On Wed, Mar 22, 2017 at 07:05:27AM +0000, Ed Schouten wrote: > Author: ed > Date: Wed Mar 22 07:05:27 2017 > New Revision: 315701 > URL: https://svnweb.freebsd.org/changeset/base/315701 > > Log: > Set the interpreter path to /nonexistent. > > CloudABI executables are statically linked and don't have an > interpreter. Setting the interpreter path to NULL used to work > previously, but r314851 introduced code that checks the string > unconditionally. Running CloudABI executables now causes a null pointer > dereference. You could have just reported that the revision breaks cloudabi. > > Looking at the rest of imgact_elf.c, it seems various other codepaths > already leaned on the fact that the interpreter path is set. Let's just > go ahead and pick an obviously incorrect interpreter path to appease > imgact_elf.c. I believe that we should move in the reverse direction, in particular, best would be to allow brand to specify that only a statically linked binaries can be handled by it. My reasoning is coming from a desire to make brand matching as exact as possible, after dealing with the bugs due to too vague matching. Could you test the following ? It supposedly fixes the NULL issue, and adds the flag marking brands as only allowing static (really PT_INTERP-less) binaries. diff --git a/sys/amd64/cloudabi32/cloudabi32_sysvec.c b/sys/amd64/cloudabi32/cloudabi32_sysvec.c index fe93385e4de..eca42873f8f 100644 --- a/sys/amd64/cloudabi32/cloudabi32_sysvec.c +++ b/sys/amd64/cloudabi32/cloudabi32_sysvec.c @@ -228,5 +228,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; diff --git a/sys/amd64/cloudabi64/cloudabi64_sysvec.c b/sys/amd64/cloudabi64/cloudabi64_sysvec.c index 34277f488fc..642516cc797 100644 --- a/sys/amd64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/amd64/cloudabi64/cloudabi64_sysvec.c @@ -214,5 +214,5 @@ Elf64_Brandinfo cloudabi64_brand = { .sysvec = &cloudabi64_elf_sysvec, .flags = BI_CAN_EXEC_DYN, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; diff --git a/sys/arm/cloudabi32/cloudabi32_sysvec.c b/sys/arm/cloudabi32/cloudabi32_sysvec.c index aea4b822ddc..b1130c92bcd 100644 --- a/sys/arm/cloudabi32/cloudabi32_sysvec.c +++ b/sys/arm/cloudabi32/cloudabi32_sysvec.c @@ -190,5 +190,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_ARM, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; diff --git a/sys/arm64/cloudabi64/cloudabi64_sysvec.c b/sys/arm64/cloudabi64/cloudabi64_sysvec.c index 66d569b8f32..af23ffda9a0 100644 --- a/sys/arm64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/arm64/cloudabi64/cloudabi64_sysvec.c @@ -183,5 +183,5 @@ Elf64_Brandinfo cloudabi64_brand = { .sysvec = &cloudabi64_elf_sysvec, .flags = BI_CAN_EXEC_DYN, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; diff --git a/sys/i386/cloudabi32/cloudabi32_sysvec.c b/sys/i386/cloudabi32/cloudabi32_sysvec.c index 2658c4f9ed6..d03c9e267ab 100644 --- a/sys/i386/cloudabi32/cloudabi32_sysvec.c +++ b/sys/i386/cloudabi32/cloudabi32_sysvec.c @@ -201,5 +201,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c index f33dc4cbeae..3036f814faf 100644 --- a/sys/kern/imgact_elf.c +++ b/sys/kern/imgact_elf.c @@ -273,6 +273,9 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, bi = elf_brand_list[i]; if (bi == NULL) continue; + if (interp != NULL && + (bi->flags & BI_BRAND_NOTE_ONLY_STATIC) != 0) + continue; if (hdr->e_machine == bi->machine && (bi->flags & (BI_BRAND_NOTE|BI_BRAND_NOTE_MANDATORY)) != 0) { ret = __elfN(check_note)(imgp, bi->brand_note, osrel); @@ -305,7 +308,9 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, /* If the executable has a brand, search for it in the brand list. */ for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || + (interp != NULL && (bi->flags & + BI_BRAND_NOTE_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && (hdr->e_ident[EI_OSABI] == bi->brand || @@ -318,7 +323,11 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, * Again, prefer strictly matching * interpreter path. */ - if (strlen(bi->interp_path) + 1 == + if (interp_name_len == 0 && + bi->interp_path == NULL) + return (bi); + if (bi->interp_path != NULL && + strlen(bi->interp_path) + 1 == interp_name_len && strncmp(interp, bi->interp_path, interp_name_len) == 0) return (bi); @@ -347,7 +356,8 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, if (interp != NULL) { for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & (BI_BRAND_NOTE_MANDATORY | + BI_BRAND_NOTE_ONLY_STATIC)) != 0) continue; if (hdr->e_machine == bi->machine && /* ELF image p_filesz includes terminating zero */ @@ -361,7 +371,9 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, /* Lacking a recognized interpreter, try the default brand */ for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || + (interp != NULL && (bi->flags & + BI_BRAND_NOTE_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && __elfN(fallback_brand) == bi->brand) diff --git a/sys/sys/imgact_elf.h b/sys/sys/imgact_elf.h index beb5f96fc03..83570ae2399 100644 --- a/sys/sys/imgact_elf.h +++ b/sys/sys/imgact_elf.h @@ -80,6 +80,7 @@ typedef struct { #define BI_CAN_EXEC_DYN 0x0001 #define BI_BRAND_NOTE 0x0002 /* May have note.ABI-tag section. */ #define BI_BRAND_NOTE_MANDATORY 0x0004 /* Must have note.ABI-tag section. */ +#define BI_BRAND_NOTE_ONLY_STATIC 0x0008 } __ElfN(Brandinfo); __ElfType(Auxargs); From owner-svn-src-head@freebsd.org Wed Mar 22 11:06:34 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 88155D176DD; Wed, 22 Mar 2017 11:06:34 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 62A9D1887; Wed, 22 Mar 2017 11:06:34 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MB6XkV063924; Wed, 22 Mar 2017 11:06:33 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MB6XdD063923; Wed, 22 Mar 2017 11:06:33 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703221106.v2MB6XdD063923@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 22 Mar 2017 11:06:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315709 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 11:06:34 -0000 Author: mav Date: Wed Mar 22 11:06:33 2017 New Revision: 315709 URL: https://svnweb.freebsd.org/changeset/base/315709 Log: Switch from using periph_links to sim_links. periph_links field belongs to periph drivers and must not be used here. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_freebsd.c Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Wed Mar 22 08:56:03 2017 (r315708) +++ head/sys/dev/isp/isp_freebsd.c Wed Mar 22 11:06:33 2017 (r315709) @@ -839,7 +839,7 @@ isp_tmcmd_restart(ispsoftc_t *isp) ISP_GET_PC_ADDR(isp, bus, waitq, waitq); ccb = (union ccb *)TAILQ_FIRST(waitq); if (ccb != NULL) { - TAILQ_REMOVE(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_REMOVE(waitq, &ccb->ccb_h, sim_links.tqe); isp_target_start_ctio(isp, ccb, FROM_TIMER); } } @@ -1095,17 +1095,17 @@ isp_target_start_ctio(ispsoftc_t *isp, u /* * Insert at the tail of the list, if any, waiting CTIO CCBs */ - TAILQ_INSERT_TAIL(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_TAIL(waitq, &ccb->ccb_h, sim_links.tqe); break; case FROM_TIMER: case FROM_SRR: case FROM_CTIO_DONE: - TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, sim_links.tqe); break; } while ((ccb = (union ccb *) TAILQ_FIRST(waitq)) != NULL) { - TAILQ_REMOVE(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_REMOVE(waitq, &ccb->ccb_h, sim_links.tqe); cso = &ccb->csio; xfrlen = cso->dxfer_len; @@ -1154,7 +1154,7 @@ isp_target_start_ctio(ispsoftc_t *isp, u */ if (atp->ctcnt >= ATPD_CCB_OUTSTANDING) { isp_prt(isp, ISP_LOGTINFO, "[0x%x] handling only %d CCBs at a time (flags for this ccb: 0x%x)", cso->tag_id, ATPD_CCB_OUTSTANDING, ccb->ccb_h.flags); - TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, sim_links.tqe); break; } @@ -1279,7 +1279,7 @@ isp_target_start_ctio(ispsoftc_t *isp, u if (atp->ests == NULL) { atp->ests = isp_get_ecmd(isp); if (atp->ests == NULL) { - TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, sim_links.tqe); break; } } @@ -1434,7 +1434,7 @@ isp_target_start_ctio(ispsoftc_t *isp, u if (atp->ests == NULL) { atp->ests = isp_get_ecmd(isp); if (atp->ests == NULL) { - TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, sim_links.tqe); break; } } @@ -1523,13 +1523,13 @@ isp_target_start_ctio(ispsoftc_t *isp, u if (isp_get_pcmd(isp, ccb)) { ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "out of PCMDs\n"); - TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, sim_links.tqe); break; } handle = isp_allocate_handle(isp, ccb, ISP_HANDLE_TARGET); if (handle == 0) { ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__); - TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, sim_links.tqe); isp_free_pcmd(isp, ccb); break; } @@ -1559,7 +1559,7 @@ isp_target_start_ctio(ispsoftc_t *isp, u isp_destroy_handle(isp, handle); isp_free_pcmd(isp, ccb); if (dmaresult == CMD_EAGAIN) { - TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, sim_links.tqe); break; } ccb->ccb_h.status = CAM_REQ_CMP_ERR; From owner-svn-src-head@freebsd.org Wed Mar 22 11:50:31 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CEF31D15584; Wed, 22 Mar 2017 11:50:31 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 76C0D1227; Wed, 22 Mar 2017 11:50:31 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id v2MBoPjT039155 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 22 Mar 2017 13:50:25 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua v2MBoPjT039155 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id v2MBoPu3039154; Wed, 22 Mar 2017 13:50:25 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Wed, 22 Mar 2017 13:50:25 +0200 From: Konstantin Belousov To: Ed Schouten Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 Message-ID: <20170322115025.GT43712@kib.kiev.ua> References: <201703220705.v2M75RHE066483@repo.freebsd.org> <20170322090258.GR43712@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170322090258.GR43712@kib.kiev.ua> User-Agent: Mutt/1.8.0 (2017-02-23) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 11:50:31 -0000 On Wed, Mar 22, 2017 at 11:02:58AM +0200, Konstantin Belousov wrote: > On Wed, Mar 22, 2017 at 07:05:27AM +0000, Ed Schouten wrote: > > Author: ed > > Date: Wed Mar 22 07:05:27 2017 > > New Revision: 315701 > > URL: https://svnweb.freebsd.org/changeset/base/315701 > > > > Log: > > Set the interpreter path to /nonexistent. > > > > CloudABI executables are statically linked and don't have an > > interpreter. Setting the interpreter path to NULL used to work > > previously, but r314851 introduced code that checks the string > > unconditionally. Running CloudABI executables now causes a null pointer > > dereference. > You could have just reported that the revision breaks cloudabi. > > > > > Looking at the rest of imgact_elf.c, it seems various other codepaths > > already leaned on the fact that the interpreter path is set. Let's just > > go ahead and pick an obviously incorrect interpreter path to appease > > imgact_elf.c. > > I believe that we should move in the reverse direction, in particular, > best would be to allow brand to specify that only a statically linked > binaries can be handled by it. My reasoning is coming from a desire > to make brand matching as exact as possible, after dealing with the > bugs due to too vague matching. > > Could you test the following ? It supposedly fixes the NULL issue, and > adds the flag marking brands as only allowing static (really PT_INTERP-less) > binaries. Fix for amd64/arm64 compilation. diff --git a/sys/amd64/cloudabi32/cloudabi32_sysvec.c b/sys/amd64/cloudabi32/cloudabi32_sysvec.c index fe93385e4de..eca42873f8f 100644 --- a/sys/amd64/cloudabi32/cloudabi32_sysvec.c +++ b/sys/amd64/cloudabi32/cloudabi32_sysvec.c @@ -228,5 +228,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; diff --git a/sys/amd64/cloudabi64/cloudabi64_sysvec.c b/sys/amd64/cloudabi64/cloudabi64_sysvec.c index 34277f488fc..f953710971d 100644 --- a/sys/amd64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/amd64/cloudabi64/cloudabi64_sysvec.c @@ -212,7 +212,6 @@ Elf64_Brandinfo cloudabi64_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_X86_64, .sysvec = &cloudabi64_elf_sysvec, - .flags = BI_CAN_EXEC_DYN, + .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE_ONLY_STATIC, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", }; diff --git a/sys/arm/cloudabi32/cloudabi32_sysvec.c b/sys/arm/cloudabi32/cloudabi32_sysvec.c index aea4b822ddc..b1130c92bcd 100644 --- a/sys/arm/cloudabi32/cloudabi32_sysvec.c +++ b/sys/arm/cloudabi32/cloudabi32_sysvec.c @@ -190,5 +190,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_ARM, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; diff --git a/sys/arm64/cloudabi64/cloudabi64_sysvec.c b/sys/arm64/cloudabi64/cloudabi64_sysvec.c index 66d569b8f32..45e81c05952 100644 --- a/sys/arm64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/arm64/cloudabi64/cloudabi64_sysvec.c @@ -181,7 +181,6 @@ Elf64_Brandinfo cloudabi64_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_AARCH64, .sysvec = &cloudabi64_elf_sysvec, - .flags = BI_CAN_EXEC_DYN, + .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE_ONLY_STATIC, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", }; diff --git a/sys/i386/cloudabi32/cloudabi32_sysvec.c b/sys/i386/cloudabi32/cloudabi32_sysvec.c index 2658c4f9ed6..d03c9e267ab 100644 --- a/sys/i386/cloudabi32/cloudabi32_sysvec.c +++ b/sys/i386/cloudabi32/cloudabi32_sysvec.c @@ -201,5 +201,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c index f33dc4cbeae..3036f814faf 100644 --- a/sys/kern/imgact_elf.c +++ b/sys/kern/imgact_elf.c @@ -273,6 +273,9 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, bi = elf_brand_list[i]; if (bi == NULL) continue; + if (interp != NULL && + (bi->flags & BI_BRAND_NOTE_ONLY_STATIC) != 0) + continue; if (hdr->e_machine == bi->machine && (bi->flags & (BI_BRAND_NOTE|BI_BRAND_NOTE_MANDATORY)) != 0) { ret = __elfN(check_note)(imgp, bi->brand_note, osrel); @@ -305,7 +308,9 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, /* If the executable has a brand, search for it in the brand list. */ for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || + (interp != NULL && (bi->flags & + BI_BRAND_NOTE_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && (hdr->e_ident[EI_OSABI] == bi->brand || @@ -318,7 +323,11 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, * Again, prefer strictly matching * interpreter path. */ - if (strlen(bi->interp_path) + 1 == + if (interp_name_len == 0 && + bi->interp_path == NULL) + return (bi); + if (bi->interp_path != NULL && + strlen(bi->interp_path) + 1 == interp_name_len && strncmp(interp, bi->interp_path, interp_name_len) == 0) return (bi); @@ -347,7 +356,8 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, if (interp != NULL) { for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & (BI_BRAND_NOTE_MANDATORY | + BI_BRAND_NOTE_ONLY_STATIC)) != 0) continue; if (hdr->e_machine == bi->machine && /* ELF image p_filesz includes terminating zero */ @@ -361,7 +371,9 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, /* Lacking a recognized interpreter, try the default brand */ for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || + (interp != NULL && (bi->flags & + BI_BRAND_NOTE_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && __elfN(fallback_brand) == bi->brand) diff --git a/sys/sys/imgact_elf.h b/sys/sys/imgact_elf.h index beb5f96fc03..83570ae2399 100644 --- a/sys/sys/imgact_elf.h +++ b/sys/sys/imgact_elf.h @@ -80,6 +80,7 @@ typedef struct { #define BI_CAN_EXEC_DYN 0x0001 #define BI_BRAND_NOTE 0x0002 /* May have note.ABI-tag section. */ #define BI_BRAND_NOTE_MANDATORY 0x0004 /* Must have note.ABI-tag section. */ +#define BI_BRAND_NOTE_ONLY_STATIC 0x0008 } __ElfN(Brandinfo); __ElfType(Auxargs); From owner-svn-src-head@freebsd.org Wed Mar 22 13:16:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4ABFCD17419; Wed, 22 Mar 2017 13:16:06 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 132C81057; Wed, 22 Mar 2017 13:16:06 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MDG5HY017906; Wed, 22 Mar 2017 13:16:05 GMT (envelope-from des@FreeBSD.org) Received: (from des@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MDG5EU017903; Wed, 22 Mar 2017 13:16:05 GMT (envelope-from des@FreeBSD.org) Message-Id: <201703221316.v2MDG5EU017903@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: des set sender to des@FreeBSD.org using -f From: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= Date: Wed, 22 Mar 2017 13:16:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315710 - head/lib/libpam/modules/pam_exec X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 13:16:06 -0000 Author: des Date: Wed Mar 22 13:16:04 2017 New Revision: 315710 URL: https://svnweb.freebsd.org/changeset/base/315710 Log: Add options to capture stdout and / or stderr and pass the output on to the user. There is currently no buffering, so the result may be somewhat unpredictable if the conversation function adds a newline, like openpam_ttyconv() does. Clean up and simplify the environment handling code, which triggered an inexplicable bug on some systems. MFC after: 2 weeks Modified: head/lib/libpam/modules/pam_exec/pam_exec.8 head/lib/libpam/modules/pam_exec/pam_exec.c Modified: head/lib/libpam/modules/pam_exec/pam_exec.8 ============================================================================== --- head/lib/libpam/modules/pam_exec/pam_exec.8 Wed Mar 22 11:06:33 2017 (r315709) +++ head/lib/libpam/modules/pam_exec/pam_exec.8 Wed Mar 22 13:16:04 2017 (r315710) @@ -1,4 +1,5 @@ .\" Copyright (c) 2001,2003 Networks Associates Technology, Inc. +.\" Copyright (c) 2017 Dag-Erling Smørgrav .\" All rights reserved. .\" .\" Portions of this software were developed for the FreeBSD Project by @@ -32,7 +33,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 8, 2012 +.Dd March 22, 2017 .Dt PAM_EXEC 8 .Os .Sh NAME @@ -55,7 +56,19 @@ if the program name conflicts with an op .Pp The following options may be passed before the program and its arguments: -.Bl -tag -width ".Cm return_prog_exit_status" +.Bl -tag -width indent +.It Cm capture_stderr +Capture text printed by the program to its standard error stream and +pass it to the conversation function as error messages. +No attempt is made at buffering the text, so results may vary. +.It Cm capture_stdout +Capture text printed by the program to its standard output stream and +pass it to the conversation function as informational messages. +No attempt is made at buffering the text, so results may vary. +.It Cm debug +Ignored for compatibility reasons. +.It Cm no_warn +Ignored for compatibility reasons. .It Cm return_prog_exit_status Use the program exit status as the return code of the pam_sm_* function. It must be a valid return value for this function. Modified: head/lib/libpam/modules/pam_exec/pam_exec.c ============================================================================== --- head/lib/libpam/modules/pam_exec/pam_exec.c Wed Mar 22 11:06:33 2017 (r315709) +++ head/lib/libpam/modules/pam_exec/pam_exec.c Wed Mar 22 13:16:04 2017 (r315710) @@ -1,5 +1,6 @@ /*- * Copyright (c) 2001,2003 Networks Associates Technology, Inc. + * Copyright (c) 2017 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -36,9 +37,12 @@ __FBSDID("$FreeBSD$"); #include +#include +#include #include #include +#include #include #include #include @@ -48,24 +52,62 @@ __FBSDID("$FreeBSD$"); #include #include -#define ENV_ITEM(n) { (n), #n } +#define PAM_ITEM_ENV(n) { (n), #n } static struct { int item; const char *name; -} env_items[] = { - ENV_ITEM(PAM_SERVICE), - ENV_ITEM(PAM_USER), - ENV_ITEM(PAM_TTY), - ENV_ITEM(PAM_RHOST), - ENV_ITEM(PAM_RUSER), +} pam_item_env[] = { + PAM_ITEM_ENV(PAM_SERVICE), + PAM_ITEM_ENV(PAM_USER), + PAM_ITEM_ENV(PAM_TTY), + PAM_ITEM_ENV(PAM_RHOST), + PAM_ITEM_ENV(PAM_RUSER), }; +#define NUM_PAM_ITEM_ENV (sizeof(pam_item_env) / sizeof(pam_item_env[0])) + +#define PAM_ERR_ENV_X(str, num) str "=" #num +#define PAM_ERR_ENV(pam_err) PAM_ERR_ENV_X(#pam_err, pam_err) +static const char *pam_err_env[] = { + PAM_ERR_ENV(PAM_SUCCESS), + PAM_ERR_ENV(PAM_OPEN_ERR), + PAM_ERR_ENV(PAM_SYMBOL_ERR), + PAM_ERR_ENV(PAM_SERVICE_ERR), + PAM_ERR_ENV(PAM_SYSTEM_ERR), + PAM_ERR_ENV(PAM_BUF_ERR), + PAM_ERR_ENV(PAM_CONV_ERR), + PAM_ERR_ENV(PAM_PERM_DENIED), + PAM_ERR_ENV(PAM_MAXTRIES), + PAM_ERR_ENV(PAM_AUTH_ERR), + PAM_ERR_ENV(PAM_NEW_AUTHTOK_REQD), + PAM_ERR_ENV(PAM_CRED_INSUFFICIENT), + PAM_ERR_ENV(PAM_AUTHINFO_UNAVAIL), + PAM_ERR_ENV(PAM_USER_UNKNOWN), + PAM_ERR_ENV(PAM_CRED_UNAVAIL), + PAM_ERR_ENV(PAM_CRED_EXPIRED), + PAM_ERR_ENV(PAM_CRED_ERR), + PAM_ERR_ENV(PAM_ACCT_EXPIRED), + PAM_ERR_ENV(PAM_AUTHTOK_EXPIRED), + PAM_ERR_ENV(PAM_SESSION_ERR), + PAM_ERR_ENV(PAM_AUTHTOK_ERR), + PAM_ERR_ENV(PAM_AUTHTOK_RECOVERY_ERR), + PAM_ERR_ENV(PAM_AUTHTOK_LOCK_BUSY), + PAM_ERR_ENV(PAM_AUTHTOK_DISABLE_AGING), + PAM_ERR_ENV(PAM_NO_MODULE_DATA), + PAM_ERR_ENV(PAM_IGNORE), + PAM_ERR_ENV(PAM_ABORT), + PAM_ERR_ENV(PAM_TRY_AGAIN), + PAM_ERR_ENV(PAM_MODULE_UNKNOWN), + PAM_ERR_ENV(PAM_DOMAIN_UNKNOWN), + PAM_ERR_ENV(PAM_NUM_ERR), +}; +#define NUM_PAM_ERR_ENV (sizeof(pam_err_env) / sizeof(pam_err_env[0])) struct pe_opts { int return_prog_exit_status; + int capture_stdout; + int capture_stderr; }; -#define PAM_RV_COUNT 24 - static int parse_options(const char *func, int *argc, const char **argv[], struct pe_opts *options) @@ -79,22 +121,27 @@ parse_options(const char *func, int *arg * --: * stop options parsing; what follows is the command to execute */ - options->return_prog_exit_status = 0; + memset(options, 0, sizeof(*options)); for (i = 0; i < *argc; ++i) { - if (strcmp((*argv)[i], "return_prog_exit_status") == 0) { - openpam_log(PAM_LOG_DEBUG, - "%s: Option \"return_prog_exit_status\" enabled", - func); + if (strcmp((*argv)[i], "debug") == 0 || + strcmp((*argv)[i], "no_warn") == 0) { + /* ignore */ + } else if (strcmp((*argv)[i], "capture_stdout") == 0) { + options->capture_stdout = 1; + } else if (strcmp((*argv)[i], "capture_stderr") == 0) { + options->capture_stderr = 1; + } else if (strcmp((*argv)[i], "return_prog_exit_status") == 0) { options->return_prog_exit_status = 1; } else { if (strcmp((*argv)[i], "--") == 0) { (*argc)--; (*argv)++; } - break; } + openpam_log(PAM_LOG_DEBUG, "%s: option \"%s\" enabled", + func, (*argv)[i]); } (*argc) -= i; @@ -104,159 +151,229 @@ parse_options(const char *func, int *arg } static int -_pam_exec(pam_handle_t *pamh __unused, +_pam_exec(pam_handle_t *pamh, const char *func, int flags __unused, int argc, const char *argv[], struct pe_opts *options) { - int envlen, i, nitems, pam_err, status; - int nitems_rv; - char **envlist, **tmp, *envstr; - volatile int childerr; + char buf[PAM_MAX_MSG_SIZE]; + struct pollfd pfd[3]; + const void *item; + char **envlist, *envstr, *resp, **tmp; + ssize_t rlen; + int envlen, extralen, i; + int pam_err, serrno, status; + int chout[2], cherr[2], pd; + nfds_t nfds; pid_t pid; - /* - * XXX For additional credit, divert child's stdin/stdout/stderr - * to the conversation function. - */ + pd = -1; + pid = 0; + chout[0] = chout[1] = cherr[0] = cherr[1] = -1; + envlist = NULL; + +#define OUT(ret) do { pam_err = (ret); goto out; } while (0) /* Check there's a program name left after parsing options. */ if (argc < 1) { openpam_log(PAM_LOG_ERROR, "%s: No program specified: aborting", func); - return (PAM_SERVICE_ERR); + OUT(PAM_SERVICE_ERR); } /* - * Set up the child's environment list. It consists of the PAM - * environment, plus a few hand-picked PAM items, the pam_sm_* - * function name calling it and, if return_prog_exit_status is - * set, the valid return codes numerical values. + * Set up the child's environment list. It consists of the PAM + * environment, a few hand-picked PAM items, the name of the + * service function, and if return_prog_exit_status is set, the + * numerical values of all PAM error codes. */ + + /* compute the final size of the environment. */ envlist = pam_getenvlist(pamh); for (envlen = 0; envlist[envlen] != NULL; ++envlen) /* nothing */ ; - nitems = sizeof(env_items) / sizeof(*env_items); - /* Count PAM return values put in the environment. */ - nitems_rv = options->return_prog_exit_status ? PAM_RV_COUNT : 0; - tmp = realloc(envlist, (envlen + nitems + 1 + nitems_rv + 1) * - sizeof(*envlist)); - if (tmp == NULL) { - openpam_free_envlist(envlist); - return (PAM_BUF_ERR); - } + extralen = NUM_PAM_ITEM_ENV + 1; + if (options->return_prog_exit_status) + extralen += NUM_PAM_ERR_ENV; + tmp = reallocarray(envlist, envlen + extralen + 1, sizeof(*envlist)); + openpam_log(PAM_LOG_DEBUG, "envlen = %d extralen = %d tmp = %p", + envlen, extralen, tmp); + if (tmp == NULL) + OUT(PAM_BUF_ERR); envlist = tmp; - for (i = 0; i < nitems; ++i) { - const void *item; + extralen += envlen; - pam_err = pam_get_item(pamh, env_items[i].item, &item); + /* copy selected PAM items to the environment */ + for (i = 0; i < NUM_PAM_ITEM_ENV; ++i) { + pam_err = pam_get_item(pamh, pam_item_env[i].item, &item); if (pam_err != PAM_SUCCESS || item == NULL) continue; - asprintf(&envstr, "%s=%s", env_items[i].name, - (const char *)item); - if (envstr == NULL) { - openpam_free_envlist(envlist); - return (PAM_BUF_ERR); - } + if (asprintf(&envstr, "%s=%s", pam_item_env[i].name, item) < 0) + OUT(PAM_BUF_ERR); envlist[envlen++] = envstr; envlist[envlen] = NULL; + openpam_log(PAM_LOG_DEBUG, "setenv %s", envstr); } - /* Add the pam_sm_* function name to the environment. */ - asprintf(&envstr, "PAM_SM_FUNC=%s", func); - if (envstr == NULL) { - openpam_free_envlist(envlist); - return (PAM_BUF_ERR); - } + /* add the name of the service function to the environment */ + if (asprintf(&envstr, "PAM_SM_FUNC=%s", func) < 0) + OUT(PAM_BUF_ERR); envlist[envlen++] = envstr; + envlist[envlen] = NULL; - /* Add the PAM return values to the environment. */ + /* add the PAM error codes to the environment. */ if (options->return_prog_exit_status) { -#define ADD_PAM_RV_TO_ENV(name) \ - asprintf(&envstr, #name "=%d", name); \ - if (envstr == NULL) { \ - openpam_free_envlist(envlist); \ - return (PAM_BUF_ERR); \ - } \ - envlist[envlen++] = envstr - /* - * CAUTION: When adding/removing an item in the list - * below, be sure to update the value of PAM_RV_COUNT. - */ - ADD_PAM_RV_TO_ENV(PAM_ABORT); - ADD_PAM_RV_TO_ENV(PAM_ACCT_EXPIRED); - ADD_PAM_RV_TO_ENV(PAM_AUTHINFO_UNAVAIL); - ADD_PAM_RV_TO_ENV(PAM_AUTHTOK_DISABLE_AGING); - ADD_PAM_RV_TO_ENV(PAM_AUTHTOK_ERR); - ADD_PAM_RV_TO_ENV(PAM_AUTHTOK_LOCK_BUSY); - ADD_PAM_RV_TO_ENV(PAM_AUTHTOK_RECOVERY_ERR); - ADD_PAM_RV_TO_ENV(PAM_AUTH_ERR); - ADD_PAM_RV_TO_ENV(PAM_BUF_ERR); - ADD_PAM_RV_TO_ENV(PAM_CONV_ERR); - ADD_PAM_RV_TO_ENV(PAM_CRED_ERR); - ADD_PAM_RV_TO_ENV(PAM_CRED_EXPIRED); - ADD_PAM_RV_TO_ENV(PAM_CRED_INSUFFICIENT); - ADD_PAM_RV_TO_ENV(PAM_CRED_UNAVAIL); - ADD_PAM_RV_TO_ENV(PAM_IGNORE); - ADD_PAM_RV_TO_ENV(PAM_MAXTRIES); - ADD_PAM_RV_TO_ENV(PAM_NEW_AUTHTOK_REQD); - ADD_PAM_RV_TO_ENV(PAM_PERM_DENIED); - ADD_PAM_RV_TO_ENV(PAM_SERVICE_ERR); - ADD_PAM_RV_TO_ENV(PAM_SESSION_ERR); - ADD_PAM_RV_TO_ENV(PAM_SUCCESS); - ADD_PAM_RV_TO_ENV(PAM_SYSTEM_ERR); - ADD_PAM_RV_TO_ENV(PAM_TRY_AGAIN); - ADD_PAM_RV_TO_ENV(PAM_USER_UNKNOWN); + for (i = 0; i < (int)NUM_PAM_ERR_ENV; ++i) { + if ((envstr = strdup(pam_err_env[i])) == NULL) + OUT(PAM_BUF_ERR); + envlist[envlen++] = envstr; + envlist[envlen] = NULL; + } } - envlist[envlen] = NULL; + openpam_log(PAM_LOG_DEBUG, "envlen = %d extralen = %d envlist = %p", + envlen, extralen, envlist); - /* - * Fork and run the command. By using vfork() instead of fork(), - * we can distinguish between an execve() failure and a non-zero - * exit status from the command. - */ - childerr = 0; - if ((pid = vfork()) == 0) { - execve(argv[0], (char * const *)argv, (char * const *)envlist); - childerr = errno; + /* set up pipes if capture was requested */ + if (options->capture_stdout) { + if (pipe(chout) != 0) { + openpam_log(PAM_LOG_ERROR, "%s: pipe(): %m", func); + OUT(PAM_SYSTEM_ERR); + } + if (fcntl(chout[0], F_SETFL, O_NONBLOCK) != 0) { + openpam_log(PAM_LOG_ERROR, "%s: fcntl(): %m", func); + OUT(PAM_SYSTEM_ERR); + } + } else { + if ((chout[1] = open("/dev/null", O_RDWR)) < 0) { + openpam_log(PAM_LOG_ERROR, "%s: /dev/null: %m", func); + OUT(PAM_SYSTEM_ERR); + } + } + if (options->capture_stderr) { + if (pipe(cherr) != 0) { + openpam_log(PAM_LOG_ERROR, "%s: pipe(): %m", func); + OUT(PAM_SYSTEM_ERR); + } + if (fcntl(cherr[0], F_SETFL, O_NONBLOCK) != 0) { + openpam_log(PAM_LOG_ERROR, "%s: fcntl(): %m", func); + OUT(PAM_SYSTEM_ERR); + } + } else { + if ((cherr[1] = open("/dev/null", O_RDWR)) < 0) { + openpam_log(PAM_LOG_ERROR, "%s: /dev/null: %m", func); + OUT(PAM_SYSTEM_ERR); + } + } + + if ((pid = pdfork(&pd, 0)) == 0) { + /* child */ + if ((chout[0] >= 0 && close(chout[0]) != 0) || + (cherr[0] >= 0 && close(cherr[0]) != 0)) { + openpam_log(PAM_LOG_ERROR, "%s: close(): %m", func); + } else if (dup2(chout[1], STDOUT_FILENO) != STDOUT_FILENO || + dup2(cherr[1], STDERR_FILENO) != STDERR_FILENO) { + openpam_log(PAM_LOG_ERROR, "%s: dup2(): %m", func); + } else { + execve(argv[0], (char * const *)argv, + (char * const *)envlist); + openpam_log(PAM_LOG_ERROR, "%s: execve(%s): %m", + func, argv[0]); + } _exit(1); } - openpam_free_envlist(envlist); + /* parent */ if (pid == -1) { - openpam_log(PAM_LOG_ERROR, "%s: vfork(): %m", func); - return (PAM_SYSTEM_ERR); + openpam_log(PAM_LOG_ERROR, "%s: pdfork(): %m", func); + OUT(PAM_SYSTEM_ERR); } + /* use poll() to watch the process and stdout / stderr */ + if (chout[1] >= 0) + close(chout[1]); + if (cherr[1] >= 0) + close(cherr[1]); + memset(pfd, 0, sizeof pfd); + pfd[0].fd = pd; + pfd[0].events = POLLHUP; + nfds = 1; + if (options->capture_stdout) { + pfd[nfds].fd = chout[0]; + pfd[nfds].events = POLLIN|POLLERR|POLLHUP; + nfds++; + } + if (options->capture_stderr) { + pfd[nfds].fd = cherr[0]; + pfd[nfds].events = POLLIN|POLLERR|POLLHUP; + nfds++; + } + + /* loop until the process exits */ + do { + if (poll(pfd, nfds, INFTIM) < 0) { + openpam_log(PAM_LOG_ERROR, "%s: poll(): %m", func); + OUT(PAM_SYSTEM_ERR); + } + for (i = 1; i < nfds; ++i) { + if ((pfd[i].revents & POLLIN) == 0) + continue; + if ((rlen = read(pfd[i].fd, buf, sizeof(buf) - 1)) < 0) { + openpam_log(PAM_LOG_ERROR, "%s: read(): %m", + func); + OUT(PAM_SYSTEM_ERR); + } else if (rlen == 0) { + continue; + } + buf[rlen] = '\0'; + (void)pam_prompt(pamh, pfd[i].fd == chout[0] ? + PAM_TEXT_INFO : PAM_ERROR_MSG, &resp, "%s", buf); + } + } while (pfd[0].revents == 0); + + /* the child process has exited */ while (waitpid(pid, &status, 0) == -1) { if (errno == EINTR) continue; openpam_log(PAM_LOG_ERROR, "%s: waitpid(): %m", func); - return (PAM_SYSTEM_ERR); - } - if (childerr != 0) { - openpam_log(PAM_LOG_ERROR, "%s: execve(): %m", func); - return (PAM_SYSTEM_ERR); + OUT(PAM_SYSTEM_ERR); } + + /* check exit code */ if (WIFSIGNALED(status)) { openpam_log(PAM_LOG_ERROR, "%s: %s caught signal %d%s", func, argv[0], WTERMSIG(status), WCOREDUMP(status) ? " (core dumped)" : ""); - return (PAM_SERVICE_ERR); + OUT(PAM_SERVICE_ERR); } if (!WIFEXITED(status)) { openpam_log(PAM_LOG_ERROR, "%s: unknown status 0x%x", func, status); - return (PAM_SERVICE_ERR); + OUT(PAM_SERVICE_ERR); } if (options->return_prog_exit_status) { openpam_log(PAM_LOG_DEBUG, "%s: Use program exit status as return value: %d", func, WEXITSTATUS(status)); - return (WEXITSTATUS(status)); + OUT(WEXITSTATUS(status)); } else { - return (WEXITSTATUS(status) == 0 ? - PAM_SUCCESS : PAM_PERM_DENIED); + OUT(WEXITSTATUS(status) == 0 ? PAM_SUCCESS : PAM_PERM_DENIED); } + /* unreachable */ +out: + serrno = errno; + if (pd >= 0) + close(pd); + if (chout[0] >= 0) + close(chout[0]); + if (chout[1] >= 0) + close(chout[1]); + if (cherr[0] >= 0) + close(cherr[0]); + if (cherr[0] >= 0) + close(cherr[1]); + if (envlist != NULL) + openpam_free_envlist(envlist); + errno = serrno; + return (pam_err); } PAM_EXTERN int From owner-svn-src-head@freebsd.org Wed Mar 22 13:53:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3A532D173F4; Wed, 22 Mar 2017 13:53:23 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 077691688; Wed, 22 Mar 2017 13:53:22 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MDrMCR033803; Wed, 22 Mar 2017 13:53:22 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MDrM30033802; Wed, 22 Mar 2017 13:53:22 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703221353.v2MDrM30033802@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 22 Mar 2017 13:53:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315711 - head/sbin/camcontrol X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 13:53:23 -0000 Author: mav Date: Wed Mar 22 13:53:21 2017 New Revision: 315711 URL: https://svnweb.freebsd.org/changeset/base/315711 Log: Fix printing bits above first eight. Reported by: Coverity CID: 1372596 MFC after: 1 week Modified: head/sbin/camcontrol/camcontrol.c Modified: head/sbin/camcontrol/camcontrol.c ============================================================================== --- head/sbin/camcontrol/camcontrol.c Wed Mar 22 13:16:04 2017 (r315710) +++ head/sbin/camcontrol/camcontrol.c Wed Mar 22 13:53:21 2017 (r315711) @@ -5321,7 +5321,7 @@ static void cpi_print(struct ccb_pathinq *cpi) { char adapter_str[1024]; - int i; + uint64_t i; snprintf(adapter_str, sizeof(adapter_str), "%s%d:", cpi->dev_name, cpi->unit_number); @@ -5329,7 +5329,7 @@ cpi_print(struct ccb_pathinq *cpi) fprintf(stdout, "%s SIM/HBA version: %d\n", adapter_str, cpi->version_num); - for (i = 1; i < 0xff; i = i << 1) { + for (i = 1; i < UINT8_MAX; i = i << 1) { const char *str; if ((i & cpi->hba_inquiry) == 0) @@ -5369,7 +5369,7 @@ cpi_print(struct ccb_pathinq *cpi) fprintf(stdout, "%s\n", str); } - for (i = 1; i < 0xff; i = i << 1) { + for (i = 1; i < UINT32_MAX; i = i << 1) { const char *str; if ((i & cpi->hba_misc) == 0) @@ -5416,7 +5416,7 @@ cpi_print(struct ccb_pathinq *cpi) fprintf(stdout, "%s\n", str); } - for (i = 1; i < 0xff; i = i << 1) { + for (i = 1; i < UINT16_MAX; i = i << 1) { const char *str; if ((i & cpi->target_sprt) == 0) From owner-svn-src-head@freebsd.org Wed Mar 22 14:16:55 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DE54DD17D67 for ; Wed, 22 Mar 2017 14:16:55 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-yw0-x22e.google.com (mail-yw0-x22e.google.com [IPv6:2607:f8b0:4002:c05::22e]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 99FA816ED for ; Wed, 22 Mar 2017 14:16:55 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by mail-yw0-x22e.google.com with SMTP id i203so14763597ywc.3 for ; Wed, 22 Mar 2017 07:16:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuxi-nl.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=iv5u99LrGqmFl6wVBoD0rN4RH1r9HJzGUSGa3Bk6Wls=; b=t4xmwDsY0GIV8+VnuOAHqIKv8aiNP4X2cq3RQ5hpWM2gLfsgupMWLwbJTc5z4p4P7Y xoUzdOUVJmq9doiESPmKRv81MpLPAP4GnEdRTsJzUbGVICovEDyRenYcHyM4iIF1YOUq AFHMHDeAIUZSxy2nkwheZZr24mKDqxLjL5iO9pdc++6iDUlhHgq8qEqHXN0PWm8aniZ4 VeL05bTXKW3on9xXZudQZfLaUHSXeYUdYSo5lBPLjBXjfR9EJh0HPn8hfWbmiSmIisMw ARiV3p0wg0t+JOfdEqfFhaSTuPGxsGE7V8+rJDDBSxHFcVqqLe4xrd+GvWLyYz2UoonA rbxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=iv5u99LrGqmFl6wVBoD0rN4RH1r9HJzGUSGa3Bk6Wls=; b=tAHRmsJjjI/tghZ8U5pmgqOvhznS9ncety2Kq2I8YcL9acbdSZInkFjybgnrb/xQs+ ASkhix6oYXg6kGTUnrNWKje4AsJRZQWVEqrqjvJOVzobMGw/CTkM4kid7swVf33UFbcy 7hH+e8yfcr6+p0a9OvGEBHmcphagNyE9lmc70pquSGsJfo5xs7ulIiCiDqvPJIAOWFct u6Z7LR9hKR8u9qGZlTsUYbra82A3Hak2wQt2nBQlD4XSomTRgZiyUWaRxX+Jdls4dpif /tRAIxgsTiuJXJL+pixJ0Oewbov/g8U/f13meoAy+OfwnHVV9vC/9MKo44yYAaiEIEad kPcg== X-Gm-Message-State: AFeK/H1p6BBhyEYGCfjk/HDZV3MFL4/E1MqjoGPwgswRmtvKFWeysbTenIhdXtpmuLkUfHO6gEryMYJyWS2MVw== X-Received: by 10.37.65.7 with SMTP id o7mr26983283yba.70.1490192214533; Wed, 22 Mar 2017 07:16:54 -0700 (PDT) MIME-Version: 1.0 Received: by 10.129.51.198 with HTTP; Wed, 22 Mar 2017 07:16:24 -0700 (PDT) In-Reply-To: <20170322090258.GR43712@kib.kiev.ua> References: <201703220705.v2M75RHE066483@repo.freebsd.org> <20170322090258.GR43712@kib.kiev.ua> From: Ed Schouten Date: Wed, 22 Mar 2017 15:16:24 +0100 Message-ID: Subject: Re: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 To: Konstantin Belousov Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 14:16:56 -0000 Hi Kostik, 2017-03-22 10:02 GMT+01:00 Konstantin Belousov : > On Wed, Mar 22, 2017 at 07:05:27AM +0000, Ed Schouten wrote: >> Author: ed >> Date: Wed Mar 22 07:05:27 2017 >> New Revision: 315701 >> URL: https://svnweb.freebsd.org/changeset/base/315701 >> >> Log: >> Set the interpreter path to /nonexistent. >> >> CloudABI executables are statically linked and don't have an >> interpreter. Setting the interpreter path to NULL used to work >> previously, but r314851 introduced code that checks the string >> unconditionally. Running CloudABI executables now causes a null pointer >> dereference. > You could have just reported that the revision breaks cloudabi. Even though that revision made things crash for me, prior versions of imgact_elf.c also dereferenced interp_path in several places, which I interpreted as CloudABI not being a good citizen. >> Looking at the rest of imgact_elf.c, it seems various other codepaths >> already leaned on the fact that the interpreter path is set. Let's just >> go ahead and pick an obviously incorrect interpreter path to appease >> imgact_elf.c. > > I believe that we should move in the reverse direction, in particular, > best would be to allow brand to specify that only a statically linked > binaries can be handled by it. My reasoning is coming from a desire > to make brand matching as exact as possible, after dealing with the > bugs due to too vague matching. I agree. Sounds perfect! Similarly, I seem to remember CloudABI's brandinfos set compat_3_brand for a similar reason: it seems to be required by imgact_elf.c. Would we also want to change that? > Could you test the following ? It supposedly fixes the NULL issue, and > adds the flag marking brands as only allowing static (really PT_INTERP-less) > binaries. I've just given it a try. It works perfectly for me. Thanks! -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 From owner-svn-src-head@freebsd.org Wed Mar 22 14:30:04 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7ED65D17419; Wed, 22 Mar 2017 14:30:04 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 569D211F0; Wed, 22 Mar 2017 14:30:04 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MEU3Kf046510; Wed, 22 Mar 2017 14:30:03 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MEU25t046504; Wed, 22 Mar 2017 14:30:02 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201703221430.v2MEU25t046504@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Wed, 22 Mar 2017 14:30:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315712 - in head/sys: arm/arm arm/include conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 14:30:04 -0000 Author: andrew Date: Wed Mar 22 14:30:02 2017 New Revision: 315712 URL: https://svnweb.freebsd.org/changeset/base/315712 Log: Add the early hypervisor code needed on 32-bit ARMv7. This will be used when we bring in bhyve support. Submitted by: Mihai Carabas Differential Revision: https://reviews.freebsd.org/D10045 Added: head/sys/arm/arm/hypervisor-stub.S (contents, props changed) Modified: head/sys/arm/arm/locore-v6.S head/sys/arm/include/armreg.h head/sys/arm/include/asm.h head/sys/arm/include/sysreg.h head/sys/conf/files.arm Added: head/sys/arm/arm/hypervisor-stub.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/arm/hypervisor-stub.S Wed Mar 22 14:30:02 2017 (r315712) @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2015 Mihai Carabas + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "assym.s" +#include +#include +#include +#include + +__FBSDID("$FreeBSD$"); + +#if __ARM_ARCH >= 7 +#if defined(__ARM_ARCH_7VE__) || defined(__clang__) +.arch_extension virt +#endif + +ASENTRY_NP(hypervisor_stub_vect_install) + + /* Install hypervisor stub vectors. */ + adr r0, hypervisor_stub_vect + mcr CP15_HVBAR(r0) + + /* Disable all the traps in the hypervisor. */ + mov r0, #0 + mcr CP15_HCR(r0) + mcr CP15_HCPTR(r0) + mcr CP15_HSTR(r0) + mcr CP15_HSCTLR(r0) + + /* Don't disable access to perf-mon from PL0,1 and preserve HPMN. */ + mrc CP15_HDCR(r0) + and r0, #(ARM_CP15_HDCR_HPMN) + /* Caller implicit instruction barrier in the ERET. */ + mcr CP15_HDCR(r0) + + RET + +END(hypervisor_stub_vect_install) + +ASENTRY_NP(hypervisor_stub_trap) + /* + * If the first parameter is -1 than return the + * exception vector (HVBAR), otherwise set it to + * the value of it. + */ + cmp r0, #-1 + mrceq CP15_HVBAR(r0) + mcrne CP15_HVBAR(r0) + ERET +END(hypervisor_stub_trap) + + .globl hypervisor_stub_vect + .align 5 +_C_LABEL(hypervisor_stub_vect): + .word 0 /* Reset */ + .word 0 /* undev */ + .word 0 /* SMC */ + .word 0 /* PABT */ + .word 0 /* DABT */ + b hypervisor_stub_trap /* HYP-Mode */ + .word 0 /* FIQ */ + .word 0 /* IRQ */ +#endif /* __ARM_ARCH >= 7 */ + Modified: head/sys/arm/arm/locore-v6.S ============================================================================== --- head/sys/arm/arm/locore-v6.S Wed Mar 22 13:53:21 2017 (r315711) +++ head/sys/arm/arm/locore-v6.S Wed Mar 22 14:30:02 2017 (r315712) @@ -38,7 +38,6 @@ __FBSDID("$FreeBSD$"); - #if __ARM_ARCH >= 7 #if defined(__ARM_ARCH_7VE__) || defined(__clang__) /* @@ -46,11 +45,6 @@ __FBSDID("$FreeBSD$"); * when enabled. llvm >= 3.6 supports it too. */ .arch_extension virt -#define MSR_ELR_HYP(regnum) msr elr_hyp, lr -#define ERET eret -#else -#define MSR_ELR_HYP(regnum) .word (0xe12ef300 | regnum) -#define ERET .word 0xe160006e #endif #endif /* __ARM_ARCH >= 7 */ @@ -61,12 +55,17 @@ __FBSDID("$FreeBSD$"); .align 2 #if __ARM_ARCH >= 7 -#define LEAVE_HYP \ +#define HANDLE_HYP \ /* Leave HYP mode */ ;\ mrs r0, cpsr ;\ and r0, r0, #(PSR_MODE) /* Mode is in the low 5 bits of CPSR */ ;\ teq r0, #(PSR_HYP32_MODE) /* Hyp Mode? */ ;\ bne 1f ;\ + /* Install Hypervisor Stub Exception Vector */ ;\ + bl hypervisor_stub_vect_install ;\ + mov r0, 0 ;\ + adr r1, hypmode_enabled ;\ + str r0, [r1] ;\ /* Ensure that IRQ, FIQ and Aborts will be disabled after eret */ ;\ mrs r0, cpsr ;\ bic r0, r0, #(PSR_MODE) ;\ @@ -74,12 +73,16 @@ __FBSDID("$FreeBSD$"); orr r0, r0, #(PSR_I | PSR_F | PSR_A) ;\ msr spsr_cxsf, r0 ;\ /* Exit hypervisor mode */ ;\ - adr lr, 1f ;\ + adr lr, 2f ;\ MSR_ELR_HYP(14) ;\ ERET ;\ -1: +1: ;\ + mov r0, -1 ;\ + adr r1, hypmode_enabled ;\ + str r0, [r1] ;\ +2: #else -#define LEAVE_HYP +#define HANDLE_HYP #endif /* __ARM_ARCH >= 7 */ /* @@ -107,7 +110,8 @@ ASENTRY_NP(_start) mov r10, r2 /* Save meta data */ mov r11, r3 /* Future expansion */ - LEAVE_HYP + # If HYP-MODE is active, install an exception vector stub + HANDLE_HYP /* * Check whether data cache is enabled. If it is, then we know @@ -411,6 +415,9 @@ build_pagetables: VA_TO_PA_POINTER(Lpagetable, boot_pt1) + .global _C_LABEL(hypmode_enabled) +_C_LABEL(hypmode_enabled): + .word 0 .Lstart: .word _edata /* Note that these three items are */ @@ -444,7 +451,7 @@ ASENTRY_NP(mpentry) /* Make sure interrupts are disabled. */ cpsid ifa - LEAVE_HYP + HANDLE_HYP /* Setup core, disable all caches. */ mrc CP15_SCTLR(r0) Modified: head/sys/arm/include/armreg.h ============================================================================== --- head/sys/arm/include/armreg.h Wed Mar 22 13:53:21 2017 (r315711) +++ head/sys/arm/include/armreg.h Wed Mar 22 14:30:02 2017 (r315712) @@ -477,4 +477,7 @@ #define THUMB_INSN_SIZE 2 /* Some are 4 bytes. */ +/* ARM Hypervisor Related Defines */ +#define ARM_CP15_HDCR_HPMN 0x0000001f + #endif /* !MACHINE_ARMREG_H */ Modified: head/sys/arm/include/asm.h ============================================================================== --- head/sys/arm/include/asm.h Wed Mar 22 13:53:21 2017 (r315711) +++ head/sys/arm/include/asm.h Wed Mar 22 14:30:02 2017 (r315712) @@ -235,6 +235,15 @@ #define DSB dsb #define DMB dmb #define WFI wfi + +#if defined(__ARM_ARCH_7VE__) || defined(__clang__) +#define MSR_ELR_HYP(regnum) msr elr_hyp, lr +#define ERET eret +#else +#define MSR_ELR_HYP(regnum) .word (0xe12ef300 | regnum) +#define ERET .word 0xe160006e +#endif + #elif __ARM_ARCH == 6 #define ISB mcr CP15_CP15ISB #define DSB mcr CP15_CP15DSB Modified: head/sys/arm/include/sysreg.h ============================================================================== --- head/sys/arm/include/sysreg.h Wed Mar 22 13:53:21 2017 (r315711) +++ head/sys/arm/include/sysreg.h Wed Mar 22 14:30:02 2017 (r315712) @@ -76,6 +76,12 @@ #define CP15_ID_MMFR2(rr) p15, 0, rr, c0, c1, 6 /* Memory Model Feature Register 2 */ #define CP15_ID_MMFR3(rr) p15, 0, rr, c0, c1, 7 /* Memory Model Feature Register 3 */ +#define CP15_HCR(rr) p15, 4, rr, c1, c1, 0 /* Hyp Configuration Register */ +#define CP15_HCPTR(rr) p15, 4, rr, c1, c1, 2 /* Hyp Coprocessor Trap Register */ +#define CP15_HSTR(rr) p15, 4, rr, c1, c1, 3 /* Hyp System Trap Register */ +#define CP15_HSCTLR(rr) p15, 4, rr, c1, c0, 0 /* Hyp System Control Register */ +#define CP15_HDCR(rr) p15, 4, rr, c1, c1, 1 /* Hyp Debug Configuration Register */ + #define CP15_ID_ISAR0(rr) p15, 0, rr, c0, c2, 0 /* Instruction Set Attribute Register 0 */ #define CP15_ID_ISAR1(rr) p15, 0, rr, c0, c2, 1 /* Instruction Set Attribute Register 1 */ #define CP15_ID_ISAR2(rr) p15, 0, rr, c0, c2, 2 /* Instruction Set Attribute Register 2 */ @@ -265,6 +271,7 @@ #define CP15_MVBAR(rr) p15, 0, rr, c12, c0, 1 /* Monitor Vector Base Address Register */ #define CP15_ISR(rr) p15, 0, rr, c12, c1, 0 /* Interrupt Status Register */ +#define CP15_HVBAR(rr) p15, 4, rr, c12, c0, 0 /* Hyp Vector Base Address Register*/ /* * CP15 C13 registers Modified: head/sys/conf/files.arm ============================================================================== --- head/sys/conf/files.arm Wed Mar 22 13:53:21 2017 (r315711) +++ head/sys/conf/files.arm Wed Mar 22 14:30:02 2017 (r315712) @@ -67,6 +67,7 @@ arm/arm/in_cksum_arm.S optional inet | arm/arm/intr.c optional !intrng kern/subr_intr.c optional intrng arm/arm/locore.S standard no-obj +arm/arm/hypervisor-stub.S optional armv6 arm/arm/machdep.c standard arm/arm/machdep_boot.c standard arm/arm/machdep_kdb.c standard From owner-svn-src-head@freebsd.org Wed Mar 22 15:44:02 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7A0B8D18AC6; Wed, 22 Mar 2017 15:44:02 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3C21D1DBD; Wed, 22 Mar 2017 15:44:02 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MFi1hF079297; Wed, 22 Mar 2017 15:44:01 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MFi18b079293; Wed, 22 Mar 2017 15:44:01 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201703221544.v2MFi18b079293@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Wed, 22 Mar 2017 15:44:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315713 - in head/sys/compat/linuxkpi/common/include: linux net X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 15:44:02 -0000 Author: hselasky Date: Wed Mar 22 15:44:00 2017 New Revision: 315713 URL: https://svnweb.freebsd.org/changeset/base/315713 Log: Add support for more IPv4 and IPv6 related macros in the LinuxKPI. MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/in.h head/sys/compat/linuxkpi/common/include/net/ipv6.h Modified: head/sys/compat/linuxkpi/common/include/linux/in.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/in.h Wed Mar 22 14:30:02 2017 (r315712) +++ head/sys/compat/linuxkpi/common/include/linux/in.h Wed Mar 22 15:44:00 2017 (r315713) @@ -41,5 +41,7 @@ #define ipv4_is_zeronet(be) IN_ZERONET(ntohl(be)) #define ipv4_is_loopback(be) IN_LOOPBACK(ntohl(be)) +#define ipv4_is_multicast(be) IN_MULTICAST(ntohl(be)) +#define ipv4_is_lbcast(be) ((be) == INADDR_BROADCAST) #endif /* _LINUX_IN_H_ */ Modified: head/sys/compat/linuxkpi/common/include/net/ipv6.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/net/ipv6.h Wed Mar 22 14:30:02 2017 (r315712) +++ head/sys/compat/linuxkpi/common/include/net/ipv6.h Wed Mar 22 15:44:00 2017 (r315713) @@ -35,8 +35,12 @@ #include #include -#define ipv6_addr_loopback IN6_IS_ADDR_LOOPBACK -#define ipv6_addr_copy(dst, src) \ +#define IPV6_DEFAULT_HOPLIMIT 64 + +#define ipv6_addr_loopback(addr) IN6_IS_ADDR_LOOPBACK(addr) +#define ipv6_addr_any(addr) IN6_IS_ADDR_UNSPECIFIED(addr) + +#define ipv6_addr_copy(dst, src) \ memcpy((dst), (src), sizeof(struct in6_addr)) static inline void From owner-svn-src-head@freebsd.org Wed Mar 22 15:46:32 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 89922D18B3F; Wed, 22 Mar 2017 15:46:32 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 528711F41; Wed, 22 Mar 2017 15:46:32 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MFkVCv079472; Wed, 22 Mar 2017 15:46:31 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MFkVt6079470; Wed, 22 Mar 2017 15:46:31 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201703221546.v2MFkVt6079470@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Wed, 22 Mar 2017 15:46:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315714 - in head/sys: compat/linuxkpi/common/include/net ofed/drivers/infiniband/core X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 15:46:32 -0000 Author: hselasky Date: Wed Mar 22 15:46:31 2017 New Revision: 315714 URL: https://svnweb.freebsd.org/changeset/base/315714 Log: Add full VNET support to the inet_get_local_port_range() function in the LinuxKPI. MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/net/ip.h head/sys/ofed/drivers/infiniband/core/cma.c Modified: head/sys/compat/linuxkpi/common/include/net/ip.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/net/ip.h Wed Mar 22 15:44:00 2017 (r315713) +++ head/sys/compat/linuxkpi/common/include/net/ip.h Wed Mar 22 15:46:31 2017 (r315714) @@ -43,10 +43,11 @@ #include #include -static inline void inet_get_local_port_range(int *low, int *high) +static inline void +inet_get_local_port_range(struct vnet *vnet, int *low, int *high) { #ifdef INET - CURVNET_SET_QUIET(TD_TO_VNET(curthread)); + CURVNET_SET_QUIET(vnet); *low = V_ipport_firstauto; *high = V_ipport_lastauto; CURVNET_RESTORE(); Modified: head/sys/ofed/drivers/infiniband/core/cma.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/cma.c Wed Mar 22 15:44:00 2017 (r315713) +++ head/sys/ofed/drivers/infiniband/core/cma.c Wed Mar 22 15:46:31 2017 (r315714) @@ -2503,7 +2503,7 @@ static int cma_alloc_any_port(struct idr int low, high, remaining; unsigned int rover; - inet_get_local_port_range(&low, &high); + inet_get_local_port_range(&init_net, &low, &high); remaining = (high - low) + 1; rover = random() % remaining + low; retry: From owner-svn-src-head@freebsd.org Wed Mar 22 16:53:04 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5569DD17EE9; Wed, 22 Mar 2017 16:53:04 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 24DE21390; Wed, 22 Mar 2017 16:53:04 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MGr3v3007731; Wed, 22 Mar 2017 16:53:03 GMT (envelope-from grehan@FreeBSD.org) Received: (from grehan@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MGr39M007730; Wed, 22 Mar 2017 16:53:03 GMT (envelope-from grehan@FreeBSD.org) Message-Id: <201703221653.v2MGr39M007730@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: grehan set sender to grehan@FreeBSD.org using -f From: Peter Grehan Date: Wed, 22 Mar 2017 16:53:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315715 - head/usr.sbin/bhyve X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 16:53:04 -0000 Author: grehan Date: Wed Mar 22 16:53:03 2017 New Revision: 315715 URL: https://svnweb.freebsd.org/changeset/base/315715 Log: This fixes a typo in bhyve's USB mouse emulation. There is no behavioral difference, as it's just swapping out the name of two identically-valued constants. Submitted by: Vicki Pfau (vi AT endrift.com) MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D9597 Modified: head/usr.sbin/bhyve/usb_mouse.c Modified: head/usr.sbin/bhyve/usb_mouse.c ============================================================================== --- head/usr.sbin/bhyve/usb_mouse.c Wed Mar 22 15:46:31 2017 (r315714) +++ head/usr.sbin/bhyve/usb_mouse.c Wed Mar 22 16:53:03 2017 (r315715) @@ -284,7 +284,7 @@ umouse_event(uint8_t button, int x, int /* scale coords to mouse resolution */ sc->um_report.x = MOUSE_MAX_X * x / gc->width; - sc->um_report.y = MOUSE_MAX_X * y / gc->height; + sc->um_report.y = MOUSE_MAX_Y * y / gc->height; sc->newdata = 1; pthread_mutex_unlock(&sc->mtx); From owner-svn-src-head@freebsd.org Wed Mar 22 17:06:59 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2D3F5D1830D; Wed, 22 Mar 2017 17:06:59 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F0F021B88; Wed, 22 Mar 2017 17:06:58 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MH6wbC011760; Wed, 22 Mar 2017 17:06:58 GMT (envelope-from grehan@FreeBSD.org) Received: (from grehan@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MH6wWR011759; Wed, 22 Mar 2017 17:06:58 GMT (envelope-from grehan@FreeBSD.org) Message-Id: <201703221706.v2MH6wWR011759@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: grehan set sender to grehan@FreeBSD.org using -f From: Peter Grehan Date: Wed, 22 Mar 2017 17:06:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315716 - head/sys/dev/usb/input X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 17:06:59 -0000 Author: grehan Date: Wed Mar 22 17:06:57 2017 New Revision: 315716 URL: https://svnweb.freebsd.org/changeset/base/315716 Log: Bring the handling of the y axis in the ums driver in-line with the other axes. No functional change. Submitted by: Vicki Pfau (vi AT endrift.com) Approved by: hps MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D9595 Modified: head/sys/dev/usb/input/ums.c Modified: head/sys/dev/usb/input/ums.c ============================================================================== --- head/sys/dev/usb/input/ums.c Wed Mar 22 16:53:03 2017 (r315715) +++ head/sys/dev/usb/input/ums.c Wed Mar 22 17:06:57 2017 (r315716) @@ -283,7 +283,7 @@ ums_intr_callback(struct usb_xfer *xfer, if ((info->sc_flags & UMS_FLAG_Y_AXIS) && (id == info->sc_iid_y)) - dy = -hid_get_data(buf, len, &info->sc_loc_y); + dy -= hid_get_data(buf, len, &info->sc_loc_y); if ((info->sc_flags & UMS_FLAG_Z_AXIS) && (id == info->sc_iid_z)) { From owner-svn-src-head@freebsd.org Wed Mar 22 17:28:55 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F29A1D18834; Wed, 22 Mar 2017 17:28:54 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B736C182E; Wed, 22 Mar 2017 17:28:54 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MHSrCn020089; Wed, 22 Mar 2017 17:28:53 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MHSrZe020088; Wed, 22 Mar 2017 17:28:53 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703221728.v2MHSrZe020088@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 17:28:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315717 - head/usr.sbin/ctm/ctm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 17:28:55 -0000 Author: ngie Date: Wed Mar 22 17:28:53 2017 New Revision: 315717 URL: https://svnweb.freebsd.org/changeset/base/315717 Log: ctm: fix memory leaks in Pass1(..) Call `Delete(..)` (a free(3) wrapper) on `name` when bailing from the function. Submitted by: Tom Rix Reviewed by: ngie Differential Revision: D10097 Sponsored by: Dell EMC Isilon, Juniper Modified: head/usr.sbin/ctm/ctm/ctm_pass1.c Modified: head/usr.sbin/ctm/ctm/ctm_pass1.c ============================================================================== --- head/usr.sbin/ctm/ctm/ctm_pass1.c Wed Mar 22 17:06:57 2017 (r315716) +++ head/usr.sbin/ctm/ctm/ctm_pass1.c Wed Mar 22 17:28:53 2017 (r315717) @@ -114,6 +114,7 @@ Pass1(FILE *fd, unsigned applied) } if (name[0] == '/') { Fatal("Absolute paths are illegal."); + Delete(name); return Exit_Mess; } q = name; @@ -121,6 +122,7 @@ Pass1(FILE *fd, unsigned applied) if (q[0] == '.' && q[1] == '.') if (q[2] == '/' || q[2] == '\0') { Fatal("Paths containing '..' are illegal."); + Delete(name); return Exit_Mess; } if ((q = strchr(q, '/')) == NULL) From owner-svn-src-head@freebsd.org Wed Mar 22 17:29:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ED493D18861; Wed, 22 Mar 2017 17:29:05 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BC11E18DC; Wed, 22 Mar 2017 17:29:05 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MHT4ek020151; Wed, 22 Mar 2017 17:29:04 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MHT4KL020148; Wed, 22 Mar 2017 17:29:04 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201703221729.v2MHT4KL020148@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Wed, 22 Mar 2017 17:29:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315718 - in head: share/man/man9 sys/amd64/include sys/i386/include X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 17:29:06 -0000 Author: markj Date: Wed Mar 22 17:29:04 2017 New Revision: 315718 URL: https://svnweb.freebsd.org/changeset/base/315718 Log: Add support for 8- and 16-bit atomic_(f)cmpset to x86. Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D10068 Modified: head/share/man/man9/atomic.9 head/sys/amd64/include/atomic.h head/sys/i386/include/atomic.h Modified: head/share/man/man9/atomic.9 ============================================================================== --- head/share/man/man9/atomic.9 Wed Mar 22 17:28:53 2017 (r315717) +++ head/share/man/man9/atomic.9 Wed Mar 22 17:29:04 2017 (r315718) @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd Jan 3, 2017 +.Dd March 22, 2017 .Dt ATOMIC 9 .Os .Sh NAME @@ -226,9 +226,9 @@ if (*dst == old) { .Ed .El .Pp -The +Some architectures do not implement the .Fn atomic_cmpset -functions are not implemented for the types +functions for the types .Dq Li char , .Dq Li short , .Dq Li 8 , @@ -265,9 +265,9 @@ function also returns despite .Dl *old == *dst . .Pp -The +Some architectures do not implement the .Fn atomic_fcmpset -functions are not implemented for the types +functions for the types .Dq Li char , .Dq Li short , .Dq Li 8 , Modified: head/sys/amd64/include/atomic.h ============================================================================== --- head/sys/amd64/include/atomic.h Wed Mar 22 17:28:53 2017 (r315717) +++ head/sys/amd64/include/atomic.h Wed Mar 22 17:29:04 2017 (r315718) @@ -97,8 +97,13 @@ void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v); \ void atomic_##NAME##_barr_##TYPE(volatile u_##TYPE *p, u_##TYPE v) +int atomic_cmpset_char(volatile u_char *dst, u_char expect, u_char src); +int atomic_cmpset_short(volatile u_short *dst, u_short expect, u_short src); int atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src); int atomic_cmpset_long(volatile u_long *dst, u_long expect, u_long src); +int atomic_fcmpset_char(volatile u_char *dst, u_char *expect, u_char src); +int atomic_fcmpset_short(volatile u_short *dst, u_short *expect, + u_short src); int atomic_fcmpset_int(volatile u_int *dst, u_int *expect, u_int src); int atomic_fcmpset_long(volatile u_long *dst, u_long *expect, u_long src); u_int atomic_fetchadd_int(volatile u_int *p, u_int v); @@ -155,84 +160,61 @@ atomic_##NAME##_barr_##TYPE(volatile u_# struct __hack /* - * Atomic compare and set, used by the mutex functions + * Atomic compare and set, used by the mutex functions. * - * if (*dst == expect) *dst = src (all 32 bit words) + * cmpset: + * if (*dst == expect) + * *dst = src * - * Returns 0 on failure, non-zero on success + * fcmpset: + * if (*dst == *expect) + * *dst = src + * else + * *expect = *dst + * + * Returns 0 on failure, non-zero on success. */ - -static __inline int -atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src) -{ - u_char res; - - __asm __volatile( - " " MPLOCKED " " - " cmpxchgl %3,%1 ; " - " sete %0 ; " - "# atomic_cmpset_int" - : "=q" (res), /* 0 */ - "+m" (*dst), /* 1 */ - "+a" (expect) /* 2 */ - : "r" (src) /* 3 */ - : "memory", "cc"); - return (res); -} - -static __inline int -atomic_cmpset_long(volatile u_long *dst, u_long expect, u_long src) -{ - u_char res; - - __asm __volatile( - " " MPLOCKED " " - " cmpxchgq %3,%1 ; " - " sete %0 ; " - "# atomic_cmpset_long" - : "=q" (res), /* 0 */ - "+m" (*dst), /* 1 */ - "+a" (expect) /* 2 */ - : "r" (src) /* 3 */ - : "memory", "cc"); - return (res); -} - -static __inline int -atomic_fcmpset_int(volatile u_int *dst, u_int *expect, u_int src) -{ - u_char res; - - __asm __volatile( - " " MPLOCKED " " - " cmpxchgl %3,%1 ; " - " sete %0 ; " - "# atomic_fcmpset_int" - : "=r" (res), /* 0 */ - "+m" (*dst), /* 1 */ - "+a" (*expect) /* 2 */ - : "r" (src) /* 3 */ - : "memory", "cc"); - return (res); +#define ATOMIC_CMPSET(TYPE) \ +static __inline int \ +atomic_cmpset_##TYPE(volatile u_##TYPE *dst, u_##TYPE expect, u_##TYPE src) \ +{ \ + u_char res; \ + \ + __asm __volatile( \ + " " MPLOCKED " " \ + " cmpxchg %3,%1 ; " \ + " sete %0 ; " \ + "# atomic_cmpset_" #TYPE " " \ + : "=q" (res), /* 0 */ \ + "+m" (*dst), /* 1 */ \ + "+a" (expect) /* 2 */ \ + : "r" (src) /* 3 */ \ + : "memory", "cc"); \ + return (res); \ +} \ + \ +static __inline int \ +atomic_fcmpset_##TYPE(volatile u_##TYPE *dst, u_##TYPE *expect, u_##TYPE src) \ +{ \ + u_char res; \ + \ + __asm __volatile( \ + " " MPLOCKED " " \ + " cmpxchg %3,%1 ; " \ + " sete %0 ; " \ + "# atomic_fcmpset_" #TYPE " " \ + : "=q" (res), /* 0 */ \ + "+m" (*dst), /* 1 */ \ + "+a" (*expect) /* 2 */ \ + : "r" (src) /* 3 */ \ + : "memory", "cc"); \ + return (res); \ } -static __inline int -atomic_fcmpset_long(volatile u_long *dst, u_long *expect, u_long src) -{ - u_char res; - - __asm __volatile( - " " MPLOCKED " " - " cmpxchgq %3,%1 ; " - " sete %0 ; " - "# atomic_fcmpset_long" - : "=r" (res), /* 0 */ - "+m" (*dst), /* 1 */ - "+a" (*expect) /* 2 */ - : "r" (src) /* 3 */ - : "memory", "cc"); - return (res); -} +ATOMIC_CMPSET(char); +ATOMIC_CMPSET(short); +ATOMIC_CMPSET(int); +ATOMIC_CMPSET(long); /* * Atomically add the value of v to the integer pointed to by p and return @@ -522,6 +504,10 @@ u_long atomic_swap_long(volatile u_long #define atomic_add_rel_char atomic_add_barr_char #define atomic_subtract_acq_char atomic_subtract_barr_char #define atomic_subtract_rel_char atomic_subtract_barr_char +#define atomic_cmpset_acq_char atomic_cmpset_char +#define atomic_cmpset_rel_char atomic_cmpset_char +#define atomic_fcmpset_acq_char atomic_fcmpset_char +#define atomic_fcmpset_rel_char atomic_fcmpset_char #define atomic_set_acq_short atomic_set_barr_short #define atomic_set_rel_short atomic_set_barr_short @@ -531,6 +517,10 @@ u_long atomic_swap_long(volatile u_long #define atomic_add_rel_short atomic_add_barr_short #define atomic_subtract_acq_short atomic_subtract_barr_short #define atomic_subtract_rel_short atomic_subtract_barr_short +#define atomic_cmpset_acq_short atomic_cmpset_short +#define atomic_cmpset_rel_short atomic_cmpset_short +#define atomic_fcmpset_acq_short atomic_fcmpset_short +#define atomic_fcmpset_rel_short atomic_fcmpset_short #define atomic_set_acq_int atomic_set_barr_int #define atomic_set_rel_int atomic_set_barr_int @@ -542,8 +532,8 @@ u_long atomic_swap_long(volatile u_long #define atomic_subtract_rel_int atomic_subtract_barr_int #define atomic_cmpset_acq_int atomic_cmpset_int #define atomic_cmpset_rel_int atomic_cmpset_int -#define atomic_fcmpset_acq_int atomic_fcmpset_int -#define atomic_fcmpset_rel_int atomic_fcmpset_int +#define atomic_fcmpset_acq_int atomic_fcmpset_int +#define atomic_fcmpset_rel_int atomic_fcmpset_int #define atomic_set_acq_long atomic_set_barr_long #define atomic_set_rel_long atomic_set_barr_long @@ -555,8 +545,8 @@ u_long atomic_swap_long(volatile u_long #define atomic_subtract_rel_long atomic_subtract_barr_long #define atomic_cmpset_acq_long atomic_cmpset_long #define atomic_cmpset_rel_long atomic_cmpset_long -#define atomic_fcmpset_acq_long atomic_fcmpset_long -#define atomic_fcmpset_rel_long atomic_fcmpset_long +#define atomic_fcmpset_acq_long atomic_fcmpset_long +#define atomic_fcmpset_rel_long atomic_fcmpset_long #define atomic_readandclear_int(p) atomic_swap_int(p, 0) #define atomic_readandclear_long(p) atomic_swap_long(p, 0) @@ -576,6 +566,12 @@ u_long atomic_swap_long(volatile u_long #define atomic_subtract_rel_8 atomic_subtract_rel_char #define atomic_load_acq_8 atomic_load_acq_char #define atomic_store_rel_8 atomic_store_rel_char +#define atomic_cmpset_8 atomic_cmpset_char +#define atomic_cmpset_acq_8 atomic_cmpset_acq_char +#define atomic_cmpset_rel_8 atomic_cmpset_rel_char +#define atomic_fcmpset_8 atomic_fcmpset_char +#define atomic_fcmpset_acq_8 atomic_fcmpset_acq_char +#define atomic_fcmpset_rel_8 atomic_fcmpset_rel_char /* Operations on 16-bit words. */ #define atomic_set_16 atomic_set_short @@ -592,6 +588,12 @@ u_long atomic_swap_long(volatile u_long #define atomic_subtract_rel_16 atomic_subtract_rel_short #define atomic_load_acq_16 atomic_load_acq_short #define atomic_store_rel_16 atomic_store_rel_short +#define atomic_cmpset_16 atomic_cmpset_short +#define atomic_cmpset_acq_16 atomic_cmpset_acq_short +#define atomic_cmpset_rel_16 atomic_cmpset_rel_short +#define atomic_fcmpset_16 atomic_fcmpset_short +#define atomic_fcmpset_acq_16 atomic_fcmpset_acq_short +#define atomic_fcmpset_rel_16 atomic_fcmpset_rel_short /* Operations on 32-bit double words. */ #define atomic_set_32 atomic_set_int Modified: head/sys/i386/include/atomic.h ============================================================================== --- head/sys/i386/include/atomic.h Wed Mar 22 17:28:53 2017 (r315717) +++ head/sys/i386/include/atomic.h Wed Mar 22 17:29:04 2017 (r315718) @@ -105,7 +105,12 @@ __mbu(void) void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v); \ void atomic_##NAME##_barr_##TYPE(volatile u_##TYPE *p, u_##TYPE v) +int atomic_cmpset_char(volatile u_char *dst, u_char expect, u_char src); +int atomic_cmpset_short(volatile u_short *dst, u_short expect, u_short src); int atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src); +int atomic_fcmpset_char(volatile u_char *dst, u_char *expect, u_char src); +int atomic_fcmpset_short(volatile u_short *dst, u_short *expect, + u_short src); int atomic_fcmpset_int(volatile u_int *dst, u_int *expect, u_int src); u_int atomic_fetchadd_int(volatile u_int *p, u_int v); int atomic_testandset_int(volatile u_int *p, u_int v); @@ -163,48 +168,60 @@ atomic_##NAME##_barr_##TYPE(volatile u_# struct __hack /* - * Atomic compare and set, used by the mutex functions + * Atomic compare and set, used by the mutex functions. * - * if (*dst == expect) *dst = src (all 32 bit words) + * cmpset: + * if (*dst == expect) + * *dst = src * - * Returns 0 on failure, non-zero on success + * fcmpset: + * if (*dst == *expect) + * *dst = src + * else + * *expect = *dst + * + * Returns 0 on failure, non-zero on success. */ - -static __inline int -atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src) -{ - u_char res; - - __asm __volatile( - " " MPLOCKED " " - " cmpxchgl %3,%1 ; " - " sete %0 ; " - "# atomic_cmpset_int" - : "=q" (res), /* 0 */ - "+m" (*dst), /* 1 */ - "+a" (expect) /* 2 */ - : "r" (src) /* 3 */ - : "memory", "cc"); - return (res); +#define ATOMIC_CMPSET(TYPE) \ +static __inline int \ +atomic_cmpset_##TYPE(volatile u_##TYPE *dst, u_##TYPE expect, u_##TYPE src) \ +{ \ + u_char res; \ + \ + __asm __volatile( \ + " " MPLOCKED " " \ + " cmpxchg %3,%1 ; " \ + " sete %0 ; " \ + "# atomic_cmpset_" #TYPE " " \ + : "=q" (res), /* 0 */ \ + "+m" (*dst), /* 1 */ \ + "+a" (expect) /* 2 */ \ + : "r" (src) /* 3 */ \ + : "memory", "cc"); \ + return (res); \ +} \ + \ +static __inline int \ +atomic_fcmpset_##TYPE(volatile u_##TYPE *dst, u_##TYPE *expect, u_##TYPE src) \ +{ \ + u_char res; \ + \ + __asm __volatile( \ + " " MPLOCKED " " \ + " cmpxchg %3,%1 ; " \ + " sete %0 ; " \ + "# atomic_fcmpset_" #TYPE " " \ + : "=q" (res), /* 0 */ \ + "+m" (*dst), /* 1 */ \ + "+a" (*expect) /* 2 */ \ + : "r" (src) /* 3 */ \ + : "memory", "cc"); \ + return (res); \ } -static __inline int -atomic_fcmpset_int(volatile u_int *dst, u_int *expect, u_int src) -{ - u_char res; - - __asm __volatile( - " " MPLOCKED " " - " cmpxchgl %3,%1 ; " - " sete %0 ; " - "# atomic_cmpset_int" - : "=q" (res), /* 0 */ - "+m" (*dst), /* 1 */ - "+a" (*expect) /* 2 */ - : "r" (src) /* 3 */ - : "memory", "cc"); - return (res); -} +ATOMIC_CMPSET(char); +ATOMIC_CMPSET(short); +ATOMIC_CMPSET(int); /* * Atomically add the value of v to the integer pointed to by p and return @@ -654,6 +671,10 @@ u_long atomic_swap_long(volatile u_long #define atomic_add_rel_char atomic_add_barr_char #define atomic_subtract_acq_char atomic_subtract_barr_char #define atomic_subtract_rel_char atomic_subtract_barr_char +#define atomic_cmpset_acq_char atomic_cmpset_char +#define atomic_cmpset_rel_char atomic_cmpset_char +#define atomic_fcmpset_acq_char atomic_fcmpset_char +#define atomic_fcmpset_rel_char atomic_fcmpset_char #define atomic_set_acq_short atomic_set_barr_short #define atomic_set_rel_short atomic_set_barr_short @@ -663,6 +684,10 @@ u_long atomic_swap_long(volatile u_long #define atomic_add_rel_short atomic_add_barr_short #define atomic_subtract_acq_short atomic_subtract_barr_short #define atomic_subtract_rel_short atomic_subtract_barr_short +#define atomic_cmpset_acq_short atomic_cmpset_short +#define atomic_cmpset_rel_short atomic_cmpset_short +#define atomic_fcmpset_acq_short atomic_fcmpset_short +#define atomic_fcmpset_rel_short atomic_fcmpset_short #define atomic_set_acq_int atomic_set_barr_int #define atomic_set_rel_int atomic_set_barr_int @@ -708,6 +733,12 @@ u_long atomic_swap_long(volatile u_long #define atomic_subtract_rel_8 atomic_subtract_rel_char #define atomic_load_acq_8 atomic_load_acq_char #define atomic_store_rel_8 atomic_store_rel_char +#define atomic_cmpset_8 atomic_cmpset_char +#define atomic_cmpset_acq_8 atomic_cmpset_acq_char +#define atomic_cmpset_rel_8 atomic_cmpset_rel_char +#define atomic_fcmpset_8 atomic_fcmpset_char +#define atomic_fcmpset_acq_8 atomic_fcmpset_acq_char +#define atomic_fcmpset_rel_8 atomic_fcmpset_rel_char /* Operations on 16-bit words. */ #define atomic_set_16 atomic_set_short @@ -724,6 +755,12 @@ u_long atomic_swap_long(volatile u_long #define atomic_subtract_rel_16 atomic_subtract_rel_short #define atomic_load_acq_16 atomic_load_acq_short #define atomic_store_rel_16 atomic_store_rel_short +#define atomic_cmpset_16 atomic_cmpset_short +#define atomic_cmpset_acq_16 atomic_cmpset_acq_short +#define atomic_cmpset_rel_16 atomic_cmpset_rel_short +#define atomic_fcmpset_16 atomic_fcmpset_short +#define atomic_fcmpset_acq_16 atomic_fcmpset_acq_short +#define atomic_fcmpset_rel_16 atomic_fcmpset_rel_short /* Operations on 32-bit double words. */ #define atomic_set_32 atomic_set_int From owner-svn-src-head@freebsd.org Wed Mar 22 17:33:59 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F4148D18A49; Wed, 22 Mar 2017 17:33:58 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B285B1E61; Wed, 22 Mar 2017 17:33:58 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MHXvE2023872; Wed, 22 Mar 2017 17:33:57 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MHXvUG023871; Wed, 22 Mar 2017 17:33:57 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201703221733.v2MHXvUG023871@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Wed, 22 Mar 2017 17:33:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315719 - head/sys/compat/linuxkpi/common/include/asm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 17:33:59 -0000 Author: markj Date: Wed Mar 22 17:33:57 2017 New Revision: 315719 URL: https://svnweb.freebsd.org/changeset/base/315719 Log: Extend cmpxchg() to support 8- and 16-bit values, and add xchg(). These are needed to support updated revisions of the DRM code. Reviewed by: hselasky (previous version) MFC after: 2 weeks Modified: head/sys/compat/linuxkpi/common/include/asm/atomic.h Modified: head/sys/compat/linuxkpi/common/include/asm/atomic.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/asm/atomic.h Wed Mar 22 17:29:04 2017 (r315718) +++ head/sys/compat/linuxkpi/common/include/asm/atomic.h Wed Mar 22 17:33:57 2017 (r315719) @@ -28,11 +28,13 @@ * * $FreeBSD$ */ -#ifndef _ASM_ATOMIC_H_ + +#ifndef _ASM_ATOMIC_H_ #define _ASM_ATOMIC_H_ #include #include + #include #define ATOMIC_INIT(x) { .counter = (x) } @@ -158,31 +160,47 @@ atomic_cmpxchg(atomic_t *v, int old, int } #define cmpxchg(ptr, old, new) ({ \ - __typeof(*(ptr)) __ret = (old); \ - CTASSERT(sizeof(__ret) == 4 || sizeof(__ret) == 8); \ - for (;;) { \ - if (sizeof(__ret) == 4) { \ - if (atomic_cmpset_int((volatile int *) \ - (ptr), (old), (new))) \ - break; \ - __ret = atomic_load_acq_int( \ - (volatile int *)(ptr)); \ - if (__ret != (old)) \ - break; \ - } else { \ - if (atomic_cmpset_64( \ - (volatile int64_t *)(ptr), \ - (old), (new))) \ - break; \ - __ret = atomic_load_acq_64( \ - (volatile int64_t *)(ptr)); \ - if (__ret != (old)) \ - break; \ - } \ + __typeof(*(ptr)) __ret; \ + \ + CTASSERT(sizeof(__ret) == 1 || sizeof(__ret) == 2 || \ + sizeof(__ret) == 4 || sizeof(__ret) == 8); \ + \ + __ret = (old); \ + switch (sizeof(__ret)) { \ + case 1: \ + while (!atomic_fcmpset_8((volatile int8_t *)(ptr), \ + (int8_t *)&__ret, (new)) && __ret == (old)) \ + ; \ + break; \ + case 2: \ + while (!atomic_fcmpset_16((volatile int16_t *)(ptr), \ + (int16_t *)&__ret, (new)) && __ret == (old)) \ + ; \ + break; \ + case 4: \ + while (!atomic_fcmpset_32((volatile int32_t *)(ptr), \ + (int32_t *)&__ret, (new)) && __ret == (old)) \ + ; \ + break; \ + case 8: \ + while (!atomic_fcmpset_64((volatile int64_t *)(ptr), \ + (int64_t *)&__ret, (new)) && __ret == (old)) \ + ; \ + break; \ } \ __ret; \ }) +#define cmpxchg_relaxed cmpxchg + +#define xchg(ptr, v) ({ \ + __typeof(*(ptr)) __ret; \ + \ + __ret = *(ptr); \ + *(ptr) = v; \ + __ret; \ +}) + #define LINUX_ATOMIC_OP(op, c_op) \ static inline void atomic_##op(int i, atomic_t *v) \ { \ From owner-svn-src-head@freebsd.org Wed Mar 22 17:37:49 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 183C3D18ABF; Wed, 22 Mar 2017 17:37:49 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DC0C01038; Wed, 22 Mar 2017 17:37:48 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MHbmo3024061; Wed, 22 Mar 2017 17:37:48 GMT (envelope-from cem@FreeBSD.org) Received: (from cem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MHblI5024060; Wed, 22 Mar 2017 17:37:47 GMT (envelope-from cem@FreeBSD.org) Message-Id: <201703221737.v2MHblI5024060@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cem set sender to cem@FreeBSD.org using -f From: Conrad Meyer Date: Wed, 22 Mar 2017 17:37:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315720 - head/lib/libc/gen X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 17:37:49 -0000 Author: cem Date: Wed Mar 22 17:37:47 2017 New Revision: 315720 URL: https://svnweb.freebsd.org/changeset/base/315720 Log: scandir: Fix NULL dereference, uninitialized value use in error case If opendir succeeds but malloc fails, numitems was used uninitialized in error handling under the 'fail' label. If it happened to have a non-zero value, the NULL 'names' was dereferenced. Reported by: Coverity CIDs: 1329566, 1372625 Sponsored by: Dell EMC Isilon Modified: head/lib/libc/gen/scandir.c Modified: head/lib/libc/gen/scandir.c ============================================================================== --- head/lib/libc/gen/scandir.c Wed Mar 22 17:33:57 2017 (r315719) +++ head/lib/libc/gen/scandir.c Wed Mar 22 17:37:47 2017 (r315720) @@ -89,12 +89,12 @@ scandir(const char *dirname, struct dire if ((dirp = opendir(dirname)) == NULL) return(-1); + numitems = 0; arraysz = 32; /* initial estimate of the array size */ names = (struct dirent **)malloc(arraysz * sizeof(struct dirent *)); if (names == NULL) goto fail; - numitems = 0; while ((d = readdir(dirp)) != NULL) { if (select != NULL && !SELECT(d)) continue; /* just selected names */ From owner-svn-src-head@freebsd.org Wed Mar 22 18:13:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DA9E6D17A8D; Wed, 22 Mar 2017 18:13:15 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AA3E41F2F; Wed, 22 Mar 2017 18:13:15 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MIDEBW040922; Wed, 22 Mar 2017 18:13:14 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MIDE6V040921; Wed, 22 Mar 2017 18:13:14 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703221813.v2MIDE6V040921@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 18:13:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315726 - head/usr.bin/diff X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 18:13:16 -0000 Author: ngie Date: Wed Mar 22 18:13:14 2017 New Revision: 315726 URL: https://svnweb.freebsd.org/changeset/base/315726 Log: diff(1): fix SYNOPSIS section noting non-existent option, --no-ignore-case `--no-ignore-case` should be `--no-ignore-file-name-case` per code for compatibility with [g]diff(1). Sponsored by: Dell EMC Isilon Modified: head/usr.bin/diff/diff.1 Modified: head/usr.bin/diff/diff.1 ============================================================================== --- head/usr.bin/diff/diff.1 Wed Mar 22 18:12:48 2017 (r315725) +++ head/usr.bin/diff/diff.1 Wed Mar 22 18:13:14 2017 (r315726) @@ -30,7 +30,7 @@ .\" @(#)diff.1 8.1 (Berkeley) 6/30/93 .\" $FreeBSD$ .\" -.Dd March 19, 2017 +.Dd March 22, 2017 .Dt DIFF 1 .Os .Sh NAME @@ -44,7 +44,7 @@ .Fl n | q | u .Oc .Op Fl -ignore-case -.Op Fl -no-ignore-case +.Op Fl -no-ignore-file-name-case .Op Fl -normal .Op Fl -strip-trailing-cr .Op Fl -tabsize @@ -56,7 +56,7 @@ .Op Fl I Ar pattern .Op Fl L Ar label .Op Fl -ignore-case -.Op Fl -no-ignore-case +.Op Fl -no-ignore-file-name-case .Op Fl -normal .Op Fl -strip-trailing-cr .Op Fl -tabsize @@ -66,7 +66,7 @@ .Op Fl abdiltw .Op Fl I Ar pattern .Op Fl -ignore-case -.Op Fl -no-ignore-case +.Op Fl -no-ignore-file-name-case .Op Fl -normal .Op Fl -strip-trailing-cr .Op Fl -tabsize @@ -77,7 +77,7 @@ .Op Fl I Ar pattern .Op Fl L Ar label .Op Fl -ignore-case -.Op Fl -no-ignore-case +.Op Fl -no-ignore-file-name-case .Op Fl -normal .Op Fl -strip-trailing-cr .Op Fl -tabsize @@ -90,7 +90,7 @@ .Fl n | q | u .Oc .Op Fl -ignore-case -.Op Fl -no-ignore-case +.Op Fl -no-ignore-file-name-case .Op Fl -normal .Op Fl -strip-trailing-cr .Op Fl -tabsize From owner-svn-src-head@freebsd.org Wed Mar 22 18:14:57 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1F82FD17B8A; Wed, 22 Mar 2017 18:14:57 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E0AF21154; Wed, 22 Mar 2017 18:14:56 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MIEtlX041023; Wed, 22 Mar 2017 18:14:55 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MIEtNM041022; Wed, 22 Mar 2017 18:14:55 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201703221814.v2MIEtNM041022@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Wed, 22 Mar 2017 18:14:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315727 - head/lib/librtld_db X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 18:14:57 -0000 Author: markj Date: Wed Mar 22 18:14:55 2017 New Revision: 315727 URL: https://svnweb.freebsd.org/changeset/base/315727 Log: Avoid double-closing an fd if elf_begin() fails. Reported by: Miles Ohlrich MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/lib/librtld_db/rtld_db.c Modified: head/lib/librtld_db/rtld_db.c ============================================================================== --- head/lib/librtld_db/rtld_db.c Wed Mar 22 18:13:14 2017 (r315726) +++ head/lib/librtld_db/rtld_db.c Wed Mar 22 18:14:55 2017 (r315727) @@ -275,10 +275,8 @@ rtld_syms(rd_agent_t *rdap, const char * if (elf_version(EV_CURRENT) == EV_NONE) goto err; e = elf_begin(fd, ELF_C_READ, NULL); - if (e == NULL) { - close(fd); + if (e == NULL) goto err; - } scn = NULL; while ((scn = elf_nextscn(e, scn)) != NULL) { From owner-svn-src-head@freebsd.org Wed Mar 22 18:31:46 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 223D8D183DF; Wed, 22 Mar 2017 18:31:46 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E375C1243; Wed, 22 Mar 2017 18:31:45 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MIVilP048939; Wed, 22 Mar 2017 18:31:44 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MIVivp048938; Wed, 22 Mar 2017 18:31:44 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201703221831.v2MIVivp048938@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Wed, 22 Mar 2017 18:31:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315728 - head/lib/libproc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 18:31:46 -0000 Author: markj Date: Wed Mar 22 18:31:44 2017 New Revision: 315728 URL: https://svnweb.freebsd.org/changeset/base/315728 Log: Avoid accessing an uninitialized variable when vfork() fails. Reported by: Miles Ohlrich MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/lib/libproc/proc_create.c Modified: head/lib/libproc/proc_create.c ============================================================================== --- head/lib/libproc/proc_create.c Wed Mar 22 18:14:55 2017 (r315727) +++ head/lib/libproc/proc_create.c Wed Mar 22 18:31:44 2017 (r315728) @@ -178,8 +178,7 @@ proc_create(const char *file, char * con void *child_arg, struct proc_handle **pphdl) { struct proc_handle *phdl; - int error = 0; - int status; + int error, status; pid_t pid; if (elf_version(EV_CURRENT) == EV_NONE) @@ -217,16 +216,17 @@ proc_create(const char *file, char * con /* Check for an unexpected status. */ if (!WIFSTOPPED(status)) { - error = errno; + error = EBUSY; DPRINTFX("ERROR: child process %d status 0x%x", pid, status); goto bad; - } else - phdl->status = PS_STOP; - } + } + phdl->status = PS_STOP; + bad: - if (error && phdl != NULL) { - proc_free(phdl); - phdl = NULL; + if (error != 0 && phdl != NULL) { + proc_free(phdl); + phdl = NULL; + } } *pphdl = phdl; return (error); From owner-svn-src-head@freebsd.org Wed Mar 22 18:33:30 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 68EC2D18471; Wed, 22 Mar 2017 18:33:30 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 389CD1488; Wed, 22 Mar 2017 18:33:30 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MIXTpX049730; Wed, 22 Mar 2017 18:33:29 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MIXTQk049729; Wed, 22 Mar 2017 18:33:29 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201703221833.v2MIXTQk049729@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Wed, 22 Mar 2017 18:33:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315729 - head/lib/libproc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 18:33:30 -0000 Author: markj Date: Wed Mar 22 18:33:29 2017 New Revision: 315729 URL: https://svnweb.freebsd.org/changeset/base/315729 Log: Add initializations missed in r315728. X-MFC With: r315728 Modified: head/lib/libproc/proc_create.c Modified: head/lib/libproc/proc_create.c ============================================================================== --- head/lib/libproc/proc_create.c Wed Mar 22 18:31:44 2017 (r315728) +++ head/lib/libproc/proc_create.c Wed Mar 22 18:33:29 2017 (r315729) @@ -184,6 +184,9 @@ proc_create(const char *file, char * con if (elf_version(EV_CURRENT) == EV_NONE) return (ENOENT); + error = 0; + phdl = NULL; + /* Fork a new process. */ if ((pid = vfork()) == -1) error = errno; From owner-svn-src-head@freebsd.org Wed Mar 22 18:45:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3B2CBD18890; Wed, 22 Mar 2017 18:45:15 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0B0DA1036; Wed, 22 Mar 2017 18:45:14 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MIjEBT053979; Wed, 22 Mar 2017 18:45:14 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MIjEaU053978; Wed, 22 Mar 2017 18:45:14 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201703221845.v2MIjEaU053978@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 22 Mar 2017 18:45:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315732 - head/sys/sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 18:45:15 -0000 Author: ed Date: Wed Mar 22 18:45:13 2017 New Revision: 315732 URL: https://svnweb.freebsd.org/changeset/base/315732 Log: Add forward declaration for struct vnode. The coredump() function provided by this header file has struct vnode * as an argument. MFC after: 1 week Modified: head/sys/sys/imgact_elf.h Modified: head/sys/sys/imgact_elf.h ============================================================================== --- head/sys/sys/imgact_elf.h Wed Mar 22 18:35:48 2017 (r315731) +++ head/sys/sys/imgact_elf.h Wed Mar 22 18:45:13 2017 (r315732) @@ -39,6 +39,7 @@ struct image_params; struct thread; +struct vnode; /* * Structure used to pass information from the loader to the From owner-svn-src-head@freebsd.org Wed Mar 22 19:00:43 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6266FD18BB0; Wed, 22 Mar 2017 19:00:43 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3366C1B61; Wed, 22 Mar 2017 19:00:43 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MJ0gjo058682; Wed, 22 Mar 2017 19:00:42 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MJ0gC8058678; Wed, 22 Mar 2017 19:00:42 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201703221900.v2MJ0gC8058678@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Wed, 22 Mar 2017 19:00:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315733 - in head: include lib/libc/gen libexec/getty X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:00:43 -0000 Author: imp Date: Wed Mar 22 19:00:41 2017 New Revision: 315733 URL: https://svnweb.freebsd.org/changeset/base/315733 Log: Impelemnt ttys onifexists in init. Implement a new init(8) option in /etc/ttys. If this option is present on the entry in /etc/ttys, the entry will be active if and only if it exists. If the name starts with a '/', it will be considered an absolute path. If not, it will be a path relative to /dev. This allows one to turn off video console getty that aren't present (while running a getty on them even when they aren't the system console). Likewise with serial ports. It differs from onifconsole in only requiring the device exist rather than it be listed as one of the system consoles. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D10037 Modified: head/include/ttyent.h head/lib/libc/gen/getttyent.c head/libexec/getty/ttys.5 Modified: head/include/ttyent.h ============================================================================== --- head/include/ttyent.h Wed Mar 22 18:45:13 2017 (r315732) +++ head/include/ttyent.h Wed Mar 22 19:00:41 2017 (r315733) @@ -38,6 +38,7 @@ #define _TTYS_OFF "off" #define _TTYS_ON "on" #define _TTYS_ONIFCONSOLE "onifconsole" +#define _TTYS_ONIFEXISTS "onifexists" #define _TTYS_SECURE "secure" #define _TTYS_INSECURE "insecure" #define _TTYS_WINDOW "window" Modified: head/lib/libc/gen/getttyent.c ============================================================================== --- head/lib/libc/gen/getttyent.c Wed Mar 22 18:45:13 2017 (r315732) +++ head/lib/libc/gen/getttyent.c Wed Mar 22 19:00:41 2017 (r315733) @@ -97,6 +97,26 @@ done: return (0); } +static int +auto_exists_status(const char *ty_name) +{ + struct stat sb; + char *dev; + int rv; + + rv = 0; + if (*ty_name == '/') + asprintf(&dev, "%s", ty_name); + else + asprintf(&dev, "/dev/%s", ty_name); + if (dev == NULL) + return 0; + if (stat(dev, &sb) == 0) + rv = TTY_ON; + free(dev); + return (rv); +} + struct ttyent * getttyent(void) { @@ -161,6 +181,8 @@ getttyent(void) tty.ty_status |= TTY_ON; else if (scmp(_TTYS_ONIFCONSOLE)) tty.ty_status |= auto_tty_status(tty.ty_name); + else if (scmp(_TTYS_ONIFEXISTS)) + tty.ty_status |= auto_exists_status(tty.ty_name); else if (scmp(_TTYS_SECURE)) tty.ty_status |= TTY_SECURE; else if (scmp(_TTYS_INSECURE)) Modified: head/libexec/getty/ttys.5 ============================================================================== --- head/libexec/getty/ttys.5 Wed Mar 22 18:45:13 2017 (r315732) +++ head/libexec/getty/ttys.5 Wed Mar 22 19:00:41 2017 (r315733) @@ -28,7 +28,7 @@ .\" from: @(#)ttys.5 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" " -.Dd March 9, 2014 +.Dd March 16, 2017 .Dt TTYS 5 .Os .Sh NAME @@ -105,6 +105,12 @@ should (should not) execute the command ``onifconsole'' will cause this line to be enabled if and only if it is an active kernel console device (it is equivalent to ``on'' in this case). +The flag ``onifexists'' will cause this line to be enabled if and only +if the name exists. +If the name starts with a ``/'', it will be considered an absolute +path. +Otherwise, it is considered a path relative to +.Pa /dev . The flag ``secure'' (if the console is enabled) allows users with a uid of 0 to login on this line. From owner-svn-src-head@freebsd.org Wed Mar 22 19:08:57 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3B33AD18D66; Wed, 22 Mar 2017 19:08:57 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "mout.gmx.net", Issuer "TeleSec ServerPass DE-2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A4C9C105F; Wed, 22 Mar 2017 19:08:56 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from thor.intern.walstatt.dynvpn.de ([85.179.167.156]) by mail.gmx.com (mrgmx002 [212.227.17.190]) with ESMTPSA (Nemesis) id 0MfEMs-1cWM9V1UC2-00OsqM; Wed, 22 Mar 2017 20:08:47 +0100 Date: Wed, 22 Mar 2017 20:08:41 +0100 From: "O. Hartmann" To: Warner Losh Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315733 - in head: include lib/libc/gen libexec/getty Message-ID: <20170322200841.52e2f892@thor.intern.walstatt.dynvpn.de> In-Reply-To: <201703221900.v2MJ0gC8058678@repo.freebsd.org> References: <201703221900.v2MJ0gC8058678@repo.freebsd.org> Organization: WALSTATT User-Agent: OutScare 3.1415926 X-Operating-System: ImNotAnOperatingSystem 3.141592527 MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/6oySx_E9B.oO88.dD3uDEkO"; protocol="application/pgp-signature" X-Provags-ID: V03:K0:/s0JRSBWIKz+UNxq9STR5H+kpzFTW+wWyujZf0h9kMaxnBlH3L5 JOB7sQzj9pOZza+nDQyE8Y0B78x9WGUANAwiVutXmDeU14Au0affMX23XxYVKLy6SwZYE6d zIAKiDeyySjKg+QXuXk2iJ7PBmkA42SK4Omz/2BNtZzPZAmpqSY8x5y7AzM4ls5NmHnbxDR yQ6CgetcwFM/JR7JEOxhA== X-UI-Out-Filterresults: notjunk:1;V01:K0:2QG7pKEx2ZM=:7pgmPOzfxBsYvB77qoesNg 0m+aYeksZk8Dtr7Yf95Ec1WLGJlvqWzCVKie4lPKBMOUs2dbN1C2L5/YMs7Ngw3F+KxtD9coy aCvWou/Rleil6dBtiFEXGKxosCQxcVKv3sVY5aiTScjQ0C+yuM2+UhinNynSaLLX1GVzsbxcB k0CzygHcxi+bViKdjNnNjohhvsd5Lm5A4JourenqpTpGCCyuFI2/yXlnRimr5sktaHQIzn3Oz 2XZR91lGrZSjugZl8tcBJ3swT9PDwDq9DRINuyFPyfaavSrqfX1S51LTrWeweFz+pUstx76mU 3bkOC9tEcUEP7RMkVGeXuxtVPxsLxbgU6f4aaOtHdP8jaxXKuKAZtbnVsDuZc6k1L4ZtDvcFf z59JF6p6QzJiy89bFFkJhkDKwtF8C2j1HVSld7COHmZqZ7Gf6RADxg26MwnzJELxE6chnho8k NgoMq3oAFnGxJkfttfSJFPfzIFbB2Q7Q7KMnV8tgEqARls8oOAjXLcoDzmR9P3Emw+YYPKUAS GnzBGIpRiiSc765i4l/nAz8Fx4h+FXGWFiaFiBXbDfnPm5zso9MNolTlO9nRcq2TQPYwDZ0zr VOLIB3ysUeduTArNrZfXizT7tpGqeDYPIbpfhs7NbylsTQS2KwGO2LBKef4mP5H6A6tHN7kK4 cNml+KJDftZ2b0R004JKStV2kiPSlEM++QDKCG+5VWiarR9BOoTrjajyo8SKXPeidebw8Xkqf kaaIYpgRv8HSH4pY177dWppO22gJOAKRuXARvk/+lV09ACGIgWW0wuBA3t8= X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:08:57 -0000 --Sig_/6oySx_E9B.oO88.dD3uDEkO Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Am Wed, 22 Mar 2017 19:00:42 +0000 (UTC) Warner Losh schrieb: > Author: imp > Date: Wed Mar 22 19:00:41 2017 > New Revision: 315733 > URL: https://svnweb.freebsd.org/changeset/base/315733 >=20 > Log: > Impelemnt ttys onifexists in init. > =20 > Implement a new init(8) option in /etc/ttys. If this option is present > on the entry in /etc/ttys, the entry will be active if and only if it > exists. If the name starts with a '/', it will be considered an > absolute path. If not, it will be a path relative to /dev. > =20 > This allows one to turn off video console getty that aren't present > (while running a getty on them even when they aren't the system > console). Likewise with serial ports. > =20 > It differs from onifconsole in only requiring the device exist rather > than it be listed as one of the system consoles. > =20 > Sponsored by: Netflix > Differential Revision: https://reviews.freebsd.org/D10037 >=20 > Modified: > head/include/ttyent.h > head/lib/libc/gen/getttyent.c > head/libexec/getty/ttys.5 >=20 > Modified: head/include/ttyent.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/include/ttyent.h Wed Mar 22 18:45:13 2017 (r315732) > +++ head/include/ttyent.h Wed Mar 22 19:00:41 2017 (r315733) > @@ -38,6 +38,7 @@ > #define _TTYS_OFF "off" > #define _TTYS_ON "on" > #define _TTYS_ONIFCONSOLE "onifconsole" > +#define _TTYS_ONIFEXISTS "onifexists" > #define _TTYS_SECURE "secure" > #define _TTYS_INSECURE "insecure" > #define _TTYS_WINDOW "window" >=20 > Modified: head/lib/libc/gen/getttyent.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/lib/libc/gen/getttyent.c Wed Mar 22 18:45:13 2017 (r315732) > +++ head/lib/libc/gen/getttyent.c Wed Mar 22 19:00:41 2017 (r315733) > @@ -97,6 +97,26 @@ done: > return (0); > } > =20 > +static int > +auto_exists_status(const char *ty_name) > +{ > + struct stat sb; > + char *dev; > + int rv; > + > + rv =3D 0; > + if (*ty_name =3D=3D '/') > + asprintf(&dev, "%s", ty_name); > + else > + asprintf(&dev, "/dev/%s", ty_name); > + if (dev =3D=3D NULL) > + return 0; > + if (stat(dev, &sb) =3D=3D 0) > + rv =3D TTY_ON; > + free(dev); > + return (rv); > +} > + > struct ttyent * > getttyent(void) > { > @@ -161,6 +181,8 @@ getttyent(void) > tty.ty_status |=3D TTY_ON; > else if (scmp(_TTYS_ONIFCONSOLE)) > tty.ty_status |=3D auto_tty_status(tty.ty_name); > + else if (scmp(_TTYS_ONIFEXISTS)) > + tty.ty_status |=3D auto_exists_status(tty.ty_name); > else if (scmp(_TTYS_SECURE)) > tty.ty_status |=3D TTY_SECURE; > else if (scmp(_TTYS_INSECURE)) >=20 > Modified: head/libexec/getty/ttys.5 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/libexec/getty/ttys.5 Wed Mar 22 18:45:13 2017 (r315732) > +++ head/libexec/getty/ttys.5 Wed Mar 22 19:00:41 2017 (r315733) > @@ -28,7 +28,7 @@ > .\" from: @(#)ttys.5 8.1 (Berkeley) 6/4/93 > .\" $FreeBSD$ > .\" " > -.Dd March 9, 2014 > +.Dd March 16, 2017 > .Dt TTYS 5 > .Os > .Sh NAME > @@ -105,6 +105,12 @@ should (should not) execute the command=20 > ``onifconsole'' will cause this line to be enabled if and only if it is > an active kernel console device (it is equivalent to ``on'' in this > case). > +The flag ``onifexists'' will cause this line to be enabled if and only > +if the name exists. > +If the name starts with a ``/'', it will be considered an absolute > +path. > +Otherwise, it is considered a path relative to > +.Pa /dev . > The flag ``secure'' (if the console is enabled) allows users with a > uid of 0 to login on > this line. > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org" Breaks buildworld: [...] /usr/src/lib/libc/gen/getttyent.c:114:6: warning: implicit declaration of f= unction 'stat' is invalid in C99 [-Wimplicit-function-declaration] if (stat(dev, &sb) =3D= =3D 0) ^ 1 warning and 1 error generated. *** [getttyent.pico] Error code 1 make[4]: stopped in /usr/src/lib/libc Regards, oh --=20 O. Hartmann Ich widerspreche der Nutzung oder =C3=9Cbermittlung meiner Daten f=C3=BCr Werbezwecke oder f=C3=BCr die Markt- oder Meinungsforschung (=C2=A7 28 Abs.= 4 BDSG). --Sig_/6oySx_E9B.oO88.dD3uDEkO Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWNLLuQAKCRDS528fyFhY lFOdAf4m0abghkRBcwyXV23mc2Sveqsf6cOeu5qrb2qvQLsr458P3T6689ugQvKo L9GYN8u5U2njcPsg2IcE+jUR5OTtAgCg4RSEeiSh6Tb2Ve/bSp9/6wsjY5GBbrI3 dK1k9I94hHhCbq760iANWKddRkH35MtsNACUz4e5Di0Bdb95RS5E =i2Eh -----END PGP SIGNATURE----- --Sig_/6oySx_E9B.oO88.dD3uDEkO-- From owner-svn-src-head@freebsd.org Wed Mar 22 19:17:14 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7DA42D180FF; Wed, 22 Mar 2017 19:17:14 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4D5241A1F; Wed, 22 Mar 2017 19:17:14 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MJHDLF067329; Wed, 22 Mar 2017 19:17:13 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MJHDb0067328; Wed, 22 Mar 2017 19:17:13 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703221917.v2MJHDb0067328@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 19:17:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315734 - head/lib/libc/gen X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:17:14 -0000 Author: ngie Date: Wed Mar 22 19:17:13 2017 New Revision: 315734 URL: https://svnweb.freebsd.org/changeset/base/315734 Log: style(9): sort #includes MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/lib/libc/gen/getttyent.c Modified: head/lib/libc/gen/getttyent.c ============================================================================== --- head/lib/libc/gen/getttyent.c Wed Mar 22 19:00:41 2017 (r315733) +++ head/lib/libc/gen/getttyent.c Wed Mar 22 19:17:13 2017 (r315734) @@ -33,14 +33,14 @@ static char sccsid[] = "@(#)getttyent.c #include __FBSDID("$FreeBSD$"); -#include +#include +#include + +#include #include #include -#include #include - -#include -#include +#include static char zapchar; static FILE *tf; From owner-svn-src-head@freebsd.org Wed Mar 22 19:18:48 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6E72AD181C0; Wed, 22 Mar 2017 19:18:48 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 493B01BDD; Wed, 22 Mar 2017 19:18:48 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MJIlvg067426; Wed, 22 Mar 2017 19:18:47 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MJIl3a067425; Wed, 22 Mar 2017 19:18:47 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201703221918.v2MJIl3a067425@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Wed, 22 Mar 2017 19:18:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315735 - head/sys/cam X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:18:48 -0000 Author: imp Date: Wed Mar 22 19:18:47 2017 New Revision: 315735 URL: https://svnweb.freebsd.org/changeset/base/315735 Log: Implement moving SD. From the paper "Incremental calculation of weighted mean and variance" by Tony Finch Februrary 2009, retrieved from http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf converted to use shifting. Modified: head/sys/cam/cam_iosched.c Modified: head/sys/cam/cam_iosched.c ============================================================================== --- head/sys/cam/cam_iosched.c Wed Mar 22 19:17:13 2017 (r315734) +++ head/sys/cam/cam_iosched.c Wed Mar 22 19:18:47 2017 (r315735) @@ -93,6 +93,7 @@ SYSCTL_INT(_kern_cam, OID_AUTO, do_dynam * For a brief intro: https://en.wikipedia.org/wiki/Moving_average * * [*] Steal from the load average code and many other places. + * Note: See computation of EMA and EMVAR for acceptable ranges of alpha. */ static int alpha_bits = 9; TUNABLE_INT("kern.cam.iosched_alpha_bits", &alpha_bits); @@ -226,7 +227,7 @@ struct iop_stats { */ /* Exp Moving Average, see alpha_bits for more details */ sbintime_t ema; - sbintime_t emss; /* Exp Moving sum of the squares */ + sbintime_t emvar; sbintime_t sd; /* Last computed sd */ uint32_t state_flags; @@ -755,8 +756,7 @@ cam_iosched_iop_stats_init(struct cam_io ios->queued = 0; ios->total = 0; ios->ema = 0; - ios->emss = 0; - ios->sd = 0; + ios->emvar = 0; ios->softc = isc; } @@ -897,13 +897,9 @@ cam_iosched_iop_stats_sysctl_init(struct &ios->ema, "Fast Exponentially Weighted Moving Average"); SYSCTL_ADD_UQUAD(ctx, n, - OID_AUTO, "emss", CTLFLAG_RD, - &ios->emss, - "Fast Exponentially Weighted Moving Sum of Squares (maybe wrong)"); - SYSCTL_ADD_UQUAD(ctx, n, - OID_AUTO, "sd", CTLFLAG_RD, - &ios->sd, - "Estimated SD for fast ema (may be wrong)"); + OID_AUTO, "emvar", CTLFLAG_RD, + &ios->emvar, + "Fast Exponentially Weighted Moving Variance"); SYSCTL_ADD_INT(ctx, n, OID_AUTO, "pending", CTLFLAG_RD, @@ -1523,35 +1519,6 @@ isqrt64(uint64_t val) return res; } -/* - * a and b are 32.32 fixed point stored in a 64-bit word. - * Let al and bl be the .32 part of a and b. - * Let ah and bh be the 32 part of a and b. - * R is the radix and is 1 << 32 - * - * a * b - * (ah + al / R) * (bh + bl / R) - * ah * bh + (al * bh + ah * bl) / R + al * bl / R^2 - * - * After multiplicaiton, we have to renormalize by multiply by - * R, so we wind up with - * ah * bh * R + al * bh + ah * bl + al * bl / R - * which turns out to be a very nice way to compute this value - * so long as ah and bh are < 65536 there's no loss of high bits - * and the low order bits are below the threshold of caring for - * this application. - */ -static uint64_t -mul(uint64_t a, uint64_t b) -{ - uint64_t al, ah, bl, bh; - al = a & 0xffffffff; - ah = a >> 32; - bl = b & 0xffffffff; - bh = b >> 32; - return ((ah * bh) << 32) + al * bh + ah * bl + ((al * bl) >> 32); -} - static sbintime_t latencies[] = { SBT_1MS << 0, SBT_1MS << 1, @@ -1569,8 +1536,7 @@ static sbintime_t latencies[] = { static void cam_iosched_update(struct iop_stats *iop, sbintime_t sim_latency) { - sbintime_t y, yy; - uint64_t var; + sbintime_t y, deltasq, delta; int i; /* @@ -1591,42 +1557,61 @@ cam_iosched_update(struct iop_stats *iop * (2 ^ -alpha_bits). For more info see the NIST statistical * handbook. * - * ema_t = y_t * alpha + ema_t-1 * (1 - alpha) + * ema_t = y_t * alpha + ema_t-1 * (1 - alpha) [nist] + * ema_t = y_t * alpha + ema_t-1 - alpha * ema_t-1 + * ema_t = alpha * y_t - alpha * ema_t-1 + ema_t-1 * alpha = 1 / (1 << alpha_bits) + * sub e == ema_t-1, b == 1/alpha (== 1 << alpha_bits), d == y_t - ema_t-1 + * = y_t/b - e/b + be/b + * = (y_t - e + be) / b + * = (e + d) / b * * Since alpha is a power of two, we can compute this w/o any mult or * division. + * + * Variance can also be computed. Usually, it would be expressed as follows: + * diff_t = y_t - ema_t-1 + * emvar_t = (1 - alpha) * (emavar_t-1 + diff_t^2 * alpha) + * = emavar_t-1 - alpha * emavar_t-1 + delta_t^2 * alpha - (delta_t * alpha)^2 + * sub b == 1/alpha (== 1 << alpha_bits), e == emavar_t-1, d = delta_t^2 + * = e - e/b + dd/b + dd/bb + * = (bbe - be + bdd + dd) / bb + * = (bbe + b(dd-e) + dd) / bb (which is expanded below bb = 1<<(2*alpha_bits)) + */ + /* + * XXX possible numeric issues + * o We assume right shifted integers do the right thing, since that's + * implementation defined. You can change the right shifts to / (1LL << alpha). + * o alpha_bits = 9 gives ema ceiling of 23 bits of seconds for ema and 14 bits + * for emvar. This puts a ceiling of 13 bits on alpha since we need a + * few tens of seconds of representation. + * o We mitigate alpha issues by never setting it too high. */ y = sim_latency; - iop->ema = (y + (iop->ema << alpha_bits) - iop->ema) >> alpha_bits; - - yy = mul(y, y); - iop->emss = (yy + (iop->emss << alpha_bits) - iop->emss) >> alpha_bits; + delta = (y - iop->ema); /* d */ + iop->ema = ((iop->ema << alpha_bits) + delta) >> alpha_bits; /* - * s_1 = sum of data - * s_2 = sum of data * data - * ema ~ mean (or s_1 / N) - * emss ~ s_2 / N - * - * sd = sqrt((N * s_2 - s_1 ^ 2) / (N * (N - 1))) - * sd = sqrt((N * s_2 / N * (N - 1)) - (s_1 ^ 2 / (N * (N - 1)))) - * - * N ~ 2 / alpha - 1 - * alpha < 1 / 16 (typically much less) - * N > 31 --> N large so N * (N - 1) is approx N * N - * - * substituting and rearranging: - * sd ~ sqrt(s_2 / N - (s_1 / N) ^ 2) - * ~ sqrt(emss - ema ^ 2); - * which is the formula used here to get a decent estimate of sd which - * we use to detect outliers. Note that when first starting up, it - * takes a while for emss sum of squares estimator to converge on a - * good value. during this time, it can be less than ema^2. We - * compute a sd of 0 in that case, and ignore outliers. - */ - var = iop->emss - mul(iop->ema, iop->ema); - iop->sd = (int64_t)var < 0 ? 0 : isqrt64(var); + * Were we to naively plow ahead at this point, we wind up with many numerical + * issues making any SD > ~3ms unreliable. So, we shift right by 12. This leaves + * us with microsecond level precision in the input, so the same in the + * output. It means we can't overflow deltasq unless delta > 4k seconds. It + * also means that emvar can be up 46 bits 40 of which are fraction, which + * gives us a way to measure up to ~8s in the SD before the computation goes + * unstable. Even the worst hard disk rarely has > 1s service time in the + * drive. It does mean we have to shift left 12 bits after taking the + * square root to compute the actual standard deviation estimate. This loss of + * precision is preferable to needing int128 types to work. The above numbers + * assume alpha=9. 10 or 11 are ok, but we start to run into issues at 12, + * so 12 or 13 is OK for EMA, EMVAR and SD will be wrong in those cases. + */ + delta >>= 12; + deltasq = delta * delta; /* dd */ + iop->emvar = ((iop->emvar << (2 * alpha_bits)) + /* bbe */ + ((deltasq - iop->emvar) << alpha_bits) + /* b(dd-e) */ + deltasq) /* dd */ + >> (2 * alpha_bits); /* div bb */ + iop->sd = (sbintime_t)isqrt64((uint64_t)iop->emvar) << 12; } static void From owner-svn-src-head@freebsd.org Wed Mar 22 19:20:40 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E62D2D18272; Wed, 22 Mar 2017 19:20:40 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A52681D8D; Wed, 22 Mar 2017 19:20:40 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MJKdb5067572; Wed, 22 Mar 2017 19:20:39 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MJKdIt067568; Wed, 22 Mar 2017 19:20:39 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201703221920.v2MJKdIt067568@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Wed, 22 Mar 2017 19:20:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315736 - in head/sys/compat: cloudabi cloudabi32 cloudabi64 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:20:41 -0000 Author: ed Date: Wed Mar 22 19:20:39 2017 New Revision: 315736 URL: https://svnweb.freebsd.org/changeset/base/315736 Log: Make file descriptor passing for CloudABI's recvmsg() work. Similar to the change for sendmsg(), create a pointer size independent implementation of recvmsg() and let cloudabi32 and cloudabi64 call into it. In case userspace requests one or more file descriptors, call kern_recvit() in such a way that we get the control message headers in an mbuf. Iterate over all of the headers and copy the file descriptors to userspace. Modified: head/sys/compat/cloudabi/cloudabi_sock.c head/sys/compat/cloudabi/cloudabi_util.h head/sys/compat/cloudabi32/cloudabi32_sock.c head/sys/compat/cloudabi64/cloudabi64_sock.c Modified: head/sys/compat/cloudabi/cloudabi_sock.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_sock.c Wed Mar 22 19:18:47 2017 (r315735) +++ head/sys/compat/cloudabi/cloudabi_sock.c Wed Mar 22 19:20:39 2017 (r315736) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2015 Nuxi, https://nuxi.nl/ + * Copyright (c) 2015-2017 Nuxi, https://nuxi.nl/ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -50,7 +50,7 @@ __FBSDID("$FreeBSD$"); #include /* Converts FreeBSD's struct sockaddr to CloudABI's cloudabi_sockaddr_t. */ -void +static void cloudabi_convert_sockaddr(const struct sockaddr *sa, socklen_t sal, cloudabi_sockaddr_t *rsa) { @@ -247,6 +247,81 @@ cloudabi_sys_sock_stat_get(struct thread } int +cloudabi_sock_recv(struct thread *td, cloudabi_fd_t fd, struct iovec *data, + size_t datalen, cloudabi_fd_t *fds, size_t fdslen, + cloudabi_msgflags_t flags, size_t *rdatalen, size_t *rfdslen, + cloudabi_sockaddr_t *peername, cloudabi_msgflags_t *rflags) +{ + struct sockaddr_storage ss; + struct msghdr hdr = { + .msg_name = &ss, + .msg_namelen = sizeof(ss), + .msg_iov = data, + .msg_iovlen = datalen, + }; + struct mbuf *control; + int error; + + /* Convert flags. */ + if (flags & CLOUDABI_MSG_PEEK) + hdr.msg_flags |= MSG_PEEK; + if (flags & CLOUDABI_MSG_WAITALL) + hdr.msg_flags |= MSG_WAITALL; + + control = NULL; + error = kern_recvit(td, fd, &hdr, UIO_SYSSPACE, + fdslen > 0 ? &control : NULL); + if (error != 0) + return (error); + + /* Convert return values. */ + *rdatalen = td->td_retval[0]; + td->td_retval[0] = 0; + *rfdslen = 0; + cloudabi_convert_sockaddr((struct sockaddr *)&ss, + MIN(hdr.msg_namelen, sizeof(ss)), peername); + *rflags = 0; + if (hdr.msg_flags & MSG_EOR) + *rflags |= CLOUDABI_MSG_EOR; + if (hdr.msg_flags & MSG_TRUNC) + *rflags |= CLOUDABI_MSG_TRUNC; + + /* Extract file descriptors from SCM_RIGHTS messages. */ + if (control != NULL) { + struct cmsghdr *chdr; + + hdr.msg_control = mtod(control, void *); + hdr.msg_controllen = control->m_len; + for (chdr = CMSG_FIRSTHDR(&hdr); chdr != NULL; + chdr = CMSG_NXTHDR(&hdr, chdr)) { + if (chdr->cmsg_level == SOL_SOCKET && + chdr->cmsg_type == SCM_RIGHTS) { + size_t nfds; + + nfds = (chdr->cmsg_len - CMSG_LEN(0)) / + sizeof(int); + if (nfds > fdslen) { + /* Unable to store file descriptors. */ + nfds = fdslen; + *rflags |= CLOUDABI_MSG_CTRUNC; + } + error = copyout(CMSG_DATA(chdr), fds, + nfds * sizeof(int)); + if (error != 0) { + m_free(control); + return (error); + } + fds += nfds; + fdslen -= nfds; + *rfdslen += nfds; + } + } + m_free(control); + } + return (0); +} + +int cloudabi_sock_send(struct thread *td, cloudabi_fd_t fd, struct iovec *data, size_t datalen, const cloudabi_fd_t *fds, size_t fdslen, cloudabi_msgflags_t flags, size_t *rdatalen) Modified: head/sys/compat/cloudabi/cloudabi_util.h ============================================================================== --- head/sys/compat/cloudabi/cloudabi_util.h Wed Mar 22 19:18:47 2017 (r315735) +++ head/sys/compat/cloudabi/cloudabi_util.h Wed Mar 22 19:20:39 2017 (r315736) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2015 Nuxi, https://nuxi.nl/ + * Copyright (c) 2015-2017 Nuxi, https://nuxi.nl/ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -44,10 +44,6 @@ int cloudabi_clock_time_get(struct threa /* Converts a FreeBSD errno to a CloudABI errno. */ cloudabi_errno_t cloudabi_convert_errno(int); -/* Converts FreeBSD's struct sockaddr to CloudABI's cloudabi_sockaddr_t. */ -void cloudabi_convert_sockaddr(const struct sockaddr *, socklen_t, - cloudabi_sockaddr_t *); - /* Converts a file descriptor to a CloudABI file descriptor type. */ cloudabi_filetype_t cloudabi_convert_filetype(const struct file *); @@ -78,6 +74,9 @@ int cloudabi_futex_lock_wrlock(struct th cloudabi_timestamp_t); /* Socket operations. */ +int cloudabi_sock_recv(struct thread *, cloudabi_fd_t, struct iovec *, size_t, + cloudabi_fd_t *, size_t, cloudabi_msgflags_t, size_t *, size_t *, + cloudabi_sockaddr_t *, cloudabi_msgflags_t *); int cloudabi_sock_send(struct thread *, cloudabi_fd_t, struct iovec *, size_t, const cloudabi_fd_t *, size_t, cloudabi_msgflags_t, size_t *); Modified: head/sys/compat/cloudabi32/cloudabi32_sock.c ============================================================================== --- head/sys/compat/cloudabi32/cloudabi32_sock.c Wed Mar 22 19:18:47 2017 (r315735) +++ head/sys/compat/cloudabi32/cloudabi32_sock.c Wed Mar 22 19:20:39 2017 (r315736) @@ -29,9 +29,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include -#include -#include #include #include @@ -48,53 +45,43 @@ int cloudabi32_sys_sock_recv(struct thread *td, struct cloudabi32_sys_sock_recv_args *uap) { - struct sockaddr_storage ss; cloudabi32_recv_in_t ri; cloudabi32_recv_out_t ro = {}; cloudabi32_iovec_t iovobj; - struct msghdr msghdr = {}; + struct iovec *iov; const cloudabi32_iovec_t *user_iov; - size_t i; + size_t i, rdatalen, rfdslen; int error; error = copyin(uap->in, &ri, sizeof(ri)); if (error != 0) return (error); - /* Convert results in cloudabi_recv_in_t to struct msghdr. */ + /* Convert iovecs to native format. */ if (ri.ri_data_len > UIO_MAXIOV) return (EINVAL); - msghdr.msg_iovlen = ri.ri_data_len; - msghdr.msg_iov = malloc(msghdr.msg_iovlen * sizeof(struct iovec), + iov = malloc(ri.ri_data_len * sizeof(struct iovec), M_SOCKET, M_WAITOK); user_iov = TO_PTR(ri.ri_data); - for (i = 0; i < msghdr.msg_iovlen; i++) { + for (i = 0; i < ri.ri_data_len; i++) { error = copyin(&user_iov[i], &iovobj, sizeof(iovobj)); if (error != 0) { - free(msghdr.msg_iov, M_SOCKET); + free(iov, M_SOCKET); return (error); } - msghdr.msg_iov[i].iov_base = TO_PTR(iovobj.buf); - msghdr.msg_iov[i].iov_len = iovobj.buf_len; + iov[i].iov_base = TO_PTR(iovobj.buf); + iov[i].iov_len = iovobj.buf_len; } - msghdr.msg_name = &ss; - msghdr.msg_namelen = sizeof(ss); - if (ri.ri_flags & CLOUDABI_MSG_PEEK) - msghdr.msg_flags |= MSG_PEEK; - if (ri.ri_flags & CLOUDABI_MSG_WAITALL) - msghdr.msg_flags |= MSG_WAITALL; - - /* TODO(ed): Add file descriptor passing. */ - error = kern_recvit(td, uap->sock, &msghdr, UIO_SYSSPACE, NULL); - free(msghdr.msg_iov, M_SOCKET); + + error = cloudabi_sock_recv(td, uap->sock, iov, ri.ri_data_len, + TO_PTR(ri.ri_fds), ri.ri_fds_len, ri.ri_flags, &rdatalen, + &rfdslen, &ro.ro_peername, &ro.ro_flags); + free(iov, M_SOCKET); if (error != 0) return (error); - /* Convert results in msghdr to cloudabi_recv_out_t. */ - ro.ro_datalen = td->td_retval[0]; - cloudabi_convert_sockaddr((struct sockaddr *)&ss, - MIN(msghdr.msg_namelen, sizeof(ss)), &ro.ro_peername); - td->td_retval[0] = 0; + ro.ro_datalen = rdatalen; + ro.ro_fdslen = rfdslen; return (copyout(&ro, uap->out, sizeof(ro))); } Modified: head/sys/compat/cloudabi64/cloudabi64_sock.c ============================================================================== --- head/sys/compat/cloudabi64/cloudabi64_sock.c Wed Mar 22 19:18:47 2017 (r315735) +++ head/sys/compat/cloudabi64/cloudabi64_sock.c Wed Mar 22 19:20:39 2017 (r315736) @@ -29,9 +29,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include -#include -#include #include #include @@ -48,53 +45,43 @@ int cloudabi64_sys_sock_recv(struct thread *td, struct cloudabi64_sys_sock_recv_args *uap) { - struct sockaddr_storage ss; cloudabi64_recv_in_t ri; cloudabi64_recv_out_t ro = {}; cloudabi64_iovec_t iovobj; - struct msghdr msghdr = {}; + struct iovec *iov; const cloudabi64_iovec_t *user_iov; - size_t i; + size_t i, rdatalen, rfdslen; int error; error = copyin(uap->in, &ri, sizeof(ri)); if (error != 0) return (error); - /* Convert results in cloudabi_recv_in_t to struct msghdr. */ + /* Convert iovecs to native format. */ if (ri.ri_data_len > UIO_MAXIOV) return (EINVAL); - msghdr.msg_iovlen = ri.ri_data_len; - msghdr.msg_iov = malloc(msghdr.msg_iovlen * sizeof(struct iovec), + iov = malloc(ri.ri_data_len * sizeof(struct iovec), M_SOCKET, M_WAITOK); user_iov = TO_PTR(ri.ri_data); - for (i = 0; i < msghdr.msg_iovlen; i++) { + for (i = 0; i < ri.ri_data_len; i++) { error = copyin(&user_iov[i], &iovobj, sizeof(iovobj)); if (error != 0) { - free(msghdr.msg_iov, M_SOCKET); + free(iov, M_SOCKET); return (error); } - msghdr.msg_iov[i].iov_base = TO_PTR(iovobj.buf); - msghdr.msg_iov[i].iov_len = iovobj.buf_len; + iov[i].iov_base = TO_PTR(iovobj.buf); + iov[i].iov_len = iovobj.buf_len; } - msghdr.msg_name = &ss; - msghdr.msg_namelen = sizeof(ss); - if (ri.ri_flags & CLOUDABI_MSG_PEEK) - msghdr.msg_flags |= MSG_PEEK; - if (ri.ri_flags & CLOUDABI_MSG_WAITALL) - msghdr.msg_flags |= MSG_WAITALL; - - /* TODO(ed): Add file descriptor passing. */ - error = kern_recvit(td, uap->sock, &msghdr, UIO_SYSSPACE, NULL); - free(msghdr.msg_iov, M_SOCKET); + + error = cloudabi_sock_recv(td, uap->sock, iov, ri.ri_data_len, + TO_PTR(ri.ri_fds), ri.ri_fds_len, ri.ri_flags, &rdatalen, + &rfdslen, &ro.ro_peername, &ro.ro_flags); + free(iov, M_SOCKET); if (error != 0) return (error); - /* Convert results in msghdr to cloudabi_recv_out_t. */ - ro.ro_datalen = td->td_retval[0]; - cloudabi_convert_sockaddr((struct sockaddr *)&ss, - MIN(msghdr.msg_namelen, sizeof(ss)), &ro.ro_peername); - td->td_retval[0] = 0; + ro.ro_datalen = rdatalen; + ro.ro_fdslen = rfdslen; return (copyout(&ro, uap->out, sizeof(ro))); } From owner-svn-src-head@freebsd.org Wed Mar 22 19:23:14 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CFAC6D18719; Wed, 22 Mar 2017 19:23:14 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9CD1C12E8; Wed, 22 Mar 2017 19:23:14 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MJNDaU071204; Wed, 22 Mar 2017 19:23:13 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MJNDSj071203; Wed, 22 Mar 2017 19:23:13 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703221923.v2MJNDSj071203@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 19:23:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315737 - head/lib/libc/gen X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:23:14 -0000 Author: ngie Date: Wed Mar 22 19:23:13 2017 New Revision: 315737 URL: https://svnweb.freebsd.org/changeset/base/315737 Log: Unbreak world by adding sys/stat.h for stat(2) X-MFC with: r315733 Reported by: O. Hartmann Sponsored by: Dell EMC Isilon Modified: head/lib/libc/gen/getttyent.c Modified: head/lib/libc/gen/getttyent.c ============================================================================== --- head/lib/libc/gen/getttyent.c Wed Mar 22 19:20:39 2017 (r315736) +++ head/lib/libc/gen/getttyent.c Wed Mar 22 19:23:13 2017 (r315737) @@ -34,6 +34,7 @@ static char sccsid[] = "@(#)getttyent.c __FBSDID("$FreeBSD$"); #include +#include #include #include From owner-svn-src-head@freebsd.org Wed Mar 22 19:23:40 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E6659D1878F; Wed, 22 Mar 2017 19:23:40 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pf0-x242.google.com (mail-pf0-x242.google.com [IPv6:2607:f8b0:400e:c00::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B267C1478; Wed, 22 Mar 2017 19:23:40 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pf0-x242.google.com with SMTP id o126so28293171pfb.1; Wed, 22 Mar 2017 12:23:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=S1Hg0zOsumzRAXAo7aQARHHoLY3ez5LO2+Eq+t4E5Gs=; b=i/uDeqOu5GrO43XO+Zt3aWrW9TgQnQy78WHoYTNH48a5vhv2cnCYgmJCg/Ct3wuhJY OgRAo8jslgG3qyo0GOeT52kvc2nUZsX1rRKUytYFT+f4CDQ+yonZgtMHkWyoiuqmCo1g vo1nMw+LZ1+hIw1Au/PTP0oBGnP4WCVJ2V7Z80ZIVgyCa6NX0v+uuIzzvizumBk/wl7M oF8hmf0r4guIOKBFVzZ8HKSzAUacCb2VMzPg1ou8YJNuItHPM9CjKoU73mmasH9TDa9r HeJyChLc2NNx5wolbPicn/GFIVu3rKFQ8w5z4dhieTaSiP7WqruMAgda9Bfe2vl69UCh /EXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=S1Hg0zOsumzRAXAo7aQARHHoLY3ez5LO2+Eq+t4E5Gs=; b=cwD2ox4nhnsoA6T0ULxeCzuJVF7kokkx5t/07ykcOa0zHtrPcvWG4Ffu25G/3EkO5s Mprj41NEVWQORVHthCMqbQ5yQaqXR5hyBXN4z8hmG8aoVmNgjH38+0iVQ37XuYIIs+8p cBppi1j3s77z/7RYyyQHyhnrdimftpE7XXqWH2aIusB7zJ1TgrxLsO/GwHbjCQrsqdrF v88WQd5q6Yca6DfiXDCKC8o+L8IzaVac/p7ug/b5fTw0GEGDD0rg5mvdSH/q4OH33Ge/ 4QIdYqiKyQorZak2W2Ta5vTemMpgqxlzdfemXhgabEeG/Tcw5nAZgGJRIwKSsTEsSgj/ yXoA== X-Gm-Message-State: AFeK/H10ZgfaZZGnuuw7lSuVqgol4YV2JIqF3DKGep+lMjeoG/Z2r10HvLvuczc9FvJX0w== X-Received: by 10.98.197.133 with SMTP id j127mr47252724pfg.238.1490210620268; Wed, 22 Mar 2017 12:23:40 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id b83sm5495541pfe.12.2017.03.22.12.23.39 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Mar 2017 12:23:39 -0700 (PDT) Subject: Re: svn commit: r315733 - in head: include lib/libc/gen libexec/getty Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_E262B9C9-99F0-4B59-9E57-40594A3A7F74"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: <20170322200841.52e2f892@thor.intern.walstatt.dynvpn.de> Date: Wed, 22 Mar 2017 12:23:38 -0700 Cc: Warner Losh , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: <76A12CB2-A4A7-4EAB-BCD1-24B6B5C2DA9F@gmail.com> References: <201703221900.v2MJ0gC8058678@repo.freebsd.org> <20170322200841.52e2f892@thor.intern.walstatt.dynvpn.de> To: "O. Hartmann" X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:23:41 -0000 --Apple-Mail=_E262B9C9-99F0-4B59-9E57-40594A3A7F74 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 22, 2017, at 12:08, O. Hartmann wrote: =E2=80=A6 > Breaks buildworld: >=20 > [...] > /usr/src/lib/libc/gen/getttyent.c:114:6: warning: implicit declaration = of function 'stat' > is invalid in C99 [-Wimplicit-function-declaration] if (stat(dev, &sb) = =3D=3D 0) > ^ > 1 warning and 1 error generated. > *** [getttyent.pico] Error code 1 >=20 > make[4]: stopped in /usr/src/lib/libc Fixed in r315737 =E2=80=94 thanks for the report! -Ngie --Apple-Mail=_E262B9C9-99F0-4B59-9E57-40594A3A7F74 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJY0s86AAoJEPWDqSZpMIYVHgUQAMlrC2cyaxAmvFH/pIPWXnyB ccq8FrJpCspMT5D3mSxwgZrDfzN5WYiDset2MBLyydyDxxqCQBu5ngH3VC+WKngM YlXld0N4lb+hVHtzRQUZsiNUNJhK/d4aGJbIwPHq9TYNThdkxPl++6SWjxue4w8L Ffj6KHFnWHEbXJJSeVegoUUvlgPmEGbfiT6FrTkK+l1OZIFQmSG/FYbKbbdssGQf 6pAi8zufaKwrb7C4MmuwXVh7/veYsqMQ455WiBjAnRZHJAWCHW5xzBLYGeFEJp9D VGCI2FfRMj7vOzsw5kvcvFbVjHhaHiaiCc+mRORfUdAXcV+FN0Q5uhPGLiDf+o0+ IjB2rOIe8rdfgd9qwLP1QHxd8rp118/GR31CLBASHmZni3zd0QQ3diOtbMLx1IQ3 /6H48kpuG2qYVNr0c2I7qax9r/ewmbJMnXkCXQhCuolSPuNKWoE1hF6hi1gsQLvf X9EOVIv0BkOlxNXBolh6Grh7LmhRdw/6z6ud4e6DqQl/qkNZDWbBoXT270jFSCsa RXGNk3GajpS8XfPvdX9ObFCnBu5iYGCUW0CbdHejD1zpHnN4gYZ9Xh0RoSymWw04 yFNh6eZclTdXAsasrZqSMhlb/0dNUcnBVi4gGi4jVeQAEG7NbTKZS3gAQsrR4MAg gGPhxGLJbFjYsDRvJKJ8 =l2C6 -----END PGP SIGNATURE----- --Apple-Mail=_E262B9C9-99F0-4B59-9E57-40594A3A7F74-- From owner-svn-src-head@freebsd.org Wed Mar 22 19:29:37 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C0AC2D1883D; Wed, 22 Mar 2017 19:29:37 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pg0-x244.google.com (mail-pg0-x244.google.com [IPv6:2607:f8b0:400e:c05::244]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8068516AA; Wed, 22 Mar 2017 19:29:37 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pg0-x244.google.com with SMTP id 81so24140783pgh.3; Wed, 22 Mar 2017 12:29:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=34n3MMVBhSA9oJXit1pO/+az5NtSxSmK7NUsI1+qeXE=; b=Uxm8mtg0jP67Aq48nTxAnSXNSBcujzavSaHb0IhUszkyU5YYCOYE1MQswRuLdQUf7g /anljClUJa5dv6ilEvBZRkHbrFiuUkre3cCq4YpQAr8lkbbTcOO5FmZZoJGA5EifT4c8 o8Z+G1uDh4DewBarhZBWtznY72jTAyhvEIfv1jW1MNEZixpd50KM8/DgReSPAPJXWDGI 7EDiVSpkLeYL+B84aiH1x7VQJBjgPjS2yiMPHz33skSNQLfNmeBP5SJlQh68cErlIPvY XIEGE0EfirBPnCULU61POH8gKhnAiqIXa58j5EouZo9Mi/TaYP+RQ57bQEkufqm39yGb fNMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=34n3MMVBhSA9oJXit1pO/+az5NtSxSmK7NUsI1+qeXE=; b=iIU/ZK94X2MoQKyFkiHT5HevYk+D7RblRkO97IfCWmdwPKy9WGLu62QqsM2uuZMMST fHHo6NZOOacig/S+pspPSIlQCOw1fD9qpDNlUOvuE7JLFUJO23EVERn12KwMcmLR0NRk uEQlK+QqGW5+s40ersQuGA3mb8Oyt/BB8v7SE0TbGLiJKD/4/NmwYWgPhy+F50W5zuOF AueQYXK9VCfrstkPFlp1hAHR11mgheqIL3GPG1I7EdoULHRA94cFKHoOR8DEETcF9vXk mIem8Yf4J2VGixc8znic9un/aW8KKrKCmY6uhdsHPbQ1C7K8BnI+u0nwc7JZ2MPRs/tp cdJQ== X-Gm-Message-State: AFeK/H3uMpXOnqzkls3wHPHJ9LyvrV1We7ez4zZbUckPWsQ9X7Fjsb2mbXjyjGAD7O7qoA== X-Received: by 10.98.67.89 with SMTP id q86mr47976538pfa.237.1490210976578; Wed, 22 Mar 2017 12:29:36 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id n15sm5501540pfj.18.2017.03.22.12.29.35 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Mar 2017 12:29:35 -0700 (PDT) Subject: Re: svn commit: r315733 - in head: include lib/libc/gen libexec/getty Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_C4012677-D6C5-4B10-9899-91E7A93DA0A7"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: <201703221900.v2MJ0gC8058678@repo.freebsd.org> Date: Wed, 22 Mar 2017 12:29:35 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: <7D689BCF-0E33-4487-8038-912988D8EDDD@gmail.com> References: <201703221900.v2MJ0gC8058678@repo.freebsd.org> To: Warner Losh X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:29:37 -0000 --Apple-Mail=_C4012677-D6C5-4B10-9899-91E7A93DA0A7 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 22, 2017, at 12:00, Warner Losh wrote: >=20 > Author: imp > Date: Wed Mar 22 19:00:41 2017 > New Revision: 315733 > URL: https://svnweb.freebsd.org/changeset/base/315733 >=20 > Log: > Impelemnt ttys onifexists in init. >=20 > Implement a new init(8) option in /etc/ttys. If this option is present > on the entry in /etc/ttys, the entry will be active if and only if it > exists. If the name starts with a '/', it will be considered an > absolute path. If not, it will be a path relative to /dev. >=20 > This allows one to turn off video console getty that aren't present > (while running a getty on them even when they aren't the system > console). Likewise with serial ports. >=20 > It differs from onifconsole in only requiring the device exist rather > than it be listed as one of the system consoles. >=20 > Sponsored by: Netflix > Differential Revision: https://reviews.freebsd.org/D10037 >=20 > Modified: > head/include/ttyent.h > head/lib/libc/gen/getttyent.c > head/libexec/getty/ttys.5 Slick! That=E2=80=99s a lot better than my other proposed change for = /dev/ttyv0 (which isn=E2=80=99t present on one of our platforms because = it doesn=E2=80=99t have a VGA console). Thanks! -Ngie --Apple-Mail=_C4012677-D6C5-4B10-9899-91E7A93DA0A7 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJY0tCfAAoJEPWDqSZpMIYVGHMP/0xt3XAwR4HH70KqhLCJrmjm 417YrlLBBeIDyN6tLclSCxqGhqqqYEnJmGWKqbOa8QQdvjrbUdPDZoVT9w5JwvFO rY9E7g1y0zMhRwFYNYBN5mcPjR3RHH1qPG8iQL88why/UPdm28Dg1wsp1qbsE/wQ AXam2GrzsEjX2dk1v1ejFYq32CeB7vpwbMwCTEeuZCd9MIJezeZEVIxtzVXuAeAR oIfOms9SAL+TZKiNQSeklHf2mNu8GywcypLYidLYuGyhSjIvMFYhnJoqM/RErbxC A+5RvcaISp+NN4FDHir2SvJEAEVtULmMaG/cMjgt8dgR+VA20RPxiTyWg+kO3WpH Bm8ztgVvN05aS4y44AmHupSjFpyj5djV1ObqeR37b45N1JGithrg/K0VbGqOLAu7 2XrNLOX0desoVYNX1sf7+tulVMm1emKNj1cRDqQrJbSaQYTnYasfS7gOcr2asoyq oeupCCd1yAss9yeQMQWwcKxni/EoTFrKtfr7u4SKzjkNOPMQfld7UcSPvOlYhZ5U j9vlYtzLMU9aaHhDY7CxQ4IxpGbDOhfaepMq+yCOewQ/vlz1b2OzOmN01K2gME4i eAl+4pdjovvZJHg64OfpTA7HtX1Ua9fmpVtbgUc2QiE7IknkYbMh5Oo6Uyeza2uw ph3VnNsjNTTpd/XhjrW0 =N7II -----END PGP SIGNATURE----- --Apple-Mail=_C4012677-D6C5-4B10-9899-91E7A93DA0A7-- From owner-svn-src-head@freebsd.org Wed Mar 22 19:48:10 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E58F2D18C18; Wed, 22 Mar 2017 19:48:10 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B53BC1133; Wed, 22 Mar 2017 19:48:10 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MJm9ND079943; Wed, 22 Mar 2017 19:48:09 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MJm9H5079942; Wed, 22 Mar 2017 19:48:09 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703221948.v2MJm9H5079942@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 19:48:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315738 - head/sys/boot/forth X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 19:48:11 -0000 Author: ngie Date: Wed Mar 22 19:48:09 2017 New Revision: 315738 URL: https://svnweb.freebsd.org/changeset/base/315738 Log: Document some more 10GbE+ network drivers in loader.conf - if_cxgbe - if_ixl - if_ixlv - sfxge MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/sys/boot/forth/loader.conf Modified: head/sys/boot/forth/loader.conf ============================================================================== --- head/sys/boot/forth/loader.conf Wed Mar 22 19:23:13 2017 (r315737) +++ head/sys/boot/forth/loader.conf Wed Mar 22 19:48:09 2017 (r315738) @@ -321,6 +321,7 @@ if_cm_load="NO" # SMC (90c26, 90c56, 9 if_cs_load="NO" # Crystal Semiconductor CS8920 if_cue_load="NO" # CATC USB-EL1210A USB Ethernet if_cxgb_load="NO" # Chelsio T3 10 Gigabit Ethernet +if_cxgbe_load="NO" # Chelsio T4/T5/T6 1/10/25/40/100 Gigabit Ethernet if_dc_load="NO" # DEC/Intel 21143 and various workalikes if_de_load="NO" # DEC DC21x4x Ethernet if_ed_load="NO" # National Semiconductor DS8390/WD83C690 @@ -345,6 +346,8 @@ if_iwi_load="NO" # Intel PRO/Wireless 2 if_iwn_load="NO" # Intel Wireless WiFi Link 802.11n wireless if_ixgb_load="NO" # Intel PRO/10Gb Ethernet if_ixgbe_load="NO" # Intel PRO/10Gb Ethernet PCI Express +if_ixl_load="NO" # Intel XL710 Ethernet 40Gb Base driver +if_ixlv_load="NO" # Intel XL710 Ethernet 40Gb VF driver if_jme_load="NO" # JMicron JMC250 Gigabit/JMC260 Fast Ethernet if_lagg_load="NO" # lagg(4) devices if_le_load="NO" # AMD Am7900 LANCE and Am79C9xx PCnet @@ -392,6 +395,7 @@ if_wi_load="NO" # WaveLAN/IEEE 802.11 if_wpi_load="NO" # Intel 3945ABG Wireless LAN IEEE 802.11 if_xe_load="NO" # Xircom CreditCard PCMCIA if_xl_load="NO" # 3Com Etherlink XL (3c900, 3c905, 3c905B) +sfxge_load="NO" # Solarflare 10Gb Ethernet adapter driver utopia_load="NO" # ATM PHY driver From owner-svn-src-head@freebsd.org Wed Mar 22 20:06:30 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4C018D17355; Wed, 22 Mar 2017 20:06:30 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1BA15105F; Wed, 22 Mar 2017 20:06:30 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MK6TF0088314; Wed, 22 Mar 2017 20:06:29 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MK6T2A088313; Wed, 22 Mar 2017 20:06:29 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703222006.v2MK6T2A088313@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 20:06:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315739 - head/sys/boot/forth X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 20:06:30 -0000 Author: ngie Date: Wed Mar 22 20:06:29 2017 New Revision: 315739 URL: https://svnweb.freebsd.org/changeset/base/315739 Log: Garbage collect if_igb reference in loader.conf if_igb was merged with if_em in r311849 X-MFC with: r311849 Sponsored by: Dell EMC Isilon Modified: head/sys/boot/forth/loader.conf Modified: head/sys/boot/forth/loader.conf ============================================================================== --- head/sys/boot/forth/loader.conf Wed Mar 22 19:48:09 2017 (r315738) +++ head/sys/boot/forth/loader.conf Wed Mar 22 20:06:29 2017 (r315739) @@ -339,7 +339,6 @@ if_gem_load="NO" # Sun GEM/Sun ERI/Appl if_hatm_load="NO" # Fore/Marconi HE155 and HE622 if_hme_load="NO" # Sun Microelectronics STP2002-STQ Ethernet if_ie_load="NO" # Intel 82586 -if_igb_load="NO" # Intel(R) PRO/1000 Gigabit Ethernet if_ipw_load="NO" # Intel PRO/Wireless 2100 wireless if_iwi_load="NO" # Intel PRO/Wireless 2200BG/2225BG/2915ABG # wireless From owner-svn-src-head@freebsd.org Wed Mar 22 20:51:54 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 54EB6D188BD; Wed, 22 Mar 2017 20:51:54 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 21ED51FCA; Wed, 22 Mar 2017 20:51:54 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MKprph007991; Wed, 22 Mar 2017 20:51:53 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MKpr6J007990; Wed, 22 Mar 2017 20:51:53 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201703222051.v2MKpr6J007990@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Wed, 22 Mar 2017 20:51:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315740 - head/lib/libc/gen X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 20:51:54 -0000 Author: imp Date: Wed Mar 22 20:51:52 2017 New Revision: 315740 URL: https://svnweb.freebsd.org/changeset/base/315740 Log: Simplify the code a little. Submitted by: rppokala Sponsored by: Netflix Modified: head/lib/libc/gen/getttyent.c Modified: head/lib/libc/gen/getttyent.c ============================================================================== --- head/lib/libc/gen/getttyent.c Wed Mar 22 20:06:29 2017 (r315739) +++ head/lib/libc/gen/getttyent.c Wed Mar 22 20:51:52 2017 (r315740) @@ -110,9 +110,7 @@ auto_exists_status(const char *ty_name) asprintf(&dev, "%s", ty_name); else asprintf(&dev, "/dev/%s", ty_name); - if (dev == NULL) - return 0; - if (stat(dev, &sb) == 0) + if (dev != NULL && stat(dev, &sb) == 0) rv = TTY_ON; free(dev); return (rv); From owner-svn-src-head@freebsd.org Wed Mar 22 21:18:19 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B02A2D11295; Wed, 22 Mar 2017 21:18:19 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 882F414AA; Wed, 22 Mar 2017 21:18:19 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MLIIGs018313; Wed, 22 Mar 2017 21:18:18 GMT (envelope-from kp@FreeBSD.org) Received: (from kp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MLIIDC018310; Wed, 22 Mar 2017 21:18:18 GMT (envelope-from kp@FreeBSD.org) Message-Id: <201703222118.v2MLIIDC018310@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kp set sender to kp@FreeBSD.org using -f From: Kristof Provost Date: Wed, 22 Mar 2017 21:18:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315741 - in head/sys: net netpfil/pf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 21:18:19 -0000 Author: kp Date: Wed Mar 22 21:18:18 2017 New Revision: 315741 URL: https://svnweb.freebsd.org/changeset/base/315741 Log: pf: Fix possible shutdown race Prevent possible races in the pf_unload() / pf_purge_thread() shutdown code. Lock the pf_purge_thread() with the new pf_end_lock to prevent these races. Use a shared/exclusive lock, as we need to also acquire another sx lock (VNET_LIST_RLOCK). It's fine for both pf_purge_thread() and pf_unload() to sleep, Pointed out by: eri, glebius, jhb Differential Revision: https://reviews.freebsd.org/D10026 Modified: head/sys/net/pfvar.h head/sys/netpfil/pf/pf.c head/sys/netpfil/pf/pf_ioctl.c Modified: head/sys/net/pfvar.h ============================================================================== --- head/sys/net/pfvar.h Wed Mar 22 20:51:52 2017 (r315740) +++ head/sys/net/pfvar.h Wed Mar 22 21:18:18 2017 (r315741) @@ -154,6 +154,8 @@ extern struct rwlock pf_rules_lock; #define PF_RULES_RASSERT() rw_assert(&pf_rules_lock, RA_RLOCKED) #define PF_RULES_WASSERT() rw_assert(&pf_rules_lock, RA_WLOCKED) +extern struct sx pf_end_lock; + #define PF_MODVER 1 #define PFLOG_MODVER 1 #define PFSYNC_MODVER 1 Modified: head/sys/netpfil/pf/pf.c ============================================================================== --- head/sys/netpfil/pf/pf.c Wed Mar 22 20:51:52 2017 (r315740) +++ head/sys/netpfil/pf/pf.c Wed Mar 22 21:18:18 2017 (r315741) @@ -302,6 +302,7 @@ static void pf_route6(struct mbuf **, int in4_cksum(struct mbuf *m, u_int8_t nxt, int off, int len); extern int pf_end_threads; +extern struct proc *pf_purge_proc; VNET_DEFINE(struct pf_limit, pf_limits[PF_LIMIT_MAX]); @@ -1428,19 +1429,14 @@ pf_purge_thread(void *unused __unused) VNET_ITERATOR_DECL(vnet_iter); u_int idx = 0; - for (;;) { - tsleep(pf_purge_thread, 0, "pftm", hz / 10); + sx_xlock(&pf_end_lock); + while (pf_end_threads == 0) { + sx_sleep(pf_purge_thread, &pf_end_lock, 0, "pftm", hz / 10); VNET_LIST_RLOCK(); VNET_FOREACH(vnet_iter) { CURVNET_SET(vnet_iter); - if (pf_end_threads) { - pf_end_threads++; - wakeup(pf_purge_thread); - VNET_LIST_RUNLOCK(); - kproc_exit(0); - } /* Wait until V_pf_default_rule is initialized. */ if (V_pf_vnet_active == 0) { @@ -1474,7 +1470,10 @@ pf_purge_thread(void *unused __unused) } VNET_LIST_RUNLOCK(); } - /* not reached */ + + pf_end_threads++; + sx_xunlock(&pf_end_lock); + kproc_exit(0); } void Modified: head/sys/netpfil/pf/pf_ioctl.c ============================================================================== --- head/sys/netpfil/pf/pf_ioctl.c Wed Mar 22 20:51:52 2017 (r315740) +++ head/sys/netpfil/pf/pf_ioctl.c Wed Mar 22 21:18:18 2017 (r315741) @@ -198,9 +198,11 @@ VNET_DEFINE(int, pf_vnet_active); #define V_pf_vnet_active VNET(pf_vnet_active) int pf_end_threads; +struct proc *pf_purge_proc; struct rwlock pf_rules_lock; struct sx pf_ioctl_lock; +struct sx pf_end_lock; /* pfsync */ pfsync_state_import_t *pfsync_state_import_ptr = NULL; @@ -3730,6 +3732,7 @@ pf_load(void) rw_init(&pf_rules_lock, "pf rulesets"); sx_init(&pf_ioctl_lock, "pf ioctl"); + sx_init(&pf_end_lock, "pf end thread"); pf_mtag_initialize(); @@ -3738,7 +3741,7 @@ pf_load(void) return (ENOMEM); pf_end_threads = 0; - error = kproc_create(pf_purge_thread, NULL, NULL, 0, 0, "pf purge"); + error = kproc_create(pf_purge_thread, NULL, &pf_purge_proc, 0, 0, "pf purge"); if (error != 0) return (error); @@ -3788,11 +3791,13 @@ pf_unload(void) { int error = 0; + sx_xlock(&pf_end_lock); pf_end_threads = 1; while (pf_end_threads < 2) { wakeup_one(pf_purge_thread); - tsleep(pf_purge_thread, 0, "pftmo", 0); + sx_sleep(pf_purge_proc, &pf_end_lock, 0, "pftmo", 0); } + sx_xunlock(&pf_end_lock); if (pf_dev != NULL) destroy_dev(pf_dev); @@ -3801,6 +3806,7 @@ pf_unload(void) rw_destroy(&pf_rules_lock); sx_destroy(&pf_ioctl_lock); + sx_destroy(&pf_end_lock); return (error); } From owner-svn-src-head@freebsd.org Wed Mar 22 21:32:46 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 443C8D117D7; Wed, 22 Mar 2017 21:32:46 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1C4D61F75; Wed, 22 Mar 2017 21:32:46 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MLWjSd026305; Wed, 22 Mar 2017 21:32:45 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MLWjPp026303; Wed, 22 Mar 2017 21:32:45 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703222132.v2MLWjPp026303@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 21:32:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315742 - in head: . share/man/man4 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 21:32:46 -0000 Author: ngie Date: Wed Mar 22 21:32:44 2017 New Revision: 315742 URL: https://svnweb.freebsd.org/changeset/base/315742 Log: Merge documentation for em(4) and igb(4) Document work done by mmacy/sbruno to merge the two drivers together and convert em(4) to the iflib framework. X-MFC with: r311849 Sponsored by: Dell EMC Isilon Deleted: head/share/man/man4/igb.4 Modified: head/ObsoleteFiles.inc head/share/man/man4/em.4 Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Wed Mar 22 21:18:18 2017 (r315741) +++ head/ObsoleteFiles.inc Wed Mar 22 21:32:44 2017 (r315742) @@ -38,6 +38,9 @@ # xargs -n1 | sort | uniq -d; # done +# 20170322: garbage collect old references to igb(4) +OLD_FILES+=usr/share/man/man4/if_igb.4.gz +OLD_FILES+=usr/share/man/man4/igb.4.gz # 20170319: io_test requires zh_TW.Big5 locale. OLD_FILES+=usr/tests/lib/libc/locale/io_test # 20170319: remove nls for non supported Big5* locales Modified: head/share/man/man4/em.4 ============================================================================== --- head/share/man/man4/em.4 Wed Mar 22 21:18:18 2017 (r315741) +++ head/share/man/man4/em.4 Wed Mar 22 21:32:44 2017 (r315742) @@ -31,7 +31,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 12, 2016 +.Dd March 22, 2017 .Dt EM 4 .Os .Sh NAME @@ -58,8 +58,15 @@ driver provides support for PCI Gigabit the Intel 82540, 82541ER, 82541PI, 82542, 82543, 82544, 82545, 82546, 82546EB, 82546GB, 82547, 82571, 81572, 82573, and 82574 Ethernet controller chips. -The driver supports Transmit/Receive checksum offload -and Jumbo Frames on all but 82542-based adapters. +.Pp +The +.Nm +driver also provides support for PCI Express Gigabit Ethernet adapters +based on the Intel 82575, 82576, 82580, i21x and i35x. +.Pp +The driver supports Transmit/Receive checksum offload and Jumbo Frames +on all but 82542-based adapters. +.Pp Furthermore it supports TCP segmentation offload (TSO) on all adapters but those based on the 82543, 82544 and 82547 controller chips. The identification LEDs of the adapters supported by the @@ -71,8 +78,8 @@ For further hardware information, see th .Pa README included with the driver. .Pp -For questions related to hardware requirements, -refer to the documentation supplied with your Intel PRO/1000 adapter. +For questions related to hardware requirements, refer to the +documentation supplied with your Intel PRO/1000 adapter. All hardware requirements listed apply to use with .Fx . .Pp @@ -82,7 +89,7 @@ Selecting an MTU larger than 1500 bytes utility configures the adapter to receive and transmit Jumbo Frames. The maximum MTU size for Jumbo Frames is 16114. .Pp -This driver version supports VLANs. +This driver supports hardware assisted VLANs. The .Nm driver supports the following media types: @@ -141,10 +148,21 @@ The .Nm driver supports Gigabit Ethernet adapters based on the Intel 82540, 82541ER, 82541PI, 82542, 82543, 82544, 82545, 82546, 82546EB, -82546GB, 82547, 82571, 82572, 82573, and 82574 controller chips: +82546GB, 82547, 82571, 82572, 82573, 82574, 82575, 82576, and 82580 +controller chips: .Pp .Bl -bullet -compact .It +Intel Gigabit ET Dual Port Server Adapter (82576) +.It +Intel Gigabit VT Quad Port Server Adapter (82575) +.It +Intel Single, Dual and Quad Gigabit Ethernet Controller (82580) +.It +Intel i210 and i211 Gigabit Ethernet Controller +.It +Intel i350 and i354 Gigabit Ethernet Controller +.It Intel PRO/1000 CT Network Connection (82547) .It Intel PRO/1000 F Server Adapter (82543) @@ -280,7 +298,6 @@ issue to .Sh SEE ALSO .Xr altq 4 , .Xr arp 4 , -.Xr igb 4 , .Xr led 4 , .Xr netintro 4 , .Xr ng_ether 4 , @@ -292,8 +309,16 @@ The .Nm device driver first appeared in .Fx 4.4 . +.Nm +was merged with the igb device driver and converted to the iflib framework in +.Fx 12.0 . .Sh AUTHORS +.An -nosplit The .Nm -driver was written by +driver was originally written by .An Intel Corporation Aq Mt freebsd@intel.com . +It was merged with igb driver and converted to the iflib framework by +.An Matthew Macy Aq Mt mmacy@nextbsd.org +and +.An Sean Bruno Aq Mt sbruno@FreeBSD.org . From owner-svn-src-head@freebsd.org Wed Mar 22 21:35:02 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BB648D118BF; Wed, 22 Mar 2017 21:35:02 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 68E25166; Wed, 22 Mar 2017 21:35:02 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MLZ1FP026461; Wed, 22 Mar 2017 21:35:01 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MLZ1Gn026460; Wed, 22 Mar 2017 21:35:01 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703222135.v2MLZ1Gn026460@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Wed, 22 Mar 2017 21:35:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315743 - head/usr.bin/diff X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 21:35:02 -0000 Author: bapt Date: Wed Mar 22 21:35:01 2017 New Revision: 315743 URL: https://svnweb.freebsd.org/changeset/base/315743 Log: Use MAX and MIN macros from sys/param.h Modified: head/usr.bin/diff/diffreg.c Modified: head/usr.bin/diff/diffreg.c ============================================================================== --- head/usr.bin/diff/diffreg.c Wed Mar 22 21:32:44 2017 (r315742) +++ head/usr.bin/diff/diffreg.c Wed Mar 22 21:35:01 2017 (r315743) @@ -100,9 +100,6 @@ __FBSDID("$FreeBSD$"); # define TIMESPEC_NS(timespec) 0 #endif -#define MINIMUM(a, b) (((a) < (b)) ? (a) : (b)) -#define MAXIMUM(a, b) (((a) > (b)) ? (a) : (b)) - /* * diff - compare two files. */ @@ -709,7 +706,7 @@ stone(int *a, int n, int *b, int *c, int bound = UINT_MAX; else { sq = isqrt(n); - bound = MAXIMUM(256, sq); + bound = MAX(256, sq); } k = 0; @@ -1446,10 +1443,10 @@ dump_context_vec(FILE *f1, FILE *f2, int return; b = d = 0; /* gcc */ - lowa = MAXIMUM(1, cvp->a - diff_context); - upb = MINIMUM(len[0], context_vec_ptr->b + diff_context); - lowc = MAXIMUM(1, cvp->c - diff_context); - upd = MINIMUM(len[1], context_vec_ptr->d + diff_context); + lowa = MAX(1, cvp->a - diff_context); + upb = MIN(len[0], context_vec_ptr->b + diff_context); + lowc = MAX(1, cvp->c - diff_context); + upd = MIN(len[1], context_vec_ptr->d + diff_context); diff_output("***************"); if ((flags & D_PROTOTYPE)) { @@ -1549,10 +1546,10 @@ dump_unified_vec(FILE *f1, FILE *f2, int return; b = d = 0; /* gcc */ - lowa = MAXIMUM(1, cvp->a - diff_context); - upb = MINIMUM(len[0], context_vec_ptr->b + diff_context); - lowc = MAXIMUM(1, cvp->c - diff_context); - upd = MINIMUM(len[1], context_vec_ptr->d + diff_context); + lowa = MAX(1, cvp->a - diff_context); + upb = MIN(len[0], context_vec_ptr->b + diff_context); + lowc = MAX(1, cvp->c - diff_context); + upd = MIN(len[1], context_vec_ptr->d + diff_context); diff_output("@@ -"); uni_range(lowa, upb); From owner-svn-src-head@freebsd.org Wed Mar 22 21:39:01 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 868AFD11CB4; Wed, 22 Mar 2017 21:39:01 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 53BA111E6; Wed, 22 Mar 2017 21:39:01 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MLd073028195; Wed, 22 Mar 2017 21:39:00 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MLd0Wm028194; Wed, 22 Mar 2017 21:39:00 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703222139.v2MLd0Wm028194@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Wed, 22 Mar 2017 21:39:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315744 - head/share/man/man4 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 21:39:01 -0000 Author: ngie Date: Wed Mar 22 21:39:00 2017 New Revision: 315744 URL: https://svnweb.freebsd.org/changeset/base/315744 Log: Commit Makefiles changes not build manpage for igb(4), accidentally forgotten in r315742. X-MFC with: r311849, r315742 Pointyhat to: ngie Sponsored by: Dell EMC Isilon Modified: head/share/man/man4/Makefile Modified: head/share/man/man4/Makefile ============================================================================== --- head/share/man/man4/Makefile Wed Mar 22 21:35:01 2017 (r315743) +++ head/share/man/man4/Makefile Wed Mar 22 21:39:00 2017 (r315744) @@ -205,7 +205,6 @@ MAN= aac.4 \ if_ipsec.4 \ ifmib.4 \ ig4.4 \ - igb.4 \ igmp.4 \ iic.4 \ iicbb.4 \ @@ -650,7 +649,6 @@ MLINKS+=hme.4 if_hme.4 MLINKS+=hpet.4 acpi_hpet.4 MLINKS+=${_hptrr.4} ${_rr232x.4} MLINKS+=${_attimer.4} ${_i8254.4} -MLINKS+=igb.4 if_igb.4 MLINKS+=ip.4 rawip.4 MLINKS+=ipfirewall.4 ipaccounting.4 \ ipfirewall.4 ipacct.4 \ From owner-svn-src-head@freebsd.org Wed Mar 22 21:45:43 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 86A92D181AB; Wed, 22 Mar 2017 21:45:43 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 564861811; Wed, 22 Mar 2017 21:45:43 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MLjgsI032038; Wed, 22 Mar 2017 21:45:42 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MLjgYG032037; Wed, 22 Mar 2017 21:45:42 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201703222145.v2MLjgYG032037@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Wed, 22 Mar 2017 21:45:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315745 - head/contrib/libcxxrt X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 21:45:43 -0000 Author: dim Date: Wed Mar 22 21:45:42 2017 New Revision: 315745 URL: https://svnweb.freebsd.org/changeset/base/315745 Log: Cherry-pick libcxxrt commit 8a853717e61d5d55cbdf74d9d0a7545da5d5ff92: Author: David Chisnall Date: Wed Mar 22 12:27:08 2017 +0000 Simplify some code. realloc() with a null pointer is equivalent to malloc, so we don't need to handle the two cases independently. Fixes #46 This should help with lang/beignet and other programs, which expect __cxa_demangle(name, NULL, NULL, &status) to return zero in status. PR: 213732 MFC after: 3 days Modified: head/contrib/libcxxrt/typeinfo.cc Modified: head/contrib/libcxxrt/typeinfo.cc ============================================================================== --- head/contrib/libcxxrt/typeinfo.cc Wed Mar 22 21:39:00 2017 (r315744) +++ head/contrib/libcxxrt/typeinfo.cc Wed Mar 22 21:45:42 2017 (r315745) @@ -86,15 +86,7 @@ extern "C" char* __cxa_demangle(const ch if (NULL != demangled) { size_t len = strlen(demangled); - if (buf == NULL) - { - if (n) - { - *n = len; - } - return demangled; - } - if (*n < len+1) + if (!buf || (*n < len+1)) { buf = static_cast(realloc(buf, len+1)); } From owner-svn-src-head@freebsd.org Wed Mar 22 21:52:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9CADAD184E8; Wed, 22 Mar 2017 21:52:23 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 69B631F02; Wed, 22 Mar 2017 21:52:23 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MLqMsY036153; Wed, 22 Mar 2017 21:52:22 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MLqMvU036152; Wed, 22 Mar 2017 21:52:22 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703222152.v2MLqMvU036152@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Wed, 22 Mar 2017 21:52:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315746 - head/usr.bin/diff X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 21:52:23 -0000 Author: bapt Date: Wed Mar 22 21:52:22 2017 New Revision: 315746 URL: https://svnweb.freebsd.org/changeset/base/315746 Log: Use strndup(3) instead of malloc + memcpy Modified: head/usr.bin/diff/diff.c Modified: head/usr.bin/diff/diff.c ============================================================================== --- head/usr.bin/diff/diff.c Wed Mar 22 21:45:42 2017 (r315745) +++ head/usr.bin/diff/diff.c Wed Mar 22 21:52:22 2017 (r315746) @@ -351,9 +351,8 @@ read_excludes_file(char *file) while ((buf = fgetln(fp, &len)) != NULL) { if (buf[len - 1] == '\n') len--; - pattern = xmalloc(len + 1); - memcpy(pattern, buf, len); - pattern[len] = '\0'; + if ((pattern = strndup(buf, len)) == NULL) + err(2, "xstrndup"); push_excludes(pattern); } if (strcmp(file, "-") != 0) From owner-svn-src-head@freebsd.org Wed Mar 22 21:59:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2B088D185FB; Wed, 22 Mar 2017 21:59:06 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EC63D221; Wed, 22 Mar 2017 21:59:05 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MLx5ko036448; Wed, 22 Mar 2017 21:59:05 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MLx5OL036447; Wed, 22 Mar 2017 21:59:05 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703222159.v2MLx5OL036447@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Wed, 22 Mar 2017 21:59:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315747 - head/usr.bin/diff X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 21:59:06 -0000 Author: bapt Date: Wed Mar 22 21:59:04 2017 New Revision: 315747 URL: https://svnweb.freebsd.org/changeset/base/315747 Log: Use MIN macros from sys/param.h Modified: head/usr.bin/diff/diffreg.c Modified: head/usr.bin/diff/diffreg.c ============================================================================== --- head/usr.bin/diff/diffreg.c Wed Mar 22 21:52:22 2017 (r315746) +++ head/usr.bin/diff/diffreg.c Wed Mar 22 21:59:04 2017 (r315747) @@ -611,7 +611,7 @@ prepare(int i, FILE *fd, size_t filesize rewind(fd); - sz = ((unsigned long)filesize <= SIZE_MAX ? filesize : SIZE_MAX) / 25; + sz = MIN(filesize, SIZE_MAX) / 25; if (sz < 100) sz = 100; From owner-svn-src-head@freebsd.org Wed Mar 22 22:06:49 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D3123D18847; Wed, 22 Mar 2017 22:06:49 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 95731A6C; Wed, 22 Mar 2017 22:06:49 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MM6mTU040544; Wed, 22 Mar 2017 22:06:48 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MM6mck040543; Wed, 22 Mar 2017 22:06:48 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703222206.v2MM6mck040543@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 22 Mar 2017 22:06:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315749 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 22:06:49 -0000 Author: kib Date: Wed Mar 22 22:06:48 2017 New Revision: 315749 URL: https://svnweb.freebsd.org/changeset/base/315749 Log: Adjust r314851 to not require every brand to specify interpreter path. Reported and tested by: ed Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/kern/imgact_elf.c Modified: head/sys/kern/imgact_elf.c ============================================================================== --- head/sys/kern/imgact_elf.c Wed Mar 22 22:01:53 2017 (r315748) +++ head/sys/kern/imgact_elf.c Wed Mar 22 22:06:48 2017 (r315749) @@ -318,7 +318,11 @@ __elfN(get_brandinfo)(struct image_param * Again, prefer strictly matching * interpreter path. */ - if (strlen(bi->interp_path) + 1 == + if (interp_name_len == 0 && + bi->interp_path == NULL) + return (bi); + if (bi->interp_path != NULL && + strlen(bi->interp_path) + 1 == interp_name_len && strncmp(interp, bi->interp_path, interp_name_len) == 0) return (bi); From owner-svn-src-head@freebsd.org Wed Mar 22 22:23:03 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A25DBD18CD5; Wed, 22 Mar 2017 22:23:03 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 770DB15DB; Wed, 22 Mar 2017 22:23:03 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MMN2OI048362; Wed, 22 Mar 2017 22:23:02 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MMN1S9048354; Wed, 22 Mar 2017 22:23:01 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703222223.v2MMN1S9048354@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 22 Mar 2017 22:23:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315753 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 kern sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 22:23:03 -0000 Author: kib Date: Wed Mar 22 22:23:01 2017 New Revision: 315753 URL: https://svnweb.freebsd.org/changeset/base/315753 Log: Add a flag BI_BRAND_ONLY_STATIC to specify that the brand only matches static binaries. Interpretation of the 'static' there is that the binary must not specify an interpreter. In particular, shared objects are matched by the brand if BI_CAN_EXEC_DYN is also set. This improves precision of the brand matching, which should eliminate surprises due to brand ordering. Revert r315701. Discussed with and tested by: ed (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/amd64/cloudabi32/cloudabi32_sysvec.c head/sys/amd64/cloudabi64/cloudabi64_sysvec.c head/sys/arm/cloudabi32/cloudabi32_sysvec.c head/sys/arm64/cloudabi64/cloudabi64_sysvec.c head/sys/i386/cloudabi32/cloudabi32_sysvec.c head/sys/kern/imgact_elf.c head/sys/sys/imgact_elf.h Modified: head/sys/amd64/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:20:47 2017 (r315752) +++ head/sys/amd64/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) @@ -228,5 +228,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; Modified: head/sys/amd64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 22:20:47 2017 (r315752) +++ head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) @@ -212,7 +212,6 @@ Elf64_Brandinfo cloudabi64_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_X86_64, .sysvec = &cloudabi64_elf_sysvec, - .flags = BI_CAN_EXEC_DYN, + .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE_ONLY_STATIC, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", }; Modified: head/sys/arm/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/arm/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:20:47 2017 (r315752) +++ head/sys/arm/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) @@ -190,5 +190,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_ARM, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; Modified: head/sys/arm64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/arm64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 22:20:47 2017 (r315752) +++ head/sys/arm64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) @@ -181,7 +181,6 @@ Elf64_Brandinfo cloudabi64_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_AARCH64, .sysvec = &cloudabi64_elf_sysvec, - .flags = BI_CAN_EXEC_DYN, + .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE_ONLY_STATIC, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", }; Modified: head/sys/i386/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/i386/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:20:47 2017 (r315752) +++ head/sys/i386/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) @@ -201,5 +201,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .interp_path = "/nonexistent", + .flags = BI_BRAND_NOTE_ONLY_STATIC, }; Modified: head/sys/kern/imgact_elf.c ============================================================================== --- head/sys/kern/imgact_elf.c Wed Mar 22 22:20:47 2017 (r315752) +++ head/sys/kern/imgact_elf.c Wed Mar 22 22:23:01 2017 (r315753) @@ -273,6 +273,9 @@ __elfN(get_brandinfo)(struct image_param bi = elf_brand_list[i]; if (bi == NULL) continue; + if (interp != NULL && + (bi->flags & BI_BRAND_NOTE_ONLY_STATIC) != 0) + continue; if (hdr->e_machine == bi->machine && (bi->flags & (BI_BRAND_NOTE|BI_BRAND_NOTE_MANDATORY)) != 0) { ret = __elfN(check_note)(imgp, bi->brand_note, osrel); @@ -305,7 +308,9 @@ __elfN(get_brandinfo)(struct image_param /* If the executable has a brand, search for it in the brand list. */ for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || + (interp != NULL && (bi->flags & + BI_BRAND_NOTE_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && (hdr->e_ident[EI_OSABI] == bi->brand || @@ -351,7 +356,8 @@ __elfN(get_brandinfo)(struct image_param if (interp != NULL) { for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & (BI_BRAND_NOTE_MANDATORY | + BI_BRAND_NOTE_ONLY_STATIC)) != 0) continue; if (hdr->e_machine == bi->machine && /* ELF image p_filesz includes terminating zero */ @@ -365,7 +371,9 @@ __elfN(get_brandinfo)(struct image_param /* Lacking a recognized interpreter, try the default brand */ for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) + if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || + (interp != NULL && (bi->flags & + BI_BRAND_NOTE_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && __elfN(fallback_brand) == bi->brand) Modified: head/sys/sys/imgact_elf.h ============================================================================== --- head/sys/sys/imgact_elf.h Wed Mar 22 22:20:47 2017 (r315752) +++ head/sys/sys/imgact_elf.h Wed Mar 22 22:23:01 2017 (r315753) @@ -81,6 +81,7 @@ typedef struct { #define BI_CAN_EXEC_DYN 0x0001 #define BI_BRAND_NOTE 0x0002 /* May have note.ABI-tag section. */ #define BI_BRAND_NOTE_MANDATORY 0x0004 /* Must have note.ABI-tag section. */ +#define BI_BRAND_NOTE_ONLY_STATIC 0x0008 } __ElfN(Brandinfo); __ElfType(Auxargs); From owner-svn-src-head@freebsd.org Wed Mar 22 22:28:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 870E4D18E73; Wed, 22 Mar 2017 22:28:15 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 452BA187F; Wed, 22 Mar 2017 22:28:15 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MMSERt048601; Wed, 22 Mar 2017 22:28:14 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MMSDeZ048594; Wed, 22 Mar 2017 22:28:13 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703222228.v2MMSDeZ048594@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 22 Mar 2017 22:28:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315754 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 kern sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 22:28:15 -0000 Author: kib Date: Wed Mar 22 22:28:13 2017 New Revision: 315754 URL: https://svnweb.freebsd.org/changeset/base/315754 Log: Update r315753 with the proper flag name. Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/amd64/cloudabi32/cloudabi32_sysvec.c head/sys/amd64/cloudabi64/cloudabi64_sysvec.c head/sys/arm/cloudabi32/cloudabi32_sysvec.c head/sys/arm64/cloudabi64/cloudabi64_sysvec.c head/sys/i386/cloudabi32/cloudabi32_sysvec.c head/sys/kern/imgact_elf.c head/sys/sys/imgact_elf.h Modified: head/sys/amd64/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) +++ head/sys/amd64/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:28:13 2017 (r315754) @@ -228,5 +228,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .flags = BI_BRAND_NOTE_ONLY_STATIC, + .flags = BI_BRAND_ONLY_STATIC, }; Modified: head/sys/amd64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) +++ head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 22:28:13 2017 (r315754) @@ -212,6 +212,6 @@ Elf64_Brandinfo cloudabi64_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_X86_64, .sysvec = &cloudabi64_elf_sysvec, - .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE_ONLY_STATIC, + .flags = BI_CAN_EXEC_DYN | BI_BRAND_ONLY_STATIC, .compat_3_brand = "CloudABI", }; Modified: head/sys/arm/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/arm/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) +++ head/sys/arm/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:28:13 2017 (r315754) @@ -190,5 +190,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_ARM, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .flags = BI_BRAND_NOTE_ONLY_STATIC, + .flags = BI_BRAND_ONLY_STATIC, }; Modified: head/sys/arm64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/arm64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) +++ head/sys/arm64/cloudabi64/cloudabi64_sysvec.c Wed Mar 22 22:28:13 2017 (r315754) @@ -181,6 +181,6 @@ Elf64_Brandinfo cloudabi64_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_AARCH64, .sysvec = &cloudabi64_elf_sysvec, - .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE_ONLY_STATIC, + .flags = BI_CAN_EXEC_DYN | BI_BRAND_ONLY_STATIC, .compat_3_brand = "CloudABI", }; Modified: head/sys/i386/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/i386/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:23:01 2017 (r315753) +++ head/sys/i386/cloudabi32/cloudabi32_sysvec.c Wed Mar 22 22:28:13 2017 (r315754) @@ -201,5 +201,5 @@ Elf32_Brandinfo cloudabi32_brand = { .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, .compat_3_brand = "CloudABI", - .flags = BI_BRAND_NOTE_ONLY_STATIC, + .flags = BI_BRAND_ONLY_STATIC, }; Modified: head/sys/kern/imgact_elf.c ============================================================================== --- head/sys/kern/imgact_elf.c Wed Mar 22 22:23:01 2017 (r315753) +++ head/sys/kern/imgact_elf.c Wed Mar 22 22:28:13 2017 (r315754) @@ -273,8 +273,7 @@ __elfN(get_brandinfo)(struct image_param bi = elf_brand_list[i]; if (bi == NULL) continue; - if (interp != NULL && - (bi->flags & BI_BRAND_NOTE_ONLY_STATIC) != 0) + if (interp != NULL && (bi->flags & BI_BRAND_ONLY_STATIC) != 0) continue; if (hdr->e_machine == bi->machine && (bi->flags & (BI_BRAND_NOTE|BI_BRAND_NOTE_MANDATORY)) != 0) { @@ -309,8 +308,7 @@ __elfN(get_brandinfo)(struct image_param for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || - (interp != NULL && (bi->flags & - BI_BRAND_NOTE_ONLY_STATIC) != 0)) + (interp != NULL && (bi->flags & BI_BRAND_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && (hdr->e_ident[EI_OSABI] == bi->brand || @@ -356,8 +354,9 @@ __elfN(get_brandinfo)(struct image_param if (interp != NULL) { for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || (bi->flags & (BI_BRAND_NOTE_MANDATORY | - BI_BRAND_NOTE_ONLY_STATIC)) != 0) + if (bi == NULL || (bi->flags & + (BI_BRAND_NOTE_MANDATORY | BI_BRAND_ONLY_STATIC)) + != 0) continue; if (hdr->e_machine == bi->machine && /* ELF image p_filesz includes terminating zero */ @@ -372,8 +371,7 @@ __elfN(get_brandinfo)(struct image_param for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || - (interp != NULL && (bi->flags & - BI_BRAND_NOTE_ONLY_STATIC) != 0)) + (interp != NULL && (bi->flags & BI_BRAND_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && __elfN(fallback_brand) == bi->brand) Modified: head/sys/sys/imgact_elf.h ============================================================================== --- head/sys/sys/imgact_elf.h Wed Mar 22 22:23:01 2017 (r315753) +++ head/sys/sys/imgact_elf.h Wed Mar 22 22:28:13 2017 (r315754) @@ -81,7 +81,7 @@ typedef struct { #define BI_CAN_EXEC_DYN 0x0001 #define BI_BRAND_NOTE 0x0002 /* May have note.ABI-tag section. */ #define BI_BRAND_NOTE_MANDATORY 0x0004 /* Must have note.ABI-tag section. */ -#define BI_BRAND_NOTE_ONLY_STATIC 0x0008 +#define BI_BRAND_ONLY_STATIC 0x0008 /* Match only interp-less binaries. */ } __ElfN(Brandinfo); __ElfType(Auxargs); From owner-svn-src-head@freebsd.org Wed Mar 22 22:29:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 60748D18EE5; Wed, 22 Mar 2017 22:29:15 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2CEDD19FB; Wed, 22 Mar 2017 22:29:15 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MMTExA048680; Wed, 22 Mar 2017 22:29:14 GMT (envelope-from gjb@FreeBSD.org) Received: (from gjb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MMTErD048679; Wed, 22 Mar 2017 22:29:14 GMT (envelope-from gjb@FreeBSD.org) Message-Id: <201703222229.v2MMTErD048679@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org using -f From: Glen Barber Date: Wed, 22 Mar 2017 22:29:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315755 - head/release/doc/en_US.ISO8859-1/hardware X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 22:29:15 -0000 Author: gjb Date: Wed Mar 22 22:29:14 2017 New Revision: 315755 URL: https://svnweb.freebsd.org/changeset/base/315755 Log: Fix hardware list build after r315742. Sponsored by: The FreeBSD Foundation Modified: head/release/doc/en_US.ISO8859-1/hardware/article.xml Modified: head/release/doc/en_US.ISO8859-1/hardware/article.xml ============================================================================== --- head/release/doc/en_US.ISO8859-1/hardware/article.xml Wed Mar 22 22:28:13 2017 (r315754) +++ head/release/doc/en_US.ISO8859-1/hardware/article.xml Wed Mar 22 22:29:14 2017 (r315755) @@ -797,8 +797,6 @@ &hwlist.hme; - &hwlist.igb; - &hwlist.ipheth; &hwlist.ixgb; From owner-svn-src-head@freebsd.org Wed Mar 22 22:30:09 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8FF9AD18F66; Wed, 22 Mar 2017 22:30:09 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pf0-x242.google.com (mail-pf0-x242.google.com [IPv6:2607:f8b0:400e:c00::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5640B1B5A; Wed, 22 Mar 2017 22:30:09 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pf0-x242.google.com with SMTP id n11so17464855pfg.2; Wed, 22 Mar 2017 15:30:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to; bh=6dTtEQriPGXsRIbmkygy5yjrxhWRK7FGHqN1YjkZCWo=; b=kN0q5lB6HStmjotvLtpjZRaFQhHSduZcbuGSI6YCL/zDYG2V947bHilkHRFFPS+85k OVt5kd5WE9CUuQrztQ0RWCoLKbaa6Vl+naeopKN2Q7j0JkH9ZUaqWvzhNhqSenMWcwtX 5xPGEFpoaGtcwRY2MVWsh3+b34NuuMas11UIXx4qIzd2vIqAAGYj9YzxljL0IkibpC3n mB76YhajhfcHbqxvxyHqkPPsIiXBa0tpCf4KBc47Q6S+PlUMRwJniFY21/TAd4MHMEh6 0KbQxCwEeO7qDm/diN/Ec/q2AsFu95b9Ih6/JwUDF5nut8+CtgNc///RivX/EBe7nwdP 2n3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:mime-version:from:in-reply-to:date:cc :message-id:references:to; bh=6dTtEQriPGXsRIbmkygy5yjrxhWRK7FGHqN1YjkZCWo=; b=l3ZIKNDUfogtTMpGm0Qea7WdweRJ7PU/meOE3lQ5cxv5pQnpP+U6AJlST7AY7a8fhv iJO2Mc5op4DMF/19pR0WQ1HuUNwVRKeDrBxFMbc7JnlzIPB2bCMCi21V/lgCPZD0lK2x 6BsGq5NCu68rNnf+VCoDxMgn+TQ2g1mfqfuiq67j3zaeQmP3yTf24iLVfmbpSvA2UOXO A1rgbj4PqKjWaPfthnlbYUr26eztUVUlb2bl4TY0flyDVTFNsNZu/JWTJ6uXSfUcKNIo zH5GgQ6p8DomEef5r0fDvQXh2lCZRDMqPlXM7/gA1/Eqd8H69Nwd8RsU7kZRrbITRaI1 nKxg== X-Gm-Message-State: AFeK/H1Mmlmcn/aRfMBvkRTb90V1bWcl0pc2nygZDO+WgvrptmrtEJCQd7mW6MTfCXzZug== X-Received: by 10.98.11.144 with SMTP id 16mr48428331pfl.78.1490221808781; Wed, 22 Mar 2017 15:30:08 -0700 (PDT) Received: from pinklady.local (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id d4sm5811264pfb.104.2017.03.22.15.30.07 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Mar 2017 15:30:08 -0700 (PDT) Subject: Re: svn commit: r315755 - head/release/doc/en_US.ISO8859-1/hardware Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Content-Type: multipart/signed; boundary="Apple-Mail=_08913348-BC3D-42B1-911F-7FD3D6BE086F"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Pgp-Agent: GPGMail From: "Ngie Cooper (yaneurabeya)" In-Reply-To: <201703222229.v2MMTErD048679@repo.freebsd.org> Date: Wed, 22 Mar 2017 15:30:06 -0700 Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: <6F87B744-1A45-4F3E-A05D-77D55CF17D1A@gmail.com> References: <201703222229.v2MMTErD048679@repo.freebsd.org> To: Glen Barber X-Mailer: Apple Mail (2.3124) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 22:30:09 -0000 --Apple-Mail=_08913348-BC3D-42B1-911F-7FD3D6BE086F Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii > On Mar 22, 2017, at 15:29, Glen Barber wrote: > > Author: gjb > Date: Wed Mar 22 22:29:14 2017 > New Revision: 315755 > URL: https://svnweb.freebsd.org/changeset/base/315755 > > Log: > Fix hardware list build after r315742. > > Sponsored by: The FreeBSD Foundation > > Modified: > head/release/doc/en_US.ISO8859-1/hardware/article.xml Thanks!! -Ngie --Apple-Mail=_08913348-BC3D-42B1-911F-7FD3D6BE086F Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJY0vrvAAoJEPWDqSZpMIYVbg4P/RHh9kHHUAJVQuqcL1mcANDH Jlj4dF2GtzXXHqLbGLkekx6/HVbllFgWWAQ3j/1SMiXHnQjX54SYb+gBT3H/3BIC ZVigtg9s4HT/B52SfHCjISsQhtDWrG5ZNALtroUcPVTw6H34Sr4YGOE/awB7UlSq 1u2vl+i1h88KP64QfoGl37ZZlizz77/V4/w2uG+0+2DbrKIgy1WfDTJJRcxp5fuB H5I+3yCPczbJ328AUxxE+1M9gNdtmfgs6Cu0TRAufgx59YdoWu4mZfDBbxQpsmsX LSEWjCM2+M3fItqHrhjWkJQmdunL/o4Fg1pSlINX7s750koMKTTqrA6RvlK7cSQt /Uvo3VMvj29O2AzCqe02EwSlSD97Qzm3tTGSo8NmygsB6ZE+6EvwLfg23s5x4Ib2 fhkhgIuzLYiGbyqaSOOF/oo9RuPHdBDxBtWKdzRIc+krMyR1qAdOvZn/XaKVUVdm zjoHhP67wXvCmoK/hrNtoFxAK/JcotZyJcYTU38CgWkD8p8wFAWpWgCbFxW+gogB emi7dvnMw8lZawwkXJAoLEAaSV4+HYAYe0VwYPnj16FeOatbU7bKJjfyS0RzC653 EOY6qcgeYash+KajscxWpA//Q1atqRpG8l69sub7W16uJzUsWgMhtJYiQqXhUUQu 4dLV4H2ZbQr1x3x8uds4 =4UAW -----END PGP SIGNATURE----- --Apple-Mail=_08913348-BC3D-42B1-911F-7FD3D6BE086F-- From owner-svn-src-head@freebsd.org Wed Mar 22 23:00:33 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0396FD18932; Wed, 22 Mar 2017 23:00:33 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 85BC91022; Wed, 22 Mar 2017 23:00:32 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id v2MN0Q6A087407 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 23 Mar 2017 01:00:26 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua v2MN0Q6A087407 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id v2MN0QWe087406; Thu, 23 Mar 2017 01:00:26 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Thu, 23 Mar 2017 01:00:26 +0200 From: Konstantin Belousov To: Ed Schouten Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 Message-ID: <20170322230026.GV43712@kib.kiev.ua> References: <201703220705.v2M75RHE066483@repo.freebsd.org> <20170322090258.GR43712@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.8.0 (2017-02-23) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 23:00:33 -0000 On Wed, Mar 22, 2017 at 03:16:24PM +0100, Ed Schouten wrote: > Similarly, I seem to remember CloudABI's brandinfos set compat_3_brand > for a similar reason: it seems to be required by imgact_elf.c. Would > we also want to change that? Could you please try this ? diff --git a/sys/amd64/cloudabi32/cloudabi32_sysvec.c b/sys/amd64/cloudabi32/cloudabi32_sysvec.c index 9306dbc5dfb..abede1ac4ce 100644 --- a/sys/amd64/cloudabi32/cloudabi32_sysvec.c +++ b/sys/amd64/cloudabi32/cloudabi32_sysvec.c @@ -227,6 +227,5 @@ Elf32_Brandinfo cloudabi32_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, - .compat_3_brand = "CloudABI", .flags = BI_BRAND_ONLY_STATIC, }; diff --git a/sys/amd64/cloudabi64/cloudabi64_sysvec.c b/sys/amd64/cloudabi64/cloudabi64_sysvec.c index 3428bbf4909..84f0cb387de 100644 --- a/sys/amd64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/amd64/cloudabi64/cloudabi64_sysvec.c @@ -213,5 +213,4 @@ Elf64_Brandinfo cloudabi64_brand = { .machine = EM_X86_64, .sysvec = &cloudabi64_elf_sysvec, .flags = BI_CAN_EXEC_DYN | BI_BRAND_ONLY_STATIC, - .compat_3_brand = "CloudABI", }; diff --git a/sys/arm/cloudabi32/cloudabi32_sysvec.c b/sys/arm/cloudabi32/cloudabi32_sysvec.c index d14129ec4c9..100fa479acd 100644 --- a/sys/arm/cloudabi32/cloudabi32_sysvec.c +++ b/sys/arm/cloudabi32/cloudabi32_sysvec.c @@ -189,6 +189,5 @@ Elf32_Brandinfo cloudabi32_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_ARM, .sysvec = &cloudabi32_elf_sysvec, - .compat_3_brand = "CloudABI", .flags = BI_BRAND_ONLY_STATIC, }; diff --git a/sys/arm64/cloudabi64/cloudabi64_sysvec.c b/sys/arm64/cloudabi64/cloudabi64_sysvec.c index 7f339fe3910..fbad0ba70db 100644 --- a/sys/arm64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/arm64/cloudabi64/cloudabi64_sysvec.c @@ -182,5 +182,4 @@ Elf64_Brandinfo cloudabi64_brand = { .machine = EM_AARCH64, .sysvec = &cloudabi64_elf_sysvec, .flags = BI_CAN_EXEC_DYN | BI_BRAND_ONLY_STATIC, - .compat_3_brand = "CloudABI", }; diff --git a/sys/i386/cloudabi32/cloudabi32_sysvec.c b/sys/i386/cloudabi32/cloudabi32_sysvec.c index 1bd46cb99aa..c2a21fa9046 100644 --- a/sys/i386/cloudabi32/cloudabi32_sysvec.c +++ b/sys/i386/cloudabi32/cloudabi32_sysvec.c @@ -200,6 +200,5 @@ Elf32_Brandinfo cloudabi32_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, - .compat_3_brand = "CloudABI", .flags = BI_BRAND_ONLY_STATIC, }; diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c index 42b02c1bd9e..7058a77854b 100644 --- a/sys/kern/imgact_elf.c +++ b/sys/kern/imgact_elf.c @@ -307,7 +307,8 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, /* If the executable has a brand, search for it in the brand list. */ for (i = 0; i < MAX_BRANDS; i++) { bi = elf_brand_list[i]; - if (bi == NULL || (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || + if (bi == NULL || bi->compat_3_brand == NULL || + (bi->flags & BI_BRAND_NOTE_MANDATORY) != 0 || (interp != NULL && (bi->flags & BI_BRAND_ONLY_STATIC) != 0)) continue; if (hdr->e_machine == bi->machine && From owner-svn-src-head@freebsd.org Wed Mar 22 23:47:16 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 756BFD1837F; Wed, 22 Mar 2017 23:47:16 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 44F4C98E; Wed, 22 Mar 2017 23:47:16 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2MNlFIm081378; Wed, 22 Mar 2017 23:47:15 GMT (envelope-from gjb@FreeBSD.org) Received: (from gjb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2MNlFSO081377; Wed, 22 Mar 2017 23:47:15 GMT (envelope-from gjb@FreeBSD.org) Message-Id: <201703222347.v2MNlFSO081377@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org using -f From: Glen Barber Date: Wed, 22 Mar 2017 23:47:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315759 - head/release/doc/en_US.ISO8859-1/hardware X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Mar 2017 23:47:16 -0000 Author: gjb Date: Wed Mar 22 23:47:15 2017 New Revision: 315759 URL: https://svnweb.freebsd.org/changeset/base/315759 Log: Add mlx5en(4) to the hardware page. [1] Belatedly bump copyright years after several changes. Reported by: rgrimes [1] Sponsored by: The FreeBSD Foundation Modified: head/release/doc/en_US.ISO8859-1/hardware/article.xml Modified: head/release/doc/en_US.ISO8859-1/hardware/article.xml ============================================================================== --- head/release/doc/en_US.ISO8859-1/hardware/article.xml Wed Mar 22 22:49:11 2017 (r315758) +++ head/release/doc/en_US.ISO8859-1/hardware/article.xml Wed Mar 22 23:47:15 2017 (r315759) @@ -30,6 +30,9 @@ 2012 2013 2014 + 2015 + 2016 + 2017 The &os; Documentation Project @@ -809,6 +812,8 @@ &hwlist.lge; + &hwlist.mlx5en; + &hwlist.msk; &hwlist.mxge; From owner-svn-src-head@freebsd.org Thu Mar 23 00:41:34 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C1BB5D1682E; Thu, 23 Mar 2017 00:41:34 +0000 (UTC) (envelope-from marius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8A8A1D4B; Thu, 23 Mar 2017 00:41:34 +0000 (UTC) (envelope-from marius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N0fXEH002007; Thu, 23 Mar 2017 00:41:33 GMT (envelope-from marius@FreeBSD.org) Received: (from marius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N0fXk7002006; Thu, 23 Mar 2017 00:41:33 GMT (envelope-from marius@FreeBSD.org) Message-Id: <201703230041.v2N0fXk7002006@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marius set sender to marius@FreeBSD.org using -f From: Marius Strobl Date: Thu, 23 Mar 2017 00:41:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315760 - head/sys/arm/nvidia X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 00:41:34 -0000 Author: marius Date: Thu Mar 23 00:41:33 2017 New Revision: 315760 URL: https://svnweb.freebsd.org/changeset/base/315760 Log: Correct the dependency of mmc(4) on sdhci_tegra(4) after r314887. Modified: head/sys/arm/nvidia/tegra_sdhci.c Modified: head/sys/arm/nvidia/tegra_sdhci.c ============================================================================== --- head/sys/arm/nvidia/tegra_sdhci.c Wed Mar 22 23:47:15 2017 (r315759) +++ head/sys/arm/nvidia/tegra_sdhci.c Thu Mar 23 00:41:33 2017 (r315760) @@ -459,7 +459,7 @@ static device_method_t tegra_sdhci_metho }; static devclass_t tegra_sdhci_devclass; -static DEFINE_CLASS_0(sdhci, tegra_sdhci_driver, tegra_sdhci_methods, +static DEFINE_CLASS_0(sdhci_tegra, tegra_sdhci_driver, tegra_sdhci_methods, sizeof(struct tegra_sdhci_softc)); DRIVER_MODULE(sdhci_tegra, simplebus, tegra_sdhci_driver, tegra_sdhci_devclass, NULL, NULL); From owner-svn-src-head@freebsd.org Thu Mar 23 00:56:53 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 80777D16DF0; Thu, 23 Mar 2017 00:56:53 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4D52C183C; Thu, 23 Mar 2017 00:56:53 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N0uq4w010085; Thu, 23 Mar 2017 00:56:52 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N0uq7A010084; Thu, 23 Mar 2017 00:56:52 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230056.v2N0uq7A010084@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 00:56:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315761 - head/release/doc/en_US.ISO8859-1/hardware X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 00:56:53 -0000 Author: ngie Date: Thu Mar 23 00:56:52 2017 New Revision: 315761 URL: https://svnweb.freebsd.org/changeset/base/315761 Log: Add cxgbe(4), ixl(4), and mlx4en(4) to the hardware release notes MFC after: 1 week Reviewed by: gjb Sponsored by: Dell EMC Isilon Modified: head/release/doc/en_US.ISO8859-1/hardware/article.xml Modified: head/release/doc/en_US.ISO8859-1/hardware/article.xml ============================================================================== --- head/release/doc/en_US.ISO8859-1/hardware/article.xml Thu Mar 23 00:41:33 2017 (r315760) +++ head/release/doc/en_US.ISO8859-1/hardware/article.xml Thu Mar 23 00:56:52 2017 (r315761) @@ -777,6 +777,8 @@ &hwlist.cxgb; + &hwlist.cxgbe; + &hwlist.dc; &hwlist.de; @@ -806,12 +808,16 @@ &hwlist.ixgbe; + &hwlist.ixl; + &hwlist.jme; &hwlist.kue; &hwlist.lge; + &hwlist.mlx4en; + &hwlist.mlx5en; &hwlist.msk; From owner-svn-src-head@freebsd.org Thu Mar 23 01:16:27 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5999DD17CC6; Thu, 23 Mar 2017 01:16:27 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 292C3AEC; Thu, 23 Mar 2017 01:16:27 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N1GQmh018093; Thu, 23 Mar 2017 01:16:26 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N1GQbC018092; Thu, 23 Mar 2017 01:16:26 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230116.v2N1GQbC018092@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 01:16:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315762 - head/share/man/man5 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 01:16:27 -0000 Author: ngie Date: Thu Mar 23 01:16:26 2017 New Revision: 315762 URL: https://svnweb.freebsd.org/changeset/base/315762 Log: rc.conf(5): fix a .Xr call for chroot(8) Add the missing section number to the .Xr call. MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/share/man/man5/rc.conf.5 Modified: head/share/man/man5/rc.conf.5 ============================================================================== --- head/share/man/man5/rc.conf.5 Thu Mar 23 00:56:52 2017 (r315761) +++ head/share/man/man5/rc.conf.5 Thu Mar 23 01:16:26 2017 (r315762) @@ -182,7 +182,7 @@ Enabling this option is likely to increa services are enabled that utilize the force_depend check. .It Ao Ar name Ac Ns Va _chroot .Pq Vt str -.Xr chroot +.Xr chroot 8 to this directory before running the service. .It Ao Ar name Ac Ns Va _user .Pq Vt str From owner-svn-src-head@freebsd.org Thu Mar 23 01:44:18 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 63290D18784; Thu, 23 Mar 2017 01:44:18 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 306508B3; Thu, 23 Mar 2017 01:44:18 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N1iHlF030556; Thu, 23 Mar 2017 01:44:17 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N1iH2k030555; Thu, 23 Mar 2017 01:44:17 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230144.v2N1iH2k030555@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 01:44:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315763 - head/tools/build/options X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 01:44:18 -0000 Author: ngie Date: Thu Mar 23 01:44:17 2017 New Revision: 315763 URL: https://svnweb.freebsd.org/changeset/base/315763 Log: Add a WITHOUT_RATELIMIT option description for src.conf(5) This is a follow up commit for r312379 MFC after: 1 month X-MFC with: r312379 Sponsored by: Dell EMC Isilon Added: head/tools/build/options/WITH_RATELIMIT - copied, changed from r315759, head/tools/build/options/WITH_CTF Copied and modified: head/tools/build/options/WITH_RATELIMIT (from r315759, head/tools/build/options/WITH_CTF) ============================================================================== --- head/tools/build/options/WITH_CTF Wed Mar 22 23:47:15 2017 (r315759, copy source) +++ head/tools/build/options/WITH_RATELIMIT Thu Mar 23 01:44:17 2017 (r315763) @@ -1,4 +1,12 @@ .\" $FreeBSD$ -Set to compile with CTF (Compact C Type Format) data. -CTF data encapsulates a reduced form of debugging information -similar to DWARF and the venerable stabs and is required for DTrace. +Set to build the system with rate limit support. +.Pp +This makes +.Dv SO_MAX_PACING_RATE +effective in +.Xr getsockopt 2 , +and +.Ar txrlimit +support in +.Xr ifconfig 8 , +by proxy. From owner-svn-src-head@freebsd.org Thu Mar 23 02:01:26 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 66FDED18253; Thu, 23 Mar 2017 02:01:26 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 343F013C4; Thu, 23 Mar 2017 02:01:26 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N21Pom036451; Thu, 23 Mar 2017 02:01:25 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N21PAE036450; Thu, 23 Mar 2017 02:01:25 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230201.v2N21PAE036450@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:01:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315764 - head/tools/build/options X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:01:26 -0000 Author: ngie Date: Thu Mar 23 02:01:25 2017 New Revision: 315764 URL: https://svnweb.freebsd.org/changeset/base/315764 Log: Add a WITHOUT_IPSEC_SUPPORT option description for src.conf(5) This is a follow up commit to r313330. MFC after: 1 week Sponsored by: Dell EMC Isilon Added: head/tools/build/options/WITHOUT_IPSEC_SUPPORT - copied, changed from r315763, head/tools/build/options/WITH_RATELIMIT Copied and modified: head/tools/build/options/WITHOUT_IPSEC_SUPPORT (from r315763, head/tools/build/options/WITH_RATELIMIT) ============================================================================== --- head/tools/build/options/WITH_RATELIMIT Thu Mar 23 01:44:17 2017 (r315763, copy source) +++ head/tools/build/options/WITHOUT_IPSEC_SUPPORT Thu Mar 23 02:01:25 2017 (r315764) @@ -1,12 +1,7 @@ .\" $FreeBSD$ -Set to build the system with rate limit support. -.Pp -This makes -.Dv SO_MAX_PACING_RATE -effective in -.Xr getsockopt 2 , +Set to not build the kernel with +.Xr ipsec 4 +support. This option is needed for +.Xr ipsec 4 and -.Ar txrlimit -support in -.Xr ifconfig 8 , -by proxy. +.Xr tcpmd5 4 . From owner-svn-src-head@freebsd.org Thu Mar 23 02:14:01 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 02774D18C99; Thu, 23 Mar 2017 02:14:01 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C3C3D1C8F; Thu, 23 Mar 2017 02:14:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2DxlU042750; Thu, 23 Mar 2017 02:13:59 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2DxKW042749; Thu, 23 Mar 2017 02:13:59 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230213.v2N2DxKW042749@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:13:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315765 - head/tools/build/options X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:14:01 -0000 Author: ngie Date: Thu Mar 23 02:13:59 2017 New Revision: 315765 URL: https://svnweb.freebsd.org/changeset/base/315765 Log: Fix mdoc(7) warning: new sentences should start on new lines MFC after: 1 week X-MFC with: r315764 Sponsored by: Dell EMC Isilon Modified: head/tools/build/options/WITHOUT_IPSEC_SUPPORT Modified: head/tools/build/options/WITHOUT_IPSEC_SUPPORT ============================================================================== --- head/tools/build/options/WITHOUT_IPSEC_SUPPORT Thu Mar 23 02:01:25 2017 (r315764) +++ head/tools/build/options/WITHOUT_IPSEC_SUPPORT Thu Mar 23 02:13:59 2017 (r315765) @@ -1,7 +1,8 @@ .\" $FreeBSD$ Set to not build the kernel with .Xr ipsec 4 -support. This option is needed for +support. +This option is needed for .Xr ipsec 4 and .Xr tcpmd5 4 . From owner-svn-src-head@freebsd.org Thu Mar 23 02:16:58 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0D1D5D18FF8; Thu, 23 Mar 2017 02:16:58 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CA2141F05; Thu, 23 Mar 2017 02:16:57 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2Guda042905; Thu, 23 Mar 2017 02:16:56 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2GubE042904; Thu, 23 Mar 2017 02:16:56 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230216.v2N2GubE042904@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:16:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315766 - head/tools/build/options X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:16:58 -0000 Author: ngie Date: Thu Mar 23 02:16:56 2017 New Revision: 315766 URL: https://svnweb.freebsd.org/changeset/base/315766 Log: Note that tools/build/options/makeman automatically generated src.conf(5) This (as a bonus) fixes mdoc warnings with src.conf(5) :).. MFC after: 1 month Sponsored by: Dell EMC Isilon Modified: head/tools/build/options/makeman Modified: head/tools/build/options/makeman ============================================================================== --- head/tools/build/options/makeman Thu Mar 23 02:13:59 2017 (r315765) +++ head/tools/build/options/makeman Thu Mar 23 02:16:56 2017 (r315766) @@ -337,7 +337,8 @@ The file appeared in .Fx 7.0 . .Sh AUTHORS -This manual page was autogenerated. +This manual page was autogenerated by +.An Pa tools/build/options/makeman . EOF } From owner-svn-src-head@freebsd.org Thu Mar 23 02:22:00 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A6FBFD188C4; Thu, 23 Mar 2017 02:22:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 813678D3; Thu, 23 Mar 2017 02:22:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2Lx3u046978; Thu, 23 Mar 2017 02:21:59 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2Lx7o046977; Thu, 23 Mar 2017 02:21:59 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230221.v2N2Lx7o046977@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:21:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315767 - head/share/man/man5 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:22:00 -0000 Author: ngie Date: Thu Mar 23 02:21:59 2017 New Revision: 315767 URL: https://svnweb.freebsd.org/changeset/base/315767 Log: Regenerate src.conf(5) Sponsored by: Dell EMC Isilon Modified: head/share/man/man5/src.conf.5 Modified: head/share/man/man5/src.conf.5 ============================================================================== --- head/share/man/man5/src.conf.5 Thu Mar 23 02:16:56 2017 (r315766) +++ head/share/man/man5/src.conf.5 Thu Mar 23 02:21:59 2017 (r315767) @@ -1,7 +1,7 @@ .\" DO NOT EDIT-- this file is automatically generated. -.\" from FreeBSD: head/tools/build/options/makeman 313173 2017-02-03 20:17:54Z wblock +.\" from FreeBSD: head/tools/build/options/makeman 315766 2017-03-23 02:16:56Z ngie .\" $FreeBSD$ -.Dd March 11, 2017 +.Dd March 22, 2017 .Dt SRC.CONF 5 .Os .Sh NAME @@ -197,7 +197,7 @@ as part of the bootstrap process. This is a default setting on amd64/amd64, arm/arm, arm/armeb, arm/armv6, i386/i386, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, powerpc/powerpc, powerpc/powerpc64, powerpc/powerpcspe and sparc64/sparc64. .It Va WITHOUT_BLACKLIST -.\" from FreeBSD: head/tools/build/options/WITHOUT_BLACKLIST 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_BLACKLIST 313788 2017-02-16 04:21:24Z ngie Set this if you do not want to build blacklistd/blacklistctl. When set, it enforces these options: .Pp @@ -278,7 +278,7 @@ When set, it enforces these options: .\" from FreeBSD: head/tools/build/options/WITHOUT_CASPER 258838 2013-12-02 08:21:28Z pjd Set to not build Casper program and related libraries. .It Va WITH_CCACHE_BUILD -.\" from FreeBSD: head/tools/build/options/WITH_CCACHE_BUILD 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITH_CCACHE_BUILD 313788 2017-02-16 04:21:24Z ngie Set to use .Xr ccache 1 for the build. @@ -354,7 +354,7 @@ Set to build the Clang C/C++ compiler du This is a default setting on amd64/amd64, arm/arm, arm/armeb, arm/armv6, arm64/aarch64, i386/i386, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, powerpc/powerpc, powerpc/powerpc64 and powerpc/powerpcspe. .It Va WITHOUT_CLANG_BOOTSTRAP -.\" from FreeBSD: head/tools/build/options/WITHOUT_CLANG_BOOTSTRAP 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_CLANG_BOOTSTRAP 313788 2017-02-16 04:21:24Z ngie Set to not build the Clang C/C++ compiler during the bootstrap phase of the build. To be able to build the system, either gcc or clang bootstrap must be @@ -410,7 +410,7 @@ amd64/amd64, arm/arm, arm/armeb, arm/arm Set to not build .Xr cpp 1 . .It Va WITHOUT_CROSS_COMPILER -.\" from FreeBSD: head/tools/build/options/WITHOUT_CROSS_COMPILER 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_CROSS_COMPILER 313788 2017-02-16 04:21:24Z ngie Set to not build any cross compiler in the cross-tools stage of buildworld. When compiling a different version of .Fx @@ -520,7 +520,7 @@ When set, it enforces these options: Set to avoid building or installing standalone debug files for each executable binary and shared library. .It Va WITHOUT_DIALOG -.\" from FreeBSD: head/tools/build/options/WITHOUT_DIALOG 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_DIALOG 313788 2017-02-16 04:21:24Z ngie Set to not build .Xr dialog 1 , .Xr dialog 3 , @@ -537,7 +537,7 @@ When set, it enforces these options: .\" from FreeBSD: head/tools/build/options/WITHOUT_DICT 156932 2006-03-21 07:50:50Z ru Set to not build the Webster dictionary files. .It Va WITH_DIRDEPS_BUILD -.\" from FreeBSD: head/tools/build/options/WITH_DIRDEPS_BUILD 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITH_DIRDEPS_BUILD 313788 2017-02-16 04:21:24Z ngie This is an experimental build system. For details see http://www.crufty.net/sjg/docs/freebsd-meta-mode.htm. @@ -625,10 +625,10 @@ This must be set in the environment, mak not .Pa /etc/src.conf . .It Va WITHOUT_DMAGENT -.\" from FreeBSD: head/tools/build/options/WITHOUT_DMAGENT 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_DMAGENT 313788 2017-02-16 04:21:24Z ngie Set to not build dma Mail Transport Agent. .It Va WITHOUT_DOCCOMPRESS -.\" from FreeBSD: head/tools/build/options/WITHOUT_DOCCOMPRESS 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_DOCCOMPRESS 313788 2017-02-16 04:21:24Z ngie Set to not install compressed system documentation. Only the uncompressed version will be installed. .It Va WITH_DTRACE_TESTS @@ -835,7 +835,7 @@ Set to not build .Xr gpioctl 8 as part of the base system. .It Va WITHOUT_GPL_DTC -.\" from FreeBSD: head/tools/build/options/WITHOUT_GPL_DTC 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_GPL_DTC 313788 2017-02-16 04:21:24Z ngie Set to build the BSD licensed version of the device tree compiler rather than the GPLed one from elinux.org. .It Va WITHOUT_GROFF @@ -904,7 +904,7 @@ Set to not build .\" from FreeBSD: head/tools/build/options/WITHOUT_INET_SUPPORT 221266 2011-04-30 17:58:28Z bz Set to build libraries, programs, and kernel modules without IPv4 support. .It Va WITHOUT_INSTALLLIB -.\" from FreeBSD: head/tools/build/options/WITHOUT_INSTALLLIB 313172 2017-02-03 19:21:28Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_INSTALLLIB 313788 2017-02-16 04:21:24Z ngie Set this to not install optional libraries. For example, when creating a .Xr nanobsd 8 @@ -913,7 +913,7 @@ image. The option does not work for build targets. .Ef .It Va WITH_INSTALL_AS_USER -.\" from FreeBSD: head/tools/build/options/WITH_INSTALL_AS_USER 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITH_INSTALL_AS_USER 313788 2017-02-16 04:21:24Z ngie Set to make install targets succeed for non-root users by installing files with owner and group attributes set to that of the user running the @@ -928,6 +928,15 @@ Set to not build IP Filter package. .It Va WITHOUT_IPFW .\" from FreeBSD: head/tools/build/options/WITHOUT_IPFW 183242 2008-09-21 22:02:26Z sam Set to not build IPFW tools. +.It Va WITHOUT_IPSEC_SUPPORT +.\" from FreeBSD: head/tools/build/options/WITHOUT_IPSEC_SUPPORT 315765 2017-03-23 02:13:59Z ngie +Set to not build the kernel with +.Xr ipsec 4 +support. +This option is needed for +.Xr ipsec 4 +and +.Xr tcpmd5 4 . .It Va WITHOUT_ISCSI .\" from FreeBSD: head/tools/build/options/WITHOUT_ISCSI 277675 2015-01-25 04:20:11Z ngie Set to not build @@ -944,7 +953,7 @@ Set to not build and .Xr truss 1 . .It Va WITHOUT_KERBEROS -.\" from FreeBSD: head/tools/build/options/WITHOUT_KERBEROS 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITHOUT_KERBEROS 313788 2017-02-16 04:21:24Z ngie Set this to not build Kerberos 5 (KTH Heimdal). When set, it enforces these options: .Pp @@ -1078,13 +1087,13 @@ Set to build the LLDB debugger. This is a default setting on amd64/amd64 and arm64/aarch64. .It Va WITHOUT_LLD_IS_LD -.\" from FreeBSD: head/tools/build/options/WITHOUT_LLD_IS_LD 312855 2017-01-27 01:59:12Z emaste +.\" from FreeBSD: head/tools/build/options/WITHOUT_LLD_IS_LD 313788 2017-02-16 04:21:24Z ngie Set to use GNU binutils ld as the system linker, instead of LLVM's LLD. .Pp This is a default setting on amd64/amd64, arm/arm, arm/armeb, arm/armv6, i386/i386, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, powerpc/powerpc, powerpc/powerpc64, powerpc/powerpcspe and sparc64/sparc64. .It Va WITH_LLD_IS_LD -.\" from FreeBSD: head/tools/build/options/WITH_LLD_IS_LD 312855 2017-01-27 01:59:12Z emaste +.\" from FreeBSD: head/tools/build/options/WITH_LLD_IS_LD 313788 2017-02-16 04:21:24Z ngie Set to use LLVM's LLD as the system linker, instead of GNU binutils ld. .Pp This is a default setting on @@ -1180,7 +1189,7 @@ Set to not build utilities for manual pa .Xr manctl 8 , and related support files. .It Va WITH_META_MODE -.\" from FreeBSD: head/tools/build/options/WITH_META_MODE 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITH_META_MODE 313788 2017-02-16 04:21:24Z ngie Create .Xr make 1 meta files when building, which can provide a reliable incremental build when @@ -1394,6 +1403,19 @@ Set to not build radius support into var .Xr pam_radius 8 and .Xr ppp 8 . +.It Va WITH_RATELIMIT +.\" from FreeBSD: head/tools/build/options/WITH_RATELIMIT 315763 2017-03-23 01:44:17Z ngie +Set to build the system with rate limit support. +.Pp +This makes +.Dv SO_MAX_PACING_RATE +effective in +.Xr getsockopt 2 , +and +.Ar txrlimit +support in +.Xr ifconfig 8 , +by proxy. .It Va WITHOUT_RBOOTD .\" from FreeBSD: head/tools/build/options/WITHOUT_RBOOTD 278192 2015-02-04 10:19:32Z ngie Set to not build or install @@ -1502,7 +1524,7 @@ This must be set in the environment, mak not .Pa /etc/src.conf . .It Va WITH_STAGING_MAN -.\" from FreeBSD: head/tools/build/options/WITH_STAGING_MAN 313169 2017-02-03 19:09:46Z wblock +.\" from FreeBSD: head/tools/build/options/WITH_STAGING_MAN 313788 2017-02-16 04:21:24Z ngie Enable staging of man pages to stage tree. .It Va WITH_STAGING_PROG .\" from FreeBSD: head/tools/build/options/WITH_STAGING_PROG 284708 2015-06-22 20:21:57Z sjg @@ -1668,7 +1690,7 @@ and related programs. .\" from FreeBSD: head/tools/build/options/WITHOUT_USB 156932 2006-03-21 07:50:50Z ru Set to not build USB-related programs and libraries. .It Va WITHOUT_USB_GADGET_EXAMPLES -.\" from FreeBSD: head/tools/build/options/WITHOUT_USB_GADGET_EXAMPLES 311548 2017-01-06 21:08:19Z ngie +.\" from FreeBSD: head/tools/build/options/WITHOUT_USB_GADGET_EXAMPLES 311550 2017-01-06 21:27:39Z ngie Set to not build USB gadget kernel modules. .It Va WITHOUT_UTMPX .\" from FreeBSD: head/tools/build/options/WITHOUT_UTMPX 231530 2012-02-11 20:28:42Z ed @@ -1741,4 +1763,5 @@ The file appeared in .Fx 7.0 . .Sh AUTHORS -This manual page was autogenerated. +This manual page was autogenerated by +.An Pa tools/build/options/makeman . From owner-svn-src-head@freebsd.org Thu Mar 23 02:26:16 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D11D3D18D99; Thu, 23 Mar 2017 02:26:16 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9E37AEF7; Thu, 23 Mar 2017 02:26:16 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2QFGF047231; Thu, 23 Mar 2017 02:26:15 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2QFiG047230; Thu, 23 Mar 2017 02:26:15 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230226.v2N2QFiG047230@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:26:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315768 - head/tools/build/options X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:26:16 -0000 Author: ngie Date: Thu Mar 23 02:26:15 2017 New Revision: 315768 URL: https://svnweb.freebsd.org/changeset/base/315768 Log: Remove the .Pa portion I added to the .An macro in AUTHORS section That doesn't work (mandoc complains about the macro being empty). That's what I get for being clever and not verifying before committing things again *sigh*. MFC after: 1 month X-MFC with: r315766 Partyhat to: ngie Sponsored by: Dell EMC Isilon Modified: head/tools/build/options/makeman Modified: head/tools/build/options/makeman ============================================================================== --- head/tools/build/options/makeman Thu Mar 23 02:21:59 2017 (r315767) +++ head/tools/build/options/makeman Thu Mar 23 02:26:15 2017 (r315768) @@ -338,7 +338,7 @@ file appeared in .Fx 7.0 . .Sh AUTHORS This manual page was autogenerated by -.An Pa tools/build/options/makeman . +.An tools/build/options/makeman . EOF } From owner-svn-src-head@freebsd.org Thu Mar 23 02:30:00 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 70E4AD180F3; Thu, 23 Mar 2017 02:30:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3E1011143; Thu, 23 Mar 2017 02:30:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2TxbU047398; Thu, 23 Mar 2017 02:29:59 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2Tx5x047397; Thu, 23 Mar 2017 02:29:59 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230229.v2N2Tx5x047397@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:29:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315769 - head/share/man/man5 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:30:00 -0000 Author: ngie Date: Thu Mar 23 02:29:59 2017 New Revision: 315769 URL: https://svnweb.freebsd.org/changeset/base/315769 Log: Regenerate src.conf(5) (again) Sponsored by: Dell EMC Isilon Modified: head/share/man/man5/src.conf.5 Modified: head/share/man/man5/src.conf.5 ============================================================================== --- head/share/man/man5/src.conf.5 Thu Mar 23 02:26:15 2017 (r315768) +++ head/share/man/man5/src.conf.5 Thu Mar 23 02:29:59 2017 (r315769) @@ -1,5 +1,5 @@ .\" DO NOT EDIT-- this file is automatically generated. -.\" from FreeBSD: head/tools/build/options/makeman 315766 2017-03-23 02:16:56Z ngie +.\" from FreeBSD: head/tools/build/options/makeman 315768 2017-03-23 02:26:15Z ngie .\" $FreeBSD$ .Dd March 22, 2017 .Dt SRC.CONF 5 @@ -1764,4 +1764,4 @@ file appeared in .Fx 7.0 . .Sh AUTHORS This manual page was autogenerated by -.An Pa tools/build/options/makeman . +.An tools/build/options/makeman . From owner-svn-src-head@freebsd.org Thu Mar 23 02:30:54 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F39C2D181D9; Thu, 23 Mar 2017 02:30:53 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AA8D6144C; Thu, 23 Mar 2017 02:30:53 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2Uq7M047504; Thu, 23 Mar 2017 02:30:52 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2UqS2047503; Thu, 23 Mar 2017 02:30:52 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201703230230.v2N2UqS2047503@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Thu, 23 Mar 2017 02:30:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315770 - head/lib/libefivar X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:30:54 -0000 Author: imp Date: Thu Mar 23 02:30:52 2017 New Revision: 315770 URL: https://svnweb.freebsd.org/changeset/base/315770 Log: Define StrCmp in a funky was to be bug-compatible with EDK2 code. Paper over a coverity issue: *** CID 1372592: API usage errors (BAD_COMPARE) /lib/libefivar/efivar-dp-parse.c: 2723 in DevPathFromTextiSCSI() Truncating the result of "strcmp" to "unsigned short" may cause it to be misinterpreted as 0. Note that "strcmp" may return an integer besides -1, 0, or 1. We do this by making StrCmp return either 0 or 1 for equal or not-equal. There's a bug in the DevPathFromTextiSCSI cast of the return value and this workaround will fix it without breaking other users of StrCmp (all of which test for == 0). https://bugzilla.tianocore.org/show_bug.cgi?id=440 has been filed upstream to log this issue. CID: 1372592 Sponsored by: Netflix Modified: head/lib/libefivar/uefi-dplib.h (contents, props changed) Modified: head/lib/libefivar/uefi-dplib.h ============================================================================== --- head/lib/libefivar/uefi-dplib.h Thu Mar 23 02:29:59 2017 (r315769) +++ head/lib/libefivar/uefi-dplib.h Thu Mar 23 02:30:52 2017 (r315770) @@ -508,7 +508,16 @@ UefiDevicePathLibConvertTextToDevicePath #define LShiftU64(x, s) ((x) << s) #define ReadUnaligned64(x) le64dec(x) #define ReallocatePool(old, new, ptr) realloc(ptr, new) -#define StrCmp(a, b) strcmp(a, b) +/* + * Quirky StrCmp returns 0 if equal, 1 if not. This is what the code + * expects, though that expectation is likely a bug (it casts the + * return value. EDK2's StrCmp returns values just like C's strcmp, + * but the parse code casts this to an UINTN, which is bogus. This + * definition papers over that bogusness to do the right thing. If + * iSCSI protocol string processing is ever fixed, we can remove this + * bletcherous kludge. + */ +#define StrCmp(a, b) (strcmp(a, b) != 0) #define StrCpyS(d, l, s) strcpy(d, s) #define StrHexToUint64(x) strtoll(x, NULL, 16) #define StrHexToUintn(x) strtoll(x, NULL, 16) From owner-svn-src-head@freebsd.org Thu Mar 23 02:30:58 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B675FD18220; Thu, 23 Mar 2017 02:30:58 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7918F1486; Thu, 23 Mar 2017 02:30:58 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2UvKc047556; Thu, 23 Mar 2017 02:30:57 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2UvL2047555; Thu, 23 Mar 2017 02:30:57 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201703230230.v2N2UvL2047555@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Thu, 23 Mar 2017 02:30:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315771 - head/lib/libefivar X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:30:58 -0000 Author: imp Date: Thu Mar 23 02:30:57 2017 New Revision: 315771 URL: https://svnweb.freebsd.org/changeset/base/315771 Log: Fix a coverity-discovered NULL pointer dereference. *** CID 1372598: Null pointer dereferences (FORWARD_NULL) /lib/libefivar/efivar-dp-parse.c: 3612 in UefiDevicePathLibConvertTextToDeviceNode() Dereferencing null pointer "FromText". When ported from Tiano core, I commented this out with an ifdef. That was in error because we're supposed to fallback to a filepath when nothing else patches. Instead, restore the original code, but fix DevPathFromTextFilePath to cope with the conversion to narrow strings. Also, fix the off-by-one error in the size of the memory it allocates. The off by one error is documented in Tiano core bug https://bugzilla.tianocore.org/show_bug.cgi?id=441 CID: 1372598 Sponsored by: Netflix Modified: head/lib/libefivar/efivar-dp-parse.c (contents, props changed) Modified: head/lib/libefivar/efivar-dp-parse.c ============================================================================== --- head/lib/libefivar/efivar-dp-parse.c Thu Mar 23 02:30:52 2017 (r315770) +++ head/lib/libefivar/efivar-dp-parse.c Thu Mar 23 02:30:57 2017 (r315771) @@ -3006,7 +3006,6 @@ DevPathFromTextVenMedia ( ); } -#ifndef __FreeBSD__ /** Converts a text device path node to File device path structure. @@ -3023,6 +3022,7 @@ DevPathFromTextFilePath ( { FILEPATH_DEVICE_PATH *File; +#ifndef __FreeBSD__ File = (FILEPATH_DEVICE_PATH *) CreateDeviceNode ( MEDIA_DEVICE_PATH, MEDIA_FILEPATH_DP, @@ -3030,10 +3030,26 @@ DevPathFromTextFilePath ( ); StrCpyS (File->PathName, StrLen (TextDeviceNode) + 1, TextDeviceNode); +#else + File = (FILEPATH_DEVICE_PATH *) CreateDeviceNode ( + MEDIA_DEVICE_PATH, + MEDIA_FILEPATH_DP, + (UINT16) (sizeof (FILEPATH_DEVICE_PATH) + StrLen (TextDeviceNode) + 1) + ); + + /* + * Note: We'd have to change the Tianocore header files to fix this + * to not need a cast. Instead we just cast it here. The Interface + * to the user may have issues since this won't be a UCS-2 + * string. Also note that in the original code, a NUL wasn't + * allocated for the end of the string, but we copy that below. This + * has been corrected. + */ + StrCpyS ((char *)File->PathName, StrLen (TextDeviceNode) + 1, TextDeviceNode); +#endif return (EFI_DEVICE_PATH_PROTOCOL *) File; } -#endif /** Converts a text device path node to Media protocol device path structure. @@ -3598,7 +3614,6 @@ UefiDevicePathLibConvertTextToDeviceNode } } -#ifndef __FreeBSD__ if (FromText == NULL) { // // A file path @@ -3606,9 +3621,6 @@ UefiDevicePathLibConvertTextToDeviceNode FromText = DevPathFromTextFilePath; DeviceNode = FromText (DeviceNodeStr); } else { -#else - { -#endif DeviceNode = FromText (ParamStr); FreePool (ParamStr); } From owner-svn-src-head@freebsd.org Thu Mar 23 02:33:28 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5CCC7D185A8; Thu, 23 Mar 2017 02:33:28 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 29E551A2B; Thu, 23 Mar 2017 02:33:28 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2XRSK051471; Thu, 23 Mar 2017 02:33:27 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2XRv1051470; Thu, 23 Mar 2017 02:33:27 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230233.v2N2XRv1051470@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:33:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315772 - head/share/man/man5 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:33:28 -0000 Author: ngie Date: Thu Mar 23 02:33:27 2017 New Revision: 315772 URL: https://svnweb.freebsd.org/changeset/base/315772 Log: tmpfs(5): fix mdoc warnings - Delete trailing whitespace - Sort SEE ALSO order: mmap(2)'s Xr should come before nmount(2)'s Xr. MFC after: 1 week Reported by: make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man5/tmpfs.5 Modified: head/share/man/man5/tmpfs.5 ============================================================================== --- head/share/man/man5/tmpfs.5 Thu Mar 23 02:30:57 2017 (r315771) +++ head/share/man/man5/tmpfs.5 Thu Mar 23 02:33:27 2017 (r315772) @@ -97,9 +97,9 @@ current implementation. Keep this in mind when planning the mount limits, especially when expecting to place many small files on a tmpfs mount. .Pp -When +When .Xr mmap 2 -is used on a file from a tmpfs mount, the swap VM object managing the +is used on a file from a tmpfs mount, the swap VM object managing the file pages is used to implement mapping and avoid double-copying of the file data. This quirk causes process inspection tools, like @@ -147,8 +147,8 @@ memory file system: .Dl "mount -t tmpfs tmpfs /tmp" .Sh SEE ALSO .Xr procstat 1 , -.Xr nmount 2 , .Xr mmap 2 , +.Xr nmount 2 , .Xr unmount 2 , .Xr fstab 5 , .Xr mdmfs 8 , From owner-svn-src-head@freebsd.org Thu Mar 23 02:36:52 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ADF19D18983; Thu, 23 Mar 2017 02:36:52 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 709B41D87; Thu, 23 Mar 2017 02:36:52 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2apxL051801; Thu, 23 Mar 2017 02:36:51 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2apvX051799; Thu, 23 Mar 2017 02:36:51 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201703230236.v2N2apvX051799@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Thu, 23 Mar 2017 02:36:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315773 - head/sbin/devd X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:36:52 -0000 Author: imp Date: Thu Mar 23 02:36:51 2017 New Revision: 315773 URL: https://svnweb.freebsd.org/changeset/base/315773 Log: Implement quote escaping. String values may now contain " if you it is preceded by \. foo="I \"like\" C++" gives the value 'I "like" C++' to the variable 'foo'. If a character other than " follows the \, both the \ and that character are passed through. Differential Revision: https://reviews.freebsd.org/D6286 Sponsored by: Netflix Modified: head/sbin/devd/devd.cc head/sbin/devd/devd.hh Modified: head/sbin/devd/devd.cc ============================================================================== --- head/sbin/devd/devd.cc Thu Mar 23 02:33:27 2017 (r315772) +++ head/sbin/devd/devd.cc Thu Mar 23 02:36:51 2017 (r315773) @@ -411,6 +411,32 @@ var_list::is_set(const string &var) cons return (_vars.find(var) != _vars.end()); } +/** fix_value + * + * Removes quoted characters that have made it this far. \" are + * converted to ". For all other characters, both \ and following + * character. So the string 'fre\:\"' is translated to 'fred\:"'. + */ +const std::string & +var_list::fix_value(const std::string &val) const +{ + char *tmp, *dst; + const char *src; + std::string *rv; + + dst = tmp = new char[val.length()]; + src = val.c_str(); + while (*src) { + if (*src == '\\' && src[1] == '"') + src++; + else + *dst++ = *src++; + } + rv = new string(tmp); + delete tmp; + return *rv; +} + void var_list::set_variable(const string &var, const string &val) { @@ -420,9 +446,9 @@ var_list::set_variable(const string &var * can consume excessive amounts of systime inside of connect(). Only * log when we're in -d mode. */ + _vars[var] = fix_value(val); if (no_daemon) devdlog(LOG_DEBUG, "setting %s=%s\n", var.c_str(), val.c_str()); - _vars[var] = val; } void @@ -711,8 +737,13 @@ config::chop_var(char *&buffer, char *&l if (*walker == '"') { walker++; // skip " rhs = walker; - while (*walker && *walker != '"') + while (*walker && *walker != '"') { + // Skip \" ... We leave it in the string and strip the \ later. + // due to the super simplistic parser that we have here. + if (*walker == '\\' && walker[1] == '"') + walker++; walker++; + } if (*walker != '"') return (false); rhs[-2] = '\0'; Modified: head/sbin/devd/devd.hh ============================================================================== --- head/sbin/devd/devd.hh Thu Mar 23 02:33:27 2017 (r315772) +++ head/sbin/devd/devd.hh Thu Mar 23 02:36:51 2017 (r315773) @@ -48,14 +48,17 @@ public: * no variable of %var is set, then %bogus will be returned. */ const std::string &get_variable(const std::string &var) const; - /** Is there a variable of %var set in thi stable? + /** Is there a variable of %var set in this table? */ bool is_set(const std::string &var) const; /** A completely bogus string. */ static const std::string bogus; static const std::string nothing; + private: + const std::string &fix_value(const std::string &val) const; + std::map _vars; }; From owner-svn-src-head@freebsd.org Thu Mar 23 02:50:36 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 946BBD19347; Thu, 23 Mar 2017 02:50:36 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 53994878; Thu, 23 Mar 2017 02:50:36 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2oZ3B056056; Thu, 23 Mar 2017 02:50:35 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2oZcY056055; Thu, 23 Mar 2017 02:50:35 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230250.v2N2oZcY056055@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:50:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315774 - head/sbin/mount X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:50:36 -0000 Author: ngie Date: Thu Mar 23 02:50:35 2017 New Revision: 315774 URL: https://svnweb.freebsd.org/changeset/base/315774 Log: mount.conf(8): fix a .Xr call Add the missing section number for devfs(5) MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/sbin/mount/mount.conf.8 Modified: head/sbin/mount/mount.conf.8 ============================================================================== --- head/sbin/mount/mount.conf.8 Thu Mar 23 02:36:51 2017 (r315773) +++ head/sbin/mount/mount.conf.8 Thu Mar 23 02:50:35 2017 (r315774) @@ -62,7 +62,7 @@ See for the format of the config file. .It When the actual root file system is mounted, -.Xr devfs +.Xr devfs 5 will be re-mounted on the .Pa /dev directory. From owner-svn-src-head@freebsd.org Thu Mar 23 02:57:10 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 30DC9D19889; Thu, 23 Mar 2017 02:57:10 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0B575F59; Thu, 23 Mar 2017 02:57:09 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N2v9M2059830; Thu, 23 Mar 2017 02:57:09 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N2v8Id059826; Thu, 23 Mar 2017 02:57:08 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230257.v2N2v8Id059826@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 02:57:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315775 - in head: sbin/mount sbin/mount_cd9660 share/man/man5 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 02:57:10 -0000 Author: ngie Date: Thu Mar 23 02:57:08 2017 New Revision: 315775 URL: https://svnweb.freebsd.org/changeset/base/315775 Log: Add a post-humous manpage for cd9660(5), the ISO-9660 file system Describe (briefly) how to compile the filesystem into the kernel and load as a module. Reference cd9660(5) in mount(8) and mount_cd9660(8). MFC after: 1 month Sponsored by: Dell EMC Isilon Added: head/share/man/man5/cd9660.5 - copied, changed from r315759, head/share/man/man5/ext2fs.5 Modified: head/sbin/mount/mount.8 head/sbin/mount_cd9660/mount_cd9660.8 head/share/man/man5/Makefile Modified: head/sbin/mount/mount.8 ============================================================================== --- head/sbin/mount/mount.8 Thu Mar 23 02:50:35 2017 (r315774) +++ head/sbin/mount/mount.8 Thu Mar 23 02:57:08 2017 (r315775) @@ -28,7 +28,7 @@ .\" @(#)mount.8 8.8 (Berkeley) 6/16/94 .\" $FreeBSD$ .\" -.Dd October 13, 2015 +.Dd March 22, 2017 .Dt MOUNT 8 .Os .Sh NAME @@ -543,6 +543,7 @@ support for a particular file system mig .Xr nmount 2 , .Xr acl 3 , .Xr mac 4 , +.Xr cd9660 5 , .Xr devfs 5 , .Xr ext2fs 5 , .Xr fstab 5 , Modified: head/sbin/mount_cd9660/mount_cd9660.8 ============================================================================== --- head/sbin/mount_cd9660/mount_cd9660.8 Thu Mar 23 02:50:35 2017 (r315774) +++ head/sbin/mount_cd9660/mount_cd9660.8 Thu Mar 23 02:57:08 2017 (r315775) @@ -32,7 +32,7 @@ .\" @(#)mount_cd9660.8 8.3 (Berkeley) 3/27/94 .\" $FreeBSD$ .\" -.Dd March 5, 2013 +.Dd March 22, 2017 .Dt MOUNT_CD9660 8 .Os .Sh NAME @@ -138,6 +138,7 @@ The following command can be used to mou .Xr cdcontrol 1 , .Xr mount 2 , .Xr unmount 2 , +.Xr cd9660 5 , .Xr fstab 5 , .Xr mount 8 .Sh HISTORY Modified: head/share/man/man5/Makefile ============================================================================== --- head/share/man/man5/Makefile Thu Mar 23 02:50:35 2017 (r315774) +++ head/share/man/man5/Makefile Thu Mar 23 02:57:08 2017 (r315775) @@ -10,6 +10,7 @@ MAN= acct.5 \ ar.5 \ a.out.5 \ ${_boot.config.5} \ + cd9660.5 \ core.5 \ devfs.5 \ devfs.conf.5 \ Copied and modified: head/share/man/man5/cd9660.5 (from r315759, head/share/man/man5/ext2fs.5) ============================================================================== --- head/share/man/man5/ext2fs.5 Wed Mar 22 23:47:15 2017 (r315759, copy source) +++ head/share/man/man5/cd9660.5 Thu Mar 23 02:57:08 2017 (r315775) @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2006 Craig Rodrigues +.\" Copyright (c) 2017 Ngie Cooper .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without @@ -26,64 +26,57 @@ .\" .\" $FreeBSD$ .\" -.Dd January 23, 2016 -.Dt EXT2FS 5 +.Dd March 22, 2017 +.Dt CD9660 5 .Os .Sh NAME -.Nm ext2fs -.Nd "ext2/ext3/ext4 file system" +.Nm cd9660 +.Nd "ISO-9660 file system" .Sh SYNOPSIS To link into the kernel: .Bd -ragged -offset indent -.Cd "options EXT2FS" +.Cd "options CD9660" .Ed .Pp -To load as a kernel loadable module: -.Pp -.Dl "kldload ext2fs" +Alternatively, to load the driver as a +module at boot time, place the following line in +.Xr loader.conf 5 : +.Bd -literal -offset indent +cd9660_load="YES" .Sh DESCRIPTION The .Nm driver will permit the .Fx -kernel to access -.Tn ext2 , -.Tn ext3 , -and -.Tn ext4 -file systems. -The -.Tn ext4 -support is read-only. +kernel to access the +.Tn cd9660 +file system. .Sh EXAMPLES To mount a .Nm volume located on -.Pa /dev/ada1s1 : +.Pa /dev/cd0 : .Pp -.Dl "mount -t ext2fs /dev/ada1s1 /mnt" +.Dl "mount -t cd9660 /dev/cd0 /mnt" .Sh SEE ALSO .Xr nmount 2 , .Xr unmount 2 , .Xr fstab 5 , -.Xr mount 8 +.Xr mount 8 , +.Xr mount_cd9660 8 .Sh HISTORY The .Nm driver first appeared in -.Fx 2.2 . +.Fx 4.4 Lite .Sh AUTHORS .An -nosplit The .Nm -kernel implementation was written by -.An Godmar Back -or modified by him using the CSRG sources. -.Pp -.An John Dyson -and others in the -.Fx -Project made modifications. +kernel implementation was originally written by +.An Pace Willisson Aq Mt pace@blitz.com +and +.An Atsushi Murai Aq Mt amurai@spec.co.jp . .Pp This manual page was written by -.An Craig Rodrigues Aq Mt rodrigc@FreeBSD.org . +.An Ngie Cooper Aq Mt ngie@FreeBSD.org . From owner-svn-src-head@freebsd.org Thu Mar 23 03:28:28 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 22526D19019; Thu, 23 Mar 2017 03:28:28 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D139ECDD; Thu, 23 Mar 2017 03:28:27 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N3SRSt073131; Thu, 23 Mar 2017 03:28:27 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N3SPPG073110; Thu, 23 Mar 2017 03:28:25 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230328.v2N3SPPG073110@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 03:28:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315776 - in head: . usr.bin/col/tests usr.bin/diff/tests usr.bin/ident/tests usr.bin/mkimg/tests usr.bin/sdiff/tests usr.bin/soelim/tests usr.sbin/pw/tests X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 03:28:28 -0000 Author: ngie Date: Thu Mar 23 03:28:24 2017 New Revision: 315776 URL: https://svnweb.freebsd.org/changeset/base/315776 Log: Rename tests from to _test to match the FreeBSD test suite naming scheme usr.bin/diff/diff_test was renamed to usr.bin/diff/netbsd_diff_test to avoid collisions with the renamed FreeBSD test. MFC after: 1 week Sponsored by: Dell EMC Isilon Added: head/usr.bin/col/tests/col_test.sh - copied unchanged from r315775, head/usr.bin/col/tests/col.sh head/usr.bin/diff/tests/diff_test.sh - copied unchanged from r315775, head/usr.bin/diff/tests/diff.sh head/usr.bin/ident/tests/ident_test.sh - copied unchanged from r315775, head/usr.bin/ident/tests/ident.sh head/usr.bin/mkimg/tests/mkimg_test.sh - copied unchanged from r315775, head/usr.bin/mkimg/tests/mkimg.sh head/usr.bin/sdiff/tests/sdiff_test.sh - copied unchanged from r315775, head/usr.bin/sdiff/tests/sdiff.sh head/usr.bin/soelim/tests/soelim_test.sh - copied unchanged from r315775, head/usr.bin/soelim/tests/soelim.sh head/usr.sbin/pw/tests/pw_config_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_config.sh head/usr.sbin/pw/tests/pw_etcdir_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_etcdir.sh head/usr.sbin/pw/tests/pw_groupadd_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_groupadd.sh head/usr.sbin/pw/tests/pw_groupdel_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_groupdel.sh head/usr.sbin/pw/tests/pw_groupmod_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_groupmod.sh head/usr.sbin/pw/tests/pw_lock_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_lock.sh head/usr.sbin/pw/tests/pw_useradd_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_useradd.sh head/usr.sbin/pw/tests/pw_userdel_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_userdel.sh head/usr.sbin/pw/tests/pw_usermod_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_usermod.sh head/usr.sbin/pw/tests/pw_usernext_test.sh - copied unchanged from r315775, head/usr.sbin/pw/tests/pw_usernext.sh Deleted: head/usr.bin/col/tests/col.sh head/usr.bin/diff/tests/diff.sh head/usr.bin/ident/tests/ident.sh head/usr.bin/mkimg/tests/mkimg.sh head/usr.bin/sdiff/tests/sdiff.sh head/usr.bin/soelim/tests/soelim.sh head/usr.sbin/pw/tests/pw_config.sh head/usr.sbin/pw/tests/pw_etcdir.sh head/usr.sbin/pw/tests/pw_groupadd.sh head/usr.sbin/pw/tests/pw_groupdel.sh head/usr.sbin/pw/tests/pw_groupmod.sh head/usr.sbin/pw/tests/pw_lock.sh head/usr.sbin/pw/tests/pw_useradd.sh head/usr.sbin/pw/tests/pw_userdel.sh head/usr.sbin/pw/tests/pw_usermod.sh head/usr.sbin/pw/tests/pw_usernext.sh Modified: head/ObsoleteFiles.inc head/usr.bin/col/tests/Makefile head/usr.bin/diff/tests/Makefile head/usr.bin/ident/tests/Makefile head/usr.bin/mkimg/tests/Makefile head/usr.bin/sdiff/tests/Makefile head/usr.bin/soelim/tests/Makefile head/usr.sbin/pw/tests/Makefile Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Thu Mar 23 02:57:08 2017 (r315775) +++ head/ObsoleteFiles.inc Thu Mar 23 03:28:24 2017 (r315776) @@ -38,6 +38,23 @@ # xargs -n1 | sort | uniq -d; # done +# 20170322: rename to _test to match the FreeBSD test suite name scheme +OLD_FILES+=usr/tests/usr.bin/col/col +OLD_FILES+=usr/tests/usr.bin/diff/diff +OLD_FILES+=usr/tests/usr.bin/ident/ident +OLD_FILES+=usr/tests/usr.bin/mkimg/mkimg +OLD_FILES+=usr/tests/usr.bin/sdiff/sdiff +OLD_FILES+=usr/tests/usr.bin/soelim/soelim +OLD_FILES+=usr/tests/usr.sbin/pw/pw_config_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_etcdir_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_lock_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_groupadd_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_groupdel_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_groupmod_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_useradd_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_userdel_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_usermod_test +OLD_FILES+=usr/tests/usr.sbin/pw/pw_usernext_test # 20170322: garbage collect old references to igb(4) OLD_FILES+=usr/share/man/man4/if_igb.4.gz OLD_FILES+=usr/share/man/man4/igb.4.gz Modified: head/usr.bin/col/tests/Makefile ============================================================================== --- head/usr.bin/col/tests/Makefile Thu Mar 23 02:57:08 2017 (r315775) +++ head/usr.bin/col/tests/Makefile Thu Mar 23 03:28:24 2017 (r315776) @@ -2,7 +2,7 @@ PACKAGE= tests -ATF_TESTS_SH= col +ATF_TESTS_SH= col_test ${PACKAGE}FILES+= \ rlf.in \ Copied: head/usr.bin/col/tests/col_test.sh (from r315775, head/usr.bin/col/tests/col.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/col/tests/col_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.bin/col/tests/col.sh) @@ -0,0 +1,33 @@ +# $FreeBSD$ + +atf_test_case rlf + +rlf_head() +{ + atf_set "descr" "testing reverse line feed" +} +rlf_body() +{ + atf_check \ + -o inline:"a b\n" \ + -e empty \ + -s exit:0 \ + col < $(atf_get_srcdir)/rlf.in + + atf_check \ + -o inline:"a b\n" \ + -e empty \ + -s exit:0 \ + col < $(atf_get_srcdir)/rlf2.in + + atf_check \ + -o inline:"a b\n" \ + -e empty \ + -s exit:0 \ + col -x < $(atf_get_srcdir)/rlf2.in +} + +atf_init_test_cases() +{ + atf_add_test_case rlf +} Modified: head/usr.bin/diff/tests/Makefile ============================================================================== --- head/usr.bin/diff/tests/Makefile Thu Mar 23 02:57:08 2017 (r315775) +++ head/usr.bin/diff/tests/Makefile Thu Mar 23 03:28:24 2017 (r315776) @@ -2,7 +2,7 @@ PACKAGE= tests -ATF_TESTS_SH= diff +ATF_TESTS_SH= diff_test ${PACKAGE}FILES+= \ input1.in \ @@ -21,13 +21,14 @@ ${PACKAGE}FILES+= \ unified_c9999.out \ unified_9999.out -NETBSD_ATF_TESTS_SH+= diff_test +NETBSD_ATF_TESTS_SH+= netbsd_diff_test ${PACKAGE}FILES+= \ d_mallocv1.in \ d_mallocv2.in -ATF_TESTS_SH_SED_diff_test+= -e 's,t_diff,diff_test,g' +ATF_TESTS_SH_SED_netbsd_diff_test+= -e 's,t_diff,netbsd_diff_test,g' +ATF_TESTS_SH_SRC_netbsd_diff_test= t_diff.sh .include Copied: head/usr.bin/diff/tests/diff_test.sh (from r315775, head/usr.bin/diff/tests/diff.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/diff/tests/diff_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.bin/diff/tests/diff.sh) @@ -0,0 +1,53 @@ +# $FreeBSD$ + +atf_test_case simple +atf_test_case unified + +simple_body() +{ + atf_check -o file:$(atf_get_srcdir)/simple.out -s eq:1 \ + diff "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in" + + atf_check -o file:$(atf_get_srcdir)/simple_e.out -s eq:1 \ + diff -e "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in" + + atf_check -o file:$(atf_get_srcdir)/simple_u.out -s eq:1 \ + diff -u -L input1 -L input2 "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in" + + atf_check -o file:$(atf_get_srcdir)/simple_n.out -s eq:1 \ + diff -n "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in" + + atf_check -o inline:"Files $(atf_get_srcdir)/input1.in and $(atf_get_srcdir)/input2.in differ\n" -s eq:1 \ + diff -q "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in" + + atf_check \ + diff -q "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input1.in" + + atf_check -o file:$(atf_get_srcdir)/simple_i.out -s eq:1 \ + diff -i "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in" + + atf_check -o file:$(atf_get_srcdir)/simple_w.out -s eq:1 \ + diff -w "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in" + + atf_check -o file:$(atf_get_srcdir)/simple_b.out -s eq:1 \ + diff -b "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in" + + atf_check -o file:$(atf_get_srcdir)/simple_p.out -s eq:1 \ + diff --label input_c1.in --label input_c2.in -p "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in" +} + +unified_body() +{ + atf_check -o file:$(atf_get_srcdir)/unified_p.out -s eq:1 \ + diff -up -L input_c1.in -L input_c2.in "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in" + atf_check -o file:$(atf_get_srcdir)/unified_c9999.out -s eq:1 \ + diff -u -c9999 -L input_c1.in -L input_c2.in "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in" + atf_check -o file:$(atf_get_srcdir)/unified_9999.out -s eq:1 \ + diff -u9999 -L input_c1.in -L input_c2.in "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in" +} + +atf_init_test_cases() +{ + atf_add_test_case simple + atf_add_test_case unified +} Modified: head/usr.bin/ident/tests/Makefile ============================================================================== --- head/usr.bin/ident/tests/Makefile Thu Mar 23 02:57:08 2017 (r315775) +++ head/usr.bin/ident/tests/Makefile Thu Mar 23 03:28:24 2017 (r315776) @@ -2,7 +2,7 @@ PACKAGE= tests -ATF_TESTS_SH= ident +ATF_TESTS_SH= ident_test ${PACKAGE}FILES+= \ test.in \ test.out \ Copied: head/usr.bin/ident/tests/ident_test.sh (from r315775, head/usr.bin/ident/tests/ident.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/ident/tests/ident_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.bin/ident/tests/ident.sh) @@ -0,0 +1,16 @@ +# $FreeBSD$ + +atf_test_case ident +ident_body() { + atf_check -o file:$(atf_get_srcdir)/test.out \ + ident < $(atf_get_srcdir)/test.in + atf_check -o match:'Foo.*' -s exit:1 \ + -e inline:"ident warning: no id keywords in $(atf_get_srcdir)/testnoid\n" \ + ident $(atf_get_srcdir)/test.in $(atf_get_srcdir)/testnoid + atf_check -o match:'Foo.*' -s exit:1 \ + ident -q $(atf_get_srcdir)/test.in $(atf_get_srcdir)/testnoid +} +atf_init_test_cases() +{ + atf_add_test_case ident +} Modified: head/usr.bin/mkimg/tests/Makefile ============================================================================== --- head/usr.bin/mkimg/tests/Makefile Thu Mar 23 02:57:08 2017 (r315775) +++ head/usr.bin/mkimg/tests/Makefile Thu Mar 23 03:28:24 2017 (r315776) @@ -2,7 +2,7 @@ PACKAGE= tests -ATF_TESTS_SH= mkimg +ATF_TESTS_SH= mkimg_test SOURCES!= cd ${.CURDIR}; echo *.uu ${PACKAGE}FILES+= ${SOURCES:S,.gz.uu,,g} Copied: head/usr.bin/mkimg/tests/mkimg_test.sh (from r315775, head/usr.bin/mkimg/tests/mkimg.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/mkimg/tests/mkimg_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.bin/mkimg/tests/mkimg.sh) @@ -0,0 +1,164 @@ +# $FreeBSD$ + +mkimg_blksz_list="512 4096" +mkimg_format_list="qcow qcow2 raw vhd vhdf vmdk" +mkimg_geom_list="1x1 63x255" +mkimg_scheme_list="apm bsd ebr gpt mbr vtoc8" + +bootcode() +{ + case $1 in + bsd) echo 8192 ;; + gpt|mbr) echo 512 ;; + *) echo 0 ;; + esac + return 0 +} + +mkcontents() +{ + local byte count name + + byte=$1 + count=$2 + + name=_tmp-$byte-$count.bin + jot -b $byte $(($count/2)) > $name + echo $name + return 0 +} + +makeimage() +{ + local blksz bootarg bootsz format geom nhds nsecs partarg pfx scheme + + format=$1 + scheme=$2 + blksz=$3 + geom=$4 + pfx=$5 + shift 5 + + nsecs=${geom%x*} + nhds=${geom#*x} + + bootsz=`bootcode $scheme` + if test $bootsz -gt 0; then + bootarg="-b `mkcontents B $bootsz`" + else + bootarg="" + fi + + partarg="" + for P in $*; do + partarg="$partarg -p $P" + done + if test -z "$partarg"; then + local swap ufs + swap="-p freebsd-swap::128K" + ufs="-p freebsd-ufs:=`mkcontents P 4194304`" + partarg="$ufs $swap" + fi + + imagename=$pfx-$geom-$blksz-$scheme.$format + + mkimg -y -f $format -o $imagename -s $scheme -P $blksz -H $nhds -T $nsecs \ + $bootarg $partarg + echo $imagename + return 0 +} + +mkimg_rebase() +{ + local baseline image result tmpfile update + + image=$1 + result=$2 + + baseline=$image.gz.uu + update=yes + + if test -f $baseline; then + tmpfile=_tmp-baseline + uudecode -p $baseline | gunzip -c > $tmpfile + if cmp -s $tmpfile $result; then + update=no + fi + fi + + if test $update = yes; then + # Prevent keyword expansion when writing the keyword. + (echo -n '# $'; echo -n FreeBSD; echo '$') > $baseline + gzip -c $result | uuencode $image.gz >> $baseline + fi + + rm $image $result _tmp-* + return 0 +} + +mkimg_test() +{ + local blksz format geom scheme + + geom=$1 + blksz=$2 + scheme=$3 + format=$4 + + case $scheme in + ebr|mbr) + bsd=`makeimage raw bsd $blksz $geom _tmp` + partinfo="freebsd:=$bsd" + ;; + *) + partinfo="" + ;; + esac + image=`makeimage $format $scheme $blksz $geom img $partinfo` + result=$image.out + hexdump -C $image > $result + if test "x$mkimg_update_baseline" = "xyes"; then + mkimg_rebase $image $result + else + baseline=`atf_get_srcdir`/$image + atf_check -s exit:0 cmp -s $baseline $result + fi + return 0 +} + +atf_test_case rebase +rebase_body() +{ + local nm + + mkimg_update_baseline=yes + for nm in $mkimg_tests; do + ${nm}_body + done + return 0 +} + +atf_init_test_cases() +{ + local B F G S nm + + for G in $mkimg_geom_list; do + for B in $mkimg_blksz_list; do + for S in $mkimg_scheme_list; do + for F in $mkimg_format_list; do + nm="${S}_${G}_${B}_${F}" + atf_test_case $nm + eval "${nm}_body() { mkimg_test $G $B $S $F; }" + mkimg_tests="${mkimg_tests} ${nm}" + atf_add_test_case $nm + done + done + done + done + + # XXX hack to make updating the baseline easier + if test "${__RUNNING_INSIDE_ATF_RUN}" != "internal-yes-value"; then + atf_add_test_case rebase + fi +} + Modified: head/usr.bin/sdiff/tests/Makefile ============================================================================== --- head/usr.bin/sdiff/tests/Makefile Thu Mar 23 02:57:08 2017 (r315775) +++ head/usr.bin/sdiff/tests/Makefile Thu Mar 23 03:28:24 2017 (r315776) @@ -2,7 +2,7 @@ PACKAGE= tests -ATF_TESTS_SH= sdiff +ATF_TESTS_SH= sdiff_test ${PACKAGE}FILES+= \ d_dot.in \ Copied: head/usr.bin/sdiff/tests/sdiff_test.sh (from r315775, head/usr.bin/sdiff/tests/sdiff.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/sdiff/tests/sdiff_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.bin/sdiff/tests/sdiff.sh) @@ -0,0 +1,207 @@ +# $NetBSD: t_sdiff.sh,v 1.1 2012/03/17 16:33:15 jruoho Exp $ +# $FreeBSD$ +# +# Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +atf_test_case flags +flags_head() +{ + atf_set "descr" "Checks -l, -s and -w flags" +} +flags_body() +{ + atf_check -o file:$(atf_get_srcdir)/d_flags_l.out -s eq:1 \ + sdiff -l "$(atf_get_srcdir)/d_input1" "$(atf_get_srcdir)/d_input2" + + atf_check -o file:$(atf_get_srcdir)/d_flags_s.out -s eq:1 \ + sdiff -s "$(atf_get_srcdir)/d_input1" "$(atf_get_srcdir)/d_input2" + + atf_check -o file:$(atf_get_srcdir)/d_flags_w.out -s eq:1 \ + sdiff -w 125 "$(atf_get_srcdir)/d_input1" "$(atf_get_srcdir)/d_input2" +} + +atf_test_case iflags +iflags_head() +{ + atf_set "descr" "Checks flags -l, -s and -w combined with -I" +} +iflags_body() +{ + tail1="-w 125 -I .*filename.* $(atf_get_srcdir)/d_input1 $(atf_get_srcdir)/d_input2" + tail2="-w 125 -I .*filename.* $(atf_get_srcdir)/d_input2 $(atf_get_srcdir)/d_input1" + + atf_check -o file:$(atf_get_srcdir)/d_iflags_a1.out -s eq:1 sdiff ${tail1} + atf_check -o file:$(atf_get_srcdir)/d_iflags_a2.out -s eq:1 sdiff ${tail2} + atf_check -o file:$(atf_get_srcdir)/d_iflags_b1.out -s eq:1 sdiff -s ${tail1} + atf_check -o file:$(atf_get_srcdir)/d_iflags_b2.out -s eq:1 sdiff -s ${tail2} + atf_check -o file:$(atf_get_srcdir)/d_iflags_c1.out -s eq:1 sdiff -l ${tail1} + atf_check -o file:$(atf_get_srcdir)/d_iflags_c2.out -s eq:1 sdiff -l ${tail2} + atf_check -o file:$(atf_get_srcdir)/d_iflags_d1.out -s eq:1 sdiff -s ${tail1} + atf_check -o file:$(atf_get_srcdir)/d_iflags_d2.out -s eq:1 sdiff -s ${tail2} +} + +atf_test_case tabs +tabs_head() +{ + atf_set "descr" "Checks comparing files containing tabs" +} +tabs_body() +{ + atf_check -o file:$(atf_get_srcdir)/d_tabs.out -s eq:1 \ + sdiff "$(atf_get_srcdir)/d_tabs1.in" "$(atf_get_srcdir)/d_tabs2.in" +} + +atf_test_case tabends +tabends_head() +{ + atf_set "descr" "Checks correct handling of lines ended with tabs" +} +tabends_body() +{ + atf_check -o file:$(atf_get_srcdir)/d_tabends_a.out -s eq:1 \ + sdiff -w30 "$(atf_get_srcdir)/d_tabends.in" /dev/null + + atf_check -o file:$(atf_get_srcdir)/d_tabends_b.out -s eq:1 \ + sdiff -w30 /dev/null "$(atf_get_srcdir)/d_tabends.in" + + atf_check -o file:$(atf_get_srcdir)/d_tabends_c.out -s eq:1 \ + sdiff -w19 "$(atf_get_srcdir)/d_tabends.in" /dev/null +} + +atf_test_case merge +merge_head() +{ + atf_set "descr" "Checks interactive merging" +} +merge_body() +{ + merge_tail="-o merge.out $(atf_get_srcdir)/d_input1 \ +$(atf_get_srcdir)/d_input2 >/dev/null ; cat merge.out" + + cp $(atf_get_srcdir)/d_input* . + + atf_check -o file:d_input1 -x "yes l | sdiff ${merge_tail}" + atf_check -o file:d_input2 -x "yes r | sdiff ${merge_tail}" + + atf_check -o file:d_input1 -x \ + "yes el | EDITOR=cat VISUAL=cat sdiff ${merge_tail}" + atf_check -o file:d_input2 -x \ + "yes er | EDITOR=cat VISUAL=cat sdiff ${merge_tail}" + + atf_check -o file:d_input1 -x "yes l | sdiff -s ${merge_tail}" + atf_check -o file:d_input2 -x "yes r | sdiff -s ${merge_tail}" + atf_check -o file:d_input1 -x "yes l | sdiff -l ${merge_tail}" + atf_check -o file:d_input2 -x "yes r | sdiff -l ${merge_tail}" + atf_check -o file:d_input1 -x "yes l | sdiff -ls ${merge_tail}" + atf_check -o file:d_input2 -x "yes r | sdiff -ls ${merge_tail}" + + atf_check -o file:d_input1 -x "{ while :; do echo s; echo l; \ +echo v; echo l; done; } | sdiff ${merge_tail}" + + atf_check -o file:d_input2 -x "{ while :; do echo s; echo r; \ +echo v; echo r; done; } | sdiff ${merge_tail}" +} + +atf_test_case same +same_head() +{ + atf_set "descr" "Checks comparing file with itself" +} +same_body() +{ + atf_check -o file:$(atf_get_srcdir)/d_same.out \ + sdiff "$(atf_get_srcdir)/d_input1" "$(atf_get_srcdir)/d_input1" +} + +atf_test_case oneline +oneline_head() +{ + atf_set "descr" "Checks comparing one-line files" +} +oneline_body() +{ + atf_check -o file:$(atf_get_srcdir)/d_oneline_a.out -s eq:1 \ + sdiff /dev/null "$(atf_get_srcdir)/d_oneline.in" + + atf_check -o file:$(atf_get_srcdir)/d_oneline_b.out -s eq:1 \ + sdiff "$(atf_get_srcdir)/d_oneline.in" /dev/null +} + +atf_test_case dot +dot_head() +{ + atf_set "descr" "Checks comparing with file containing only one character" +} +dot_body() +{ + echo ". <" > expout + atf_check -o file:expout -s eq:1 sdiff "$(atf_get_srcdir)/d_dot.in" /dev/null + + echo " > ." > expout + atf_check -o file:expout -s eq:1 sdiff /dev/null "$(atf_get_srcdir)/d_dot.in" +} + +atf_test_case stdin +stdin_head() +{ + atf_set "descr" "Checks reading data from stdin" +} +stdin_body() +{ + echo " > stdin" > expout + atf_check -o file:expout -s eq:1 -x \ + "echo stdin | sdiff /dev/null /dev/stdin" + + echo "stdin <" > expout + atf_check -o file:expout -s eq:1 -x \ + "echo stdin | sdiff /dev/stdin /dev/null" +} + +atf_test_case short +short_head() +{ + atf_set "descr" "Checks premature stop of merging" +} +short_body() +{ + atf_check -o file:$(atf_get_srcdir)/d_short.out -x \ + "printf \"r\\nl\\nr\\nl\" | sdiff -o merge.out $(atf_get_srcdir)/d_input1 \ +$(atf_get_srcdir)/d_input2 >/dev/null ; cat merge.out" +} + +atf_init_test_cases() +{ + atf_add_test_case flags + atf_add_test_case iflags + atf_add_test_case tabs + atf_add_test_case tabends + atf_add_test_case merge + atf_add_test_case same + atf_add_test_case oneline + atf_add_test_case dot + atf_add_test_case stdin + atf_add_test_case short +} Modified: head/usr.bin/soelim/tests/Makefile ============================================================================== --- head/usr.bin/soelim/tests/Makefile Thu Mar 23 02:57:08 2017 (r315775) +++ head/usr.bin/soelim/tests/Makefile Thu Mar 23 03:28:24 2017 (r315776) @@ -2,7 +2,7 @@ PACKAGE= tests -ATF_TESTS_SH= soelim +ATF_TESTS_SH= soelim_test ${PACKAGE}FILES+= nonexisting.in \ basic.in \ Copied: head/usr.bin/soelim/tests/soelim_test.sh (from r315775, head/usr.bin/soelim/tests/soelim.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/soelim/tests/soelim_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.bin/soelim/tests/soelim.sh) @@ -0,0 +1,103 @@ +# $FreeBSD$ + +atf_test_case stdin +stdin_head() +{ + atf_set "descr" "stdin functionality" +} + +stdin_body() +{ + # no file after .so + atf_check \ + -o inline:".so\n" \ + -e empty \ + -s exit:0 \ + soelim <<-EOF +.so +EOF + + # only space after .so + atf_check \ + -o inline:".so \n" \ + -e empty \ + -s exit:0 \ + soelim <<-EOF +.so +EOF + + # explicit stdin + atf_check \ + -o inline:".so\n" \ + -e empty \ + -s exit:0 \ + soelim - <<-EOF +.so +EOF + + atf_check \ + -o empty \ + -e inline:"soelim: can't open 'afile': No such file or directory\n" \ + -s exit:1 \ + soelim <<-EOF +.so afile +EOF + + atf_check \ + -o inline:".soafile\n" \ + -e empty \ + -s exit:0 \ + soelim <<-EOF +.soafile +EOF + + atf_check \ + -o empty \ + -e inline:"soelim: can't open 'afile': No such file or directory\n" \ + -s exit:1 \ + soelim -C <<-EOF +.soafile +EOF +} + +atf_test_case files +files_head() +{ + atf_set "descr" "testing files" +} + +files_body() +{ + atf_check \ + -o inline:"This is a test\n" \ + -e inline:"soelim: can't open 'nonexistingfile': No such file or directory\n" \ + -s exit:1 \ + soelim $(atf_get_srcdir)/nonexisting.in + + cp $(atf_get_srcdir)/basic . + atf_check \ + -o file:$(atf_get_srcdir)/basic.out \ + -e empty \ + -s exit:0 \ + soelim $(atf_get_srcdir)/basic.in + + rm -f basic + atf_check \ + -o file:$(atf_get_srcdir)/basic.out \ + -e empty \ + -s exit:0 \ + soelim -I$(atf_get_srcdir) $(atf_get_srcdir)/basic.in + + atf_check \ + -o file:$(atf_get_srcdir)/basic-with-space.out \ + -e empty \ + -s exit:0 \ + soelim -I$(atf_get_srcdir) $(atf_get_srcdir)/basic-with-space.in + +} + +atf_init_test_cases() +{ + atf_add_test_case stdin + atf_add_test_case files +} Modified: head/usr.sbin/pw/tests/Makefile ============================================================================== --- head/usr.sbin/pw/tests/Makefile Thu Mar 23 02:57:08 2017 (r315775) +++ head/usr.sbin/pw/tests/Makefile Thu Mar 23 03:28:24 2017 (r315776) @@ -8,16 +8,16 @@ PROGS+= crypt WARNS?= 6 LIBADD+= crypt -ATF_TESTS_SH= pw_etcdir \ - pw_lock \ - pw_config \ - pw_groupadd \ - pw_groupdel \ - pw_groupmod \ - pw_useradd \ - pw_userdel \ - pw_usermod \ - pw_usernext +ATF_TESTS_SH= pw_etcdir_test \ + pw_lock_test \ + pw_config_test \ + pw_groupadd_test \ + pw_groupdel_test \ + pw_groupmod_test \ + pw_useradd_test \ + pw_userdel_test \ + pw_usermod_test \ + pw_usernext_test .for tp in ${ATF_TESTS_SH} TEST_METADATA.${tp}+= required_user="root" Copied: head/usr.sbin/pw/tests/pw_config_test.sh (from r315775, head/usr.sbin/pw/tests/pw_config.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/pw/tests/pw_config_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.sbin/pw/tests/pw_config.sh) @@ -0,0 +1,26 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +atf_test_case generate_config +generate_config_body() { + atf_check -s exit:0 \ + ${PW} useradd -D -C ${HOME}/foo.conf + atf_check -o file:$(atf_get_srcdir)/pw.conf \ + cat ${HOME}/foo.conf +} + +atf_test_case modify_config_uid_gid_boundaries +modify_config_uid_gid_boundaries_body() { + atf_check -s exit:0 \ + ${PW} useradd -D -C ${HOME}/foo.conf \ + -u 2000,5000 -i 2100,6000 + atf_check -o file:$(atf_get_srcdir)/pw-modified.conf \ + cat ${HOME}/foo.conf +} + +atf_init_test_cases() { + atf_add_test_case generate_config + atf_add_test_case modify_config_uid_gid_boundaries +} Copied: head/usr.sbin/pw/tests/pw_etcdir_test.sh (from r315775, head/usr.sbin/pw/tests/pw_etcdir.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/pw/tests/pw_etcdir_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.sbin/pw/tests/pw_etcdir.sh) @@ -0,0 +1,18 @@ +# $FreeBSD$ + +# When the '-V directory' option is provided, the directory must exist +atf_test_case etcdir_must_exist +etcdir_must_exist_head() { + atf_set "descr" "When the '-V directory' option is provided, the directory must exist" +} + +etcdir_must_exist_body() { + local fakedir="/this_directory_does_not_exist" + atf_check -e inline:"pw: no such directory \`$fakedir'\n" \ + -s exit:72 -x pw -V ${fakedir} usershow root +} + +atf_init_test_cases() { + atf_add_test_case etcdir_must_exist +} + Copied: head/usr.sbin/pw/tests/pw_groupadd_test.sh (from r315775, head/usr.sbin/pw/tests/pw_groupadd.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/pw/tests/pw_groupadd_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.sbin/pw/tests/pw_groupadd.sh) @@ -0,0 +1,26 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +atf_test_case group_add_gid_too_large +group_add_gid_too_large_body() { + populate_etc_skel + atf_check -s exit:64 -e inline:"pw: Bad id '9999999999999': too large\n" \ + ${PW} groupadd -n test1 -g 9999999999999 +} + +atf_test_case group_add_already_exists +group_add_already_exists_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} groupadd foo + atf_check -s exit:65 \ + -e inline:"pw: group name \`foo' already exists\n" \ + ${PW} groupadd foo +} + +atf_init_test_cases() { + atf_add_test_case group_add_gid_too_large + atf_add_test_case group_add_already_exists +} Copied: head/usr.sbin/pw/tests/pw_groupdel_test.sh (from r315775, head/usr.sbin/pw/tests/pw_groupdel.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/pw/tests/pw_groupdel_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.sbin/pw/tests/pw_groupdel.sh) @@ -0,0 +1,24 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + + +# Test to make sure we do not accidentially delete wheel when trying to delete +# an unknown group +atf_test_case group_do_not_delete_wheel_if_group_unknown +group_do_not_delete_wheel_if_group_unknown_head() { + atf_set "descr" "Make sure we do not consider gid 0 an unknown group" +} +group_do_not_delete_wheel_if_group_unknown_body() { + populate_etc_skel + atf_check -s exit:0 -o inline:"wheel:*:0:root\n" -x ${PW} groupshow wheel + atf_check -e inline:"pw: Bad id 'I_do_not_exist': invalid\n" -s exit:64 -x \ + ${PW} groupdel -g I_do_not_exist + atf_check -s exit:0 -o inline:"wheel:*:0:root\n" -x ${PW} groupshow wheel +} + + +atf_init_test_cases() { + atf_add_test_case group_do_not_delete_wheel_if_group_unknown +} Copied: head/usr.sbin/pw/tests/pw_groupmod_test.sh (from r315775, head/usr.sbin/pw/tests/pw_groupmod.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/pw/tests/pw_groupmod_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.sbin/pw/tests/pw_groupmod.sh) @@ -0,0 +1,118 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + + +# Test adding & removing a user from a group +atf_test_case groupmod_user +groupmod_user_body() { + populate_etc_skel + atf_check -s exit:0 ${PW} addgroup test + atf_check -s exit:0 ${PW} groupmod test -m root + atf_check -s exit:0 -o match:"^test:\*:1001:root$" \ + grep "^test:\*:.*:root$" $HOME/group + atf_check -s exit:0 ${PW} groupmod test -d root + atf_check -s exit:0 -o match:"^test:\*:1001:$" \ + grep "^test:\*:.*:$" $HOME/group +} + + +# Test adding and removing a user that does not exist +atf_test_case groupmod_invalid_user +groupmod_invalid_user_body() { + populate_etc_skel + atf_check -s exit:0 ${PW} addgroup test + atf_check -s exit:67 -e match:"does not exist" ${PW} groupmod test -m foo + atf_check -s exit:0 ${PW} groupmod test -d foo +} + +atf_test_case groupmod_bug_193704 +groupmod_bug_193704_head() { + atf_set "descr" "Regression test for the #193704 bug" +} +groupmod_bug_193704_body() { + populate_etc_skel + atf_check -s exit:0 -x ${PW} groupadd test + atf_check -s exit:0 -x ${PW} groupmod test -l newgroupname + atf_check -s exit:65 -e match:"^pw: unknown group" -x ${PW} groupshow test +} + +atf_test_case usermod_bug_185666 +usermod_bug_185666_head() { + atf_set "descr" "Regression test for the #185666 bug" +} + +usermod_bug_185666_body() { + populate_etc_skel + atf_check -s exit:0 -x ${PW} useradd testuser + atf_check -s exit:0 -x ${PW} groupadd testgroup + atf_check -s exit:0 -x ${PW} groupadd testgroup2 + atf_check -s exit:0 -x ${PW} usermod testuser -G testgroup + atf_check -o inline:"testuser:*:1001:\n" -x ${PW} groupshow testuser + atf_check -o inline:"testgroup:*:1002:testuser\n" -x ${PW} groupshow testgroup + atf_check -o inline:"testgroup2:*:1003:\n" -x ${PW} groupshow testgroup2 + atf_check -s exit:0 -x ${PW} usermod testuser -G testgroup2 + atf_check -o inline:"testuser:*:1001:\n" -x ${PW} groupshow testuser + atf_check -o inline:"testgroup:*:1002:\n" -x ${PW} groupshow testgroup + atf_check -o inline:"testgroup2:*:1003:testuser\n" -x ${PW} groupshow testgroup2 +} + +atf_test_case do_not_duplicate_group_on_gid_change +do_not_duplicate_group_on_gid_change_head() { + atf_set "descr" "Do not duplicate group on gid change" +} + +do_not_duplicate_group_on_gid_change_body() { + populate_etc_skel + atf_check -s exit:0 -x ${PW} groupadd testgroup + atf_check -s exit:0 -x ${PW} groupmod testgroup -g 12345 + # use grep to see if the entry has not be duplicated + atf_check -o inline:"testgroup:*:12345:\n" -s exit:0 -x grep "^testgroup" ${HOME}/group +} + +atf_test_case groupmod_rename +groupmod_rename_body() { + populate_etc_skel + + atf_check -s exit:0 ${PW} groupadd foo + atf_check -s exit:0 ${PW} groupmod foo -l bar + atf_check -s exit:0 -o match:"^bar:.*" \ + grep "^bar:.*" ${HOME}/group +} + +atf_test_case groupmod_members +groupmod_members_body() { + populate_etc_skel + + for i in user1 user2 user3 user4; do + atf_check -s exit:0 ${PW} useradd $i + done + + atf_check -s exit:0 ${PW} groupadd foo -M "user1, user2" + atf_check -o inline:"foo:*:1005:user1,user2\n" -s exit:0 \ + ${PW} groupshow foo + atf_check -s exit:0 ${PW} groupmod foo -m "user3, user4" + atf_check -o inline:"foo:*:1005:user1,user2,user3,user4\n" -s exit:0 \ + ${PW} groupshow foo + atf_check -s exit:0 ${PW} groupmod foo -M "user1, user4" + atf_check -o inline:"foo:*:1005:user1,user4\n" -s exit:0 \ + ${PW} groupshow foo + # what about duplicates + atf_check -s exit:0 ${PW} groupmod foo -m "user1, user2, user3, user4" + atf_check -o inline:"foo:*:1005:user1,user4,user2,user3\n" -s exit:0 \ + ${PW} groupshow foo + atf_check -s exit:0 ${PW} groupmod foo -d "user1, user3" + atf_check -o inline:"foo:*:1005:user4,user2\n" -s exit:0 \ + ${PW} groupshow foo +} + +atf_init_test_cases() { + atf_add_test_case groupmod_user + atf_add_test_case groupmod_invalid_user + atf_add_test_case groupmod_bug_193704 + atf_add_test_case usermod_bug_185666 + atf_add_test_case do_not_duplicate_group_on_gid_change + atf_add_test_case groupmod_rename + atf_add_test_case groupmod_members +} Copied: head/usr.sbin/pw/tests/pw_lock_test.sh (from r315775, head/usr.sbin/pw/tests/pw_lock.sh) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/pw/tests/pw_lock_test.sh Thu Mar 23 03:28:24 2017 (r315776, copy of r315775, head/usr.sbin/pw/tests/pw_lock.sh) @@ -0,0 +1,42 @@ +# $FreeBSD$ + +# Import helper functions +. $(atf_get_srcdir)/helper_functions.shin + +# Test locking and unlocking a user account +atf_test_case user_locking cleanup +user_locking_body() { + populate_etc_skel + ${PW} useradd test || atf_fail "Creating test user" + ${PW} lock test || atf_fail "Locking the user" + atf_check -s exit:0 -o match:"^test:\*LOCKED\*\*:1001:" \ + grep "^test:\*LOCKED\*\*:1001:" $HOME/master.passwd + ${PW} unlock test || atf_fail "Locking the user" + atf_check -s exit:0 -o match:"^test:\*:1001:" \ + grep "^test:\*:1001:" $HOME/master.passwd +} + +atf_test_case numeric_locking cleanup +numeric_locking_body() { + populate_etc_skel + ${PW} useradd test || atf_fail "Creating test user" + ${PW} lock 1001 || atf_fail "Locking the user" + atf_check -s exit:0 -o match:"^test:\*LOCKED\*\*:1001:" \ + grep "^test:\*LOCKED\*\*:1001:" $HOME/master.passwd + ${PW} unlock 1001 || atf_fail "Unlocking the user" + atf_check -s exit:0 -o match:"^test:\*:1001:" \ + grep "^test:\*:1001:" $HOME/master.passwd + # Now numeric names + ${PW} useradd -n 1001 || atf_fail "Creating test user" + ${PW} lock 1001 || atf_fail "Locking the user" + atf_check -s exit:0 -o match:"^1001:\*LOCKED\*\*:1002:" \ + grep "^1001:\*LOCKED\*\*:1002:" $HOME/master.passwd + ${PW} unlock 1001 || atf_fail "Unlocking the user" + atf_check -s exit:0 -o match:"^1001:\*:1002:" \ + grep "^1001:\*:1002:" $HOME/master.passwd +} + *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Thu Mar 23 04:33:16 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 963D0D19796; Thu, 23 Mar 2017 04:33:16 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5466D2FF; Thu, 23 Mar 2017 04:33:16 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N4XFrO001589; Thu, 23 Mar 2017 04:33:15 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N4XFWH001588; Thu, 23 Mar 2017 04:33:15 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703230433.v2N4XFWH001588@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Thu, 23 Mar 2017 04:33:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315777 - head/sys/dev/iwm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 04:33:16 -0000 Author: adrian Date: Thu Mar 23 04:33:15 2017 New Revision: 315777 URL: https://svnweb.freebsd.org/changeset/base/315777 Log: [iwm] Get rid of struct iwm_rx_data argument for iwm_mvm_rx_rx_mpdu. Obtained from: dragonflybsd.git b5cdd8067951dc90271ab104ef555b3b5a4d5d5a Modified: head/sys/dev/iwm/if_iwm.c Modified: head/sys/dev/iwm/if_iwm.c ============================================================================== --- head/sys/dev/iwm/if_iwm.c Thu Mar 23 03:28:24 2017 (r315776) +++ head/sys/dev/iwm/if_iwm.c Thu Mar 23 04:33:15 2017 (r315777) @@ -324,8 +324,7 @@ static void iwm_mvm_rx_rx_phy_cmd(struct struct iwm_rx_data *); static int iwm_get_noise(struct iwm_softc *sc, const struct iwm_mvm_statistics_rx_non_phy *); -static void iwm_mvm_rx_rx_mpdu(struct iwm_softc *, struct iwm_rx_packet *, - struct iwm_rx_data *); +static void iwm_mvm_rx_rx_mpdu(struct iwm_softc *, struct mbuf *); static int iwm_mvm_rx_tx_cmd_single(struct iwm_softc *, struct iwm_rx_packet *, struct iwm_node *); @@ -3160,30 +3159,26 @@ iwm_get_noise(struct iwm_softc *sc, * Handles the actual data of the Rx packet from the fw */ static void -iwm_mvm_rx_rx_mpdu(struct iwm_softc *sc, - struct iwm_rx_packet *pkt, struct iwm_rx_data *data) +iwm_mvm_rx_rx_mpdu(struct iwm_softc *sc, struct mbuf *m) { struct ieee80211com *ic = &sc->sc_ic; struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps); struct ieee80211_frame *wh; struct ieee80211_node *ni; struct ieee80211_rx_stats rxs; - struct mbuf *m; struct iwm_rx_phy_info *phy_info; struct iwm_rx_mpdu_res_start *rx_res; + struct iwm_rx_packet *pkt = mtod(m, struct iwm_rx_packet *); uint32_t len; uint32_t rx_pkt_status; int rssi; - bus_dmamap_sync(sc->rxq.data_dmat, data->map, BUS_DMASYNC_POSTREAD); - phy_info = &sc->sc_last_phy_info; rx_res = (struct iwm_rx_mpdu_res_start *)pkt->data; wh = (struct ieee80211_frame *)(pkt->data + sizeof(*rx_res)); len = le16toh(rx_res->byte_count); rx_pkt_status = le32toh(*(uint32_t *)(pkt->data + sizeof(*rx_res) + len)); - m = data->m; m->m_data = pkt->data + sizeof(*rx_res); m->m_pkthdr.len = m->m_len = len; @@ -5406,7 +5401,7 @@ iwm_notif_intr(struct iwm_softc *sc) break; case IWM_REPLY_RX_MPDU_CMD: - iwm_mvm_rx_rx_mpdu(sc, pkt, data); + iwm_mvm_rx_rx_mpdu(sc, data->m); break; case IWM_TX_CMD: @@ -5449,7 +5444,8 @@ iwm_notif_intr(struct iwm_softc *sc) } } - break; } + break; + } case IWM_MFUART_LOAD_NOTIFICATION: break; @@ -5465,7 +5461,8 @@ iwm_notif_intr(struct iwm_softc *sc) stats = (void *)pkt->data; memcpy(&sc->sc_stats, stats, sizeof(sc->sc_stats)); sc->sc_noise = iwm_get_noise(sc, &stats->rx.general); - break; } + break; + } case IWM_NVM_ACCESS_CMD: case IWM_MCC_UPDATE_CMD: @@ -5485,7 +5482,8 @@ iwm_notif_intr(struct iwm_softc *sc) IWM_DPRINTF(sc, IWM_DEBUG_RESET, "fw source %d sent CC '%s'\n", notif->source_id, sc->sc_fw_mcc); - break; } + break; + } case IWM_DTS_MEASUREMENT_NOTIFICATION: case IWM_WIDE_ID(IWM_PHY_OPS_GROUP, From owner-svn-src-head@freebsd.org Thu Mar 23 04:34:26 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A7189D19841; Thu, 23 Mar 2017 04:34:26 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 73FB368E; Thu, 23 Mar 2017 04:34:26 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N4YPdU001675; Thu, 23 Mar 2017 04:34:25 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N4YPlf001674; Thu, 23 Mar 2017 04:34:25 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703230434.v2N4YPlf001674@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Thu, 23 Mar 2017 04:34:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315778 - head/sys/dev/iwm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 04:34:26 -0000 Author: adrian Date: Thu Mar 23 04:34:25 2017 New Revision: 315778 URL: https://svnweb.freebsd.org/changeset/base/315778 Log: [iwm] Move mbuf hacks after sanity checks in iwm_mvm_rx_rx_mpdu(). * This avoids leaving the mbuf in a weird state, when dropping a packet. Obtained from: dragonflybsd.git 96eaecf93d9f731459a0df8efc72cfad034320bd Modified: head/sys/dev/iwm/if_iwm.c Modified: head/sys/dev/iwm/if_iwm.c ============================================================================== --- head/sys/dev/iwm/if_iwm.c Thu Mar 23 04:33:15 2017 (r315777) +++ head/sys/dev/iwm/if_iwm.c Thu Mar 23 04:34:25 2017 (r315778) @@ -3179,9 +3179,6 @@ iwm_mvm_rx_rx_mpdu(struct iwm_softc *sc, len = le16toh(rx_res->byte_count); rx_pkt_status = le32toh(*(uint32_t *)(pkt->data + sizeof(*rx_res) + len)); - m->m_data = pkt->data + sizeof(*rx_res); - m->m_pkthdr.len = m->m_len = len; - if (__predict_false(phy_info->cfg_phy_cnt > 20)) { device_printf(sc->sc_dev, "dsp size out of range [0,20]: %d\n", @@ -3218,6 +3215,9 @@ iwm_mvm_rx_rx_mpdu(struct iwm_softc *sc, goto fail; } + m->m_data = pkt->data + sizeof(*rx_res); + m->m_pkthdr.len = m->m_len = len; + IWM_DPRINTF(sc, IWM_DEBUG_RECV, "%s: rssi=%d, noise=%d\n", __func__, rssi, sc->sc_noise); From owner-svn-src-head@freebsd.org Thu Mar 23 04:35:53 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6B9E6D198FF; Thu, 23 Mar 2017 04:35:53 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 45F63861; Thu, 23 Mar 2017 04:35:53 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N4ZqO3001785; Thu, 23 Mar 2017 04:35:52 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N4ZqTb001784; Thu, 23 Mar 2017 04:35:52 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230435.v2N4ZqTb001784@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 04:35:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315779 - head/usr.bin/diff X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 04:35:53 -0000 Author: ngie Date: Thu Mar 23 04:35:52 2017 New Revision: 315779 URL: https://svnweb.freebsd.org/changeset/base/315779 Log: diff(1): document remaining long options While here, try and tie together some of the short options with their long option equivalents, where possible. Sponsored by: Dell EMC Isilon Modified: head/usr.bin/diff/diff.1 Modified: head/usr.bin/diff/diff.1 ============================================================================== --- head/usr.bin/diff/diff.1 Thu Mar 23 04:34:25 2017 (r315778) +++ head/usr.bin/diff/diff.1 Thu Mar 23 04:35:52 2017 (r315779) @@ -43,45 +43,97 @@ .Fl c | e | f | .Fl n | q | u .Oc +.Op Fl -brief +.Op Fl -ed +.Op Fl -expand-tabs +.Op Fl -forward-ed +.Op Fl -ignore-all-space .Op Fl -ignore-case +.Op Fl -ignore-space-change +.Op Fl -initial-tab +.Op Fl -minimal .Op Fl -no-ignore-file-name-case .Op Fl -normal +.Op Fl -rcs +.Op Fl -show-c-function +.Op Fl -starting-file .Op Fl -strip-trailing-cr .Op Fl -tabsize -.Op Fl I Ar pattern -.Op Fl L Ar label +.Op Fl -text +.Op Fl -unified +.Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern +.Op Fl L Ar label | Fl -label Ar label .Ar file1 file2 .Nm diff .Op Fl abdilpTtw -.Op Fl I Ar pattern -.Op Fl L Ar label +.Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern +.Op Fl L Ar label | Fl -label Ar label +.Op Fl -brief +.Op Fl -ed +.Op Fl -expand-tabs +.Op Fl -forward-ed +.Op Fl -ignore-all-space .Op Fl -ignore-case +.Op Fl -ignore-space-change +.Op Fl -initial-tab +.Op Fl -minimal .Op Fl -no-ignore-file-name-case .Op Fl -normal +.Op Fl -paginate +.Op Fl -rcs +.Op Fl -show-c-function +.Op Fl -starting-file .Op Fl -strip-trailing-cr .Op Fl -tabsize -.Fl C Ar number +.Op Fl -text +.Fl C Ar number | -context Ar number .Ar file1 file2 .Nm diff .Op Fl abdiltw -.Op Fl I Ar pattern +.Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern +.Op Fl -brief +.Op Fl -ed +.Op Fl -expand-tabs +.Op Fl -forward-ed +.Op Fl -ignore-all-space .Op Fl -ignore-case +.Op Fl -ignore-space-change +.Op Fl -initial-tab +.Op Fl -minimal .Op Fl -no-ignore-file-name-case .Op Fl -normal +.Op Fl -paginate +.Op Fl -rcs +.Op Fl -show-c-function +.Op Fl -starting-file .Op Fl -strip-trailing-cr .Op Fl -tabsize -.Fl D Ar string +.Op Fl -text +.Fl D Ar string | Fl -ifdef Ar string .Ar file1 file2 .Nm diff .Op Fl abdilpTtw -.Op Fl I Ar pattern -.Op Fl L Ar label +.Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern +.Op Fl L Ar label | Fl -label Ar label +.Op Fl -brief +.Op Fl -ed +.Op Fl -expand-tabs +.Op Fl -forward-ed +.Op Fl -ignore-all-space .Op Fl -ignore-case +.Op Fl -ignore-space-change +.Op Fl -initial-tab +.Op Fl -minimal .Op Fl -no-ignore-file-name-case .Op Fl -normal +.Op Fl -paginate +.Op Fl -rcs +.Op Fl -show-c-function +.Op Fl -starting-file .Op Fl -strip-trailing-cr .Op Fl -tabsize -.Fl U Ar number +.Op Fl -text +.Fl U Ar number | Fl -unified Ar number .Ar file1 file2 .Nm diff .Op Fl abdilNPprsTtw @@ -89,17 +141,35 @@ .Fl c | e | f | .Fl n | q | u .Oc +.Op Fl -brief +.Op Fl -context +.Op Fl -ed +.Op Fl -expand-tabs +.Op Fl -forward-ed +.Op Fl -ignore-all-space .Op Fl -ignore-case +.Op Fl -ignore-space-change +.Op Fl -initial-tab +.Op Fl -minimal +.Op Fl -new-file .Op Fl -no-ignore-file-name-case .Op Fl -normal +.Op Fl -paginate +.Op Fl -rcs +.Op Fl -recursive +.Op Fl -report-identical-files +.Op Fl -show-c-function .Op Fl -strip-trailing-cr .Op Fl -tabsize -.Op Fl I Ar pattern +.Op Fl -text +.Op Fl -unidirectional-new-file +.Op Fl -unified +.Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern .Bk -words -.Op Fl L Ar label -.Op Fl S Ar name -.Op Fl X Ar file -.Op Fl x Ar pattern +.Op Fl L Ar label | Fl -label Ar label +.Op Fl S Ar name | Fl -starting-file Ar name +.Op Fl X Ar file | Fl -exclude-from Ar file +.Op Fl x Ar pattern | Fl -exclude Ar pattern .Ek .Ar dir1 dir2 .Sh DESCRIPTION From owner-svn-src-head@freebsd.org Thu Mar 23 04:43:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 17D56D19D02; Thu, 23 Mar 2017 04:43:06 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D0C90E3E; Thu, 23 Mar 2017 04:43:05 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N4h5fb005653; Thu, 23 Mar 2017 04:43:05 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N4h4uj005649; Thu, 23 Mar 2017 04:43:04 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703230443.v2N4h4uj005649@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Thu, 23 Mar 2017 04:43:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315780 - head/sys/dev/iwm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 04:43:06 -0000 Author: adrian Date: Thu Mar 23 04:43:04 2017 New Revision: 315780 URL: https://svnweb.freebsd.org/changeset/base/315780 Log: [iwm] Remove a couple of unneeded IWM_UCODE_TLV_FLAGS_* flags. * All the supported firmwares have these flags set. * This removes the following flags: IWM_UCODE_TLV_FLAGS_PM_CMD_SUPPORT, IWM_UCODE_TLV_FLAGS_NEWBT_COEX, IWM_UCODE_TLV_FLAGS_BF_UPDATED, IWM_UCODE_TLV_FLAGS_D3_CONTINUITY_API, IWM_UCODE_TLV_FLAGS_STA_KEY_CMD, IWM_UCODE_TLV_FLAGS_DEVICE_PS_CMD, IWM_UCODE_TLV_FLAGS_SCHED_SCAN, IWM_UCODE_TLV_FLAGS_RX_ENERGY_API, IWM_UCODE_TLV_FLAGS_TIME_EVENT_API_V2 * Also remove definitions and code for dealing with the v1 time-event api. * Remove unneeded calc_rssi() function. Obtained from: dragonflybsd.git d078c812418d0e2c3392e99fa25fc776d07bdfad Modified: head/sys/dev/iwm/if_iwm.c head/sys/dev/iwm/if_iwm_power.c head/sys/dev/iwm/if_iwm_time_event.c head/sys/dev/iwm/if_iwmreg.h Modified: head/sys/dev/iwm/if_iwm.c ============================================================================== --- head/sys/dev/iwm/if_iwm.c Thu Mar 23 04:35:52 2017 (r315779) +++ head/sys/dev/iwm/if_iwm.c Thu Mar 23 04:43:04 2017 (r315780) @@ -316,7 +316,6 @@ static int iwm_mvm_load_ucode_wait_alive enum iwm_ucode_type); static int iwm_run_init_mvm_ucode(struct iwm_softc *, int); static int iwm_rx_addbuf(struct iwm_softc *, int, int); -static int iwm_mvm_calc_rssi(struct iwm_softc *, struct iwm_rx_phy_info *); static int iwm_mvm_get_signal_strength(struct iwm_softc *, struct iwm_rx_phy_info *); static void iwm_mvm_rx_rx_phy_cmd(struct iwm_softc *, @@ -345,7 +344,7 @@ static int iwm_raw_xmit(struct ieee80211 static int iwm_mvm_flush_tx_path(struct iwm_softc *sc, uint32_t tfd_msk, uint32_t flags); static int iwm_mvm_send_add_sta_cmd_status(struct iwm_softc *, - struct iwm_mvm_add_sta_cmd_v7 *, + struct iwm_mvm_add_sta_cmd *, int *); static int iwm_mvm_sta_send_to_fw(struct iwm_softc *, struct iwm_node *, int); @@ -867,12 +866,6 @@ iwm_read_firmware(struct iwm_softc *sc, "section type %d\n", error, tlv_type); } - if (!(sc->sc_capaflags & IWM_UCODE_TLV_FLAGS_PM_CMD_SUPPORT)) { - device_printf(sc->sc_dev, - "device uses unsupported power ops\n"); - error = ENOTSUP; - } - out: if (error) { fw->fw_status = IWM_FW_STATUS_NONE; @@ -3043,38 +3036,6 @@ fail: } /* iwlwifi: mvm/rx.c */ -#define IWM_RSSI_OFFSET 50 -static int -iwm_mvm_calc_rssi(struct iwm_softc *sc, struct iwm_rx_phy_info *phy_info) -{ - int rssi_a, rssi_b, rssi_a_dbm, rssi_b_dbm, max_rssi_dbm; - uint32_t agc_a, agc_b; - uint32_t val; - - val = le32toh(phy_info->non_cfg_phy[IWM_RX_INFO_AGC_IDX]); - agc_a = (val & IWM_OFDM_AGC_A_MSK) >> IWM_OFDM_AGC_A_POS; - agc_b = (val & IWM_OFDM_AGC_B_MSK) >> IWM_OFDM_AGC_B_POS; - - val = le32toh(phy_info->non_cfg_phy[IWM_RX_INFO_RSSI_AB_IDX]); - rssi_a = (val & IWM_OFDM_RSSI_INBAND_A_MSK) >> IWM_OFDM_RSSI_A_POS; - rssi_b = (val & IWM_OFDM_RSSI_INBAND_B_MSK) >> IWM_OFDM_RSSI_B_POS; - - /* - * dBm = rssi dB - agc dB - constant. - * Higher AGC (higher radio gain) means lower signal. - */ - rssi_a_dbm = rssi_a - IWM_RSSI_OFFSET - agc_a; - rssi_b_dbm = rssi_b - IWM_RSSI_OFFSET - agc_b; - max_rssi_dbm = MAX(rssi_a_dbm, rssi_b_dbm); - - IWM_DPRINTF(sc, IWM_DEBUG_RECV, - "Rssi In A %d B %d Max %d AGCA %d AGCB %d\n", - rssi_a_dbm, rssi_b_dbm, max_rssi_dbm, agc_a, agc_b); - - return max_rssi_dbm; -} - -/* iwlwifi: mvm/rx.c */ /* * iwm_mvm_get_signal_strength - use new rx PHY INFO API * values are reported by the fw as positive values - need to negate @@ -3193,17 +3154,7 @@ iwm_mvm_rx_rx_mpdu(struct iwm_softc *sc, goto fail; } - if (sc->sc_capaflags & IWM_UCODE_TLV_FLAGS_RX_ENERGY_API) { - rssi = iwm_mvm_get_signal_strength(sc, phy_info); - } else { - rssi = iwm_mvm_calc_rssi(sc, phy_info); - } - - /* Note: RSSI is absolute (ie a -ve value) */ - if (rssi < IWM_MIN_DBM) - rssi = IWM_MIN_DBM; - else if (rssi > IWM_MAX_DBM) - rssi = IWM_MAX_DBM; + rssi = iwm_mvm_get_signal_strength(sc, phy_info); /* Map it to relative value */ rssi = rssi - sc->sc_noise; @@ -3882,7 +3833,7 @@ iwm_mvm_flush_tx_path(struct iwm_softc * static int iwm_mvm_send_add_sta_cmd_status(struct iwm_softc *sc, - struct iwm_mvm_add_sta_cmd_v7 *cmd, int *status) + struct iwm_mvm_add_sta_cmd *cmd, int *status) { return iwm_mvm_send_cmd_pdu_status(sc, IWM_ADD_STA, sizeof(*cmd), cmd, status); @@ -3892,7 +3843,7 @@ iwm_mvm_send_add_sta_cmd_status(struct i static int iwm_mvm_sta_send_to_fw(struct iwm_softc *sc, struct iwm_node *in, int update) { - struct iwm_mvm_add_sta_cmd_v7 add_sta_cmd; + struct iwm_mvm_add_sta_cmd add_sta_cmd; int ret; uint32_t status; @@ -3950,7 +3901,7 @@ static int iwm_mvm_add_int_sta_common(struct iwm_softc *sc, struct iwm_int_sta *sta, const uint8_t *addr, uint16_t mac_id, uint16_t color) { - struct iwm_mvm_add_sta_cmd_v7 cmd; + struct iwm_mvm_add_sta_cmd cmd; int ret; uint32_t status; Modified: head/sys/dev/iwm/if_iwm_power.c ============================================================================== --- head/sys/dev/iwm/if_iwm_power.c Thu Mar 23 04:35:52 2017 (r315779) +++ head/sys/dev/iwm/if_iwm_power.c Thu Mar 23 04:43:04 2017 (r315780) @@ -290,9 +290,6 @@ iwm_mvm_power_update_device(struct iwm_s .flags = htole16(IWM_DEVICE_POWER_FLAGS_POWER_SAVE_ENA_MSK), }; - if (!(sc->sc_capaflags & IWM_UCODE_TLV_FLAGS_DEVICE_PS_CMD)) - return 0; - cmd.flags |= htole16(IWM_DEVICE_POWER_FLAGS_CAM_MSK); IWM_DPRINTF(sc, IWM_DEBUG_PWRSAVE | IWM_DEBUG_CMD, "Sending device power command with flags = 0x%X\n", cmd.flags); @@ -322,13 +319,9 @@ iwm_mvm_enable_beacon_filter(struct iwm_ int iwm_mvm_disable_beacon_filter(struct iwm_softc *sc) { - struct iwm_beacon_filter_cmd cmd; + struct iwm_beacon_filter_cmd cmd = {}; int ret; - memset(&cmd, 0, sizeof(cmd)); - if ((sc->sc_capaflags & IWM_UCODE_TLV_FLAGS_BF_UPDATED) == 0) - return 0; - ret = iwm_mvm_beacon_filter_send_cmd(sc, &cmd); if (ret == 0) sc->sc_bf.bf_enabled = 0; Modified: head/sys/dev/iwm/if_iwm_time_event.c ============================================================================== --- head/sys/dev/iwm/if_iwm_time_event.c Thu Mar 23 04:35:52 2017 (r315779) +++ head/sys/dev/iwm/if_iwm_time_event.c Thu Mar 23 04:43:04 2017 (r315780) @@ -164,77 +164,17 @@ __FBSDID("$FreeBSD$"); #define IWM_MVM_ROC_TE_TYPE_NORMAL IWM_TE_P2P_DEVICE_DISCOVERABLE #define IWM_MVM_ROC_TE_TYPE_MGMT_TX IWM_TE_P2P_CLIENT_ASSOC -/* used to convert from time event API v2 to v1 */ -#define IWM_TE_V2_DEP_POLICY_MSK (IWM_TE_V2_DEP_OTHER | IWM_TE_V2_DEP_TSF |\ - IWM_TE_V2_EVENT_SOCIOPATHIC) -static inline uint16_t -iwm_te_v2_get_notify(uint16_t policy) -{ - return le16toh(policy) & IWM_TE_V2_NOTIF_MSK; -} - -static inline uint16_t -iwm_te_v2_get_dep_policy(uint16_t policy) -{ - return (le16toh(policy) & IWM_TE_V2_DEP_POLICY_MSK) >> - IWM_TE_V2_PLACEMENT_POS; -} - -static inline uint16_t -iwm_te_v2_get_absence(uint16_t policy) -{ - return (le16toh(policy) & IWM_TE_V2_ABSENCE) >> IWM_TE_V2_ABSENCE_POS; -} - -static void -iwm_mvm_te_v2_to_v1(const struct iwm_time_event_cmd_v2 *cmd_v2, - struct iwm_time_event_cmd_v1 *cmd_v1) -{ - cmd_v1->id_and_color = cmd_v2->id_and_color; - cmd_v1->action = cmd_v2->action; - cmd_v1->id = cmd_v2->id; - cmd_v1->apply_time = cmd_v2->apply_time; - cmd_v1->max_delay = cmd_v2->max_delay; - cmd_v1->depends_on = cmd_v2->depends_on; - cmd_v1->interval = cmd_v2->interval; - cmd_v1->duration = cmd_v2->duration; - if (cmd_v2->repeat == IWM_TE_V2_REPEAT_ENDLESS) - cmd_v1->repeat = htole32(IWM_TE_V1_REPEAT_ENDLESS); - else - cmd_v1->repeat = htole32(cmd_v2->repeat); - cmd_v1->max_frags = htole32(cmd_v2->max_frags); - cmd_v1->interval_reciprocal = 0; /* unused */ - - cmd_v1->dep_policy = htole32(iwm_te_v2_get_dep_policy(cmd_v2->policy)); - cmd_v1->is_present = htole32(!iwm_te_v2_get_absence(cmd_v2->policy)); - cmd_v1->notify = htole32(iwm_te_v2_get_notify(cmd_v2->policy)); -} - -static int -iwm_mvm_send_time_event_cmd(struct iwm_softc *sc, - const struct iwm_time_event_cmd_v2 *cmd) -{ - struct iwm_time_event_cmd_v1 cmd_v1; - - if (sc->sc_capaflags & IWM_UCODE_TLV_FLAGS_TIME_EVENT_API_V2) - return iwm_mvm_send_cmd_pdu(sc, IWM_TIME_EVENT_CMD, - IWM_CMD_SYNC, sizeof(*cmd), cmd); - - iwm_mvm_te_v2_to_v1(cmd, &cmd_v1); - return iwm_mvm_send_cmd_pdu(sc, IWM_TIME_EVENT_CMD, IWM_CMD_SYNC, - sizeof(cmd_v1), &cmd_v1); -} - static int iwm_mvm_time_event_send_add(struct iwm_softc *sc, struct iwm_node *in, - void *te_data, struct iwm_time_event_cmd_v2 *te_cmd) + void *te_data, struct iwm_time_event_cmd *te_cmd) { int ret; IWM_DPRINTF(sc, IWM_DEBUG_CMD | IWM_DEBUG_RESET, "Add new TE, duration %d TU\n", le32toh(te_cmd->duration)); - ret = iwm_mvm_send_time_event_cmd(sc, te_cmd); + ret = iwm_mvm_send_cmd_pdu(sc, IWM_TIME_EVENT_CMD, IWM_CMD_SYNC, + sizeof(*te_cmd), te_cmd); if (ret) { IWM_DPRINTF(sc, IWM_DEBUG_CMD | IWM_DEBUG_RESET, "%s: Couldn't send IWM_TIME_EVENT_CMD: %d\n", @@ -248,9 +188,7 @@ void iwm_mvm_protect_session(struct iwm_softc *sc, struct iwm_node *in, uint32_t duration, uint32_t max_delay) { - struct iwm_time_event_cmd_v2 time_cmd; - - memset(&time_cmd, 0, sizeof(time_cmd)); + struct iwm_time_event_cmd time_cmd = {}; time_cmd.action = htole32(IWM_FW_CTXT_ACTION_ADD); time_cmd.id_and_color = Modified: head/sys/dev/iwm/if_iwmreg.h ============================================================================== --- head/sys/dev/iwm/if_iwmreg.h Thu Mar 23 04:35:52 2017 (r315779) +++ head/sys/dev/iwm/if_iwmreg.h Thu Mar 23 04:43:04 2017 (r315780) @@ -611,21 +611,12 @@ enum iwm_dtd_diode_reg { * @IWM_UCODE_TLV_FLAGS_UAPSD: This uCode image supports uAPSD * @IWM_UCODE_TLV_FLAGS_SHORT_BL: 16 entries of black list instead of 64 in scan * offload profile config command. - * @IWM_UCODE_TLV_FLAGS_RX_ENERGY_API: supports rx signal strength api - * @IWM_UCODE_TLV_FLAGS_TIME_EVENT_API_V2: using the new time event API. * @IWM_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS: D3 image supports up to six * (rather than two) IPv6 addresses - * @IWM_UCODE_TLV_FLAGS_BF_UPDATED: new beacon filtering API * @IWM_UCODE_TLV_FLAGS_NO_BASIC_SSID: not sending a probe with the SSID element * from the probe request template. - * @IWM_UCODE_TLV_FLAGS_D3_CONTINUITY_API: modified D3 API to allow keeping - * connection when going back to D0 * @IWM_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL: new NS offload (small version) * @IWM_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE: new NS offload (large version) - * @IWM_UCODE_TLV_FLAGS_SCHED_SCAN: this uCode image supports scheduled scan. - * @IWM_UCODE_TLV_FLAGS_STA_KEY_CMD: new ADD_STA and ADD_STA_KEY command API - * @IWM_UCODE_TLV_FLAGS_DEVICE_PS_CMD: support device wide power command - * containing CAM (Continuous Active Mode) indication. * @IWM_UCODE_TLV_FLAGS_P2P_PS: P2P client power save is supported (only on a * single bound interface). * @IWM_UCODE_TLV_FLAGS_UAPSD_SUPPORT: General support for uAPSD @@ -641,20 +632,11 @@ enum iwm_ucode_tlv_flag { IWM_UCODE_TLV_FLAGS_MFP = (1 << 2), IWM_UCODE_TLV_FLAGS_P2P = (1 << 3), IWM_UCODE_TLV_FLAGS_DW_BC_TABLE = (1 << 4), - IWM_UCODE_TLV_FLAGS_NEWBT_COEX = (1 << 5), - IWM_UCODE_TLV_FLAGS_PM_CMD_SUPPORT = (1 << 6), IWM_UCODE_TLV_FLAGS_SHORT_BL = (1 << 7), - IWM_UCODE_TLV_FLAGS_RX_ENERGY_API = (1 << 8), - IWM_UCODE_TLV_FLAGS_TIME_EVENT_API_V2 = (1 << 9), IWM_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS = (1 << 10), - IWM_UCODE_TLV_FLAGS_BF_UPDATED = (1 << 11), IWM_UCODE_TLV_FLAGS_NO_BASIC_SSID = (1 << 12), - IWM_UCODE_TLV_FLAGS_D3_CONTINUITY_API = (1 << 14), IWM_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL = (1 << 15), IWM_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE = (1 << 16), - IWM_UCODE_TLV_FLAGS_SCHED_SCAN = (1 << 17), - IWM_UCODE_TLV_FLAGS_STA_KEY_CMD = (1 << 19), - IWM_UCODE_TLV_FLAGS_DEVICE_PS_CMD = (1 << 20), IWM_UCODE_TLV_FLAGS_P2P_PS = (1 << 21), IWM_UCODE_TLV_FLAGS_BSS_P2P_PS_DCM = (1 << 22), IWM_UCODE_TLV_FLAGS_BSS_P2P_PS_SCM = (1 << 23), @@ -2390,52 +2372,7 @@ enum { IWM_T2_V2_START_IMMEDIATELY = (1 << 11), }; /* IWM_MAC_EVENT_ACTION_API_E_VER_2 */ - -/** - * struct iwm_time_event_cmd_api_v1 - configuring Time Events - * with struct IWM_MAC_TIME_EVENT_DATA_API_S_VER_1 (see also - * with version 2. determined by IWM_UCODE_TLV_FLAGS) - * ( IWM_TIME_EVENT_CMD = 0x29 ) - * @id_and_color: ID and color of the relevant MAC - * @action: action to perform, one of IWM_FW_CTXT_ACTION_* - * @id: this field has two meanings, depending on the action: - * If the action is ADD, then it means the type of event to add. - * For all other actions it is the unique event ID assigned when the - * event was added by the FW. - * @apply_time: When to start the Time Event (in GP2) - * @max_delay: maximum delay to event's start (apply time), in TU - * @depends_on: the unique ID of the event we depend on (if any) - * @interval: interval between repetitions, in TU - * @interval_reciprocal: 2^32 / interval - * @duration: duration of event in TU - * @repeat: how many repetitions to do, can be IWM_TE_REPEAT_ENDLESS - * @dep_policy: one of IWM_TE_V1_INDEPENDENT, IWM_TE_V1_DEP_OTHER, IWM_TE_V1_DEP_TSF - * and IWM_TE_V1_EVENT_SOCIOPATHIC - * @is_present: 0 or 1, are we present or absent during the Time Event - * @max_frags: maximal number of fragments the Time Event can be divided to - * @notify: notifications using IWM_TE_V1_NOTIF_* (whom to notify when) - */ -struct iwm_time_event_cmd_v1 { - /* COMMON_INDEX_HDR_API_S_VER_1 */ - uint32_t id_and_color; - uint32_t action; - uint32_t id; - /* IWM_MAC_TIME_EVENT_DATA_API_S_VER_1 */ - uint32_t apply_time; - uint32_t max_delay; - uint32_t dep_policy; - uint32_t depends_on; - uint32_t is_present; - uint32_t max_frags; - uint32_t interval; - uint32_t interval_reciprocal; - uint32_t duration; - uint32_t repeat; - uint32_t notify; -} __packed; /* IWM_MAC_TIME_EVENT_CMD_API_S_VER_1 */ - - -/* Time event - defines for command API v2 */ +/* Time event - defines for command API */ /* * @IWM_TE_V2_FRAG_NONE: fragmentation of the time event is NOT allowed. @@ -2466,7 +2403,7 @@ enum { #define IWM_TE_V2_PLACEMENT_POS 12 #define IWM_TE_V2_ABSENCE_POS 15 -/* Time event policy values (for time event cmd api v2) +/* Time event policy values * A notification (both event and fragment) includes a status indicating weather * the FW was able to schedule the event or not. For fragment start/end * notification the status is always success. There is no start/end fragment @@ -2512,7 +2449,7 @@ enum { }; /** - * struct iwm_time_event_cmd_api_v2 - configuring Time Events + * struct iwm_time_event_cmd_api - configuring Time Events * with struct IWM_MAC_TIME_EVENT_DATA_API_S_VER_2 (see also * with version 1. determined by IWM_UCODE_TLV_FLAGS) * ( IWM_TIME_EVENT_CMD = 0x29 ) @@ -2535,7 +2472,7 @@ enum { * IWM_TE_EVENT_SOCIOPATHIC * using IWM_TE_ABSENCE and using IWM_TE_NOTIF_* */ -struct iwm_time_event_cmd_v2 { +struct iwm_time_event_cmd { /* COMMON_INDEX_HDR_API_S_VER_1 */ uint32_t id_and_color; uint32_t action; @@ -5690,7 +5627,7 @@ struct iwm_mvm_keyinfo { #define IWM_ADD_STA_BAID_SHIFT 8 /** - * struct iwm_mvm_add_sta_cmd_v7 - Add/modify a station in the fw's sta table. + * struct iwm_mvm_add_sta_cmd - Add/modify a station in the fw's sta table. * ( REPLY_ADD_STA = 0x18 ) * @add_modify: 1: modify existing, 0: add new station * @awake_acs: @@ -5726,7 +5663,7 @@ struct iwm_mvm_keyinfo { * ADD_STA sets up the table entry for one station, either creating a new * entry, or modifying a pre-existing one. */ -struct iwm_mvm_add_sta_cmd_v7 { +struct iwm_mvm_add_sta_cmd { uint8_t add_modify; uint8_t awake_acs; uint16_t tid_disable_tx; From owner-svn-src-head@freebsd.org Thu Mar 23 04:50:40 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 65E25D19196; Thu, 23 Mar 2017 04:50:40 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3534D1528; Thu, 23 Mar 2017 04:50:40 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N4od1T006317; Thu, 23 Mar 2017 04:50:39 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N4odKB006314; Thu, 23 Mar 2017 04:50:39 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703230450.v2N4odKB006314@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Thu, 23 Mar 2017 04:50:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315784 - head/sys/dev/iwm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 04:50:40 -0000 Author: adrian Date: Thu Mar 23 04:50:38 2017 New Revision: 315784 URL: https://svnweb.freebsd.org/changeset/base/315784 Log: [iwm] Make ucode capabilities and api flags handling more like iwlwifi. Obtained from: dragonflybsd.git 757eecf0e6c92745aa2eee95811e573c8300850e Modified: head/sys/dev/iwm/if_iwm.c head/sys/dev/iwm/if_iwm_scan.c head/sys/dev/iwm/if_iwmvar.h Modified: head/sys/dev/iwm/if_iwm.c ============================================================================== --- head/sys/dev/iwm/if_iwm.c Thu Mar 23 04:49:33 2017 (r315783) +++ head/sys/dev/iwm/if_iwm.c Thu Mar 23 04:50:38 2017 (r315784) @@ -484,6 +484,56 @@ iwm_set_default_calib(struct iwm_softc * return 0; } +static int +iwm_set_ucode_api_flags(struct iwm_softc *sc, const uint8_t *data, + struct iwm_ucode_capabilities *capa) +{ + const struct iwm_ucode_api *ucode_api = (const void *)data; + uint32_t api_index = le32toh(ucode_api->api_index); + uint32_t api_flags = le32toh(ucode_api->api_flags); + int i; + + if (api_index >= howmany(IWM_NUM_UCODE_TLV_API, 32)) { + device_printf(sc->sc_dev, + "api flags index %d larger than supported by driver\n", + api_index); + /* don't return an error so we can load FW that has more bits */ + return 0; + } + + for (i = 0; i < 32; i++) { + if (api_flags & (1U << i)) + setbit(capa->enabled_api, i + 32 * api_index); + } + + return 0; +} + +static int +iwm_set_ucode_capabilities(struct iwm_softc *sc, const uint8_t *data, + struct iwm_ucode_capabilities *capa) +{ + const struct iwm_ucode_capa *ucode_capa = (const void *)data; + uint32_t api_index = le32toh(ucode_capa->api_index); + uint32_t api_flags = le32toh(ucode_capa->api_capa); + int i; + + if (api_index >= howmany(IWM_NUM_UCODE_TLV_CAPA, 32)) { + device_printf(sc->sc_dev, + "capa flags index %d larger than supported by driver\n", + api_index); + /* don't return an error so we can load FW that has more bits */ + return 0; + } + + for (i = 0; i < 32; i++) { + if (api_flags & (1U << i)) + setbit(capa->enabled_capa, i + 32 * api_index); + } + + return 0; +} + static void iwm_fw_info_free(struct iwm_fw_info *fw) { @@ -499,6 +549,7 @@ iwm_read_firmware(struct iwm_softc *sc, struct iwm_fw_info *fw = &sc->sc_fw; const struct iwm_tlv_ucode_header *uhdr; struct iwm_ucode_tlv tlv; + struct iwm_ucode_capabilities *capa = &sc->ucode_capa; enum iwm_ucode_tlv_type tlv_type; const struct firmware *fwp; const uint8_t *data; @@ -535,9 +586,11 @@ iwm_read_firmware(struct iwm_softc *sc, fw->fw_fp = fwp; /* (Re-)Initialize default values. */ - sc->sc_capaflags = 0; - sc->sc_capa_n_scan_channels = IWM_DEFAULT_SCAN_CHANNELS; - memset(sc->sc_enabled_capa, 0, sizeof(sc->sc_enabled_capa)); + capa->flags = 0; + capa->max_probe_length = IWM_DEFAULT_MAX_PROBE_LENGTH; + capa->n_scan_channels = IWM_DEFAULT_SCAN_CHANNELS; + memset(capa->enabled_capa, 0, sizeof(capa->enabled_capa)); + memset(capa->enabled_api, 0, sizeof(capa->enabled_api)); memset(sc->sc_fw_mcc, 0, sizeof(sc->sc_fw_mcc)); /* @@ -590,10 +643,10 @@ iwm_read_firmware(struct iwm_softc *sc, error = EINVAL; goto parse_out; } - sc->sc_capa_max_probe_len - = le32toh(*(const uint32_t *)tlv_data); + capa->max_probe_length = + le32toh(*(const uint32_t *)tlv_data); /* limit it to something sensible */ - if (sc->sc_capa_max_probe_len > + if (capa->max_probe_length > IWM_SCAN_OFFLOAD_PROBE_REQ_SIZE) { IWM_DPRINTF(sc, IWM_DEBUG_FIRMWARE_TLV, "%s: IWM_UCODE_TLV_PROBE_MAX_LEN " @@ -611,7 +664,7 @@ iwm_read_firmware(struct iwm_softc *sc, error = EINVAL; goto parse_out; } - sc->sc_capaflags |= IWM_UCODE_TLV_FLAGS_PAN; + capa->flags |= IWM_UCODE_TLV_FLAGS_PAN; break; case IWM_UCODE_TLV_FLAGS: if (tlv_len < sizeof(uint32_t)) { @@ -633,7 +686,7 @@ iwm_read_firmware(struct iwm_softc *sc, * 2) TLV_FLAGS contains TLV_FLAGS_PAN * ==> this resets TLV_PAN to itself... hnnnk */ - sc->sc_capaflags = le32toh(*(const uint32_t *)tlv_data); + capa->flags = le32toh(*(const uint32_t *)tlv_data); break; case IWM_UCODE_TLV_CSCHEME: if ((error = iwm_store_cscheme(sc, @@ -738,42 +791,26 @@ iwm_read_firmware(struct iwm_softc *sc, break; case IWM_UCODE_TLV_API_CHANGES_SET: { - const struct iwm_ucode_api *api; - if (tlv_len != sizeof(*api)) { + if (tlv_len != sizeof(struct iwm_ucode_api)) { error = EINVAL; goto parse_out; } - api = (const struct iwm_ucode_api *)tlv_data; - /* Flags may exceed 32 bits in future firmware. */ - if (le32toh(api->api_index) > 0) { - device_printf(sc->sc_dev, - "unsupported API index %d\n", - le32toh(api->api_index)); + if (iwm_set_ucode_api_flags(sc, tlv_data, capa)) { + error = EINVAL; goto parse_out; } - sc->sc_ucode_api = le32toh(api->api_flags); break; } case IWM_UCODE_TLV_ENABLED_CAPABILITIES: { - const struct iwm_ucode_capa *capa; - int idx, i; - if (tlv_len != sizeof(*capa)) { + if (tlv_len != sizeof(struct iwm_ucode_capa)) { error = EINVAL; goto parse_out; } - capa = (const struct iwm_ucode_capa *)tlv_data; - idx = le32toh(capa->api_index); - if (idx >= howmany(IWM_NUM_UCODE_TLV_CAPA, 32)) { - device_printf(sc->sc_dev, - "unsupported API index %d\n", idx); + if (iwm_set_ucode_capabilities(sc, tlv_data, capa)) { + error = EINVAL; goto parse_out; } - for (i = 0; i < 32; i++) { - if ((le32toh(capa->api_capa) & (1U << i)) == 0) - continue; - setbit(sc->sc_enabled_capa, i + (32 * idx)); - } break; } @@ -827,8 +864,8 @@ iwm_read_firmware(struct iwm_softc *sc, error = EINVAL; goto parse_out; } - sc->sc_capa_n_scan_channels = - le32toh(*(const uint32_t *)tlv_data); + capa->n_scan_channels = + le32toh(*(const uint32_t *)tlv_data); break; case IWM_UCODE_TLV_FW_VERSION: @@ -4713,13 +4750,13 @@ iwm_send_update_mcc_cmd(struct iwm_softc int n_channels; uint16_t mcc; #endif - int resp_v2 = isset(sc->sc_enabled_capa, + int resp_v2 = fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_LAR_SUPPORT_V2); memset(&mcc_cmd, 0, sizeof(mcc_cmd)); mcc_cmd.mcc = htole16(alpha2[0] << 8 | alpha2[1]); - if ((sc->sc_ucode_api & IWM_UCODE_TLV_API_WIFI_MCC_UPDATE) || - isset(sc->sc_enabled_capa, IWM_UCODE_TLV_CAPA_LAR_MULTI_MCC)) + if (fw_has_api(&sc->ucode_capa, IWM_UCODE_TLV_API_WIFI_MCC_UPDATE) || + fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_LAR_MULTI_MCC)) mcc_cmd.source_id = IWM_MCC_SOURCE_GET_CURRENT; else mcc_cmd.source_id = IWM_MCC_SOURCE_OLD_FW; @@ -4857,12 +4894,12 @@ iwm_init_hw(struct iwm_softc *sc) if (error) goto error; - if (isset(sc->sc_enabled_capa, IWM_UCODE_TLV_CAPA_LAR_SUPPORT)) { + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_LAR_SUPPORT)) { if ((error = iwm_send_update_mcc_cmd(sc, "ZZ")) != 0) goto error; } - if (isset(sc->sc_enabled_capa, IWM_UCODE_TLV_CAPA_UMAC_SCAN)) { + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_UMAC_SCAN)) { if ((error = iwm_mvm_config_umac_scan(sc)) != 0) goto error; } @@ -6263,7 +6300,7 @@ iwm_scan_start(struct ieee80211com *ic) device_printf(sc->sc_dev, "%s: Previous scan not completed yet\n", __func__); } - if (isset(sc->sc_enabled_capa, IWM_UCODE_TLV_CAPA_UMAC_SCAN)) + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_UMAC_SCAN)) error = iwm_mvm_umac_scan(sc); else error = iwm_mvm_lmac_scan(sc); Modified: head/sys/dev/iwm/if_iwm_scan.c ============================================================================== --- head/sys/dev/iwm/if_iwm_scan.c Thu Mar 23 04:49:33 2017 (r315783) +++ head/sys/dev/iwm/if_iwm_scan.c Thu Mar 23 04:50:38 2017 (r315784) @@ -272,7 +272,7 @@ iwm_mvm_lmac_scan_fill_channels(struct i int j; for (nchan = j = 0; - j < ic->ic_nchans && nchan < sc->sc_capa_n_scan_channels; j++) { + j < ic->ic_nchans && nchan < sc->ucode_capa.n_scan_channels; j++) { c = &ic->ic_channels[j]; /* For 2GHz, only populate 11b channels */ /* For 5GHz, only populate 11a channels */ @@ -316,7 +316,7 @@ iwm_mvm_umac_scan_fill_channels(struct i int j; for (nchan = j = 0; - j < ic->ic_nchans && nchan < sc->sc_capa_n_scan_channels; j++) { + j < ic->ic_nchans && nchan < sc->ucode_capa.n_scan_channels; j++) { c = &ic->ic_channels[j]; /* For 2GHz, only populate 11b channels */ /* For 5GHz, only populate 11a channels */ @@ -398,7 +398,7 @@ iwm_mvm_fill_probe_req(struct iwm_softc preq->band_data[0].len = htole16(frm - pos); remain -= frm - pos; - if (isset(sc->sc_enabled_capa, + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT)) { if (remain < 3) return ENOBUFS; @@ -464,7 +464,7 @@ iwm_mvm_config_umac_scan(struct iwm_soft IWM_SCAN_CONFIG_RATE_36M | IWM_SCAN_CONFIG_RATE_48M | IWM_SCAN_CONFIG_RATE_54M); - cmd_size = sizeof(*scan_config) + sc->sc_capa_n_scan_channels; + cmd_size = sizeof(*scan_config) + sc->ucode_capa.n_scan_channels; scan_config = malloc(cmd_size, M_DEVBUF, M_NOWAIT | M_ZERO); if (scan_config == NULL) @@ -492,7 +492,7 @@ iwm_mvm_config_umac_scan(struct iwm_soft IWM_CHANNEL_FLAG_PRE_SCAN_PASSIVE2ACTIVE; for (nchan = j = 0; - j < ic->ic_nchans && nchan < sc->sc_capa_n_scan_channels; j++) { + j < ic->ic_nchans && nchan < sc->ucode_capa.n_scan_channels; j++) { c = &ic->ic_channels[j]; /* For 2GHz, only populate 11b channels */ /* For 5GHz, only populate 11a channels */ @@ -550,7 +550,7 @@ iwm_mvm_umac_scan(struct iwm_softc *sc) req_len = sizeof(struct iwm_scan_req_umac) + (sizeof(struct iwm_scan_channel_cfg_umac) * - sc->sc_capa_n_scan_channels) + + sc->ucode_capa.n_scan_channels) + sizeof(struct iwm_scan_req_umac_tail); if (req_len > IWM_MAX_CMD_PAYLOAD_SIZE) return ENOMEM; @@ -584,7 +584,7 @@ iwm_mvm_umac_scan(struct iwm_softc *sc) tail = (void *)((char *)&req->data + sizeof(struct iwm_scan_channel_cfg_umac) * - sc->sc_capa_n_scan_channels); + sc->ucode_capa.n_scan_channels); /* Check if we're doing an active directed scan. */ for (i = 0; i < nssid; i++) { @@ -601,7 +601,7 @@ iwm_mvm_umac_scan(struct iwm_softc *sc) } else req->general_flags |= htole32(IWM_UMAC_SCAN_GEN_FLAGS_PASSIVE); - if (isset(sc->sc_enabled_capa, + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT)) req->general_flags |= htole32(IWM_UMAC_SCAN_GEN_FLAGS_RRM_ENABLED); @@ -644,7 +644,7 @@ iwm_mvm_lmac_scan(struct iwm_softc *sc) req_len = sizeof(struct iwm_scan_req_lmac) + (sizeof(struct iwm_scan_channel_cfg_lmac) * - sc->sc_capa_n_scan_channels) + sizeof(struct iwm_scan_probe_req); + sc->ucode_capa.n_scan_channels) + sizeof(struct iwm_scan_probe_req); if (req_len > IWM_MAX_CMD_PAYLOAD_SIZE) return ENOMEM; req = malloc(req_len, M_DEVBUF, M_NOWAIT | M_ZERO); @@ -670,7 +670,7 @@ iwm_mvm_lmac_scan(struct iwm_softc *sc) req->scan_flags = htole32(IWM_MVM_LMAC_SCAN_FLAG_PASS_ALL | IWM_MVM_LMAC_SCAN_FLAG_ITER_COMPLETE | IWM_MVM_LMAC_SCAN_FLAG_EXTENDED_DWELL); - if (isset(sc->sc_enabled_capa, + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT)) req->scan_flags |= htole32(IWM_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED); @@ -716,7 +716,7 @@ iwm_mvm_lmac_scan(struct iwm_softc *sc) ret = iwm_mvm_fill_probe_req(sc, (struct iwm_scan_probe_req *)(req->data + (sizeof(struct iwm_scan_channel_cfg_lmac) * - sc->sc_capa_n_scan_channels))); + sc->ucode_capa.n_scan_channels))); if (ret) { free(req, M_DEVBUF); return ret; @@ -804,7 +804,7 @@ iwm_mvm_scan_stop_wait(struct iwm_softc IWM_DPRINTF(sc, IWM_DEBUG_SCAN, "Preparing to stop scan\n"); - if (isset(sc->sc_enabled_capa, IWM_UCODE_TLV_CAPA_UMAC_SCAN)) + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_UMAC_SCAN)) ret = iwm_mvm_umac_scan_abort(sc); else ret = iwm_mvm_lmac_scan_abort(sc); Modified: head/sys/dev/iwm/if_iwmvar.h ============================================================================== --- head/sys/dev/iwm/if_iwmvar.h Thu Mar 23 04:49:33 2017 (r315783) +++ head/sys/dev/iwm/if_iwmvar.h Thu Mar 23 04:50:38 2017 (r315784) @@ -166,6 +166,28 @@ enum iwm_ucode_type { IWM_UCODE_TYPE_MAX }; +struct iwm_ucode_capabilities { + uint32_t max_probe_length; + uint32_t n_scan_channels; + uint32_t flags; + uint8_t enabled_api[howmany(IWM_NUM_UCODE_TLV_API, NBBY)]; + uint8_t enabled_capa[howmany(IWM_NUM_UCODE_TLV_CAPA, NBBY)]; +}; + +static inline int +fw_has_api(const struct iwm_ucode_capabilities *capabilities, + unsigned int api) +{ + return isset(capabilities->enabled_api, api); +} + +static inline int +fw_has_capa(const struct iwm_ucode_capabilities *capabilities, + unsigned int capa) +{ + return isset(capabilities->enabled_capa, capa); +} + /* one for each uCode image (inst/data, init/runtime/wowlan) */ struct iwm_fw_desc { const void *data; /* vmalloc'ed data */ @@ -440,12 +462,8 @@ struct iwm_softc { int ucode_loaded; char sc_fwver[32]; - int sc_capaflags; - int sc_capa_max_probe_len; - int sc_capa_n_scan_channels; - uint32_t sc_ucode_api; - uint8_t sc_enabled_capa[howmany(IWM_NUM_UCODE_TLV_CAPA, NBBY)]; - char sc_fw_mcc[3]; + struct iwm_ucode_capabilities ucode_capa; + char sc_fw_mcc[3]; int sc_intmask; From owner-svn-src-head@freebsd.org Thu Mar 23 05:06:42 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 03850D19C77; Thu, 23 Mar 2017 05:06:42 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C7429156B; Thu, 23 Mar 2017 05:06:41 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N56en1014698; Thu, 23 Mar 2017 05:06:40 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N56eIa014697; Thu, 23 Mar 2017 05:06:40 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230506.v2N56eIa014697@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:06:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315788 - head/share/man/man7 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:06:42 -0000 Author: ngie Date: Thu Mar 23 05:06:40 2017 New Revision: 315788 URL: https://svnweb.freebsd.org/changeset/base/315788 Log: build(7): sort SEE ALSO section tests(7) should be grouped in the man section 7 group, not the section 8 group. MFC after: 1 week Reported by: make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man7/build.7 Modified: head/share/man/man7/build.7 ============================================================================== --- head/share/man/man7/build.7 Thu Mar 23 04:54:31 2017 (r315787) +++ head/share/man/man7/build.7 Thu Mar 23 05:06:40 2017 (r315788) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 28, 2017 +.Dd March 22, 2017 .Dt BUILD 7 .Os .Sh NAME @@ -683,11 +683,11 @@ make TARGET=sparc64 DESTDIR=/clients/spa .Xr src.conf 5 , .Xr ports 7 , .Xr release 7 , +.Xr tests 7 , .Xr config 8 , .Xr mergemaster 8 , .Xr portsnap 8 , .Xr reboot 8 , -.Xr shutdown 8 , -.Xr tests 7 +.Xr shutdown 8 .Sh AUTHORS .An Mike W. Meyer Aq Mt mwm@mired.org From owner-svn-src-head@freebsd.org Thu Mar 23 05:12:08 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 834D9D19ED1; Thu, 23 Mar 2017 05:12:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 508F61973; Thu, 23 Mar 2017 05:12:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5C7HC017808; Thu, 23 Mar 2017 05:12:07 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5C7EH017807; Thu, 23 Mar 2017 05:12:07 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230512.v2N5C7EH017807@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:12:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315789 - head/share/man/man7 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:12:08 -0000 Author: ngie Date: Thu Mar 23 05:12:07 2017 New Revision: 315789 URL: https://svnweb.freebsd.org/changeset/base/315789 Log: tests(7): fix mdoc warning Continue sentence in "Configuring the tests" on a new line. MFC after: 1 week Reported by: make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man7/tests.7 Modified: head/share/man/man7/tests.7 ============================================================================== --- head/share/man/man7/tests.7 Thu Mar 23 05:06:40 2017 (r315788) +++ head/share/man/man7/tests.7 Thu Mar 23 05:12:07 2017 (r315789) @@ -26,7 +26,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd December 5, 2015 +.Dd March 22, 2017 .Dt TESTS 7 .Os .Sh NAME @@ -151,8 +151,9 @@ to its manual page Some test cases in the .Fx Test Suite require manual configuration by the administrator before they can be -run. Unless certain properties are defined, the tests that require them will -be skipped. +run. +Unless certain properties are defined, the tests that require them will be +skipped. .Pp Test suites are configured by defining their configuration variables in From owner-svn-src-head@freebsd.org Thu Mar 23 05:15:36 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4DE52D19F82; Thu, 23 Mar 2017 05:15:36 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1DA2B1BA1; Thu, 23 Mar 2017 05:15:36 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5FZB3018646; Thu, 23 Mar 2017 05:15:35 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5FZYZ018645; Thu, 23 Mar 2017 05:15:35 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230515.v2N5FZYZ018645@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:15:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315790 - head/share/man/man7 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:15:36 -0000 Author: ngie Date: Thu Mar 23 05:15:35 2017 New Revision: 315790 URL: https://svnweb.freebsd.org/changeset/base/315790 Log: tuning(7): fix SEE ALSO section sorting dummynet(4) should come before eventtimers(4) MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/share/man/man7/tuning.7 Modified: head/share/man/man7/tuning.7 ============================================================================== --- head/share/man/man7/tuning.7 Thu Mar 23 05:12:07 2017 (r315789) +++ head/share/man/man7/tuning.7 Thu Mar 23 05:15:35 2017 (r315790) @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 9, 2016 +.Dd March 22, 2017 .Dt TUNING 7 .Os .Sh NAME @@ -737,8 +737,8 @@ over services you export from your box ( .Xr systat 1 , .Xr sendfile 2 , .Xr ata 4 , -.Xr eventtimers 4 , .Xr dummynet 4 , +.Xr eventtimers 4 , .Xr login.conf 5 , .Xr rc.conf 5 , .Xr sysctl.conf 5 , From owner-svn-src-head@freebsd.org Thu Mar 23 05:26:45 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 714ACD19548; Thu, 23 Mar 2017 05:26:45 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4BC7E13C7; Thu, 23 Mar 2017 05:26:45 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5Qi08022950; Thu, 23 Mar 2017 05:26:44 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5QiIR022949; Thu, 23 Mar 2017 05:26:44 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230526.v2N5QiIR022949@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:26:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315793 - head/share/man/man3 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:26:45 -0000 Author: ngie Date: Thu Mar 23 05:26:44 2017 New Revision: 315793 URL: https://svnweb.freebsd.org/changeset/base/315793 Log: intro(3): fix markup - Use `Em` with `.It` macro when referring to other libraries, instead of `Xr`. - Use `.Em` instead of `.Xr` when referring to libraries. - Remove commented out lines. MFC after: 1 month Reported by: make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man3/intro.3 Modified: head/share/man/man3/intro.3 ============================================================================== --- head/share/man/man3/intro.3 Thu Mar 23 05:19:56 2017 (r315792) +++ head/share/man/man3/intro.3 Thu Mar 23 05:26:44 2017 (r315793) @@ -28,7 +28,7 @@ .\" @(#)intro.3 8.1 (Berkeley) 6/5/93 .\" $FreeBSD$ .\" -.Dd June 5, 1993 +.Dd March 22, 2017 .Dt INTRO 3 .Os .Sh NAME @@ -40,26 +40,16 @@ library functions, their error returns a common definitions and concepts. Most of these functions are available from the C library, .Em libc . -.\" (see -.\" .Xr libc 3 ) . Other libraries, such as the math library, .Em libm , must be indicated at compile time with the .Fl l option of the compiler. -.\" .Pp -.\" A subset of the -.\" .Xr libc functions -.\" are available from Fortran; -.\" they are described separately in -.\" .Xr intro 3f . .Pp The various libraries (followed by the loader flag): .Bl -tag -width "libc (-lc)" -.It Xr libc Pq Fl l Ns Ar c +.It Em libc Pq Fl l Ns Ar c Standard C library functions. -.\" (See -.\" .Xr libc 3 . ) When using the C compiler .Xr cc 1 , it is not necessary @@ -67,8 +57,8 @@ to supply the loader flag .Fl l Ns Ar c for these functions. There are several `libraries' or groups of functions included inside of -.Xr libc : -the standard +.Em libc +: the standard .Tn I/O routines, database routines, @@ -77,12 +67,12 @@ string operators, character tests and character operators, des encryption routines, storage allocation, time functions, signal handling and more. -.It Xr libcurses Pq Fl l Ns Ar curses Fl l Ns Ar termcap +.It Em libcurses Pq Fl l Ns Ar curses Fl l Ns Ar termcap Terminal independent screen management routines for two dimensional non-bitmap display terminals. (See .Xr ncurses 3 . ) -.It Xr libcompat Pq Fl l Ns Ar compat +.It Em libcompat Pq Fl l Ns Ar compat Functions which are obsolete but are available for compatibility with .Bx 4.3 . In particular, @@ -92,45 +82,30 @@ have been included for source code compa Use of these routines should, for the most part, be avoided. The manual page entry for each compatibility routine indicates the proper interface to use. -.It Xr libkvm Pq Fl l Ns Ar kvm +.It Em libkvm Pq Fl l Ns Ar kvm Functions used to access kernel memory are in this library. They can be used against both a running system and a crash dump. (See .Xr kvm 3 . ) -.It Xr libl Pq Fl l Ns Ar l +.It Em libl Pq Fl l Ns Ar l The library for .Xr lex 1 . -.\" .It Xr libln -.It Xr libm Pq Fl l Ns Ar m +.It Em libm Pq Fl l Ns Ar m The math library, .Em libm . The math library is loaded as needed by the Pascal compiler, -.\" .Xr pc 1 , but not by the C compiler which requires the .Fl l Ns Ar m flag. (See .Xr math 3 . ) -.It Xr libmp Pq Fl l Ns Ar mp -.\" .It Xr libom -.\" Old math library. -.\" .It Xr libplot Pq Fl l Ns Ar plot -.\" Device independent plotting functions. -.\" (See -.\" .Xr plot 3 . ) -.\" .It Xr libplotf77 Pq Fl l Ns Ar plotf77 -.\" The device independent plotting functions for fortran. -.\" (See -.\" .Xr plot 3 . ) -.\" .It Xr libresolv Pq Fl l Ns Ar resolv -.\" Routines for network address resolution. -.It Xr libtermcap Pq Fl l Ns Ar termcap +.It Em libmp Pq Fl l Ns Ar mp +.It Em libtermcap Pq Fl l Ns Ar termcap The terminal independent operation library package. (See .Xr termcap 3 . ) -.\" .It libvt0.a -.It Xr liby Pq Fl l Ns Ar y +.It Em liby Pq Fl l Ns Ar y The library for .Xr yacc 1 . .El @@ -146,17 +121,12 @@ the math library the math library compiled for profiling .El .Sh SEE ALSO -.\" .Xr libc 3 , .Xr cc 1 , .Xr ld 1 , .Xr nm 1 , .Xr intro 2 , .Xr math 3 , .Xr stdio 3 -.\" .Sh LIST OF FUNCTIONS -.\" .Bl -column "strncasecmpxxx" "system" -.\" .Sy Name Description -.\" .El .Sh HISTORY An .Nm From owner-svn-src-head@freebsd.org Thu Mar 23 05:37:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 452BED199A1; Thu, 23 Mar 2017 05:37:06 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 123911CC5; Thu, 23 Mar 2017 05:37:05 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5b5Dl027133; Thu, 23 Mar 2017 05:37:05 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5b5JC027132; Thu, 23 Mar 2017 05:37:05 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230537.v2N5b5JC027132@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:37:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315795 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:37:06 -0000 Author: ngie Date: Thu Mar 23 05:37:04 2017 New Revision: 315795 URL: https://svnweb.freebsd.org/changeset/base/315795 Log: alq(9): fix mandoc markup Start new sentence on a new line. MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/alq.9 Modified: head/share/man/man9/alq.9 ============================================================================== --- head/share/man/man9/alq.9 Thu Mar 23 05:32:02 2017 (r315794) +++ head/share/man/man9/alq.9 Thu Mar 23 05:37:04 2017 (r315795) @@ -360,8 +360,8 @@ Performance critical code paths may wish .Fn alq_getn (variable length queues) or .Fn alq_get -(fixed length queues) to avoid the extra memory copy. Note that a queue -remains locked between calls to +(fixed length queues) to avoid the extra memory copy. +Note that a queue remains locked between calls to .Fn alq_getn or .Fn alq_get From owner-svn-src-head@freebsd.org Thu Mar 23 05:38:59 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 16981D19B66; Thu, 23 Mar 2017 05:38:59 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DA7F51F50; Thu, 23 Mar 2017 05:38:58 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5cvFE027250; Thu, 23 Mar 2017 05:38:57 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5cvGW027249; Thu, 23 Mar 2017 05:38:57 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230538.v2N5cvGW027249@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:38:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315796 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:38:59 -0000 Author: ngie Date: Thu Mar 23 05:38:57 2017 New Revision: 315796 URL: https://svnweb.freebsd.org/changeset/base/315796 Log: bus_alloc_resource(9): fix mandoc markup Add missing comma after `.Nm bus_alloc_resource_any` in NAME section. MFC after: 1 week Reported by: make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/bus_alloc_resource.9 Modified: head/share/man/man9/bus_alloc_resource.9 ============================================================================== --- head/share/man/man9/bus_alloc_resource.9 Thu Mar 23 05:37:04 2017 (r315795) +++ head/share/man/man9/bus_alloc_resource.9 Thu Mar 23 05:38:57 2017 (r315796) @@ -33,7 +33,7 @@ .Os .Sh NAME .Nm bus_alloc_resource , -.Nm bus_alloc_resource_any +.Nm bus_alloc_resource_any , .Nm bus_alloc_resource_anywhere .Nd allocate resources from a parent bus .Sh SYNOPSIS From owner-svn-src-head@freebsd.org Thu Mar 23 05:41:58 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 56606D19DEF; Thu, 23 Mar 2017 05:41:58 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 18537378; Thu, 23 Mar 2017 05:41:58 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5fvUw031118; Thu, 23 Mar 2017 05:41:57 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5fvU1031117; Thu, 23 Mar 2017 05:41:57 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230541.v2N5fvU1031117@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:41:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315797 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:41:58 -0000 Author: ngie Date: Thu Mar 23 05:41:56 2017 New Revision: 315797 URL: https://svnweb.freebsd.org/changeset/base/315797 Log: buf_ring(9): fix mandoc markup Remove spurious trailing comma after `buf_ring_peek` in the NAME section. MFC after: 1 week Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/buf_ring.9 Modified: head/share/man/man9/buf_ring.9 ============================================================================== --- head/share/man/man9/buf_ring.9 Thu Mar 23 05:38:57 2017 (r315796) +++ head/share/man/man9/buf_ring.9 Thu Mar 23 05:41:56 2017 (r315797) @@ -38,7 +38,7 @@ .Nm buf_ring_count , .Nm buf_ring_empty , .Nm buf_ring_full , -.Nm buf_ring_peek , +.Nm buf_ring_peek .Nd multi-producer, {single, multi}-consumer lock-less ring buffer .Sh SYNOPSIS .In sys/param.h From owner-svn-src-head@freebsd.org Thu Mar 23 05:44:19 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D8C57D19F0A; Thu, 23 Mar 2017 05:44:19 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A5DD77D5; Thu, 23 Mar 2017 05:44:19 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5iI9N031269; Thu, 23 Mar 2017 05:44:18 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5iIbq031268; Thu, 23 Mar 2017 05:44:18 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230544.v2N5iIbq031268@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:44:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315798 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:44:19 -0000 Author: ngie Date: Thu Mar 23 05:44:18 2017 New Revision: 315798 URL: https://svnweb.freebsd.org/changeset/base/315798 Log: DB_COMMAND(9): fix mandoc markup Start new sentences on new lines. MFC after: 1 week Reported by: make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/DB_COMMAND.9 Modified: head/share/man/man9/DB_COMMAND.9 ============================================================================== --- head/share/man/man9/DB_COMMAND.9 Thu Mar 23 05:41:56 2017 (r315797) +++ head/share/man/man9/DB_COMMAND.9 Thu Mar 23 05:44:18 2017 (r315798) @@ -81,7 +81,9 @@ The number of quad words starting at off .Fa addr that the command must process. .It Fa modif -A pointer to the string of modifiers. That is, a series of symbols used to pass some options to the command. For example, the +A pointer to the string of modifiers. +That is, a series of symbols used to pass some options to the command. +For example, the .Sy examine command will display words in decimal form if it is passed the modifier "d". .El From owner-svn-src-head@freebsd.org Thu Mar 23 05:51:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 25C97D1911C; Thu, 23 Mar 2017 05:51:56 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C76CFC93; Thu, 23 Mar 2017 05:51:55 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5ps2l035270; Thu, 23 Mar 2017 05:51:54 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5psfe035269; Thu, 23 Mar 2017 05:51:54 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230551.v2N5psfe035269@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:51:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315799 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:51:56 -0000 Author: ngie Date: Thu Mar 23 05:51:54 2017 New Revision: 315799 URL: https://svnweb.freebsd.org/changeset/base/315799 Log: counter(9): fix igor/manlint warnings - Reword description of `counter_enter` slightly to fix wordiness [1]. - Expand "isn't" as "is not" [1]. - Add missing section number with .Xr sysctl calls [2]. MFC after: 1 week Reported by: igor [1], make manlint [2] Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/counter.9 Modified: head/share/man/man9/counter.9 ============================================================================== --- head/share/man/man9/counter.9 Thu Mar 23 05:44:18 2017 (r315798) +++ head/share/man/man9/counter.9 Thu Mar 23 05:51:54 2017 (r315799) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd December 8, 2016 +.Dd March 22, 2017 .Dt COUNTER 9 .Os .Sh NAME @@ -107,7 +107,7 @@ to .Fa c . The KPI does not guarantee any protection from wraparound. .It Fn counter_enter -Enter mode that would allow to safely update several counters via +Enter mode that would allow the safe update of several counters via .Fn counter_u64_add_protected . On some machines this expands to .Xr critical 9 @@ -136,7 +136,7 @@ The function is a multiprocessor-friendl which uses .Nm internally. -Returns non-negative value if the rate isn't yet reached during the current +Returns non-negative value if the rate is not yet reached during the current second, and a negative value otherwise. If the limit was reached on previous second, but was just reset back to zero, then @@ -144,7 +144,7 @@ then returns number of events since previous reset. .It Fn SYSCTL_COUNTER_U64 parent nbr name access ptr descr Declare a static -.Xr sysctl +.Xr sysctl 9 oid that would represent a .Nm . The @@ -156,7 +156,7 @@ A read of the oid returns value obtained Any write to the oid zeroes it. .It Fn SYSCTL_ADD_COUNTER_U64 ctx parent nbr name access ptr descr Create a -.Xr sysctl +.Xr sysctl 9 oid that would represent a .Nm . The @@ -168,7 +168,7 @@ A read of the oid returns value obtained Any write to the oid zeroes it. .It Fn SYSCTL_COUNTER_U64_ARRAY parent nbr name access ptr len descr Declare a static -.Xr sysctl +.Xr sysctl 9 oid that would represent an array of .Nm . The @@ -185,7 +185,7 @@ values obtained through Any write to the oid zeroes all array elements. .It Fn SYSCTL_ADD_COUNTER_U64_ARRAY ctx parent nbr name access ptr len descr Create a -.Xr sysctl +.Xr sysctl 9 oid that would represent an array of .Nm . The From owner-svn-src-head@freebsd.org Thu Mar 23 05:54:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3B1F5D19324; Thu, 23 Mar 2017 05:54:05 +0000 (UTC) (envelope-from mmel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 07FCCF76; Thu, 23 Mar 2017 05:54:04 +0000 (UTC) (envelope-from mmel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5s4bf035545; Thu, 23 Mar 2017 05:54:04 GMT (envelope-from mmel@FreeBSD.org) Received: (from mmel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5s48W035544; Thu, 23 Mar 2017 05:54:04 GMT (envelope-from mmel@FreeBSD.org) Message-Id: <201703230554.v2N5s48W035544@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmel set sender to mmel@FreeBSD.org using -f From: Michal Meloun Date: Thu, 23 Mar 2017 05:54:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315800 - head/sys/arm/nvidia X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:54:05 -0000 Author: mmel Date: Thu Mar 23 05:54:03 2017 New Revision: 315800 URL: https://svnweb.freebsd.org/changeset/base/315800 Log: Release all previously allocated resources. Modified: head/sys/arm/nvidia/tegra_sdhci.c Modified: head/sys/arm/nvidia/tegra_sdhci.c ============================================================================== --- head/sys/arm/nvidia/tegra_sdhci.c Thu Mar 23 05:51:54 2017 (r315799) +++ head/sys/arm/nvidia/tegra_sdhci.c Thu Mar 23 05:54:03 2017 (r315800) @@ -459,9 +459,9 @@ static device_method_t tegra_sdhci_metho }; static devclass_t tegra_sdhci_devclass; -static DEFINE_CLASS_0(sdhci_tegra, tegra_sdhci_driver, tegra_sdhci_methods, +static DEFINE_CLASS_0(sdhci, tegra_sdhci_driver, tegra_sdhci_methods, sizeof(struct tegra_sdhci_softc)); DRIVER_MODULE(sdhci_tegra, simplebus, tegra_sdhci_driver, tegra_sdhci_devclass, NULL, NULL); MODULE_DEPEND(sdhci_tegra, sdhci, 1, 1, 1); -MMC_DECLARE_BRIDGE(sdhci_tegra); +MMC_DECLARE_BRIDGE(sdhci); From owner-svn-src-head@freebsd.org Thu Mar 23 05:54:09 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 061BCD19346; Thu, 23 Mar 2017 05:54:09 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C276AF8E; Thu, 23 Mar 2017 05:54:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N5s7k0035592; Thu, 23 Mar 2017 05:54:07 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N5s7Pb035591; Thu, 23 Mar 2017 05:54:07 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230554.v2N5s7Pb035591@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 05:54:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315801 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 05:54:09 -0000 Author: ngie Date: Thu Mar 23 05:54:07 2017 New Revision: 315801 URL: https://svnweb.freebsd.org/changeset/base/315801 Log: dnv(9): fix use of commas with .Nm in NAME section MFC after: 1 week Reported by: make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/dnv.9 Modified: head/share/man/man9/dnv.9 ============================================================================== --- head/share/man/man9/dnv.9 Thu Mar 23 05:54:03 2017 (r315800) +++ head/share/man/man9/dnv.9 Thu Mar 23 05:54:07 2017 (r315801) @@ -29,8 +29,8 @@ .Dt DNV 9 .Os .Sh NAME -.Nm dnvlist_get, -.Nm dnvlist_take, +.Nm dnvlist_get , +.Nm dnvlist_take .Nd "API for getting name/value pairs. Nonexistent pairs do not raise an error." .Sh LIBRARY .Lb libnv From owner-svn-src-head@freebsd.org Thu Mar 23 06:02:25 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 48BF4D195C3; Thu, 23 Mar 2017 06:02:25 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0B77F154E; Thu, 23 Mar 2017 06:02:24 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N62OAx039811; Thu, 23 Mar 2017 06:02:24 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N62OdE039810; Thu, 23 Mar 2017 06:02:24 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230602.v2N62OdE039810@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 06:02:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315802 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 06:02:25 -0000 Author: ngie Date: Thu Mar 23 06:02:23 2017 New Revision: 315802 URL: https://svnweb.freebsd.org/changeset/base/315802 Log: ifnet(9): fix some igor/manlint warnings - Fix typos (queueing -> queuing) [1]. - Add missing section number for polling .Xr reference [2]. MFC after: 1 week Reported by: igor [1], make manlint [2] Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/ifnet.9 Modified: head/share/man/man9/ifnet.9 ============================================================================== --- head/share/man/man9/ifnet.9 Thu Mar 23 05:54:07 2017 (r315801) +++ head/share/man/man9/ifnet.9 Thu Mar 23 06:02:23 2017 (r315802) @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 8, 2016 +.Dd March 22, 2017 .Dt IFNET 9 .Os .Sh NAME @@ -485,7 +485,7 @@ to override the default implementation. This function is exposed in order to allow drivers to manage their own queues and to reduce the latency caused by a frequently gratuitous enqueue / dequeue pair to ifq. -The suggested internal software queueing mechanism is buf_ring. +The suggested internal software queuing mechanism is buf_ring. .It Fn if_qflush Free mbufs in internally managed queues when the interface is marked down. This function must be installed after @@ -494,7 +494,7 @@ to override the default implementation. This function is exposed in order to allow drivers to manage their own queues and to reduce the latency caused by a frequently gratuitous enqueue / dequeue pair to ifq. -The suggested internal software queueing mechanism is buf_ring. +The suggested internal software queuing mechanism is buf_ring. .It Fn if_start Start queued output on an interface. This function is exposed in @@ -826,7 +826,7 @@ The actual mode change is managed by the .Fn if_ioctl routine. The -.Xr polling +.Xr polling 4 handler returns the number of packets processed. .Ss The if_data Structure The From owner-svn-src-head@freebsd.org Thu Mar 23 06:08:02 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ACE52D19686; Thu, 23 Mar 2017 06:08:02 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6F96C1730; Thu, 23 Mar 2017 06:08:02 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N681MR040036; Thu, 23 Mar 2017 06:08:01 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N681dK040035; Thu, 23 Mar 2017 06:08:01 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230608.v2N681dK040035@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 06:08:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315803 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 06:08:02 -0000 Author: ngie Date: Thu Mar 23 06:08:01 2017 New Revision: 315803 URL: https://svnweb.freebsd.org/changeset/base/315803 Log: memguard(9): fix igor/manlint warnings - Expand a contraction [1]. - Add a missing section number when referring to uma(9) with .Xr . MFC after: 1 week Reported by: igor [1], make manlint [2] Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/memguard.9 Modified: head/share/man/man9/memguard.9 ============================================================================== --- head/share/man/man9/memguard.9 Thu Mar 23 06:02:23 2017 (r315802) +++ head/share/man/man9/memguard.9 Thu Mar 23 06:08:01 2017 (r315803) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 1, 2016 +.Dd March 22, 2017 .Dt MEMGUARD 9 .Os .Sh NAME @@ -54,7 +54,7 @@ can take over and .Fn uma_free for a single -.Xr uma +.Xr uma 9 zone. Also .Nm @@ -172,7 +172,7 @@ has the 2 bit set. This option is off by default. By default .Nm -doesn't guard those +does not guard .Xr uma 9 zones that have been initialized with the .Dv UMA_ZONE_NOFREE From owner-svn-src-head@freebsd.org Thu Mar 23 06:11:32 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 992C7D197EF; Thu, 23 Mar 2017 06:11:32 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 620FD1AD7; Thu, 23 Mar 2017 06:11:32 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N6BVhk040230; Thu, 23 Mar 2017 06:11:31 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N6BVX0040227; Thu, 23 Mar 2017 06:11:31 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230611.v2N6BVX0040227@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 06:11:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315804 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 06:11:32 -0000 Author: ngie Date: Thu Mar 23 06:11:31 2017 New Revision: 315804 URL: https://svnweb.freebsd.org/changeset/base/315804 Log: PCI_IOV_*INIT(9): fix make manlint warnings Add missing section number when referring to PCI_IOV_*INIT(9) with .Xr from the other corresponding manpage. MFC after: 1 week Reported by: make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/PCI_IOV_INIT.9 head/share/man/man9/PCI_IOV_UNINIT.9 Modified: head/share/man/man9/PCI_IOV_INIT.9 ============================================================================== --- head/share/man/man9/PCI_IOV_INIT.9 Thu Mar 23 06:08:01 2017 (r315803) +++ head/share/man/man9/PCI_IOV_INIT.9 Thu Mar 23 06:11:31 2017 (r315804) @@ -69,7 +69,7 @@ valid values specified in the schema. .Pp If this method returns successfully, then this method will not be called again on the same device until after a call to -.Xr PCI_IOV_UNINIT . +.Xr PCI_IOV_UNINIT 9 . .Sh RETURN VALUES Returns 0 on success, otherwise an appropriate error is returned. If this method returns an error then the SR-IOV configuration will be aborted Modified: head/share/man/man9/PCI_IOV_UNINIT.9 ============================================================================== --- head/share/man/man9/PCI_IOV_UNINIT.9 Thu Mar 23 06:08:01 2017 (r315803) +++ head/share/man/man9/PCI_IOV_UNINIT.9 Thu Mar 23 06:11:31 2017 (r315804) @@ -47,11 +47,11 @@ resources that it has allocated and disa configuration in the device. .Pp This method will only be called following a successful call to -.Xr PCI_IOV_INIT . +.Xr PCI_IOV_INIT 9 . It is not guaranteed that -.Xr PCI_IOV_ADD_VF +.Xr PCI_IOV_ADD_VF 9 will have been called for any Virtual Function (VF) after the call to -.Xr PCI_IOV_INIT +.Xr PCI_IOV_INIT 9 and before the call to .Nm . .Sh SEE ALSO From owner-svn-src-head@freebsd.org Thu Mar 23 07:36:39 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DEEB5D19970; Thu, 23 Mar 2017 07:36:39 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 98C5014DF; Thu, 23 Mar 2017 07:36:39 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N7acFQ077660; Thu, 23 Mar 2017 07:36:38 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N7acwd077657; Thu, 23 Mar 2017 07:36:38 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201703230736.v2N7acwd077657@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Ngie Cooper Date: Thu, 23 Mar 2017 07:36:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315829 - head/share/man/man9 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 07:36:40 -0000 Author: ngie Date: Thu Mar 23 07:36:38 2017 New Revision: 315829 URL: https://svnweb.freebsd.org/changeset/base/315829 Log: Try polishing up iflib manpages a bit (basically all the low hanging fruit) igor: - Fix typos. - Delete trailing whitespace. manlint: - Use .Fo/.Fc/.Fa when describing functions. - Use .Xr. - Fill in SEE ALSO section. - Fix .Dt use: the section was specified incorrectly and the name had a lowercase character. - Continue new sentences on new lines. Miscellaneous: - Remove unnecessary quotes around "SEE ALSO" section headers. - Sprinkle .Dv use in spots with constants. Reported by: igor, make manlint Sponsored by: Dell EMC Isilon Modified: head/share/man/man9/iflibdd.9 head/share/man/man9/iflibdi.9 head/share/man/man9/iflibtxrx.9 Modified: head/share/man/man9/iflibdd.9 ============================================================================== --- head/share/man/man9/iflibdd.9 Thu Mar 23 06:55:32 2017 (r315828) +++ head/share/man/man9/iflibdd.9 Thu Mar 23 07:36:38 2017 (r315829) @@ -1,6 +1,6 @@ .\" $FreeBSD$ -.Dd January 27, 2017 -.Dt IFlIBDD(9) +.Dd March 23, 2017 +.Dt IFLIBDD 9 .Os .Sh NAME .Nm iflibdd @@ -10,110 +10,215 @@ .Ss "Soft Queue Setup and Teardown Functions" .Ss "Mandatory Functions" .Ft int -.Fn ifdi_queues_alloc "if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, int nqs" -.Ft int -.Fn ifdi_queues_free "if_ctx_t ctx" +.Fo ifdi_queues_alloc +.Fa "if_ctx_t ctx" +.Fa "caddr_t *vaddrs" +.Fa "uint64_t *paddrs" +.Fa "int nqs" +.Fc +.Ft int +.Fo ifdi_queues_free +.Fa "if_ctx_t ctx" +.Fc .Ss "Optional Functions" .Ft int -.Fn ifdi_txq_setup "if_ctx_t ctx, uint16_t qid" -.Ft int -.Fn ifdi_rxq_setup "if_ctx_t ctx, uint16_t qid" +.Fo ifdi_txq_setup +.Fa "if_ctx_t ctx" +.Fa "uint16_t qid" +.Fc +.Ft int +.Fo ifdi_rxq_setup +.Fa "if_ctx_t ctx" +.Fa "uint16_t qid" +.Fc .Ss "Device Setup and Teardown Functions" .Ss "Mandatory Functions" .Ft int -.Fn ifdi_attach_pre "if_ctx_t ctx" -.Ft int -.Fn ifdi_attach_post "if_ctx_t ctx" -.Ft int -.Fn ifdi_detach "if_ctx_t ctx" +.Fo ifdi_attach_pre +.Fa "if_ctx_t ctx" +.Fc +.Ft int +.Fo ifdi_attach_post +.Fa "if_ctx_t ctx" +.Fc +.Ft int +.Fo ifdi_detach +.Fa "if_ctx_t ctx" +.Fc .Ss "Optional Functions" .Ft void -.Fn ifdi_vlan_register "if_ctx_t ctx, uint16_t vtag" -.Ft void -.Fn ifdi_vlan_unregister "if_ctx_t ctx, uint16_t vtag" -.Ft int -.Fn ifdi_suspend "if_ctx_t ctx" -.Ft int -.Fn ifdi_resume "if_ctx_t ctx" +.Fo ifdi_vlan_register +.Fa "if_ctx_t ctx" +.Fa "uint16_t vtag" +.Fc +.Ft void +.Fo ifdi_vlan_unregister +.Fa "if_ctx_t ctx" +.Fa "uint16_t vtag" +.Fc +.Ft int +.Fo ifdi_suspend +.Fa "if_ctx_t ctx" +.Fc +.Ft int +.Fo ifdi_resume +.Fa "if_ctx_t ctx" +.Fc .Ss "Device Configuration Functions" .Ss "Mandatory Functions" .Ft void -.Fn ifdi_init "if_ctx_t ctx" -.Ft void -.Fn ifdi_stop "if_ctx_t ctx" -.Ft void -.Fn ifdi_multi_set "if_ctx_t ctx" -.Ft int -.Fn ifdi_mtu_set "if_ctx_t ctx, uint32_t mtu" -.Ft void -.Fn ifdi_media_status "if_ctx_t ctx, struct ifmediareq *ifr" -.Ft int -.Fn ifdi_media_change "if_ctx_t ctx" -.Ft void -.Fn ifdi_promisc_set "if_ctx_t ctx, int flags" +.Fo ifdi_init +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo ifdi_stop +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo ifdi_multi_set +.Fa "if_ctx_t ctx" +.Fc +.Ft int +.Fo ifdi_mtu_set +.Fa "if_ctx_t ctx" +.Fa "uint32_t mtu" +.Fc +.Ft void +.Fo ifdi_media_status +.Fa "if_ctx_t ctx" +.Fa "struct ifmediareq *ifr" +.Fc +.Ft int +.Fo ifdi_media_change +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo ifdi_promisc_set +.Fa "if_ctx_t ctx" +.Fa "int flags" +.Fc .Ft uint64_t -.Fn ifdi_get_counter "if_ctx_t ctx, ift_counter cnt" -.Ft void -.Fn ifdi_update_admin_status "if_ctx_t ctx" +.Fo ifdi_get_counter +.Fa "if_ctx_t ctx" +.Fa "ift_counter cnt" +.Fc +.Ft void +.Fo ifdi_update_admin_status +.Fa "if_ctx_t ctx" +.Fc .Ss "Optional Functions" .Ft void -.Fn ifdi_media_set "if_ctx_t ctx" +.Fo ifdi_media_set +.Fa "if_ctx_t ctx" +.Fc .Ss "Interrupt enable/disable" .Ss "Mandatory Functions" .Ft void -.Fn ifdi_intr_enable "if_ctx_t ctx" -.Ft void -.Fn ifdi_queue_intr_enable "if_ctx_t ctx, uint16_t qid" -.Ft void -.Fn ifdi_intr_disable "if_ctx_t ctx" +.Fo ifdi_intr_enable +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo ifdi_queue_intr_enable +.Fa "if_ctx_t ctx" +.Fa "uint16_t qid" +.Fc +.Ft void +.Fo ifdi_intr_disable +.Fa "if_ctx_t ctx" +.Fc .Ss IOV Support .Ft init -.Fn iov_init "if_ctx_t, uint16_t num_vfs, const nvlist_t *params" -.Ft void -.Fn iov_uinit "if_ctx_t ctx" -.Ft void -.Fn ifdi_vflr_handle "if_ctx_t ctx" -.Ft int -.Fn ifdi_vf_add "if_ctx_t ctx, uint16_t vfnum, const nvlist_t *params" +.Fo iov_init +.Fa "if_ctx_t ctx" +.Fa "uint16_t num_vfs" +.Fa "const nvlist_t *params" +.Fc +.Ft void +.Fo iov_uinit +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo ifdi_vflr_handle +.Fa "if_ctx_t ctx" +.Fc +.Ft int +.Fo ifdi_vf_add +.Fa "if_ctx_t ctx" +.Fa "uint16_t vfnum" +.Fa "const nvlist_t *params" +.Fc .Ss "Optional Functions" .Ft void -.Fn ifdi_link_intr_enable "if_ctx_t ctx" +.Fo ifdi_link_intr_enable +.Fa "if_ctx_t ctx" +.Fc .Ss "Optional Service Routines" .Ft void -.Fn ifdi_timer "if_ctx_t ctx" -.Ft void -.Fn ifdi_watchdog_reset "if_ctx_t ctx" -.Ss "Additional Functions" -.Ft void -.Fn ifdi_led_func "if_ctx_t ctx, int onoff" -.Ft int -.Fn ifdi_sysctl_int_delay "if_ctx_t ctx, if_int_delay_info_t iidi" -.Ft int -.Fn ifdi_i2c_req "if_ctx_t ctx, struct ifi2creq *req" +.Fo ifdi_timer +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo ifdi_watchdog_reset +.Fa "if_ctx_t ctx" +.Fc +.Ss "Additional Functions" +.Ft void +.Fo ifdi_led_func +.Fa "if_ctx_t ctx" +.Fa "int onoff" +.Fc +.Ft int +.Fo ifdi_sysctl_int_delay +.Fa "if_ctx_t ctx" +.Fa "if_int_delay_info_t iidi" +.Fc +.Ft int +.Fo ifdi_i2c_req +.Fa "if_ctx_t ctx" +.Fa "struct ifi2creq *req" +.Fc .Sh FUNCTIONS -The above named functions are device dependent configuration functions. These routines are registerd with iflib by the driver and are called from the corresponding iflib function to configure device specific functions and registers. +The above named functions are device dependent configuration functions. +These routines are registerd with iflib by the driver and are called from the +corresponding iflib function to configure device specific functions and +registers. .Ss Device Dependent Functions .Ss Soft Queue Setup and Teardown .Bl -ohang -offset indent .It Fn ifdi_queues_alloc -Manditory queues allocation function that is called during iflib_attach. vaddrs and paddrs are arrays of virtual and physical addresses respectively of the hardware transmit and receive queues, and if relevany, any command completion queues. nqs is the number of queues per qset. For example, a driver with a single receive and transmit queue would have a nqs equal to 2. +Mandatory queues allocation function that is called during iflib_attach. +vaddrs and paddrs are arrays of virtual and physical addresses respectively of +the hardware transmit and receive queues, and if relevany, any command +completion queues. +nqs is the number of queues per qset. +For example, a driver with a single receive and transmit queue would have a nqs +equal to 2. .It Fn ifdi_queues_free -Mandatory function that frees the allocated queues and associated transmit buffers. +Mandatory function that frees the allocated queues and associated transmit +buffers. .It Fn ifdi_txq_setup -Optional function for each transmit queue that handles device specific initialization. +Optional function for each transmit queue that handles device specific +initialization. .It Fn ifdi_rxq_setup -Optional function for each receive queue that handles device specific initialization. +Optional function for each receive queue that handles device specific +initialization. .El .Ss Device Setup and Teardown .Bl -ohang -offset indent .It Fn ifdi_attach_pre -Mandatory function implemented by the driver to perform any attach logic that procedes interrupt and queue allocation, queue setup, and interrupt assignment. +Mandatory function implemented by the driver to perform any attach logic that +procedes interrupt and queue allocation, queue setup, and interrupt assignment. .It Fn ifdi_attach_post -Mandatory function implemented by the driver to perform any attach logic that occurs after ifdi_attach_pre, and iflib's queue setup and MSI/MSIX(X) or legacy interrupt assignment. +Mandatory function implemented by the driver to perform any attach logic that +occurs after ifdi_attach_pre, and iflib's queue setup and MSI/MSIX(X) or legacy +interrupt assignment. .It Fn ifdi_detach -Mandatory function that frees any resources allocated by the driver in ifdi_attach_pre and ifdi_attach_post. +Mandatory function that frees any resources allocated by the driver in +ifdi_attach_pre and ifdi_attach_post. .It Fn ifdi_vlan_register -Optional function called by the VLAN config eventhandler. _vtag is the new VLAN tag. +Optional function called by the VLAN config eventhandler. +.Va vtag +is the new VLAN tag. .It Fn ifdi_vlan_unregister Optional function called by the VLAN unconfig eventhandler. .It Fn ifdi_suspend @@ -124,25 +229,40 @@ Optional function that resumes a driver. .Ss Device Configuration Functions .Bl -ohang -offset indent .It Fn ifdi_init -Mandatory function that will initialize and bring up the hardware. For example, it will reset the chip and enable the receiver unit. It should mark the interface running, but not active (IFF_DRV_RUNNING, ~IIF_DRV_OACTIVE). +Mandatory function that will initialize and bring up the hardware. +For example, it will reset the chip and enable the receiver unit. +It should mark the interface running, but not active ( +.Dv IFF_DRV_RUNNING , +.Dv ~IIF_DRV_OACTIVE ). .It Fn ifdi_stop -Mandatory function that should disable all traffic on the interface by issuing a global reset on the MAC and deallocating the TX and RX buffers. +Mandatory function that should disable all traffic on the interface by issuing +a global reset on the MAC and deallocating the TX and RX buffers. .It Fn ifdi_multi_set Programs the interfaces multicast addresses .It Fn ifdi_media_status -Media Ioctl Callback. Function is called whenever the user queries the status of the interface using ifconfig. The driver sets the appropriate link type and speed in ifmr->ifm_active. +Media Ioctl Callback. +Function is called whenever the user queries the status of the interface using +.Xr ifconfig 8 . +The driver sets the appropriate link type and speed in ifmr->ifm_active. .It Fn ifdi_mtu_set -Sets the mtu interface to the value of the second function parameter mtu. +Sets the mtu interface to the value of the second function parameter mtu. .It Fn ifdi_media_change -Function is called when the user changes speed/duplex using the media/mediaopt option with ifconfig. +Function is called when the user changes speed/duplex using the media/mediaopt +option with +.Xr ifconfig 8 . .It Fn ifdi_promisc_set -Enables or disables promisc settings depending upon the flags value. Flags contains the interfaces' ifnet flags. +Enables or disables promisc settings depending upon the flags value. +.Va flags +contains the interface's +.Xr ifnet 9 +flags. .It Fn ifdi_get_counter -Returns the value for counter cnt depending upon counter type. +Returns the value for counter cnt depending upon counter type. .It Fn ifdi_update_admin_status -Sets the link_up state to TRUE or FALSE depending upon the OS link state. A real check of the hardware only happens with a link interrupt. +Sets the link_up state to TRUE or FALSE depending upon the OS link state. +A real check of the hardware only happens with a link interrupt. .It Fn ifdi_media_set -Need to define +Need to define .El .Ss Interrupt Enable/Disable .Bl -ohang -offset indent @@ -151,31 +271,34 @@ Mandatory function that enables all inte .It Fn ifdi_intr_disable Mandatory function that disables all interrupts. .It Fn ifdi_queue_intr_enable -Mandatory function that enables interrupts on queue qid. +Mandatory function that enables interrupts on queue qid. .It Fn iov_init Initialize num_vfs VFs. .It Fn io_uninit Tear down the context for all VFs. .It Fn ifdi_vflr_handle -Handle any VFs that have reset themselves via a Function Level Reset(FLR). +Handle any VFs that have reset themselves via a Function Level Reset (FLR). .It Fn ifdi_vf_add Set parameters in params in VF vfnum. .El .Ss Service Routines .Bl -ohang -offset indent -.It ifdi_timer +.It Fn ifdi_timer Optional timer routine that will be run every 500ms. -.It ifdi_watchdog_reset +.It Fn ifdi_watchdog_reset Optional function to run when a transmit queue is hung. .El .Ss Additional Functions .Bl -ohang -offset indent -.It ifdi_led_func -.It ifdi_sysctl_int_delay -.It ifdi_i2c_req +.It Fn ifdi_led_func +.It Fn ifdi_sysctl_int_delay +.It Fn ifdi_i2c_req .El -.Sh "SEE ALSO" - iflibtxrx(9), iflibdd(9) +.Sh SEE ALSO +.Xr ifconfig 8 , +.Xr iflibdi 9 , +.Xr iflibtxrx 9 , +.Xr ifnet 9 .Sh AUTHORS This manual page was written by .An Nicole Graziano Modified: head/share/man/man9/iflibdi.9 ============================================================================== --- head/share/man/man9/iflibdi.9 Thu Mar 23 06:55:32 2017 (r315828) +++ head/share/man/man9/iflibdi.9 Thu Mar 23 07:36:38 2017 (r315829) @@ -1,6 +1,6 @@ .\" $FreeBSD$ -.Dd January 27, 2017 -.Dt IFlIBDI(9) +.Dd March 23, 2017 +.Dt IFLIBDI 9 .Os .Sh NAME .Nm iflibdi @@ -9,39 +9,101 @@ .In "ifdi_if.h" .Ss "Device Independent Functions" .Ft int -.Fn iflib_device_attach "device_t dev" -.Ft int -.Fn iflib_device_detach "device_t dev" -.Ft int -.Fn iflib_device_suspend "device_t dev" -.Ft int -.Fn iflib_device_resume "device_t dev" -.Ft int -.Fn iflib_device_register "device_t dev, void *softc, if_shared_ctx_t sctx, if_ctx_t *ctxp" -.Ft int -.Fn iflib_device_deregister "if_ctx_t ctx" -.Ft int -.Fn iflib_irq_alloc "if_ctx_t ctx, if_irq_t irq_info, int rid, driver_filter_t filter, void *filter_arg, driver_intr_t handler, void *arg, char *name" -.Ft int -.Fn iflib_irq_alloc_generic "if_ctx_t, ctx, if_irq_t irq, int rid, intr_type_t type, driver_filter_t *filter, void *filter_arg, int qid, char *name" -.Ft void -.Fn iflib_led_create "if_ctx_t ctx" -.Ft void -.Fn iflib_tx_intr_deferred "if_ctx_t ctx, int txqid" -.Ft void -.Fn iflib_rx_intr_deferred "if_ctx_t ctx, int rxqid" -.Ft void -.Fn iflib_link_intr_deferred "if_ctx_t ctx" -.Ft void -.Fn iflib_link_state_change "if_ctx_t ctx, int linkstate" -.Ft void -.Fn iflib_led_create "if_ctx_t ctx" -.Ft void -.Fn iflib_add_int_delay_sysctl "if_ctx_t ctx, const char *, const char *, if_int_delay_info_t, int, int" +.Fo iflib_device_attach +.Fa "device_t dev" +.Fc +.Ft int +.Fo iflib_device_detach +.Fa "device_t dev" +.Fc +.Ft int +.Fo iflib_device_suspend +.Fa "device_t dev" +.Fc +.Ft int +.Fo iflib_device_resume +.Fa "device_t dev" +.Fc +.Ft int +.Fo iflib_device_register +.Fa "device_t dev" +.Fa "void *softc" +.Fa "if_shared_ctx_t sctx" +.Fa "if_ctx_t *ctxp" +.Fc +.Ft int +.Fo iflib_device_deregister +.Fa "if_ctx_t ctx" +.Fc +.Ft int +.Fo iflib_irq_alloc +.Fa "if_ctx_t ctx" +.Fa "if_irq_t irq_info" +.Fa "int rid" +.Fa "driver_filter_t filter" +.Fa "void *filter_arg" +.Fa "driver_intr_t handler" +.Fa "void *arg" +.Fa "char *name" +.Fc +.Ft int +.Fo iflib_irq_alloc_generic +.Fa "if_ctx_t ctx" +.Fa "if_irq_t irq" +.Fa "int rid" +.Fa "intr_type_t type" +.Fa "driver_filter_t *filter" +.Fa "void *filter_arg" +.Fa "int qid" +.Fa "char *name" +.Fc +.Ft void +.Fo iflib_led_create +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo iflib_tx_intr_deferred +.Fa "if_ctx_t ctx" +.Fa "int txqid" +.Fc +.Ft void +.Fo iflib_rx_intr_deferred +.Fa "if_ctx_t ctx" +.Fa "int rxqid" +.Fc +.Ft void +.Fo iflib_link_intr_deferred +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo iflib_link_state_change +.Fa "if_ctx_t ctx" +.Fa "int linkstate" +.Fc +.Ft void +.Fo iflib_led_create +.Fa "if_ctx_t ctx" +.Fc +.Ft void +.Fo iflib_add_int_delay_sysctl +.Fa "if_ctx_t ctx" +.Fa "const char *" +.Fa "const char *" +.Fa "if_int_delay_info_t" +.Fa "int" +.Fa "int" +.Fc .Ss "Global Variables" .Vt extern struct if_txrx .Sh DATA STRUCTURES -The \fIif_ctx_t\fP Structure is the device independent data structure that contains statistics and identifying information used to transmit and receive data packets. The interface is associated with an array of queues assigned sequentially. Each queu has its own transmit (iflib_txq_t) and receive (iflib_rxq_t) queue. The transmit queue is used to hold packets while the interface is in the process of sending another. The receive queue is used to receive packets that are awaiting processing. +The \fIif_ctx_t\fP Structure is the device independent data structure that +contains statistics and identifying information used to transmit and receive +data packets. +The interface is associated with an array of queues assigned sequentially. +Each queue has its own transmit (iflib_txq_t) and receive (iflib_rxq_t) queue. +The transmit queue is used to hold packets while the interface is in the +process of sending another. +The receive queue is used to receive packets that are awaiting processing. .Pp .Ss The if_ctx_t Structure The fields of @@ -53,7 +115,7 @@ are as follows: A pointer to the driver's private state block. .It Va ifc_dev .Pq Vt "device_t" -The underlying device structure. +The underlying device structure. .It Va ifc_ip .Pq Vt "if_t" A link back to the interface structure @@ -73,7 +135,8 @@ Device independent transmit queue mainta Device independent receive queue maintained internally by iflib .It Va ifc_qsets .Pq Vt "iflib_qset_t" - Output queue that contains a single transmit (ifc_txq_t) and receive (ifc_rxq_t) queue +Output queue that contains a single transmit (ifc_txq_t) and receive +(ifc_rxq_t) queue .It Va ifc_if_flags .Pq Vt "uint32_t" Flags describing the operational parameter of the interface @@ -81,7 +144,8 @@ Flags describing the operational paramet .Pq Vt "int" .It Va ifc_link_state .Pq Vt "int" -Describes the current link state of the Ethernet interface. It's possible values are either active or inactive. +Describes the current link state of the Ethernet interface. +Its possible values are either active or inactive. .It Va ifc_link_irq .Pq Vt "int" .It Va ifc_vlan_attach_event @@ -107,26 +171,45 @@ Statistics and information relating to t .It Va ifc_media .Pq Vt "struct ifmedia" .It Va ifc_txrx -.Pq Vt "struct if_txrx" +.Pq Vt "struct if_txrx" .El .Sh FUNCTIONS - The above named functions are found exclusively in iflib. They are independent of the underlying hardware type or configuration. -.Ss Device Independent Functions +The above named functions are found exclusively in iflib. +They are independent of the underlying hardware type or configuration. +.Ss Device Independent Functions .Bl -ohang -offset indent .It Fn iflib_device_attach -Function initiates a device registration with the iflib framework. It calls the iflib_register function, which is responsible for allocating and initializing the \fIif_ctx_t\fP structure. +Function initiates a device registration with the iflib framework. +It calls the iflib_register function, which is responsible for allocating +and initializing the \fIif_ctx_t\fP structure. .It Fn iflib_device_detach -Shutdown and detach the device. Unregister vlan events, drain any dependent tasks, and release irq, pci, and msix memory. +Shutdown and detach the device. +Unregister vlan events, drain any dependent tasks, and release irq, pci, and +msix memory. .It Fn iflib_device_suspend -Suspend a device by calling the device dependent suspend function and bus_generic_suspend. +Suspend a device by calling the device dependent suspend function and +bus_generic_suspend. .It Fn iflib_device_resume -Resume a device by calling the device dependent resume function, the iflib_init_locked function, and bus_generic_resume. +Resume a device by calling the device dependent resume function, the +iflib_init_locked function, and bus_generic_resume. .It Fn iflib_device_register -Register a device with the iflib framework. Allocate and initialize the \fIif_ctx_t\fP structure. Setup and initialize the MSI or MSI/X interrupt queues if necessary. Allocate memory for queues and qset structure setup. +Register a device with the iflib framework. +Allocate and initialize the +\fIif_ctx_t\fP structure. +Setup and initialize the MSI or MSI/X interrupt queues if necessary. +Allocate memory for queues and qset structure setup. .It Fn iflib_device_irq_alloc -Allocate an interrupt resource for a given rid value with an associated filter and handler function. +Allocate an interrupt resource for a given rid value with an associated filter +and handler function. .It Fn iflib_device_irq_alloc_generic -Performs the same function as iflib_device_irq_alloc along with the additional functionality of adding a taskgroup. The data fields and callback function are determined by the type of interrupt, such as IFLIB_INTR_TX, IFLIB_INTR_RX, and IFLIB_INTR_ADMIN. +Performs the same function as iflib_device_irq_alloc along with the additional +functionality of adding a taskgroup. +The data fields and callback function are determined by the type of interrupt, +such as +.Dv IFLIB_INTR_TX , +.Dv IFLIB_INTR_RX , +and +.Dv IFLIB_INTR_ADMIN . .It Fn iflib_led_create Calls led_create to initialize the ctx->ifc_led_dev field .It Fn iflib_tx_intr_deferred @@ -136,17 +219,24 @@ Calls GROUPTASK_ENQUEUE to enqueue the r .It Fn iflib_link_intr_deferred Calls GROUPTASK_ENQUEUE to enqueue the link task .It Fn iflib_link_state_change -Change the interface link status to either LINK_STATE_UP or LINK_STATE_DOWN as specified by the second argument to the function. -\fBInterface Link States\fP +Change the interface link status to either +.Dv LINK_STATE_UP +or +.Dv LINK_STATE_DOWN +as specified by the second argument to the function. +.Pp +.Em Interface Link States The following link states are currently defined: - - LINK_STATE_UP The link is up. - LINK_STATE_DOWN The link is down. +.It Dv LINK_STATE_UP +The link is up. +.It Dv LINK_STATE_DOWN +The link is down. .It Fn iflib_add_int_delay_sysctl Modifies settings to user defined values for a given set of variables. .El -.Sh "SEE ALSO" - iflibtxrx(9), iflibdd(9) +.Sh SEE ALSO +.Xr iflibdd 9 , +.Xr iflibtxrx 9 .Sh AUTHORS This manual page was written by .An Nicole Graziano Modified: head/share/man/man9/iflibtxrx.9 ============================================================================== --- head/share/man/man9/iflibtxrx.9 Thu Mar 23 06:55:32 2017 (r315828) +++ head/share/man/man9/iflibtxrx.9 Thu Mar 23 07:36:38 2017 (r315829) @@ -1,6 +1,6 @@ .\" $FreeBSD$ -.Dd January 27, 2017 -.Dt IFlIBTXTX(9) +.Dd March 23, 2017 +.Dt IFLIBTXTX 9 .Os .Sh NAME .Nm iflibtxrx @@ -9,23 +9,58 @@ .In "ifdi_if.h" .Ss "Interface Manipulation Functions" .Ft int -.Fn isc_txd_encap "void *sc, if_pkt_into_t pi" +.Fo isc_txd_encap +.Fa "void *sc" +.Fa "if_pkt_into_t pi" +.Fc .Ft void -.Fn isc_txd_flush "void *sc, uint16_t qid, uint32_t _pidx_or_credits_" +.Fo isc_txd_flush +.Fa "void *sc" +.Fa "uint16_t qid" +.Fa "uint32_t _pidx_or_credits_" +.Fc .Ft int * -.Fn isc_txd_credits_update "void *sc, uint16_t qid, uint32_t credits" +.Fo isc_txd_credits_update +.Fa "void *sc" +.Fa "uint16_t qid" +.Fa "uint32_t credits" +.Fc .Ft int * -.Fn isc_rxd_available "void *sc, uint16_t qsid, uint32_t cidx" +.Fo isc_rxd_available +.Fa "void *sc" +.Fa "uint16_t qsid" +.Fa "uint32_t cidx" +.Fc .Ft void * -.Fn isc_rxd_refill "void *sc, uint16_t qsid, uint8_t flid, uint32_t pidx, uint64_t *paddrs, caddr_t *vaddrs, uint16_t count" +.Fo isc_rxd_refill +.Fa "void *sc" +.Fa "uint16_t qsid" +.Fa "uint8_t flid" +.Fa "uint32_t pidx" +.Fa "uint64_t *paddrs" +.Fa "caddr_t *vaddrs" +.Fa "uint16_t count" +.Fc .Ft void * -.Fn isc_rxd_flush "void *sc, uint16_t qsid, uint8_t flid, uint32_t pidx" +.Fo isc_rxd_flush +.Fa "void *sc" +.Fa "uint16_t qsid" +.Fa "uint8_t flid" +.Fa "uint32_t pidx" +.Fc .Ft int -.Fn isc_rxd_pkt_get "void *sc, if_rxd_info_t ri" +.Fo isc_rxd_pkt_get +.Fa "void *sc" +.Fa "if_rxd_info_t ri" +.Fc .Ss "Global Variables" .Vt extern struct if_txrx .Sh DATA STRUCTURES -The device dependent mechanisms for handling packet transmit and receive are primarily defined by the functions named above. The if_pkt_info data structure contains statistics and identifying info necessary for packet transmission. While the data structure for packet receipt is the if_rxd_info structure. +The device dependent mechanisms for handling packet transmit and receive are +primarily defined by the functions named above. +The if_pkt_info data structure contains statistics and identifying info +necessary for packet transmission. +While the data structure for packet receipt is the if_rxd_info structure. .Pp .Ss The if_pkt_info Structure The fields of @@ -37,28 +72,35 @@ are as follows: Denotes the size of packet to be sent on the transmit queue. .It Va ipi_segs .Pq Vt "bus_dma_segment_t *" -A pointer to the bus_dma_segment of the device independent transfer queue defined in iflib. +A pointer to the bus_dma_segment of the device independent transfer queue +defined in iflib. .It Va ipi_qsidx -Unique index value assigned sequentially to each transmit queue. Used to reference the currently transmitting queue. +Unique index value assigned sequentially to each transmit queue. +Used to reference the currently transmitting queue. .It Va ipi_nsegs .Pq Vt "uint16_t" -Number of descriptors to be read into the device dependent transfer descriptors. +Number of descriptors to be read into the device dependent transfer +descriptors. .It Va ipi_ndescs .Pq Vt "uint16_t" -Number of descriptors in use. Calculated by subtracting the old pidx value from the new pidx value. +Number of descriptors in use. +Calculated by subtracting the old pidx value from the new pidx value. .It Va ipi_flags .Pq Vt "uint16_t" -Flags defined on a per packet basis. +Flags defined on a per packet basis. .It Va ipi_pidx .Pq Vt "uint32_t" -Value of first pidx sent to the isc_encap function for encapsulation and subsequent transmission. +Value of first pidx sent to the isc_encap function for encapsulation and +subsequent transmission. .It Va ipi_new_pidx .Pq Vt "uint32_t" -Value set after the termination of the isc_encap function. This value will become the first pidx sent to the isc-encap the next time that the function is called. +Value set after the termination of the isc_encap function. +This value will become the first pidx sent to the isc-encap the next time that +the function is called. .It Va \fBThe Following Fields Are Used For Offload Handling\fP .It Va ipi_csum_flags .Pq Vt "uint64_t" -Flags describing the checksum values. Used on a per packet basis. +Flags describing the checksum values, used on a per packet basis. .It Va ipi_tso_segsz .Pq Vt "uint16_t" Size of the TSO Segment Size. @@ -85,16 +127,18 @@ Length of the TCP Header. Flags describing the operational parameters of the TCP Header. .It Va ipi_ipproto .Pq Vt "uint8_t" -Specifies the type of IP Protocol in use. Example TCP, UDP, or SCTP. +Specifies the type of IP Protocol in use. +Example TCP, UDP, or SCTP. .El .Ss The if_rxd_info Structure -The fields of +The fields of .Vt "struct if_rxd_info" are as follows: .Bl -tag -width ".Va if_capabilities" -offset indent .It Va iri_qsidx .Pq Vt "uint16_t" -Unique index value assigned sequentially to each receive queue. Used to reference the currently receiving queue. +Unique index value assigned sequentially to each receive queue. +Used to reference the currently receiving queue. .It Va iri_vtag .Pq Vt "uint16_t" Contains the VLAN information in the Ethernet Frame. @@ -103,28 +147,34 @@ Contains the VLAN information in the Eth Denotes the size of a received packet. .It Va iri_next_offset .Pq Vt "uint16_t" -Denotes the offset value for the next packet to be receive. A Null value signifies the end of packet. +Denotes the offset value for the next packet to be receive. +A Null value signifies the end of packet. .It Va iri_cidx .Pq Vt "uint32_t" -Denotes the index value of the packet currently being processed in the consumer queue. +Denotes the index value of the packet currently being processed in the +consumer queue. .It Va iri_flowid .Pq Vt "uint32_t" Value of the RSS hash for the packet. .It Va iri_flags .Pq Vt "uint" - Flags describing the operational parameters of the mbuf contained in the receive packet. + Flags describing the operational parameters of the mbuf contained in the + receive packet. .It Va iri_csum_flags .Pq Vt "uint32_t" Flags describing the checksum value contained in the receive packet. .It Va iri_csum_data .Pq Vt "uint32_t" -Checksum data contained in the mbuf packet header. +Checksum data contained in the +.Xr mbuf 9 +packet header. .It Va iri_m .Pq Vt "struct mbuf *" A mbuf for drivers that manage their own receive queues. .It Va iri_ifp .Pq Vt "struct ifnet *" -A link back to the interface structure. Utilized by drivers that have multiple interface per softc. +A link back to the interface structure. +Utilized by drivers that have multiple interface per softc. .It Va iri_rsstype .Pq Vt "uint8_t" The value of the RSS hash type. @@ -133,33 +183,59 @@ The value of the RSS hash type. The length of any padding contained by the received data. .It Va iri_qidx .Pq Vt "uint8_t" -Represents the type of queue event. If value >= 0 then it is the freelist id otherwise it is a completion queue event. +Represents the type of queue event. +If value >= 0 then it is the freelist id otherwise it is a completion queue +event. .El .Sh FUNCTIONS -All function calls are associated exclusively with either packet transmission or receipt. -The void *sc passed as the first arguement to all of the following functions repressents the driver's softc. -.Ss Transmit Packet Functions +All function calls are associated exclusively with either packet transmission +or receipt. +The void *sc passed as the first arguement to all of the following functions +represents the driver's softc. +.Ss Transmit Packet Functions .Bl -ohang -offset indent .It Fn isc_txd_encap - Transmit function that sends a packet on an interface. The if_pkt_info data structure contains data information fields describing the packet. This function returns 0 if successful, otherwise an error value is returned. +Transmit function that sends a packet on an interface. +The if_pkt_info data structure contains data information fields describing the +packet. +This function returns 0 if successful, otherwise an error value is returned. .It Fn isc_txd_flush -Flush function is called immediately after the isc_txd_encap function transmits a packet. It updates the hardware producer index or increments the descriptors used to pidx_or_credits in the queue designated by the qid number. This is often referred to as poking the doorbell register. -.It Fn isc_txd_credits_update -Credit function advances the buffer ring and calculates the credits (descriptors) processed. Until the I/O is complete it cleans the range in case of multisegments and updates the count of processed packets. The function returns the number of processed credits. +Flush function is called immediately after the isc_txd_encap function transmits +a packet. +It updates the hardware producer index or increments the descriptors used to +pidx_or_credits in the queue designated by the qid number. +This is often referred to as poking the doorbell register. +.It Fn isc_txd_credits_update +Credit function advances the buffer ring and calculates the credits +(descriptors) processed. +Until the I/O is complete it cleans the range in case of multisegments and +updates the count of processed packets. +The function returns the number of processed credits. .El .Ss Receive Packet Functions .Bl -ohang -offset indent .It Fn isc_rxd_available -Function calculates the remaining number of descriptors from a position given by idx. The function returns this value. +Function calculates the remaining number of descriptors from a position given +by idx. +The function returns this value. .It Fn isc_rxd_refill -Starting with the physical address paddrs, the function reads a packet into the rx_ring until a value designated by count is reached. vaddrs is typically not needed and is provided for devices that place their own metadata in the packet header. +Starting with the physical address paddrs, the function reads a packet into the +rx_ring until a value designated by count is reached. +vaddrs is typically not needed and is provided for devices that place their own +metadata in the packet header. .It Fn isc_rxd_flush -Flush function updates the producer pointer on the free list flid in queue set number qid to pidx to reflect the presence of new buffers. +Flush function updates the producer pointer on the free list flid in queue set +number qid to pidx to reflect the presence of new buffers. .It Fn isc_rxd_pkt_get -Process a single software descriptor. rxr->rx_base[i] contains a descriptor that describes a received packet. Hardware specific information about the buffer referred to by ri is returned in the data structure if_rxd_info +Process a single software descriptor. +rxr->rx_base[i] contains a descriptor that describes a received packet. +Hardware specific information about the buffer referred to by ri is returned in +the data structure if_rxd_info .El -.Sh "SEE ALSO" - iflibdd(9), iflibdi(9) +.Sh SEE ALSO +.Xr iflibdd 9 , +.Xr iflibdi 9 , +.Xr mbuf 9 .Sh AUTHORS This manual page was written by .An Nicole Graziano From owner-svn-src-head@freebsd.org Thu Mar 23 07:43:52 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D27CAD19C79 for ; Thu, 23 Mar 2017 07:43:52 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-yw0-x22b.google.com (mail-yw0-x22b.google.com [IPv6:2607:f8b0:4002:c05::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 964D819E2 for ; Thu, 23 Mar 2017 07:43:52 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by mail-yw0-x22b.google.com with SMTP id p77so140827973ywg.1 for ; Thu, 23 Mar 2017 00:43:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuxi-nl.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=LpEnU5kmzhV0pTtbCL09nAlVKUv5DBE/XvyFGW1m9kQ=; b=f+0deTouJx+9AgZo9MClo3Is0nS5JLnnoWnyzLU1xtMkOupcWn1IdPIwp114T8rpqy igI1tidJmoDOw+BXI0VES57P4wRxcF1E+j/qnhHr4aLn2hmtD5Umz53x7CNQl5u5+HdS JeTrB1lZw3KLFwKWtxE0Eoz0ZlxDfd6kLQRIAV0wpWWdywo/egYy4PARwBkzz3NgLH04 8iy2tzWrX4el8UMWwzI3kzekkkjO/EzW5pd1sc8pv5sYWTh3gjSjimd7qkHV62yqj9Cy mlqacM+v3qlOz6HEajzZUSO+xfLWuuohKkDW1y3vFHZJ0xDYi1pO4qy7KjL5F0Z5JmtW bDvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=LpEnU5kmzhV0pTtbCL09nAlVKUv5DBE/XvyFGW1m9kQ=; b=K2v4G8v20pnxgevhT2XPOQDG3IZM0Cxe4+AbEtulggl2t/XV0tY+uM/tOPcdJmX9oR n9Xu7PZiRaxStJLpbXRGm163BFBOMnOd7i5rGlloxXCLPcdESE3HgMH2UP125uWeKi9m 0wYZugkZIZaQX+SQ5fdUl62lmMPNZ5LrR6rWqK0HZ5uz9rZVQLgEsZ3miD/L7Qxglikc /G8QiUEEOu3Av4Ijdq6hA12gzeNrl020ArUjxdDOhu6h2nnE/AnWOeAtPGN5kQeJRyEW ufesUWZnAkWSRkwRAephKBWYl0Ci7wnZRCTw9tHb/xbMesp+EAJhIdDuZO63vig+VpCY I+7g== X-Gm-Message-State: AFeK/H21GR8WeKkLyEXDZsYEVoEJX90TDsCSSnULWpT8Ex5QSKrzk0jTFO32Zmca7IyxQipK5lpwfMeAO92wxw== X-Received: by 10.13.225.142 with SMTP id k136mr737404ywe.178.1490255031584; Thu, 23 Mar 2017 00:43:51 -0700 (PDT) MIME-Version: 1.0 Received: by 10.129.23.149 with HTTP; Thu, 23 Mar 2017 00:43:20 -0700 (PDT) In-Reply-To: <20170322230026.GV43712@kib.kiev.ua> References: <201703220705.v2M75RHE066483@repo.freebsd.org> <20170322090258.GR43712@kib.kiev.ua> <20170322230026.GV43712@kib.kiev.ua> From: Ed Schouten Date: Thu, 23 Mar 2017 08:43:20 +0100 Message-ID: Subject: Re: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 To: Konstantin Belousov Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: multipart/mixed; boundary=94eb2c0612c0c88648054b61093a X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 07:43:52 -0000 --94eb2c0612c0c88648054b61093a Content-Type: text/plain; charset=UTF-8 Hi Kostik, 2017-03-23 0:00 GMT+01:00 Konstantin Belousov : > On Wed, Mar 22, 2017 at 03:16:24PM +0100, Ed Schouten wrote: >> Similarly, I seem to remember CloudABI's brandinfos set compat_3_brand >> for a similar reason: it seems to be required by imgact_elf.c. Would >> we also want to change that? > > Could you please try this ? Thanks! I just gave the patch a try, but the comparison added to imgact_elf.c now causes the brandinfo to be skipped entirely. Attached is a patch that does work for me. -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 --94eb2c0612c0c88648054b61093a Content-Type: text/plain; charset=US-ASCII; name="compat_3_brand.diff" Content-Disposition: attachment; filename="compat_3_brand.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j0m39csf0 SW5kZXg6IHN5cy9hbWQ2NC9jbG91ZGFiaTMyL2Nsb3VkYWJpMzJfc3lzdmVjLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gc3lzL2FtZDY0L2Nsb3VkYWJpMzIvY2xvdWRhYmkzMl9zeXN2ZWMuYwkocmV2aXNpb24g MzE1ODI4KQorKysgc3lzL2FtZDY0L2Nsb3VkYWJpMzIvY2xvdWRhYmkzMl9zeXN2ZWMuYwkod29y a2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNyw1IEBACiAJLmJyYW5kCQk9IEVMRk9TQUJJX0NMT1VE QUJJLAogCS5tYWNoaW5lCT0gRU1fMzg2LAogCS5zeXN2ZWMJCT0gJmNsb3VkYWJpMzJfZWxmX3N5 c3ZlYywKLQkuY29tcGF0XzNfYnJhbmQJPSAiQ2xvdWRBQkkiLAogCS5mbGFncwkJPSBCSV9CUkFO RF9PTkxZX1NUQVRJQywKIH07CkluZGV4OiBzeXMvYW1kNjQvY2xvdWRhYmk2NC9jbG91ZGFiaTY0 X3N5c3ZlYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hbWQ2NC9jbG91ZGFiaTY0L2Nsb3VkYWJpNjRf c3lzdmVjLmMJKHJldmlzaW9uIDMxNTgyOCkKKysrIHN5cy9hbWQ2NC9jbG91ZGFiaTY0L2Nsb3Vk YWJpNjRfc3lzdmVjLmMJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw1ICsyMTMsNCBAQAogCS5tYWNo aW5lCT0gRU1fWDg2XzY0LAogCS5zeXN2ZWMJCT0gJmNsb3VkYWJpNjRfZWxmX3N5c3ZlYywKIAku ZmxhZ3MJCT0gQklfQ0FOX0VYRUNfRFlOIHwgQklfQlJBTkRfT05MWV9TVEFUSUMsCi0JLmNvbXBh dF8zX2JyYW5kCT0gIkNsb3VkQUJJIiwKIH07CkluZGV4OiBzeXMvYXJtL2Nsb3VkYWJpMzIvY2xv dWRhYmkzMl9zeXN2ZWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2Nsb3VkYWJpMzIvY2xvdWRh YmkzMl9zeXN2ZWMuYwkocmV2aXNpb24gMzE1ODI4KQorKysgc3lzL2FybS9jbG91ZGFiaTMyL2Ns b3VkYWJpMzJfc3lzdmVjLmMJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2ICsxODksNSBAQAogCS5i cmFuZAkJPSBFTEZPU0FCSV9DTE9VREFCSSwKIAkubWFjaGluZQk9IEVNX0FSTSwKIAkuc3lzdmVj CQk9ICZjbG91ZGFiaTMyX2VsZl9zeXN2ZWMsCi0JLmNvbXBhdF8zX2JyYW5kCT0gIkNsb3VkQUJJ IiwKIAkuZmxhZ3MJCT0gQklfQlJBTkRfT05MWV9TVEFUSUMsCiB9OwpJbmRleDogc3lzL2FybTY0 L2Nsb3VkYWJpNjQvY2xvdWRhYmk2NF9zeXN2ZWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtNjQv Y2xvdWRhYmk2NC9jbG91ZGFiaTY0X3N5c3ZlYy5jCShyZXZpc2lvbiAzMTU4MjgpCisrKyBzeXMv YXJtNjQvY2xvdWRhYmk2NC9jbG91ZGFiaTY0X3N5c3ZlYy5jCSh3b3JraW5nIGNvcHkpCkBAIC0x ODIsNSArMTgyLDQgQEAKIAkubWFjaGluZQk9IEVNX0FBUkNINjQsCiAJLnN5c3ZlYwkJPSAmY2xv dWRhYmk2NF9lbGZfc3lzdmVjLAogCS5mbGFncwkJPSBCSV9DQU5fRVhFQ19EWU4gfCBCSV9CUkFO RF9PTkxZX1NUQVRJQywKLQkuY29tcGF0XzNfYnJhbmQJPSAiQ2xvdWRBQkkiLAogfTsKSW5kZXg6 IHN5cy9pMzg2L2Nsb3VkYWJpMzIvY2xvdWRhYmkzMl9zeXN2ZWMuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz eXMvaTM4Ni9jbG91ZGFiaTMyL2Nsb3VkYWJpMzJfc3lzdmVjLmMJKHJldmlzaW9uIDMxNTgyOCkK KysrIHN5cy9pMzg2L2Nsb3VkYWJpMzIvY2xvdWRhYmkzMl9zeXN2ZWMuYwkod29ya2luZyBjb3B5 KQpAQCAtMjAwLDYgKzIwMCw1IEBACiAJLmJyYW5kCQk9IEVMRk9TQUJJX0NMT1VEQUJJLAogCS5t YWNoaW5lCT0gRU1fMzg2LAogCS5zeXN2ZWMJCT0gJmNsb3VkYWJpMzJfZWxmX3N5c3ZlYywKLQku Y29tcGF0XzNfYnJhbmQJPSAiQ2xvdWRBQkkiLAogCS5mbGFncwkJPSBCSV9CUkFORF9PTkxZX1NU QVRJQywKIH07CkluZGV4OiBzeXMva2Vybi9pbWdhY3RfZWxmLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz L2tlcm4vaW1nYWN0X2VsZi5jCShyZXZpc2lvbiAzMTU4MjgpCisrKyBzeXMva2Vybi9pbWdhY3Rf ZWxmLmMJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw4ICszMTIsOSBAQAogCQkJY29udGludWU7CiAJ CWlmIChoZHItPmVfbWFjaGluZSA9PSBiaS0+bWFjaGluZSAmJgogCQkgICAgKGhkci0+ZV9pZGVu dFtFSV9PU0FCSV0gPT0gYmktPmJyYW5kIHx8CisJCSAgICAoYmktPmNvbXBhdF8zX2JyYW5kICE9 IE5VTEwgJiYKIAkJICAgIHN0cmNtcCgoY29uc3QgY2hhciAqKSZoZHItPmVfaWRlbnRbT0xEX0VJ X0JSQU5EXSwKLQkJICAgIGJpLT5jb21wYXRfM19icmFuZCkgPT0gMCkpIHsKKwkJICAgIGJpLT5j b21wYXRfM19icmFuZCkgPT0gMCkpKSB7CiAJCQkvKiBMb29rcyBnb29kLCBidXQgZ2l2ZSBicmFu ZCBhIGNoYW5jZSB0byB2ZXRvICovCiAJCQlpZiAoIWJpLT5oZWFkZXJfc3VwcG9ydGVkIHx8CiAJ CQkgICAgYmktPmhlYWRlcl9zdXBwb3J0ZWQoaW1ncCkpIHsK --94eb2c0612c0c88648054b61093a-- From owner-svn-src-head@freebsd.org Thu Mar 23 08:15:13 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4417AD19B41; Thu, 23 Mar 2017 08:15:13 +0000 (UTC) (envelope-from mmel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 113CB18D5; Thu, 23 Mar 2017 08:15:12 +0000 (UTC) (envelope-from mmel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N8FCeh094533; Thu, 23 Mar 2017 08:15:12 GMT (envelope-from mmel@FreeBSD.org) Received: (from mmel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N8FCwl094532; Thu, 23 Mar 2017 08:15:12 GMT (envelope-from mmel@FreeBSD.org) Message-Id: <201703230815.v2N8FCwl094532@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmel set sender to mmel@FreeBSD.org using -f From: Michal Meloun Date: Thu, 23 Mar 2017 08:15:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315843 - head/sys/arm/nvidia X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 08:15:13 -0000 Author: mmel Date: Thu Mar 23 08:15:11 2017 New Revision: 315843 URL: https://svnweb.freebsd.org/changeset/base/315843 Log: Revert r315800, it was committed with invalid (unsaved) commit log. Modified: head/sys/arm/nvidia/tegra_sdhci.c Modified: head/sys/arm/nvidia/tegra_sdhci.c ============================================================================== --- head/sys/arm/nvidia/tegra_sdhci.c Thu Mar 23 08:14:41 2017 (r315842) +++ head/sys/arm/nvidia/tegra_sdhci.c Thu Mar 23 08:15:11 2017 (r315843) @@ -459,9 +459,9 @@ static device_method_t tegra_sdhci_metho }; static devclass_t tegra_sdhci_devclass; -static DEFINE_CLASS_0(sdhci, tegra_sdhci_driver, tegra_sdhci_methods, +static DEFINE_CLASS_0(sdhci_tegra, tegra_sdhci_driver, tegra_sdhci_methods, sizeof(struct tegra_sdhci_softc)); DRIVER_MODULE(sdhci_tegra, simplebus, tegra_sdhci_driver, tegra_sdhci_devclass, NULL, NULL); MODULE_DEPEND(sdhci_tegra, sdhci, 1, 1, 1); -MMC_DECLARE_BRIDGE(sdhci); +MMC_DECLARE_BRIDGE(sdhci_tegra); From owner-svn-src-head@freebsd.org Thu Mar 23 08:16:55 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 30CA2D19C2D; Thu, 23 Mar 2017 08:16:55 +0000 (UTC) (envelope-from mmel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F21A41BA8; Thu, 23 Mar 2017 08:16:54 +0000 (UTC) (envelope-from mmel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N8GsZR094699; Thu, 23 Mar 2017 08:16:54 GMT (envelope-from mmel@FreeBSD.org) Received: (from mmel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N8Gs77094698; Thu, 23 Mar 2017 08:16:54 GMT (envelope-from mmel@FreeBSD.org) Message-Id: <201703230816.v2N8Gs77094698@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmel set sender to mmel@FreeBSD.org using -f From: Michal Meloun Date: Thu, 23 Mar 2017 08:16:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315845 - head/sys/arm/nvidia X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 08:16:55 -0000 Author: mmel Date: Thu Mar 23 08:16:53 2017 New Revision: 315845 URL: https://svnweb.freebsd.org/changeset/base/315845 Log: Restore original (pre r315760) naming for Tegra SDHCI device. Newbus handles multiple equally named device classes without problems, so there is no reason to use slightly cryptic "_shdci" for them. In contrast, the driver module name must be unique, so "_shdci" is the right name for it. Modified: head/sys/arm/nvidia/tegra_sdhci.c Modified: head/sys/arm/nvidia/tegra_sdhci.c ============================================================================== --- head/sys/arm/nvidia/tegra_sdhci.c Thu Mar 23 08:16:29 2017 (r315844) +++ head/sys/arm/nvidia/tegra_sdhci.c Thu Mar 23 08:16:53 2017 (r315845) @@ -459,9 +459,9 @@ static device_method_t tegra_sdhci_metho }; static devclass_t tegra_sdhci_devclass; -static DEFINE_CLASS_0(sdhci_tegra, tegra_sdhci_driver, tegra_sdhci_methods, +static DEFINE_CLASS_0(sdhci, tegra_sdhci_driver, tegra_sdhci_methods, sizeof(struct tegra_sdhci_softc)); DRIVER_MODULE(sdhci_tegra, simplebus, tegra_sdhci_driver, tegra_sdhci_devclass, NULL, NULL); MODULE_DEPEND(sdhci_tegra, sdhci, 1, 1, 1); -MMC_DECLARE_BRIDGE(sdhci_tegra); +MMC_DECLARE_BRIDGE(sdhci); From owner-svn-src-head@freebsd.org Thu Mar 23 08:34:32 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 21618D1748B; Thu, 23 Mar 2017 08:34:32 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E4120D28; Thu, 23 Mar 2017 08:34:31 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N8YVul003256; Thu, 23 Mar 2017 08:34:31 GMT (envelope-from des@FreeBSD.org) Received: (from des@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N8YVDA003255; Thu, 23 Mar 2017 08:34:31 GMT (envelope-from des@FreeBSD.org) Message-Id: <201703230834.v2N8YVDA003255@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: des set sender to des@FreeBSD.org using -f From: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= Date: Thu, 23 Mar 2017 08:34:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315850 - head/sys/boot/forth X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 08:34:32 -0000 Author: des Date: Thu Mar 23 08:34:30 2017 New Revision: 315850 URL: https://svnweb.freebsd.org/changeset/base/315850 Log: The original author abused Nd (one-line description, used by makewhatis) for its side effect of producing an en-dash. This broke whatis with newer versions of mdocml. Use \(en instead. MFC after: 1 week Modified: head/sys/boot/forth/beastie.4th.8 Modified: head/sys/boot/forth/beastie.4th.8 ============================================================================== --- head/sys/boot/forth/beastie.4th.8 Thu Mar 23 08:22:27 2017 (r315849) +++ head/sys/boot/forth/beastie.4th.8 Thu Mar 23 08:34:30 2017 (r315850) @@ -34,9 +34,9 @@ The file that goes by the name of .Nm is a set of commands designed to draw the ASCII art FreeBSD mascot -.Nd known simply as -.Ic beastie -.Nd to the right of the boot loader menu. +\(en known simply as +.Em beastie +\(en to the right of the boot loader menu. The commands of .Nm by themselves are not enough for most uses. From owner-svn-src-head@freebsd.org Thu Mar 23 08:57:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 78936D17B57; Thu, 23 Mar 2017 08:57:06 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 37FE6182A; Thu, 23 Mar 2017 08:57:06 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N8v5bK011541; Thu, 23 Mar 2017 08:57:05 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N8v456011537; Thu, 23 Mar 2017 08:57:04 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201703230857.v2N8v456011537@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Thu, 23 Mar 2017 08:57:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315851 - in head/sys: kern sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 08:57:06 -0000 Author: avg Date: Thu Mar 23 08:57:04 2017 New Revision: 315851 URL: https://svnweb.freebsd.org/changeset/base/315851 Log: move thread switch tracing from mi_switch to sched_switch This is done so that the thread state changes during the switch are not confused with the thread state changes reported when the thread spins on a lock. Here is an example, three consecutive entries for the same thread (from top to bottom): KTRGRAPH group:"thread", id:"zio_write_intr_3 tid 100260", state:"sleep", attributes: prio:84, wmesg:"-", lockname:"(null)" KTRGRAPH group:"thread", id:"zio_write_intr_3 tid 100260", state:"spinning", attributes: lockname:"sched lock 1" KTRGRAPH group:"thread", id:"zio_write_intr_3 tid 100260", state:"running", attributes: none The above trace could leave an impression that the final state of the thread was "running". After this change the sleep state will be reported after the "spinning" and "running" states reported for the sched lock. Reviewed by: jhb, markj MFC after: 1 week Sponsored by: Panzura Differential Revision: https://reviews.freebsd.org/D9961 Modified: head/sys/kern/kern_synch.c head/sys/kern/sched_4bsd.c head/sys/kern/sched_ule.c head/sys/sys/proc.h Modified: head/sys/kern/kern_synch.c ============================================================================== --- head/sys/kern/kern_synch.c Thu Mar 23 08:34:30 2017 (r315850) +++ head/sys/kern/kern_synch.c Thu Mar 23 08:57:04 2017 (r315851) @@ -66,13 +66,6 @@ __FBSDID("$FreeBSD$"); #include -#define KTDSTATE(td) \ - (((td)->td_inhibitors & TDI_SLEEPING) != 0 ? "sleep" : \ - ((td)->td_inhibitors & TDI_SUSPENDED) != 0 ? "suspended" : \ - ((td)->td_inhibitors & TDI_SWAPPED) != 0 ? "swapped" : \ - ((td)->td_inhibitors & TDI_LOCK) != 0 ? "blocked" : \ - ((td)->td_inhibitors & TDI_IWAIT) != 0 ? "iwait" : "yielding") - static void synch_setup(void *dummy); SYSINIT(synch_setup, SI_SUB_KICK_SCHEDULER, SI_ORDER_FIRST, synch_setup, NULL); @@ -437,20 +430,8 @@ mi_switch(int flags, struct thread *newt PCPU_SET(switchticks, ticks); CTR4(KTR_PROC, "mi_switch: old thread %ld (td_sched %p, pid %ld, %s)", td->td_tid, td_get_sched(td), td->td_proc->p_pid, td->td_name); -#if (KTR_COMPILE & KTR_SCHED) != 0 - if (TD_IS_IDLETHREAD(td)) - KTR_STATE1(KTR_SCHED, "thread", sched_tdname(td), "idle", - "prio:%d", td->td_priority); - else - KTR_STATE3(KTR_SCHED, "thread", sched_tdname(td), KTDSTATE(td), - "prio:%d", td->td_priority, "wmesg:\"%s\"", td->td_wmesg, - "lockname:\"%s\"", td->td_lockname); -#endif SDT_PROBE0(sched, , , preempt); sched_switch(td, newtd, flags); - KTR_STATE1(KTR_SCHED, "thread", sched_tdname(td), "running", - "prio:%d", td->td_priority); - CTR4(KTR_PROC, "mi_switch: new thread %ld (td_sched %p, pid %ld, %s)", td->td_tid, td_get_sched(td), td->td_proc->p_pid, td->td_name); Modified: head/sys/kern/sched_4bsd.c ============================================================================== --- head/sys/kern/sched_4bsd.c Thu Mar 23 08:34:30 2017 (r315850) +++ head/sys/kern/sched_4bsd.c Thu Mar 23 08:57:04 2017 (r315851) @@ -1013,6 +1013,16 @@ sched_switch(struct thread *td, struct t MPASS(newtd->td_lock == &sched_lock); } +#if (KTR_COMPILE & KTR_SCHED) != 0 + if (TD_IS_IDLETHREAD(td)) + KTR_STATE1(KTR_SCHED, "thread", sched_tdname(td), "idle", + "prio:%d", td->td_priority); + else + KTR_STATE3(KTR_SCHED, "thread", sched_tdname(td), KTDSTATE(td), + "prio:%d", td->td_priority, "wmesg:\"%s\"", td->td_wmesg, + "lockname:\"%s\"", td->td_lockname); +#endif + if (td != newtd) { #ifdef HWPMC_HOOKS if (PMC_PROC_IS_USING_PMCS(td->td_proc)) @@ -1061,6 +1071,9 @@ sched_switch(struct thread *td, struct t } else SDT_PROBE0(sched, , , remain__cpu); + KTR_STATE1(KTR_SCHED, "thread", sched_tdname(td), "running", + "prio:%d", td->td_priority); + #ifdef SMP if (td->td_flags & TDF_IDLETD) CPU_SET(PCPU_GET(cpuid), &idle_cpus_mask); Modified: head/sys/kern/sched_ule.c ============================================================================== --- head/sys/kern/sched_ule.c Thu Mar 23 08:34:30 2017 (r315850) +++ head/sys/kern/sched_ule.c Thu Mar 23 08:57:04 2017 (r315851) @@ -1938,6 +1938,17 @@ sched_switch(struct thread *td, struct t mtx = thread_lock_block(td); tdq_load_rem(tdq, td); } + +#if (KTR_COMPILE & KTR_SCHED) != 0 + if (TD_IS_IDLETHREAD(td)) + KTR_STATE1(KTR_SCHED, "thread", sched_tdname(td), "idle", + "prio:%d", td->td_priority); + else + KTR_STATE3(KTR_SCHED, "thread", sched_tdname(td), KTDSTATE(td), + "prio:%d", td->td_priority, "wmesg:\"%s\"", td->td_wmesg, + "lockname:\"%s\"", td->td_lockname); +#endif + /* * We enter here with the thread blocked and assigned to the * appropriate cpu run-queue or sleep-queue and with the current @@ -1988,6 +1999,10 @@ sched_switch(struct thread *td, struct t thread_unblock_switch(td, mtx); SDT_PROBE0(sched, , , remain__cpu); } + + KTR_STATE1(KTR_SCHED, "thread", sched_tdname(td), "running", + "prio:%d", td->td_priority); + /* * Assert that all went well and return. */ Modified: head/sys/sys/proc.h ============================================================================== --- head/sys/sys/proc.h Thu Mar 23 08:34:30 2017 (r315850) +++ head/sys/sys/proc.h Thu Mar 23 08:57:04 2017 (r315851) @@ -488,6 +488,12 @@ do { \ #define TD_ON_UPILOCK(td) ((td)->td_flags & TDF_UPIBLOCKED) #define TD_IS_IDLETHREAD(td) ((td)->td_flags & TDF_IDLETD) +#define KTDSTATE(td) \ + (((td)->td_inhibitors & TDI_SLEEPING) != 0 ? "sleep" : \ + ((td)->td_inhibitors & TDI_SUSPENDED) != 0 ? "suspended" : \ + ((td)->td_inhibitors & TDI_SWAPPED) != 0 ? "swapped" : \ + ((td)->td_inhibitors & TDI_LOCK) != 0 ? "blocked" : \ + ((td)->td_inhibitors & TDI_IWAIT) != 0 ? "iwait" : "yielding") #define TD_SET_INHIB(td, inhib) do { \ (td)->td_state = TDS_INHIBITED; \ From owner-svn-src-head@freebsd.org Thu Mar 23 08:59:18 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 87448D17C4C; Thu, 23 Mar 2017 08:59:18 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5F1AC1A1A; Thu, 23 Mar 2017 08:59:18 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N8xHG0011669; Thu, 23 Mar 2017 08:59:17 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N8xHdg011666; Thu, 23 Mar 2017 08:59:17 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201703230859.v2N8xHdg011666@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Thu, 23 Mar 2017 08:59:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315852 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 08:59:18 -0000 Author: avg Date: Thu Mar 23 08:59:17 2017 New Revision: 315852 URL: https://svnweb.freebsd.org/changeset/base/315852 Log: zfs: add zio_buf_alloc_nowait and use it in vdev_queue_aggregate This way we can avoid blocking the whole queue in the low memory situations. It's better to sacrifice some I/O performance by not doing the aggregation than to add an indefinite wait for more memory. Reviewed by: smh MFC after: 2 weeks Sponsored by: Panzura Differential Revision: https://reviews.freebsd.org/D9999 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h Thu Mar 23 08:57:04 2017 (r315851) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h Thu Mar 23 08:59:17 2017 (r315852) @@ -567,6 +567,7 @@ extern zio_t *zio_unique_parent(zio_t *c extern void zio_add_child(zio_t *pio, zio_t *cio); extern void *zio_buf_alloc(size_t size); +extern void *zio_buf_alloc_nowait(size_t size); extern void zio_buf_free(void *buf, size_t size); extern void *zio_data_buf_alloc(size_t size); extern void zio_data_buf_free(void *buf, size_t size); Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c Thu Mar 23 08:57:04 2017 (r315851) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c Thu Mar 23 08:59:17 2017 (r315852) @@ -647,6 +647,7 @@ static zio_t * vdev_queue_aggregate(vdev_queue_t *vq, zio_t *zio) { zio_t *first, *last, *aio, *dio, *mandatory, *nio; + void *abuf; uint64_t maxgap = 0; uint64_t size; boolean_t stretch; @@ -755,8 +756,12 @@ vdev_queue_aggregate(vdev_queue_t *vq, z size = IO_SPAN(first, last); ASSERT3U(size, <=, zfs_vdev_aggregation_limit); + abuf = zio_buf_alloc_nowait(size); + if (abuf == NULL) + return (NULL); + aio = zio_vdev_delegated_io(first->io_vd, first->io_offset, - zio_buf_alloc(size), size, first->io_type, zio->io_priority, + abuf, size, first->io_type, zio->io_priority, flags | ZIO_FLAG_DONT_CACHE | ZIO_FLAG_DONT_QUEUE, vdev_queue_agg_io_done, NULL); aio->io_timestamp = first->io_timestamp; Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Thu Mar 23 08:57:04 2017 (r315851) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Thu Mar 23 08:59:17 2017 (r315852) @@ -272,18 +272,33 @@ zio_fini(void) * useful to inspect ZFS metadata, but if possible, we should avoid keeping * excess / transient data in-core during a crashdump. */ -void * -zio_buf_alloc(size_t size) +static void * +zio_buf_alloc_impl(size_t size, boolean_t canwait) { size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; int flags = zio_exclude_metadata ? KM_NODEBUG : 0; VERIFY3U(c, <, SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); - if (zio_use_uma) - return (kmem_cache_alloc(zio_buf_cache[c], KM_PUSHPAGE)); - else - return (kmem_alloc(size, KM_SLEEP|flags)); + if (zio_use_uma) { + return (kmem_cache_alloc(zio_buf_cache[c], + canwait ? KM_PUSHPAGE : KM_NOSLEEP)); + } else { + return (kmem_alloc(size, + (canwait ? KM_SLEEP : KM_NOSLEEP) | flags)); + } +} + +void * +zio_buf_alloc(size_t size) +{ + return (zio_buf_alloc_impl(size, B_TRUE)); +} + +void * +zio_buf_alloc_nowait(size_t size) +{ + return (zio_buf_alloc_impl(size, B_FALSE)); } /* From owner-svn-src-head@freebsd.org Thu Mar 23 09:04:00 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 17D96D18095; Thu, 23 Mar 2017 09:04:00 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 85FFF1F6F; Thu, 23 Mar 2017 09:03:59 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id v2N93pLL021654 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 23 Mar 2017 11:03:51 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua v2N93pLL021654 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id v2N93p1p021653; Thu, 23 Mar 2017 11:03:51 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Thu, 23 Mar 2017 11:03:51 +0200 From: Konstantin Belousov To: Ed Schouten Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 Message-ID: <20170323090351.GZ43712@kib.kiev.ua> References: <201703220705.v2M75RHE066483@repo.freebsd.org> <20170322090258.GR43712@kib.kiev.ua> <20170322230026.GV43712@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.8.0 (2017-02-23) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 09:04:00 -0000 On Thu, Mar 23, 2017 at 08:43:20AM +0100, Ed Schouten wrote: > Hi Kostik, > > 2017-03-23 0:00 GMT+01:00 Konstantin Belousov : > > On Wed, Mar 22, 2017 at 03:16:24PM +0100, Ed Schouten wrote: > >> Similarly, I seem to remember CloudABI's brandinfos set compat_3_brand > >> for a similar reason: it seems to be required by imgact_elf.c. Would > >> we also want to change that? > > > > Could you please try this ? > > Thanks! I just gave the patch a try, but the comparison added to > imgact_elf.c now causes the brandinfo to be skipped entirely. Attached > is a patch that does work for me. Could you provide me with i386 and amd64 cloudabi hello world binaries ? And, might be, an instruction how to run them, if non-trivial. From owner-svn-src-head@freebsd.org Thu Mar 23 09:13:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 57028D18293; Thu, 23 Mar 2017 09:13:23 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 170CE668; Thu, 23 Mar 2017 09:13:23 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2N9DMmM019807; Thu, 23 Mar 2017 09:13:22 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2N9DMHV019806; Thu, 23 Mar 2017 09:13:22 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201703230913.v2N9DMHV019806@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Thu, 23 Mar 2017 09:13:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315853 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 09:13:23 -0000 Author: avg Date: Thu Mar 23 09:13:21 2017 New Revision: 315853 URL: https://svnweb.freebsd.org/changeset/base/315853 Log: zfs_putpages: use TXG_WAIT Explicit looping using TXG_NOWAIT is more verbose and may harm performance under heavy load because of multiple waits. MFC after: 1 week Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Thu Mar 23 08:59:17 2017 (r315852) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Thu Mar 23 09:13:21 2017 (r315853) @@ -4712,19 +4712,13 @@ zfs_putpages(struct vnode *vp, vm_page_t goto out; } -top: tx = dmu_tx_create(zfsvfs->z_os); dmu_tx_hold_write(tx, zp->z_id, off, len); dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); zfs_sa_upgrade_txholds(tx, zp); - err = dmu_tx_assign(tx, TXG_NOWAIT); + err = dmu_tx_assign(tx, TXG_WAIT); if (err != 0) { - if (err == ERESTART) { - dmu_tx_wait(tx); - dmu_tx_abort(tx); - goto top; - } dmu_tx_abort(tx); goto out; } From owner-svn-src-head@freebsd.org Thu Mar 23 09:38:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5F063D18A2C for ; Thu, 23 Mar 2017 09:38:23 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: from mail-yw0-x235.google.com (mail-yw0-x235.google.com [IPv6:2607:f8b0:4002:c05::235]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D297814FF for ; Thu, 23 Mar 2017 09:38:22 +0000 (UTC) (envelope-from ed@nuxi.nl) Received: by mail-yw0-x235.google.com with SMTP id p77so142386526ywg.1 for ; Thu, 23 Mar 2017 02:38:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuxi-nl.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=45oD6qj1nCYY1t2FgkoviPapeF0NbHctq+DXGK+Od4o=; b=vrPg1E+RX/rB7rTFBRKJqKfINTn8PCZq7tAtVaYjt8i/FUljHD3Qe7uQPClzYBfuKC vwQVr4OOxE16q+OsRAdD5L8BJrPZpG1QeDqtFVV/ayjlakZtycn7Kta0oruxyyFfLokW t4+sjLOfQ0zmbPNxx3kwCuCCUeuwUru8b0bLIyrOxnkt4c8mUhhnhyghvHzH+VLSoIAH OzSL+qd0TJglV3aSbZx7BrTifWjuhBrqY3/gjq1oSTAqOBNDKV+sShjWfNnk7xGvIHxy bt7XSccpiQQofuylEyML1yQrEc2xYAlcZN3afeavO/Dd4kkZqWZBUVDrU7k0kzjqmQjb IN6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=45oD6qj1nCYY1t2FgkoviPapeF0NbHctq+DXGK+Od4o=; b=gqBXuzk7449++mqjwQEfHGYuH8yK+sJ7FTruHoQGEU3b4Phjm8mo+nObR3pmbnhHhJ ntPnAiyg5mZl52fYzR4WC0MYl8z/3pLTcP3w6o/Q0YFIhEyzZ8TLBb19hq1ObCZJBJG+ OuFkPXU8f/j2uZ1BmGGxMTXzdc15SdNPeq/7Yy53pQ27VCFFpdp5mIHJ9/y3ACq16mpc u+tEAgpSfmmvwzmCz6P5u0rr6p2lLZImIkfc5EpckL9cbQ4KXklHCBFzFW4DfRZKjklT X8i5ajfY7mNSBq8EnxMDqdDIdgd/xKy7YFFvLembDhUEBgf16f5ZfLfCNtBZk3HWZobG ZKkQ== X-Gm-Message-State: AFeK/H0juGw+OG6VS7m/Y/9EITPzgn6Gm8AlgmjKKcERgFKvP5DTnb5Hu0P1X+Dlii21X+uLUN9t6ar+NtWRkg== X-Received: by 10.129.4.68 with SMTP id 65mr981722ywe.336.1490261901835; Thu, 23 Mar 2017 02:38:21 -0700 (PDT) MIME-Version: 1.0 Received: by 10.129.51.198 with HTTP; Thu, 23 Mar 2017 02:37:51 -0700 (PDT) In-Reply-To: <20170323090351.GZ43712@kib.kiev.ua> References: <201703220705.v2M75RHE066483@repo.freebsd.org> <20170322090258.GR43712@kib.kiev.ua> <20170322230026.GV43712@kib.kiev.ua> <20170323090351.GZ43712@kib.kiev.ua> From: Ed Schouten Date: Thu, 23 Mar 2017 10:37:51 +0100 Message-ID: Subject: Re: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 To: Konstantin Belousov Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: multipart/mixed; boundary=001a113f2102484793054b62a333 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 09:38:23 -0000 --001a113f2102484793054b62a333 Content-Type: text/plain; charset=UTF-8 2017-03-23 10:03 GMT+01:00 Konstantin Belousov : > Could you provide me with i386 and amd64 cloudabi hello world binaries ? > And, might be, an instruction how to run them, if non-trivial. Sure! I've attached two simple hello world executables to this message. These executables don't use cloudabi-run to have configuration/file descriptors injected. In other words, they assume file descriptor 1 == stdout == your terminal. This means you can simply run them like this: $ ./hello-... As a more general remark, if anyone wants to make more intrusive changes to the kernel and wants to check whether CloudABI is affected, at the bottom of this page there are instructions on how to run the C library's test suite (~900 tests): https://nuxi.nl/cloudabi/freebsd/ Thanks, -- Ed Schouten Nuxi, 's-Hertogenbosch, the Netherlands KvK-nr.: 62051717 --001a113f2102484793054b62a333 Content-Type: application/octet-stream; name=hello-amd64 Content-Disposition: attachment; filename=hello-amd64 Content-Transfer-Encoding: base64 X-Attachment-Id: f_j0m75m3i0 f0VMRgIBAREAAAAAAAAAAAMAPgABAAAAAGAAAAAAAABAAAAAAAAAAIjXAQAAAAAAAAAAAEAAOAAJ AEAAGAAXAAYAAAAEAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAA+AEAAAAAAAD4AQAAAAAAAAgA AAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIXQAAAAAAAAhdAAAAAAAAABAA AAAAAAABAAAABQAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAB5SAQAAAAAAHlIBAAAAAAAAEAAA AAAAAAEAAAAGAAAAAMABAAAAAAAAwAEAAAAAAADAAQAAAAAAiBYAAAAAAACCIhAAAAAAAAAQAAAA AAAABwAAAAQAAAAAwQEAAAAAAADBAQAAAAAAAMEBAAAAAAAAAAAAAAAAACQAAAAAAAAACAAAAAAA AAACAAAABgAAAJDVAQAAAAAAkNUBAAAAAACQ1QEAAAAAALAAAAAAAAAAsAAAAAAAAAAIAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA UOV0ZAQAAABgSQAAAAAAAGBJAAAAAAAAYEkAAAAAAAAUBAAAAAAAABQEAAAAAAAAAQAAAAAAAABR 5XRkBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAs14AABdeAAAXXgAAUF4AAFleAAAXXgAAZl4AAG5eAAAXXgAAV14AAGBeAABpXgAAcl4A AHteAACDXgAA3GQAAJRkAACUZAAAlGQAAKtkAADEZAAA1GQAAGNsb2NrX3Jlc19nZXQAY2xvY2tf dGltZV9nZXQAY29uZHZhcl9zaWduYWwAZmRfY2xvc2UAZmRfY3JlYXRlMQBmZF9jcmVhdGUyAGZk X2RhdGFzeW5jAGZkX2R1cABmZF9wcmVhZABmZF9wd3JpdGUAZmRfcmVhZABmZF9yZXBsYWNlAGZk X3NlZWsAZmRfc3RhdF9nZXQAZmRfc3RhdF9wdXQAZmRfc3luYwBmZF93cml0ZQBmaWxlX2Fkdmlz ZQBmaWxlX2FsbG9jYXRlAGZpbGVfY3JlYXRlAGZpbGVfbGluawBmaWxlX29wZW4AZmlsZV9yZWFk ZGlyAGZpbGVfcmVhZGxpbmsAZmlsZV9yZW5hbWUAZmlsZV9zdGF0X2ZnZXQAZmlsZV9zdGF0X2Zw dXQAZmlsZV9zdGF0X2dldABmaWxlX3N0YXRfcHV0AGZpbGVfc3ltbGluawBmaWxlX3VubGluawBs b2NrX3VubG9jawBtZW1fYWR2aXNlAG1lbV9tYXAAbWVtX3Byb3RlY3QAbWVtX3N5bmMAbWVtX3Vu bWFwAHBvbGwAcG9sbF9mZABwcm9jX2V4ZWMAcHJvY19leGl0AHByb2NfZm9yawBwcm9jX3JhaXNl AHJhbmRvbV9nZXQAc29ja19hY2NlcHQAc29ja19iaW5kAHNvY2tfY29ubmVjdABzb2NrX2xpc3Rl bgBzb2NrX3JlY3YAc29ja19zZW5kAHNvY2tfc2h1dGRvd24Ac29ja19zdGF0X2dldAB0aHJlYWRf Y3JlYXRlAHRocmVhZF9leGl0AHRocmVhZF95aWVsZAAAABN3AABNdwAATXcAAE13AABNdwAATXcA AE13AABNdwAATXcAAE13AABNdwAATXcAAE13AABNdwAATXcAAE13AABNdwAATXcAAE13AABNdwAA TXcAAE13AABNdwAATXcAAE13AABNdwAATXcAAE13AAAydwAATXcAAEh3AABNdwAAH3cAAE13AABN dwAATXcAAE13AABNdwAATXcAAE13AABIdwAATXcAAE13AABNdwAATXcAAE13AABIdwAArnYAAAx3 AAD1dgAADHcAAK52AACudgAArnYAAAx3AAAMdwAADHcAAAx3AAAMdwAADHcAAAx3AAAMdwAADHcA AAx3AAAMdwAAxHYAAAx3AAAMdwAADHcAAAx3AAC5dgAADHcAAAx3AAAMdwAADHcAAAx3AAAMdwAA DHcAAAx3AACudgAADHcAANp2AADPdgAArnYAAK52AACudgAADHcAAM92AAAMdwAADHcAAAx3AAAM dwAADHcAALl2AADEdgAADHcAAAx3AADEdgAADHcAALl2AAAMdwAADHcAALl2AAAEdwAAjncAAEx3 AABsdwAAl3wAAMB8AADAfAAAr3wAAMB8AADAfAAAwHwAAKl8AADAfAAAwHwAAMB8AAC0fAAAwHwA AGx8AADAfAAAwHwAAKR8AAAJfgAAP34AAD9+AAA/fgAAP34AAD9+AAA/fgAAP34AAD9+AAA/fgAA P34AAD9+AAA/fgAAP34AAD9+AAA/fgAAP34AAD9+AAA/fgAAP34AAD9+AAA/fgAAP34AAD9+AAA/ fgAAP34AAD9+AAA/fgAAFX4AAD9+AAA6fgAAP34AACl+AAA/fgAAP34AAD9+AAA/fgAAP34AAD9+ AAA/fgAAOn4AAD9+AAA/fgAAP34AAD9+AAA/fgAAOn4AADqDAACkogAApKIAAKSiAACkogAApKIA AKSiAACkogAApKIAAKSiAACkogAApKIAAKSiAACkogAApKIAAKSiAACkogAApKIAAKSiAACkogAA pKIAAKSiAACkogAApKIAAKSiAACkogAApKIAAKSiAADifQAApKIAAKmDAACkogAA4n0AAOJ9AADi fQAApKIAAKSiAACkogAApKIAAKSiAACkogAApKIAAKSiAACkogAApKIAAKSiAADRgwAApKIAAKSi AACkogAApKIAAOWDAACkogAApKIAAKSiAACkogAApKIAAKSiAACkogAApKIAAId+AACkogAAGIQA ACZ/AACHfgAAh34AAId+AACkogAAJn8AAKSiAACkogAApKIAAFeEAACkogAAnIQAAM+EAACkogAA pKIAAPaEAACkogAAI4gAAKSiAACkogAAVogAADaAAABulAAAbpQAAG6UAABylAAAQn8AAJOUAACK iAAAUKEAAFChAABQoQAAGoEAAFChAABQoQAAW38AAFChAABQoQAAQoAAAFChAABQoQAAioEAAHZ8 AABjfgAAn5MAAJ+TAACfkwAAppMAAAx+AADPkwAAMogAAPigAAD4oAAA+KAAAMKAAAD4oAAA+KAA AAN/AAD4oAAA+KAAAOp/AAD4oAAA+KAAADKBAABlggAA3MoAABbLAAAWywAA88oAABbLAAAWywAA FssAALzKAAAWywAAFssAABbLAADnygAAFssAAAvLAAAWywAAFssAAP/KAAD1ywAAK8wAACvMAAAr zAAAK8wAACvMAAArzAAAK8wAACvMAAArzAAAK8wAACvMAAArzAAAK8wAACvMAAArzAAAK8wAACvM AAArzAAAK8wAACvMAAArzAAAK8wAACvMAAArzAAAK8wAACvMAAArzAAAAcwAACvMAAAmzAAAK8wA ABXMAAArzAAAK8wAACvMAAArzAAAK8wAACvMAAArzAAAJswAACvMAAArzAAAK8wAACvMAAArzAAA JswAAAHOAADVyAAA1cgAANXIAADVyAAA1cgAANXIAADVyAAA1cgAANXIAADVyAAA1cgAANXIAADV yAAA1cgAANXIAADVyAAA1cgAANXIAADVyAAA1cgAANXIAADVyAAA1cgAANXIAADVyAAA1cgAANXI AADcywAA1cgAACegAADVyAAA3MsAANzLAADcywAA1cgAANXIAADVyAAA1cgAANXIAADVyAAA1cgA ANXIAADVyAAA1cgAANXIAABIoAAA1cgAANXIAADVyAAA1cgAAHGgAADVyAAA1cgAANXIAADVyAAA 1cgAANXIAADVyAAA1cgAAA3MAADVyAAAaKUAAFrMAAANzAAADcwAAA3MAADVyAAAWswAANXIAADV yAAA1cgAALegAADVyAAA/KAAAEKhAADVyAAA1cgAAGOhAADVyAAAkaEAANXIAADVyAAAz6EAAHGi AACxrwAAsa8AALGvAAC+rwAAeaEAANSvAADLtQAAb8cAAG/HAABvxwAAb8cAAG/HAABvxwAAb8cA AD+jAABvxwAAb8cAAG/HAABvxwAAb8cAAJ2hAABvxwAAb8cAAG/HAABvxwAAb8cAAHuiAABvxwAA b8cAAG/HAABvxwAAb8cAAKqjAAAEzAAAo64AAKOuAACjrgAAqq4AAKnLAADRrgAAQ7UAAOfGAADn xgAA58YAAOfGAADnxgAA58YAAOfGAAC3ogAA58YAAOfGAADnxgAA58YAAOfGAAAVoQAA58YAAOfG AADnxgAA58YAAOfGAADzoQAA58YAAOfGAADnxgAA58YAAOfGAAAiowAALNQAAEnUAAAw1AAAUtQA AAAAAAAAAAAAAAAAAIgCHAig1Y/6PPuk/gAAAAB2vz6if+Guulf7rP4AAAAAdqxVMCD7Foty+7T+ AAAAAOo1zl1KiULPjPu8/gAAAAAtO2VVqrBrmqf7xP4AAAAA30UaPQPPGubB+8z+AAAAAMrGmscX /nCr3PvU/gAAAABP3Ly+/LF3//b73P4AAAAADNZrQe+RVr4R/OT+AAAAADz8f5CtH9CNLPzs/gAA AACDmlUxKFxR00b89P4AAAAAtcmmrY+scZ1h/Pz+AAAAAMuL7iN3Ipzqe/wE/wAAAABtU3hAkUnM rpb8DP8AAAAAV862XXkSPIKx/BT/AAAAADdW+002lBDCy/wc/wAAAABPmEg4b+qWkOb8JP8AAAAA xzqCJcuFdNcA/Sz/AAAAAPSXv5fNz4agG/00/wAAAADlrCoXmAo07zX9PP8AAAAAjrI1KvtnOLJQ /UT/AAAAADs/xtLf1MiEa/1M/wAAAAC6zdMaJ0TdxYX9VP8AAAAAlsklu86fa5Og/Vz/AAAAAISl Yn0kbKzbuv1k/wAAAAD22l8NWGaro9X9bP8AAAAAJvHD3pP44vPv/XT/AAAAALiA/6qorbW1Cv58 /wAAAACLSnxsBV9ihyX+hP8AAAAAUzDBNGD/vMk//oz/AAAAAFUmupGMhU6WWv6U/wAAAAC9filw JHf533T+nP8AAAAAj7jluJ+936aP/qT/AAAAAJR9dIjPX6n4qf6s/wAAAADPm6iPk3BEucT+tP8A AAAAaxUPv/jwCIrf/rz/AAAAALYxMWVVJbDN+f7E/wAAAACsf3vQxuI/mRT/zP8AAAAABjsrKsQQ XOQu/9T/AAAAANOSc2mZJCSqSf/c/wAAAAAOygCD8rWH/WP/5P8AAAAA6xoRkmQI5bx+/+z/AAAA AMyIUG8JzLyMmf/0/wAAAAAsZRniWBe30bP//P8AAAAAAAAAAAAAQJzO/wQAAAAAAAAAAAAQpdTo 6P8MAAAAAAAAAGKsxet4rQMAFAAAAAAAhAmU+Hg5P4EeABwAAAAAALMVB8l7zpfAOAAkAAAAAABw XOp7zjJ+j1MALAAAAAAAaIDpq6Q40tVtADQAAAAAAEUimhcmJ0+fiAA8AAAAAAAn+8TUMaJj7aIA RAAAAAAAqK3IjDhl3rC9AEwAAAAAANtlqxqOCMeD2ABUAAAAAACaHXFC+R1dxPIAXAAAAAAAWOcb pixpTZINAWQAAAAAAOqNcBpk7gHaJwFsAAAAAABKd++amaNtokIBdAAAAAAAhWt9tHt4CfJcAXwA AAAAAHcY3Xmh5FS0dwGEAAAAAADCxZtbkoZbhpIBjAAAAAAAPV2WyMVTNcisAZQAAAAAALOgl/pc tCqVxwGcAAAAAADjX6CZvZ9G3uEBpAAAAAAAJYw52zTCm6X8AawAAAAAAFyfmKNymsb2FgK0AAAA AADOvulUU7/ctzECvAAAAAAA4kEi8hfz/IhMAsQAAAAAAKV4XNObziDMZgLMAAAAAADfUyF781oW mIEC1AAAAAAAOjAfl9y1oOKbAtwAAAAAAJaz41xT0dmotgLkAAAAAAA8RKek2Xyb+9AC7AAAAAAA EESkp0xMdrvrAvQAAAAAABqcQLbvjquLBgP8AAAAAAAshFemEO8f0CADBAEAAAAAKTGR6eWkEJs7 AwwBAAAAAJ0MnKH7mxDnVQMUAQAAAAAp9Dti2SAorHADHAEAAAAAhc+nel5LRICLAyQBAAAAAC3d rANA5CG/pQMsAQAAAACP/0ReL5xnjsADNAEAAAAAQbiMnJ0XM9TaAzwBAAAAAKkb47SS2xme9QNE AQAAAADZd9+6br+W6w8ETAEAAAAAa+7wmzsCh68qBFQBAAAAAAAAAAABAAAACgAAAGQAAADoAwAA ECcAAKCGAQBAQg8AgJaYAADh9QUAypo7fygBALooAQC6KAEAuigBALooAQC6KAEAuigBALooAQC6 KAEAuigBALooAQC6KAEAuigBALooAQC6KAEAuigBALooAQC6KAEAuigBALooAQC6KAEAuigBALoo AQC6KAEAuigBALooAQC6KAEAuigBAJ4oAQC6KAEAtCgBALooAQCLKAEAuigBALooAQC6KAEAuigB ALooAQC6KAEAuigBALQoAQC6KAEAuigBALooAQC6KAEAuigBALQoAQAbKAEAeCgBAGMoAQB4KAEA GygBABsoAQAbKAEAeCgBAHgoAQB4KAEAeCgBAHgoAQB4KAEAeCgBAHgoAQB4KAEAeCgBAHgoAQAx KAEAeCgBAHgoAQB4KAEAeCgBACYoAQB4KAEAeCgBAHgoAQB4KAEAeCgBAHgoAQB4KAEAeCgBABso AQB4KAEARygBADwoAQAbKAEAGygBABsoAQB4KAEAPCgBAHgoAQB4KAEAeCgBAHgoAQB4KAEAJigB ADEoAQB4KAEAeCgBADEoAQB4KAEAJigBAHgoAQB4KAEAJigBAG8oAQD5KAEAuCgBANgoAQA+XQEA eF0BAHhdAQBUXQEAeF0BAHhdAQB4XQEATl0BAHhdAQB4XQEAeF0BAFldAQB4XQEAGF0BAHhdAQB4 XQEASV0BAPteAQA5XwEAOV8BADlfAQA5XwEAOV8BADlfAQA5XwEAOV8BADlfAQA5XwEAOV8BADlf AQA5XwEAOV8BADlfAQA5XwEAOV8BADlfAQA5XwEAOV8BADlfAQA5XwEAOV8BADlfAQA5XwEAOV8B ADlfAQAHXwEAOV8BADRfAQA5XwEAHF8BADlfAQA5XwEAOV8BADlfAQA5XwEAOV8BADlfAQA0XwEA OV8BADlfAQA5XwEAOV8BADlfAQA0XwEAfmQBAONuAQDjbgEA424BAONuAQDjbgEA424BAONuAQDj bgEA424BAONuAQDjbgEA424BAONuAQDjbgEA424BAONuAQDjbgEA424BAONuAQDjbgEA424BAONu AQDjbgEA424BAONuAQDjbgEA424BAOBeAQDjbgEAvGQBAONuAQDgXgEA4F4BAOBeAQDjbgEA424B AONuAQDjbgEA424BAONuAQDjbgEA424BAONuAQDjbgEA424BAOVkAQDjbgEA424BAONuAQDjbgEA /GQBAONuAQDjbgEA424BAONuAQDjbgEA424BAONuAQDjbgEAiF8BAONuAQAyZQEAJWABAIhfAQCI XwEAiF8BAONuAQAlYAEA424BAONuAQDjbgEAcWUBAONuAQDAZQEA9mUBAONuAQDjbgEAHGYBAONu AQBiaQEA424BAONuAQCYaQEAWWEBAFN3AQBTdwEAU3cBAFd3AQBJYAEAfncBANlpAQDibAEA4mwB AOJsAQBYYgEA4mwBAOJsAQBgYAEA4mwBAOJsAQBlYQEA4mwBAOJsAQDQYgEAdF0BAGtfAQBxdgEA cXYBAHF2AQB4dgEAFF8BAJx2AQCBaQEAimwBAIpsAQCKbAEAAGIBAIpsAQCKbAEACGABAIpsAQCK bAEADWEBAIpsAQCKbAEAeGIBAIJjAQCkSAEAC0kBAAtJAQCdSAEAC0kBAAtJAQALSQEAskgBAAtJ AQALSQEAC0kBAMNIAQALSQEAy0gBAAtJAQALSQEA6EgBAPBJAQAnSgEAJ0oBACdKAQAnSgEAJ0oB ACdKAQAnSgEAJ0oBACdKAQAnSgEAJ0oBACdKAQAnSgEAJ0oBACdKAQAnSgEAJ0oBACdKAQAnSgEA J0oBACdKAQAnSgEAJ0oBACdKAQAnSgEAJ0oBACdKAQD8SQEAJ0oBACFKAQAnSgEAEEoBACdKAQAn SgEAJ0oBACdKAQAnSgEAJ0oBACdKAQAhSgEAJ0oBACdKAQAnSgEAJ0oBACdKAQAhSgEAzTcBAFQn AQBUJwEAVCcBAFQnAQBUJwEAVCcBAFQnAQBUJwEAVCcBAFQnAQBUJwEAVCcBAFQnAQBUJwEAVCcB AFQnAQBUJwEAVCcBAFQnAQBUJwEAVCcBAFQnAQBUJwEAVCcBAFQnAQBUJwEAVCcBAHtMAQBUJwEA DEoBAFQnAQB7TAEAe0wBAHtMAQBUJwEAVCcBAFQnAQBUJwEAVCcBAFQnAQBUJwEAVCcBAFQnAQBU JwEAVCcBACtKAQBUJwEAVCcBAFQnAQBUJwEAPDgBAFQnAQBUJwEAVCcBAFQnAQBUJwEAVCcBAFQn AQBUJwEAzkkBAFQnAQC8TQEAZicBAM5JAQDOSQEAzkkBAFQnAQBmJwEAVCcBAFQnAQBUJwEAaDkB AFQnAQDsOQEALDsBAFQnAQBUJwEATUoBAFQnAQCUOwEAVCcBAFQnAQDHPAEAC0oBAHZKAQB2SgEA dkoBAHpKAQD4SgEAnUoBAMtCAQD7TgEA+04BAPtOAQD7TgEA+04BAPtOAQD7TgEAKUwBAPtOAQD7 TgEA+04BAPtOAQD7TgEA51ABAPtOAQD7TgEA+04BAPtOAQD7TgEAqlEBAPtOAQD7TgEA+04BAPtO AQD7TgEAGFMBADJMAQC3TgEAt04BALdOAQC+TgEAlUsBAOdOAQBDQgEAc04BAHNOAQBzTgEAc04B AHNOAQBzTgEAc04BAKFLAQBzTgEAc04BAHNOAQBzTgEAc04BAF9QAQBzTgEAc04BAHNOAQBzTgEA c04BACJRAQBzTgEAc04BAHNOAQBzTgEAc04BAJBSAQBIZWxsbywgS29zdGlrIQoAVVMtQVNDSUkA MDEyMzQ1Njc4OWFiY2RlZgAwMTIzNDU2Nzg5QUJDREVGAC1pbmYAaW5mAC1uYW4AbmFuAC1JTkYA SU5GAC1OQU4ATkFOAHZkcHJpbnRmX2wAc3JjL2NvbW1vbi92cHJpbnRmX2JvZHkuaABpZHggPj0g KHNzaXplX3QpZmxvYXRfbmRpZ2l0cyAmJiAiTm90IGFsbCBkaWdpdHMgaGF2ZSBiZWVuIHByaW50 ZWQiAChudWxsKQBkaW91eFhmRmVFZ0dhQWNzcENTJW0AJy0rICMwAG51bWVyaWNfZ3JvdXBpbmdf aW5pdABzcmMvY29tbW9uL2xvY2FsZS5oAG5kaWdpdHMgPj0gMSAmJiAiQXR0ZW1wdGVkIHRvIGZv cm1hdCBzaG9ydCBudW1iZXIiAG51bWVyaWNfZ3JvdXBpbmdfc3RlcAAqbmctPmdyb3VwaW5nID4g MCAmJiAiQXR0ZW1wdGVkIHRvIHJlbG9hZCB6ZXJvIHN0ZXBzIgBmMTZkZWMAc3JjL2NvbW1vbi9m bG9hdDE2LmgAIWYxNl9pc196ZXJvKHBhcnRzKSAmJiAiRmxvYXRpbmcgcG9pbnQgaGFzIHZhbHVl IHplcm8iACVzOiVkOiBhc3NlcnRpb24gZmFpbGVkIGluICVzKCk6ICVzCgBfX2YxMGRlYwBzcmMv bGliYy9mbG9hdDEwL2YxMGRlYy5jYwB3cml0dGVuID4gMCAmJiAiSW5wdXQgdmFsdWUgY2FuIG5v IGxvbmdlciBiZSB6ZXJvIgAqbmRpZ2l0cyA+IDAgJiYgIk5vIGJ1ZmZlciBwcm92aWRlZCB0byBz dG9yZSBkaWdpdHMiAGNvbnRyaWIvZG91YmxlLWNvbnZlcnNpb24tZDhkNGU2Ni9kb3VibGUtY29u dmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi5jYwBEb3VibGVUb0FzY2lpACFEb3VibGUodikuSXNT cGVjaWFsKCkAbW9kZSA9PSBTSE9SVEVTVCB8fCBtb2RlID09IFNIT1JURVNUX1NJTkdMRSB8fCBy ZXF1ZXN0ZWRfZGlnaXRzID49IDAAY29udHJpYi9kb3VibGUtY29udmVyc2lvbi1kOGQ0ZTY2L2Rv dWJsZS1jb252ZXJzaW9uL3V0aWxzLmgAVmVjdG9yAGxlbiA9PSAwIHx8IChsZW4gPiAwICYmIGRh dGEgIT0gbnVsbHB0cikAb3BlcmF0b3JbXQAwIDw9IGluZGV4ICYmIGluZGV4IDwgbGVuZ3RoXwBC aWdudW1EdG9hAGNvbnRyaWIvZG91YmxlLWNvbnZlcnNpb24tZDhkNGU2Ni9kb3VibGUtY29udmVy c2lvbi9iaWdudW0tZHRvYS5jYwB2ID4gMABmID09IHYATm9ybWFsaXplZEV4cG9uZW50AHNpZ25p ZmljYW5kICE9IDAAR2VuZXJhdGVTaG9ydGVzdERpZ2l0cwBkaWdpdCA8PSA5AGJ1ZmZlclsoKmxl bmd0aCkgLSAxXSAhPSAnOScAYnVmZmVyWygqbGVuZ3RoKSAtMV0gIT0gJzknAEdlbmVyYXRlQ291 bnRlZERpZ2l0cwBjb3VudCA+PSAwAGRpZ2l0IDw9IDEwAEJpZ251bVRvRml4ZWQAKmRlY2ltYWxf cG9pbnQgPT0gLXJlcXVlc3RlZF9kaWdpdHMASW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzUG9zaXRp dmVFeHBvbmVudABlc3RpbWF0ZWRfcG93ZXIgPj0gMABjb250cmliL2RvdWJsZS1jb252ZXJzaW9u LWQ4ZDRlNjYvZG91YmxlLWNvbnZlcnNpb24vYmlnbnVtLmNjAElzQ2xhbXBlZCgpAG90aGVyLklz Q2xhbXBlZCgpAFN1YnRyYWN0QmlnbnVtAExlc3NFcXVhbChvdGhlciwgKnRoaXMpAFNxdWFyZQBh Y2N1bXVsYXRvciA9PSAwAEFzc2lnblBvd2VyVUludDE2AGJhc2UgIT0gMABwb3dlcl9leHBvbmVu dCA+PSAwAERpdmlkZU1vZHVsb0ludEJpZ251bQBvdGhlci51c2VkX2RpZ2l0c18gPiAwAG90aGVy LmJpZ2l0c19bb3RoZXIudXNlZF9kaWdpdHNfIC0gMV0gPj0gKCgxIDw8IGtCaWdpdFNpemUpIC8g MTYpAGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gPCAweDEwMDAwAEJpZ2l0TGVuZ3RoKCkgPT0g b3RoZXIuQmlnaXRMZW5ndGgoKQBxdW90aWVudCA8IDB4MTAwMDAAZGl2aXNpb25fZXN0aW1hdGUg PCAweDEwMDAwAENvbXBhcmUAYS5Jc0NsYW1wZWQoKQBiLklzQ2xhbXBlZCgpAFBsdXNDb21wYXJl AGMuSXNDbGFtcGVkKCkAQWxpZ24AdXNlZF9kaWdpdHNfID49IDAAZXhwb25lbnRfID49IDAAQmln aXRzU2hpZnRMZWZ0AHNoaWZ0X2Ftb3VudCA8IGtCaWdpdFNpemUAc2hpZnRfYW1vdW50ID49IDAA U3VidHJhY3RUaW1lcwBleHBvbmVudF8gPD0gb3RoZXIuZXhwb25lbnRfAEZhc3RGaXhlZER0b2EA Y29udHJpYi9kb3VibGUtY29udmVyc2lvbi1kOGQ0ZTY2L2RvdWJsZS1jb252ZXJzaW9uL2ZpeGVk LWR0b2EuY2MAZnJhY3Rpb25hbF9jb3VudCA8PSAyMABGaWxsRnJhY3Rpb25hbHMALTEyOCA8PSBl eHBvbmVudCAmJiBleHBvbmVudCA8PSAwAGZyYWN0aW9uYWxzID4+IDU2ID09IDAAU2hpZnQALTY0 IDw9IHNoaWZ0X2Ftb3VudCAmJiBzaGlmdF9hbW91bnQgPD0gNjQATXVsdGlwbHkAKGFjY3VtdWxh dG9yID4+IDMyKSA9PSAwAEdldENhY2hlZFBvd2VyRm9yQmluYXJ5RXhwb25lbnRSYW5nZQBjb250 cmliL2RvdWJsZS1jb252ZXJzaW9uLWQ4ZDRlNjYvZG91YmxlLWNvbnZlcnNpb24vY2FjaGVkLXBv d2Vycy5jYwAwIDw9IGluZGV4ICYmIGluZGV4IDwgc3RhdGljX2Nhc3Q8aW50PigoKHNpemVvZihr Q2FjaGVkUG93ZXJzKSAvIHNpemVvZigqKGtDYWNoZWRQb3dlcnMpKSkgLyBzdGF0aWNfY2FzdDxz aXplX3Q+KCEoc2l6ZW9mKGtDYWNoZWRQb3dlcnMpICUgc2l6ZW9mKCooa0NhY2hlZFBvd2Vycykp KSkpKQBtaW5fZXhwb25lbnQgPD0gY2FjaGVkX3Bvd2VyLmJpbmFyeV9leHBvbmVudABjYWNoZWRf cG93ZXIuYmluYXJ5X2V4cG9uZW50IDw9IG1heF9leHBvbmVudABGYXN0RHRvYQBjb250cmliL2Rv dWJsZS1jb252ZXJzaW9uLWQ4ZDRlNjYvZG91YmxlLWNvbnZlcnNpb24vZmFzdC1kdG9hLmNjAEdy aXN1MwBtb2RlID09IEZBU1RfRFRPQV9TSE9SVEVTVF9TSU5HTEUAYm91bmRhcnlfcGx1cy5lKCkg PT0gdy5lKCkAKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsg RGl5RnA6OmtTaWduaWZpY2FuZFNpemUpICYmIChrTWF4aW1hbFRhcmdldEV4cG9uZW50ID49IHcu ZSgpICsgdGVuX21rLmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKQBzY2FsZWRfdy5lKCkg PT0gYm91bmRhcnlfcGx1cy5lKCkgKyB0ZW5fbWsuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNp emUAY29udHJpYi9kb3VibGUtY29udmVyc2lvbi1kOGQ0ZTY2L2RvdWJsZS1jb252ZXJzaW9uL2ll ZWUuaAB2YWx1ZSgpID4gMC4wAE5vcm1hbGl6ZWRCb3VuZGFyaWVzAEFzRGl5RnAAU2lnbigpID4g MAAhSXNTcGVjaWFsKCkAY29udHJpYi9kb3VibGUtY29udmVyc2lvbi1kOGQ0ZTY2L2RvdWJsZS1j b252ZXJzaW9uL2RpeS1mcC5oAERpZ2l0R2VuAGxvdy5lKCkgPT0gdy5lKCkgJiYgdy5lKCkgPT0g aGlnaC5lKCkAbG93LmYoKSArIDEgPD0gaGlnaC5mKCkgLSAxAGtNaW5pbWFsVGFyZ2V0RXhwb25l bnQgPD0gdy5lKCkgJiYgdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBvbmVudABvbmUuZSgpID49 IC02MAAoKChzdGF0aWNfY2FzdDx1aW50NjRfdD4oMHhGRkZGRkZGRikgPDwgMzIpICsgMHhGRkZG RkZGRnUpKSAvIDEwID49IG9uZS5mKCkAU3VidHJhY3QAZl8gPj0gb3RoZXIuZl8AQmlnZ2VzdFBv d2VyVGVuAG51bWJlciA8ICgxdSA8PCAobnVtYmVyX2JpdHMgKyAxKSkAR3Jpc3UzQ291bnRlZABE aWdpdEdlbkNvdW50ZWQAUm91bmRXZWVkQ291bnRlZAByZXN0IDwgdGVuX2thcHBhAF9fbG9jYWxl X3RyYW5zbGF0ZV9zdHJpbmcAc3JjL2xpYmMvbG9jYWxlL2xvY2FsZV90cmFuc2xhdGVfc3RyaW5n LmMAbGVuID4gMCAmJiAiRmFpbGVkIHRvIGRlY29kZSBjb21waWxlLXRpbWUgc3RyaW5nIgBVVEYt OAB2ZnByaW50Zl9sAGZvcF93cml0ZV9wZWVrAHNyYy9jb21tb24vc3RkaW8uaABzdHJlYW0tPndy aXRlYnVmbGVuID4gMCAmJiAiV3JpdGUgZmx1c2hpbmcgZGlkIG5vdCB5aWVsZCBhIG5ldyB3cml0 ZSBidWZmZXIiACghZnNlZWthYmxlKHN0cmVhbSkgfHwgc3RyZWFtLT5yZWFkYnVmbGVuID09IDAp ICYmICJSZWFkIGJ1ZmZlciBzdGlsbCBsZWZ0IGludGFjdCIAZndyaXRlX3Byb2R1Y2UAYnVmbGVu IDw9IHN0cmVhbS0+d3JpdGVidWZsZW4gJiYgIkF0dGVtcHRlZCB0byBwcm9kdWNlIG1vcmUgZGF0 YSB0aGFuIHRoZSBidWZmZXIgY2FuIGhvbGQiAEZhaWxlZCB0byBhY3F1aXJlIHdyaXRlIGxvY2sA cHRocmVhZF9yd2xvY2tfd3Jsb2NrAHNyYy9saWJjL3B0aHJlYWQvcHRocmVhZF9yd2xvY2tfd3Js b2NrLmMAcndsb2NrLT5fX3dyaXRlX3JlY3Vyc2lvbiA8PSAwICYmICJJbnZhbGlkIHdyaXRlIHJl Y3Vyc2lvbiBjb3VudCIAXlt5WV0AXltuTl0AU3VjY2VzcwBUZW1wb3JhcnkgZmFpbHVyZSBpbiBu YW1lIHJlc29sdXRpb24ASW52YWxpZCB2YWx1ZSBmb3IgYWlfZmxhZ3MATm9uLXJlY292ZXJhYmxl IGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uAGFpX2ZhbWlseSBub3Qgc3VwcG9ydGVkAE1lbW9y eSBhbGxvY2F0aW9uIGZhaWx1cmUAaG9zdG5hbWUgbm9yIHNlcnZuYW1lIHByb3ZpZGVkLCBvciBu b3Qga25vd24Ac2Vydm5hbWUgbm90IHN1cHBvcnRlZCBmb3IgYWlfc29ja3R5cGUAYWlfc29ja3R5 cGUgbm90IHN1cHBvcnRlZABTeXN0ZW0gZXJyb3IgcmV0dXJuZWQgaW4gZXJybm8AQXJndW1lbnQg YnVmZmVyIG92ZXJmbG93AENvbnRlbnQgb2YgIlx7XH0iIGludmFsaWQASW52YWxpZCByZWd1bGFy IGV4cHJlc3Npb24AJz8nLCAnKicsIG9yICcrJyBub3QgcHJlY2VkZWQgYnkgdmFsaWQgcmVndWxh ciBleHByZXNzaW9uACJce1x9IiBpbWJhbGFuY2UAIltdIiBpbWJhbGFuY2UASW52YWxpZCBjb2xs YXRpbmcgZWxlbWVudCByZWZlcmVuY2VkAEludmFsaWQgY2hhcmFjdGVyIGNsYXNzIHR5cGUgcmVm ZXJlbmNlZABUcmFpbGluZyBiYWNrc2xhc2ggY2hhcmFjdGVyIGluIHBhdHRlcm4AIlwoXCkiIG9y ICIoKSIgaW1iYWxhbmNlAEludmFsaWQgZW5kcG9pbnQgaW4gcmFuZ2UgZXhwcmVzc2lvbgBPdXQg b2YgbWVtb3J5AE51bWJlciBpbnZhbGlkIG9yIGluIGVycm9yAEZhaWxlZCB0byBtYXRjaABBcmd1 bWVudCBsaXN0IHRvbyBsb25nAFBlcm1pc3Npb24gZGVuaWVkAEFkZHJlc3MgYWxyZWFkeSBpbiB1 c2UAQ2FuJ3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBw b3J0ZWQgYnkgcHJvdG9jb2wgZmFtaWx5AFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxl AE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAEJhZCBmaWxlIGRlc2NyaXB0b3IAQmFkIG1l c3NhZ2UARGV2aWNlIGJ1c3kAT3BlcmF0aW9uIGNhbmNlbGVkAE5vIGNoaWxkIHByb2Nlc3NlcwBT b2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydABDb25uZWN0aW9uIHJlZnVzZWQAQ29ubmVj dGlvbiByZXNldCBieSBwZWVyAFJlc291cmNlIGRlYWRsb2NrIGF2b2lkZWQARGVzdGluYXRpb24g YWRkcmVzcyByZXF1aXJlZABOdW1lcmljYWwgYXJndW1lbnQgb3V0IG9mIGRvbWFpbgBEaXNjIHF1 b3RhIGV4Y2VlZGVkAEZpbGUgZXhpc3RzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAE5vIHJv dXRlIHRvIGhvc3QASWRlbnRpZmllciByZW1vdmVkAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBPcGVy YXRpb24gbm93IGluIHByb2dyZXNzAEludGVycnVwdGVkIHN5c3RlbSBjYWxsAEludmFsaWQgYXJn dW1lbnQASW5wdXQvb3V0cHV0IGVycm9yAFNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZABJcyBh IGRpcmVjdG9yeQBUb28gbWFueSBsZXZlbHMgb2Ygc3ltYm9saWMgbGlua3MAVG9vIG1hbnkgb3Bl biBmaWxlcwBUb28gbWFueSBsaW5rcwBNZXNzYWdlIHRvbyBsb25nAE11bHRpaG9wIGF0dGVtcHRl ZABGaWxlIG5hbWUgdG9vIGxvbmcATmV0d29yayBpcyBkb3duAE5ldHdvcmsgZHJvcHBlZCBjb25u ZWN0aW9uIG9uIHJlc2V0AE5ldHdvcmsgaXMgdW5yZWFjaGFibGUAVG9vIG1hbnkgb3BlbiBmaWxl cyBpbiBzeXN0ZW0ATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBPcGVyYXRpb24gbm90IHN1cHBv cnRlZCBieSBkZXZpY2UATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBFeGVjIGZvcm1hdCBlcnJv cgBObyBsb2NrcyBhdmFpbGFibGUATGluayBoYXMgYmVlbiBzZXZlcmVkAENhbm5vdCBhbGxvY2F0 ZSBtZW1vcnkATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUAUHJvdG9jb2wgbm90IGF2YWlsYWJs ZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQAU29ja2V0 IGlzIG5vdCBjb25uZWN0ZWQATm90IGEgZGlyZWN0b3J5AERpcmVjdG9yeSBub3QgZW1wdHkAU3Rh dGUgbm90IHJlY292ZXJhYmxlAFNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldABPcGVyYXRp b24gbm90IHN1cHBvcnRlZABJbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2UARGV2aWNlIG5v dCBjb25maWd1cmVkAFZhbHVlIHRvbyBsYXJnZSB0byBiZSBzdG9yZWQgaW4gZGF0YSB0eXBlAFBy ZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQAQnJva2VuIHBpcGUAUHJv dG9jb2wgZXJyb3IAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABQcm90b2NvbCB3cm9uZyB0eXBlIGZv ciBzb2NrZXQAUmVzdWx0IHRvbyBsYXJnZQBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ASWxsZWdhbCBz ZWVrAE5vIHN1Y2ggcHJvY2VzcwBTdGFsZSBORlMgZmlsZSBoYW5kbGUAT3BlcmF0aW9uIHRpbWVk IG91dABUZXh0IGZpbGUgYnVzeQBDcm9zcy1kZXZpY2UgbGluawBDYXBhYmlsaXRpZXMgaW5zdWZm aWNpZW50AFVua25vd24gc2lnbmFsAEFib3J0IHRyYXAAQWxhcm0gY2xvY2sAQnVzIGVycm9yAENo aWxkIGV4aXRlZABDb250aW51ZWQARmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uAEhhbmd1cABJbGxl Z2FsIGluc3RydWN0aW9uAEludGVycnVwdABLaWxsZWQAUXVpdABTZWdtZW50YXRpb24gZmF1bHQA U3VzcGVuZGVkIChzaWduYWwpAEJhZCBzeXN0ZW0gY2FsbABUZXJtaW5hdGVkAFRyYWNlL0JQVCB0 cmFwAFN1c3BlbmRlZABTdG9wcGVkICh0dHkgaW5wdXQpAFN0b3BwZWQgKHR0eSBvdXRwdXQpAFVy Z2VudCBJL08gY29uZGl0aW9uAFVzZXIgZGVmaW5lZCBzaWduYWwgMQBVc2VyIGRlZmluZWQgc2ln bmFsIDIAVmlydHVhbCB0aW1lciBleHBpcmVkAENwdXRpbWUgbGltaXQgZXhjZWVkZWQARmlsZXNp emUgbGltaXQgZXhjZWVkZWQAVW5rbm93biBlcnJvcgAlcwoAJXM6ICVzCgBwdGhyZWFkX3J3bG9j a190cnl3cmxvY2sAc3JjL2xpYmMvcHRocmVhZC9wdGhyZWFkX3J3bG9ja190cnl3cmxvY2suYwBy d2xvY2stPl9fd3JpdGVfcmVjdXJzaW9uID49IDAgJiYgIkF0dGVtcHRlZCB0byByZWN1cnNpdmVs eSB3cml0ZS1sb2NrIGEgbm9uLXJlY3Vyc2l2ZSByd2xvY2siACFMSVNUX0VNUFRZKCZfX3B0aHJl YWRfd3Jsb2NrcykgJiYgIkJhZCB3cml0ZS1sb2NrIGNvdW50IgBwdGhyZWFkX3J3bG9ja191bmxv Y2sAc3JjL2xpYmMvcHRocmVhZC9wdGhyZWFkX3J3bG9ja191bmxvY2suYwAhTElTVF9FTVBUWSgm X19wdGhyZWFkX3dybG9ja3MpICYmICJCYWQgbG9jayBjb3VudCIAKG9sZCAmIH5DTE9VREFCSV9M T0NLX0tFUk5FTF9NQU5BR0VEKSA9PSAoX19wdGhyZWFkX3RocmVhZF9pZCB8IENMT1VEQUJJX0xP Q0tfV1JMT0NLRUQpICYmICJUaGlzIHJ3bG9jayBpcyB3cml0ZS1sb2NrZWQgYnkgYSBkaWZmZXJl bnQgdGhyZWFkIgBGYWlsZWQgdG8gd3JpdGUgdW5sb2NrIGEgcndsb2NrAF9fcHRocmVhZF9yZGxv Y2tzID4gMCAmJiAiQmFkIGxvY2sgY291bnQiAHJ3bG9jay0+X193cml0ZV9yZWN1cnNpb24gPD0g MCAmJiAiV3JpdGUgcmVjdXJzaW9uIGZpZWxkIGRvZXMgbm90IG1hdGNoIGxvY2sgdmFsdWUiAEZh aWxlZCB0byByZWFkIHVubG9jayBhIHJ3bG9jawAob2xkICYgfkNMT1VEQUJJX0xPQ0tfS0VSTkVM X01BTkFHRUQpICE9IDAgJiYgIlRoaXMgcndsb2NrIGlzIG5vdCBsb2NrZWQiAAAALgAAAAAAAAAo AAAAbgAAAHUAAABsAAAAbAAAACkAAAAAAAAAAACAfwAAAAAAAAAAAAAAAAAAAIABAAAAAAAAAAAA AAAAAACAAAAAAAAAAIAAAAAAAADwPwAAAAAAAACA/nmfUBNE0z+7vdfZ33zbvQAAAAAAADDDAAAA AAAAMEMAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAA AAAAAEDWAQAAAAAACAAAAAAAAAAA0AEAAAAAAEjWAQAAAAAACAAAAAAAAAAA0AEAAAAAABjQAQAA AAAACAAAAAAAAABI0AEAAAAAADDQAQAAAAAACAAAAAAAAACA0AEAAAAAAEjQAQAAAAAACAAAAAAA AADoGgAAAAAAAFjQAQAAAAAACAAAAAAAAAAwdQAAAAAAAGDQAQAAAAAACAAAAAAAAACQdQAAAAAA AHDQAQAAAAAACAAAAAAAAABgdwAAAAAAAHjQAQAAAAAACAAAAAAAAACQdwAAAAAAAIDQAQAAAAAA CAAAAAAAAAAwOQAAAAAAAFDWAQAAAAAACAAAAAAAAAA4wAEAAAAAAAjAAQAAAAAACAAAAAAAAACw 3AAAAAAAABDAAQAAAAAACAAAAAAAAADQ3AAAAAAAACDAAQAAAAAACAAAAAAAAADw3AAAAAAAACjA AQAAAAAACAAAAAAAAAAA3QAAAAAAADDAAQAAAAAACAAAAAAAAAAQ3QAAAAAAAEDAAQAAAAAACAAA AAAAAAAIwAEAAAAAAEjAAQAAAAAACAAAAAAAAABI0AEAAAAAALDQAQAAAAAACAAAAAAAAABI0AEA AAAAAMjQAQAAAAAACAAAAAAAAACA0AEAAAAAAFjWAQAAAAAACAAAAAAAAADg0AEAAAAAAODQAQAA AAAACAAAAAAAAAAtKQAAAAAAAPDQAQAAAAAACAAAAAAAAAAwMAEAAAAAAPjQAQAAAAAACAAAAAAA AADAMQEAAAAAAAjRAQAAAAAACAAAAAAAAADAMwEAAAAAABDRAQAAAAAACAAAAAAAAACQNAEAAAAA AGDWAQAAAAAACAAAAAAAAADA4BEAAAAAADDRAQAAAAAACAAAAAAAAABI0AEAAAAAADjRAQAAAAAA CAAAAAAAAABg0QEAAAAAAGDRAQAAAAAACAAAAAAAAAAIKwAAAAAAAGjRAQAAAAAACAAAAAAAAAAO KwAAAAAAAHDRAQAAAAAACAAAAAAAAAAUKwAAAAAAAHjRAQAAAAAACAAAAAAAAAAcKwAAAAAAAIDR AQAAAAAACAAAAAAAAABBKwAAAAAAAIjRAQAAAAAACAAAAAAAAABcKwAAAAAAAJDRAQAAAAAACAAA AAAAAACHKwAAAAAAAJjRAQAAAAAACAAAAAAAAACfKwAAAAAAAKDRAQAAAAAACAAAAAAAAAC5KwAA AAAAAKjRAQAAAAAACAAAAAAAAADmKwAAAAAAALDRAQAAAAAACAAAAAAAAAANLAAAAAAAALjRAQAA AAAACAAAAAAAAAAnLAAAAAAAAMDRAQAAAAAACAAAAAAAAABGLAAAAAAAAMjRAQAAAAAACAAAAAAA AAAUKwAAAAAAANDRAQAAAAAACAAAAAAAAABfLAAAAAAAANjRAQAAAAAACAAAAAAAAAB5LAAAAAAA AODRAQAAAAAACAAAAAAAAACULAAAAAAAAOjRAQAAAAAACAAAAAAAAADOLAAAAAAAAPDRAQAAAAAA CAAAAAAAAADfLAAAAAAAAPjRAQAAAAAACAAAAAAAAADuLAAAAAAAAADSAQAAAAAACAAAAAAAAAAT LQAAAAAAAAjSAQAAAAAACAAAAAAAAAA7LQAAAAAAABDSAQAAAAAACAAAAAAAAABjLQAAAAAAABjS AQAAAAAACAAAAAAAAAB8LQAAAAAAACDSAQAAAAAACAAAAAAAAAChLQAAAAAAACjSAQAAAAAACAAA AAAAAACvLQAAAAAAADDSAQAAAAAACAAAAAAAAADKLQAAAAAAAEjSAQAAAAAACAAAAAAAAAAUKwAA AAAAAFDSAQAAAAAACAAAAAAAAADaLQAAAAAAAFjSAQAAAAAACAAAAAAAAADxLQAAAAAAAGDSAQAA AAAACAAAAAAAAAADLgAAAAAAAGjSAQAAAAAACAAAAAAAAAAaLgAAAAAAAHDSAQAAAAAACAAAAAAA AAA5LgAAAAAAAHjSAQAAAAAACAAAAAAAAABpLgAAAAAAAIDSAQAAAAAACAAAAAAAAACKLgAAAAAA AIjSAQAAAAAACAAAAAAAAACoLgAAAAAAAJDSAQAAAAAACAAAAAAAAAC8LgAAAAAAAJjSAQAAAAAA CAAAAAAAAADILgAAAAAAAKDSAQAAAAAACAAAAAAAAADULgAAAAAAAKjSAQAAAAAACAAAAAAAAADn LgAAAAAAALDSAQAAAAAACAAAAAAAAAD6LgAAAAAAALjSAQAAAAAACAAAAAAAAAAbLwAAAAAAAMDS AQAAAAAACAAAAAAAAAAuLwAAAAAAAMjSAQAAAAAACAAAAAAAAABHLwAAAAAAANDSAQAAAAAACAAA AAAAAABhLwAAAAAAANjSAQAAAAAACAAAAAAAAAB+LwAAAAAAAODSAQAAAAAACAAAAAAAAACfLwAA AAAAAOjSAQAAAAAACAAAAAAAAACzLwAAAAAAAPDSAQAAAAAACAAAAAAAAAC/LwAAAAAAAPjSAQAA AAAACAAAAAAAAADLLwAAAAAAAADTAQAAAAAACAAAAAAAAADaLwAAAAAAAAjTAQAAAAAACAAAAAAA AADrLwAAAAAAABDTAQAAAAAACAAAAAAAAAD+LwAAAAAAABjTAQAAAAAACAAAAAAAAAAUMAAAAAAA ACDTAQAAAAAACAAAAAAAAAAuMAAAAAAAACjTAQAAAAAACAAAAAAAAABGMAAAAAAAADDTAQAAAAAA CAAAAAAAAABXMAAAAAAAADjTAQAAAAAACAAAAAAAAABqMAAAAAAAAEDTAQAAAAAACAAAAAAAAACG MAAAAAAAAEjTAQAAAAAACAAAAAAAAACVMAAAAAAAAFDTAQAAAAAACAAAAAAAAAC3MAAAAAAAAFjT AQAAAAAACAAAAAAAAADLMAAAAAAAAGDTAQAAAAAACAAAAAAAAADaMAAAAAAAAGjTAQAAAAAACAAA AAAAAADrMAAAAAAAAHDTAQAAAAAACAAAAAAAAAD+MAAAAAAAAHjTAQAAAAAACAAAAAAAAAARMQAA AAAAAIDTAQAAAAAACAAAAAAAAAAhMQAAAAAAAIjTAQAAAAAACAAAAAAAAABFMQAAAAAAAJDTAQAA AAAACAAAAAAAAABcMQAAAAAAAJjTAQAAAAAACAAAAAAAAAB6MQAAAAAAAKDTAQAAAAAACAAAAAAA AACUMQAAAAAAAKjTAQAAAAAACAAAAAAAAAC2MQAAAAAAALDTAQAAAAAACAAAAAAAAADQMQAAAAAA ALjTAQAAAAAACAAAAAAAAADiMQAAAAAAAMDTAQAAAAAACAAAAAAAAAD1MQAAAAAAAMjTAQAAAAAA CAAAAAAAAAALMgAAAAAAANDTAQAAAAAACAAAAAAAAAAiMgAAAAAAANjTAQAAAAAACAAAAAAAAAA9 MgAAAAAAAODTAQAAAAAACAAAAAAAAABUMgAAAAAAAOjTAQAAAAAACAAAAAAAAABsMgAAAAAAAPDT AQAAAAAACAAAAAAAAACFMgAAAAAAAPjTAQAAAAAACAAAAAAAAACdMgAAAAAAAADUAQAAAAAACAAA AAAAAACtMgAAAAAAAAjUAQAAAAAACAAAAAAAAADBMgAAAAAAABDUAQAAAAAACAAAAAAAAADXMgAA AAAAABjUAQAAAAAACAAAAAAAAAD2MgAAAAAAACDUAQAAAAAACAAAAAAAAAAOMwAAAAAAACjUAQAA AAAACAAAAAAAAAAtMwAAAAAAADDUAQAAAAAACAAAAAAAAABDMwAAAAAAADjUAQAAAAAACAAAAAAA AABtMwAAAAAAAEDUAQAAAAAACAAAAAAAAACBMwAAAAAAAEjUAQAAAAAACAAAAAAAAACZMwAAAAAA AFDUAQAAAAAACAAAAAAAAAClMwAAAAAAAFjUAQAAAAAACAAAAAAAAAC0MwAAAAAAAGDUAQAAAAAA CAAAAAAAAADLMwAAAAAAAGjUAQAAAAAACAAAAAAAAADqMwAAAAAAAHDUAQAAAAAACAAAAAAAAAD7 MwAAAAAAAHjUAQAAAAAACAAAAAAAAAARNAAAAAAAAIDUAQAAAAAACAAAAAAAAAAeNAAAAAAAAIjU AQAAAAAACAAAAAAAAAAuNAAAAAAAAJDUAQAAAAAACAAAAAAAAABENAAAAAAAAJjUAQAAAAAACAAA AAAAAABYNAAAAAAAAKDUAQAAAAAACAAAAAAAAABnNAAAAAAAAKjUAQAAAAAACAAAAAAAAAB5NAAA AAAAALDUAQAAAAAACAAAAAAAAACTNAAAAAAAALjUAQAAAAAACAAAAAAAAACiNAAAAAAAAMDUAQAA AAAACAAAAAAAAACtNAAAAAAAAMjUAQAAAAAACAAAAAAAAAC5NAAAAAAAANDUAQAAAAAACAAAAAAA AADDNAAAAAAAANjUAQAAAAAACAAAAAAAAADQNAAAAAAAAODUAQAAAAAACAAAAAAAAADaNAAAAAAA AOjUAQAAAAAACAAAAAAAAADzNAAAAAAAAPDUAQAAAAAACAAAAAAAAAD6NAAAAAAAAPjUAQAAAAAA CAAAAAAAAAAONQAAAAAAAADVAQAAAAAACAAAAAAAAAAYNQAAAAAAAAjVAQAAAAAACAAAAAAAAACZ MwAAAAAAABDVAQAAAAAACAAAAAAAAAAfNQAAAAAAABjVAQAAAAAACAAAAAAAAAAkNQAAAAAAACDV AQAAAAAACAAAAAAAAAA3NQAAAAAAACjVAQAAAAAACAAAAAAAAABKNQAAAAAAADDVAQAAAAAACAAA AAAAAABaNQAAAAAAADjVAQAAAAAACAAAAAAAAABlNQAAAAAAAEDVAQAAAAAACAAAAAAAAAB0NQAA AAAAAEjVAQAAAAAACAAAAAAAAAB+NQAAAAAAAFDVAQAAAAAACAAAAAAAAACSNQAAAAAAAFjVAQAA AAAACAAAAAAAAACnNQAAAAAAAGDVAQAAAAAACAAAAAAAAAC8NQAAAAAAAGjVAQAAAAAACAAAAAAA AADSNQAAAAAAAHDVAQAAAAAACAAAAAAAAADoNQAAAAAAAHjVAQAAAAAACAAAAAAAAAD+NQAAAAAA AIDVAQAAAAAACAAAAAAAAAAVNgAAAAAAAIjVAQAAAAAACAAAAAAAAAAtNgAAAAAAAGjWAQAAAAAA CAAAAAAAAACI4BEAAAAAAHDWAQAAAAAACAAAAAAAAAAA0AEAAAAAAHjWAQAAAAAACAAAAAAAAAAA 0AEAAAAAAIDWAQAAAAAACAAAAAAAAACA4BEAAAAAAAEbAzsUBAAAgQAAAKAWAAAwBAAAICUAAFgE AAAwJQAAcAQAAFAlAACIBAAAcCUAAKgEAACAJQAAwAQAAJAlAADYBAAAsCUAAPAEAADQJQAAEAUA AOAlAAAoBQAAACYAAEAFAAAgJgAAWAUAAEAmAABwBQAAYCYAAIgFAABwJgAAoAUAAJAmAAC4BQAA oCYAANAFAACwJgAA6AUAAMAmAAAABgAA4CYAABgGAADwJgAAMAYAAAAnAABIBgAAECcAAGAGAAAg JwAAeAYAAEAnAACQBgAAYCcAAKgGAACAJwAAwAYAAJAnAADYBgAAoCcAAPAGAACwJwAACAcAAMAn AAAgBwAA0CcAADgHAADgJwAAUAcAAPAnAABoBwAAACgAAIAHAAAQKAAAmAcAADAoAACwBwAAQCgA AMgHAABQKAAA4AcAAGAoAAD4BwAAgCgAABAIAACgKAAAKAgAALAoAABACAAA0CgAAFgIAADwKAAA cAgAAAApAACICAAAECkAAKAIAAAwKQAAwAgAAEApAADYCAAAUCkAAPAIAABgKQAACAkAAHApAAAg CQAAgCkAADgJAACQKQAAUAkAAKApAABoCQAAwCkAAIAJAADgKQAAmAkAAPApAACwCQAAECoAAMgJ AAAQKwAAAAoAANArAAAoCgAAMCwAAEAKAAAALgAAWAoAADAuAABwCgAA8C4AAIgKAACgkAAAwAoA ACCTAADwCgAAUJMAAAgLAABwkwAAIAsAAJCTAAA4CwAAoJMAAFALAACwkwAAaAsAAMCTAACACwAA gJQAAKgLAADglgAA4AsAAOCYAAAYDAAAsKMAAFAMAABwpQAAiAwAAFCmAACgDAAA4KYAALgMAADg pwAA0AwAALCoAADoDAAA8KkAAAANAABArAAAIA0AAKCsAAA4DQAAkK0AAFANAACwrgAAaA0AAACw AACADQAAcLMAALgNAABwtgAA8A0AAFC6AAAoDgAAULwAAEgOAAAgvgAAgA4AADDBAAC4DgAAwMEA ANAOAABAyQAACA8AAEDKAAAoDwAAkM4AAFgPAABA0gAAkA8AAODSAACoDwAA0NMAANAPAABA1AAA 6A8AAJDhAAAgEAAAAOMAAEAQAABQ5AAAYBAAADDlAAB4EAAA0OYAALAQAABg6AAA0BAAAGDqAAAI EQAAMOsAACARAADQ7QAAQBEAAADuAABYEQAAkFYBAJARAAAQWQEAwBEAADBaAQDoEQAAYFoBAAAS AABwWgEAGBIAAEBbAQBIEgAA8FsBAHASAADgXAEAiBIAAOBeAQCgEgAAIF8BALgSAACAXwEA2BIA AEBgAQD4EgAAcGABABATAADQZgEAQBMAAEBnAQBYEwAAwGcBAHATAAAwaAEAiBMAAAAAAAAUAAAA AAAAAAF6UgABeBABGwwHCJABAAAkAAAAHAAAAGgSAAB7DgAAAEEOEIYCQw0GUIMHjAaNBY4EjwMA AAAAFAAAAEQAAADAIAAABQAAAAAAAAAAAAAAFAAAAFwAAAC4IAAAFQAAAAAAAAAAAAAAHAAAAHQA AADAIAAAHwAAAABCDhBBDhiDA44CAAAAAAAUAAAAlAAAAMAgAAAKAAAAAAAAAAAAAAAUAAAArAAA ALggAAAKAAAAAAAAAAAAAAAUAAAAxAAAALAgAAAVAAAAAAAAAAAAAAAcAAAA3AAAALggAAAfAAAA AEIOEEEOGIMDjgIAAAAAABQAAAD8AAAAuCAAAAoAAAAAAAAAAAAAABQAAAAUAQAAsCAAABcAAAAA AAAAAAAAABQAAAAsAQAAuCAAAB4AAAAAQQ4QgwIAABQAAABEAQAAwCAAAB4AAAAAQQ4QgwIAABQA AABcAQAAyCAAABsAAAAAQQ4QgwIAABQAAAB0AQAA0CAAAAwAAAAAAAAAAAAAABQAAACMAQAAyCAA ABsAAAAAQQ4QgwIAABQAAACkAQAA0CAAAAoAAAAAAAAAAAAAABQAAAC8AQAAyCAAAAoAAAAAAAAA AAAAABQAAADUAQAAwCAAAAoAAAAAAAAAAAAAABQAAADsAQAAuCAAABsAAAAAQQ4QgwIAABQAAAAE AgAAwCAAAA0AAAAAAAAAAAAAABQAAAAcAgAAuCAAAAoAAAAAAAAAAAAAABQAAAA0AgAAsCAAAA0A AAAAAAAAAAAAABQAAABMAgAAqCAAAAsAAAAAAAAAAAAAABQAAABkAgAAoCAAABsAAAAAQQ4QgwIA ABQAAAB8AgAAqCAAAB4AAAAAQQ4QgwIAABQAAACUAgAAsCAAAB4AAAAAQQ4QgwIAABQAAACsAgAA uCAAAA0AAAAAAAAAAAAAABQAAADEAgAAsCAAAAoAAAAAAAAAAAAAABQAAADcAgAAqCAAAAoAAAAA AAAAAAAAABQAAAD0AgAAoCAAAAsAAAAAAAAAAAAAABQAAAAMAwAAmCAAAAsAAAAAAAAAAAAAABQA AAAkAwAAkCAAAA0AAAAAAAAAAAAAABQAAAA8AwAAiCAAAA0AAAAAAAAAAAAAABQAAABUAwAAgCAA AAgAAAAAAAAAAAAAABQAAABsAwAAeCAAAAgAAAAAAAAAAAAAABQAAACEAwAAcCAAAB8AAAAAAAAA AAAAABQAAACcAwAAeCAAAAgAAAAAAAAAAAAAABQAAAC0AwAAcCAAAAgAAAAAAAAAAAAAABQAAADM AwAAaCAAAAgAAAAAAAAAAAAAABQAAADkAwAAYCAAABkAAAAAQQ4QgwIAABQAAAD8AwAAaCAAAB4A AAAAAAAAAAAAABQAAAAUBAAAcCAAAA0AAAAAAAAAAAAAABQAAAAsBAAAaCAAABIAAAAAAAAAAAAA ABQAAABEBAAAcCAAABcAAAAAQQ4QgwIAABQAAABcBAAAeCAAAAgAAAAAAAAAAAAAABQAAAB0BAAA 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 FAAAACwPAACIUwEAbgAAAAAAAAAAAAAAFAAAAEQPAADgUwEAewAAAAAAAAAAAAAAFAAAAFwPAABI VAEAbgAAAAAAAAAAAAAAHAAAAHQPAACgVAEAjgAAAABCDhBBDhhBDiCDA44CAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAVUiJ5UFXQVZBVUFUU0iB7OgAAABIg8cIQb4BAAAARTHSSI0FGKL//0iNDTGi//9F Mdu7AQAAAEUx7THSSIlVsDHSSIlVuEG5AQAAAEUx5EUxwEUx/+sJSIPHEA8fRAAAi1f4jbIA//// g/4GdxJIYxSxSAHK/+JMiz9Ig8cQ6+CJ1oP6B3fQSGMUsEgBwv/iTIsvSIPHEOvHZosXSIlVsEiD xxDruosfSIPHEOuyTIsnSIPHEOupTIsHSIPHEOugTIsXSIPHEOuXTIsfSIPHEOuORIs3SIPHEOuF RIsP6XT///9IixdIiVW4SIPHEOlt////RIl1oEyJnXj///9MiVWIRIlNwEyJvXD///9MiYVo//// QbMBSItFsGaFwIldpEyJbYAPhEgBAAAPt/BBidhNjVj/TY1NMEUx7bsBAAAAMcBIiUWoRTH/Mckx /2aQQYtB0D1S5XRkdBWD+Ad0QIP4AnVhSYt54EwB5+tYZpBJi0ngTAHhTY0UCzHSTInQSffwSSnS SQNJ+DHSSInISffwSCnRTCnR6yxmDx9EAABNi3ngTQHnSYtB8EiJRahJi0H4SYsZTI1sGP8x0kyJ 6Ej380kp1UmDwThI/851gUiJXZhIhf9Mi0W4D4SwAAAASIPHCDHAMdJBswHrBw8fAEiDxxBIi3f4 SIP+B3QSSIP+CHQcSIX2defrGg8fRAAASIsHTAHgSIPHEOvYDx9AAEiLF+vLSIP6GHJoSIPAEEGz AWZmZmZmLg8fhAAAAAAAg3j4CHUaSItw8EiLOEwB50mJPDTrDWYuDx+EAAAAAABFMdtIg8LoSIPA GEiD+hd3z+sguAEAAABIiUWYMclFMf8xwEiJRahFMe1Mi0W46wNBswFIjQXmCwAAZkgPbsBmD3DA RPMPfwUUfhEA8w9/BRx+EQDzD38FJH4RAPMPfwUsfhEA8w9/BTR+EQDzD38FPH4RAPMPfwVEfhEA 8w9/BUx+EQDzD38FVH4RAPMPfwVcfhEA8w9/BWR+EQDzD38FbH4RAPMPfwV0fhEA8w9/BXx+EQDz D38FhH4RAPMPfwWMfhEA8w9/BZR+EQDzD38FnH4RAPMPfwWkfhEA8w9/Bax+EQDzD38FtH4RAPMP fwW8fhEA8w9/BcR+EQDzD38FzH4RAPMPfwXUfhEA8w9/Bdx+EQDzD38F5H4RAEiJBe1+EQBNhcB0 QEEPt0A4SIXAD4SmBQAASYtQIEj32EmNVBAQZmZmZmYuDx+EAAAAAACDevACD4QvAwAASIPCOEj/ wHXt6XQFAABIjQXBCgAASIkF6nwRAEiNBdMKAABIiQXkfBEASI0F5QoAAEiJBd58EQBIjQXnCgAA SIkF2HwRAEiNBekKAABIiQXSfBEASI0F+woAAEiJBcx8EQBIjQUNCwAASIkFxnwRAEiNBQ8LAABI iQXAfBEASI0FIQsAAEiJBbp8EQBIjQUzCwAASIkFtHwRAEiNBUULAABIiQWufBEASI0FVwsAAEiJ Bah8EQBIjQVZCwAASIkFonwRAEiNBWsLAABIiQWcfBEASI0FbQsAAEiJBZZ8EQBIjQVvCwAASIkF kHwRAEiNBXELAABIiQWKfBEASI0FgwsAAEiJBYR8EQBIjQWFCwAASIkFfnwRAEiNBYcLAABIiQV4 fBEASI0FiQsAAEiJBXJ8EQBIjQWLCwAASIkFbHwRAEiNBZ0LAABIiQVmfBEASI0FrwsAAEiJBWB8 EQBIjQXBCwAASIkFWnwRAEiNBcMLAABIiQVUfBEASI0FxQsAAEiJBU58EQBIjQXHCwAASIkFSHwR AEiNBckLAABIiQVCfBEASI0FywsAAEiJBTx8EQBIjQXNCwAASIkFNnwRAEiNBc8LAABIiQUwfBEA SI0F0QsAAEiJBSp8EQBIjQXTCwAASIkFJHwRAEiNBfULAABmSA9uwEiNBdkLAABmSA9uyGYPbMjz D38NCHwRAEiNBeELAABIiQUKfBEASI0F4wsAAEiJBQR8EQBIjQX1CwAASIkF/nsRAEiNBQcMAABI iQX4exEASI0FCQwAAEiJBfJ7EQBIjQUbDAAASIkF7HsRAEiNBS0MAABIiQXmexEASI0FLwwAAEiJ BeB7EQBIjQUxDAAASIkF2nsRAEiNBVMMAABmSA9uwEiNBTcMAABmSA9uyGYPbMjzD38NvnsRAEiN BT8MAABIiQXAexEASI0FQQwAAEiJBbp7EQBIjQVDDAAASIkFtHsRAEiNBUUMAABIiQWuexEASI0F RwwAAEiJBah7EQBIjQVJDAAASIkFonsRAEiNBVsMAABIiQWcexEASI0FbQwAAEiJBZZ7EQBB9sMB D4ReAgAA6XkCAABIiwJJjXQACDH/SI0dgpv//zHSRTH26xNmZmZmZmYuDx+EAAAAAABIg8YQSItG +EiD+AZ38khjBINIAdj/4EiLBkWLdAAESIPGEOvfZmYuDx+EAAAAAABIiz5MAcdIg8YQ68gPH0AA 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 i1QkaEGJwOh0cv//QYuGtPf////IQYmGtPf//7kCAAAAhcAPidrc///p3Nz//0mNhsD3//9IiYQk 4AAAAEWE20yJnCTYAAAA23wkQHQCMe1Mi3wkWID5YEiNBUOv/v9IicFIjQUor/7/SA9PyEiJjCTQ AAAARYXSuAEAAABED0TQuAYAAABED0jQSWPaQf/KTImUJLgAAABIg/sWuBUAAABID0zDSY2O2Pf/ /0iJjCQQAQAASYmG2Pf//+gQy///SY2OtPf//9tsJEDbPCS//////0iLtCTgAAAASIuUJBABAABB icDolXH//0GLlrT3//+NQv9BiYa09///uQIAAAA50w+M9tv//4P4/A+M7dv//0yLlCS4AAAAQSnC gHwkeAAPlMCJhCTQAAAATIucJNgAAABIi0wkaNtsJEBFhdK4BgAAAEQPSNBJx4bY9///FQAAANnA 27wkcAEAAEgPv4QkeAEAAEiFwLAteAKJyITATIt8JChNidRMiZwk2AAAANt8JEAPhF/U//9BiIbV 9///uAEAAADpUNT//0WE23QCMe1Mi3wkWID5YEiNBfCt/v9JicFIjQXVrf7/TA9PyNnu2cnb6d3Z D4W32v//D4qx2v//3dhJx4bY9///AAAAAEHHhrT3//8AAAAAxkQkMCu5AQAAADHA6TPb//9FMeRI i3wkUEyLfCQoTIt0JBhMOWQkWA+G8/H//0iLR3BIhcB1MkiLRwhIifv/UAiEwA+EnzAAAEiDe3AA SInfD4RtMQAASIN/KAB4C0iDf1AAD4V6MQAASItHaMYAIEiLR3BIhcAPhOowAABI/0doSP/ISIlH cEn/x0iLTCRYSInKSP/KSInRSIlMJFhMOeJ3j+l58f//TYn86cMvAACATRgCSIt8JCDoNjgAALj/ ////6ekvAACATRgCSIt8JCDoHjgAAOnOLwAAgEsYAkiLfCQg6As4AAC4/////0yLdCQY6bkvAABI i0cISIn9/1AIhMAPhIAAAABIg31wAEiJ7w+EbjAAAEiDfygATIuEJLAAAABMi5wkgAAAAA+IHysA AEiDf1AAD4QUKwAA6WIwAABIi0cISIn9/1AIhMB0OUiDfXAASInvD4QnMAAASIN/KABMi4QksAAA AEyLnCSAAAAAD4iZKgAASIN/UAAPhI4qAADpGzAAAIBNGAJIi3wkIOhcNwAAuQEAAABIie/pey4A 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAN7Ard4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAP//////////AAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAA AAAAAAAAAAAAAAAHAAAAAAAAAOg5AAAAAAAACAAAAAAAAAB4DwAAAAAAAAkAAAAAAAAAGAAAAAAA AAD5//9vAAAAAKUAAAAAAAAABgAAAAAAAAC4OQAAAAAAAAsAAAAAAAAAGAAAAAAAAAAFAAAAAAAA AOA5AAAAAAAACgAAAAAAAAABAAAAAAAAAAQAAAAAAAAA0DkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAGNsYW5nIHZlcnNpb24gNC4wLjAgKHRhZ3MvUkVMRUFTRV80MDAvcmM0 KQBjbGFuZyB2ZXJzaW9uIDQuMC4wICh0YWdzL1JFTEVBU0VfNDAwL2ZpbmFsKQBMaW5rZXI6IExM RCA0LjAuMAAALnNoc3RydGFiAC5yb2RhdGEALmR5bnN5bQAuaGFzaAAuZHluc3RyAC5yZWxhLmR5 bgAuZWhfZnJhbWVfaGRyAC5laF9mcmFtZQAudGV4dAAuZGF0YQAudGJzcwAuY3RvcnMALmR0b3Jz AC5kYXRhLnJlbC5ybwAuZHluYW1pYwAuZ290AC5ic3MALmNvbW1lbnQAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAQAA AAIAAAAAAAAAQAIAAAAAAABAAgAAAAAAAJgYAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA CwAAAAEAAAAyAAAAAAAAANgaAAAAAAAA2BoAAAAAAABWHgAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB AAAAAAAAAAsAAAABAAAAMgAAAAAAAAAwOQAAAAAAADA5AAAAAAAAJAAAAAAAAAAAAAAAAAAAAAQA AAAAAAAABAAAAAAAAAALAAAAAQAAABIAAAAAAAAAVDkAAAAAAABUOQAAAAAAAAQAAAAAAAAAAAAA AAAAAAAEAAAAAAAAAAQAAAAAAAAACwAAAAEAAAASAAAAAAAAAGA5AAAAAAAAYDkAAAAAAAAwAAAA AAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAsAAAABAAAAEgAAAAAAAACQOQAAAAAAAJA5AAAA AAAAKAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAATAAAACwAAAAIAAAAAAAAAuDkAAAAA AAC4OQAAAAAAABgAAAAAAAAACQAAAAEAAAAIAAAAAAAAABgAAAAAAAAAGwAAAAUAAAACAAAAAAAA ANA5AAAAAAAA0DkAAAAAAAAQAAAAAAAAAAcAAAAAAAAABAAAAAAAAAAEAAAAAAAAACEAAAADAAAA AgAAAAAAAADgOQAAAAAAAOA5AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAp AAAABAAAAAIAAAAAAAAA6DkAAAAAAADoOQAAAAAAAHgPAAAAAAAABwAAAAAAAAAIAAAAAAAAABgA AAAAAAAAMwAAAAEAAAACAAAAAAAAAGBJAAAAAAAAYEkAAAAAAAAUBAAAAAAAAAAAAAAAAAAAAQAA AAAAAAAAAAAAAAAAAEEAAAABAAAAAgAAAAAAAAB4TQAAAAAAAHhNAAAAAAAAkA8AAAAAAAAAAAAA AAAAAAgAAAAAAAAAAAAAAAAAAABLAAAAAQAAAAYAAAAAAAAAAGAAAAAAAAAAYAAAAAAAAB5SAQAA AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAUQAAAAEAAAADAAAAAAAAAADAAQAAAAAAAMABAAAA AAAAAQAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAFcAAAAIAAAAAwQAAAAAAAAAwQEAAAAA AADBAQAAAAAAJAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAABdAAAAAQAAAAMAAAAAAAAA ANABAAAAAAAA0AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAZAAAAAEAAAAD AAAAAAAAAADQAQAAAAAAANABAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGsA AAABAAAAAwAAAAAAAAAA0AEAAAAAAADQAQAAAAAAkAUAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAA AAAAAAB4AAAABgAAAAMAAAAAAAAAkNUBAAAAAACQ1QEAAAAAALAAAAAAAAAACQAAAAAAAAAIAAAA AAAAABAAAAAAAAAAgQAAAAEAAAADAAAAAAAAAEDWAQAAAAAAQNYBAAAAAABIAAAAAAAAAAAAAAAA AAAACAAAAAAAAAAAAAAAAAAAAIYAAAAIAAAAAwAAAAAAAAAA4AEAAAAAAIjWAQAAAAAAggIQAAAA AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACLAAAAAQAAADAAAAAAAAAAAAAAAAAAAACI1gEAAAAA AGsAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA 89YBAAAAAACUAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA== --001a113f2102484793054b62a333 Content-Type: application/octet-stream; name=hello-i386 Content-Disposition: attachment; filename=hello-i386 Content-Transfer-Encoding: base64 X-Attachment-Id: f_j0m75m3v1 f0VMRgEBAREAAAAAAAAAAAIAAwABAAAAAEABADQAAAAwpQEAAAAAADQAIAAHACgAEQAPAAYAAAA0 AAAANAABADQAAQDgAAAA4AAAAAQAAAAEAAAAAQAAAAAAAAAAAAEAAAABAAg7AAAIOwAABAAAAAAQ AAABAAAAAEAAAABAAQAAQAEAxzMBAMczAQAFAAAAABAAAAEAAAAAgAEAAIACAACAAgAAEAAAhhEQ AAYAAAAAEAAABwAAALCAAQCwgAIAsIACAAAAAAAYAAAABAAAAAQAAABS5XRkAJABAACQAgAAkAIA AAAAAAAAAAAEAAAAAQAAAFHldGQAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAUEBAGFAAQBh QAEAnEABAKZAAQBhQAEAsUABALtAAQCFQAEAxUABAMxAAQDWQAEA4EABAOpAAQD0QAEAt0IBAIBC AQCAQgEAgEIBAJJCAQCgQgEAsEIBAGNsb2NrX3Jlc19nZXQAY2xvY2tfdGltZV9nZXQAY29uZHZh cl9zaWduYWwAZmRfY2xvc2UAZmRfY3JlYXRlMQBmZF9jcmVhdGUyAGZkX2RhdGFzeW5jAGZkX2R1 cABmZF9wcmVhZABmZF9wd3JpdGUAZmRfcmVhZABmZF9yZXBsYWNlAGZkX3NlZWsAZmRfc3RhdF9n ZXQAZmRfc3RhdF9wdXQAZmRfc3luYwBmZF93cml0ZQBmaWxlX2FkdmlzZQBmaWxlX2FsbG9jYXRl AGZpbGVfY3JlYXRlAGZpbGVfbGluawBmaWxlX29wZW4AZmlsZV9yZWFkZGlyAGZpbGVfcmVhZGxp bmsAZmlsZV9yZW5hbWUAZmlsZV9zdGF0X2ZnZXQAZmlsZV9zdGF0X2ZwdXQAZmlsZV9zdGF0X2dl dABmaWxlX3N0YXRfcHV0AGZpbGVfc3ltbGluawBmaWxlX3VubGluawBsb2NrX3VubG9jawBtZW1f YWR2aXNlAG1lbV9tYXAAbWVtX3Byb3RlY3QAbWVtX3N5bmMAbWVtX3VubWFwAHBvbGwAcG9sbF9m ZABwcm9jX2V4ZWMAcHJvY19leGl0AHByb2NfZm9yawBwcm9jX3JhaXNlAHJhbmRvbV9nZXQAc29j a19hY2NlcHQAc29ja19iaW5kAHNvY2tfY29ubmVjdABzb2NrX2xpc3RlbgBzb2NrX3JlY3YAc29j a19zZW5kAHNvY2tfc2h1dGRvd24Ac29ja19zdGF0X2dldAB0aHJlYWRfY3JlYXRlAHRocmVhZF9l eGl0AHRocmVhZF95aWVsZAAAAAAAAAABAAAAAAAAAAAEAQAAAAAAAAAAABwEAQAAAAAAAAAAAEwc AQAAAAAAwEgBACBJAQABAAAAMEoBAGBKAQCUOgEAAAAAAAAAAAAAAAAAAAAAgAEAAACrTgEA2E4B ANhOAQDYTgEA2E4BANhOAQDYTgEA2E4BANhOAQDYTgEA2E4BANhOAQDYTgEA2E4BANhOAQDYTgEA 2E4BANhOAQDYTgEA2E4BANhOAQDYTgEA2E4BANhOAQDYTgEA2E4BANhOAQDYTgEAkk4BANhOAQDQ TgEA2E4BALVOAQDYTgEA2E4BANhOAQDYTgEA2E4BANhOAQDYTgEAiE4BANhOAQDYTgEA2E4BANhO AQDYTgEAiE4BAO9OAQBgTwEARE8BAGBPAQDvTgEA704BAO9OAQBgTwEAYE8BAGBPAQBgTwEAYE8B AGBPAQBgTwEAYE8BAGBPAQBgTwEAYE8BAAtPAQBgTwEAYE8BAGBPAQBgTwEA/U4BAGBPAQBgTwEA YE8BAGBPAQBgTwEAYE8BAGBPAQBgTwEA704BAGBPAQAnTwEAGU8BAO9OAQDvTgEA704BAGBPAQAZ TwEAYE8BAGBPAQBgTwEAYE8BAGBPAQD9TgEAC08BAGBPAQBgTwEAC08BAGBPAQD9TgEAYE8BAGBP AQD9TgEAk08BAMxPAQCwTwEAwE8BAPhPAQAKUAEA3E8BANxPAQDpTwEA/U8BAPNPAQCjTwEAo08B AOlPAQDuUQEAIlIBACJSAQAQUgEAIlIBACJSAQAiUgEAA1IBACJSAQAiUgEAIlIBABhSAQAiUgEA 0FEBACJSAQAiUgEA+1EBAH5TAQCrUwEAq1MBAKtTAQCrUwEAq1MBAKtTAQCrUwEAq1MBAKtTAQCr UwEAq1MBAKtTAQCrUwEAq1MBAKtTAQCrUwEAq1MBAKtTAQCrUwEAq1MBAKtTAQCrUwEAq1MBAKtT AQCrUwEAq1MBAKtTAQCFUwEAq1MBAKVTAQCrUwEAllMBAKtTAQCrUwEAq1MBAKtTAQCrUwEAq1MB AKtTAQB3UwEAq1MBAKtTAQCrUwEAq1MBAKtTAQB3UwEA6VgBAEZ2AQBGdgEARnYBAEZ2AQBGdgEA RnYBAEZ2AQBGdgEARnYBAEZ2AQBGdgEARnYBAEZ2AQBGdgEARnYBAEZ2AQBGdgEARnYBAEZ2AQBG dgEARnYBAEZ2AQBGdgEARnYBAEZ2AQBGdgEARnYBAP1TAQBGdgEAUFkBAEZ2AQD9UwEA/VMBAP1T AQBGdgEARnYBAEZ2AQBGdgEARnYBAEZ2AQBGdgEARnYBAEZ2AQBGdgEARnYBAHBZAQBGdgEARnYB AEZ2AQBGdgEAgVkBAEZ2AQBGdgEARnYBAEZ2AQBGdgEARnYBAEZ2AQBGdgEAm1QBAEZ2AQCzWQEA KVUBAJtUAQCbVAEAm1QBAEZ2AQApVQEARnYBAEZ2AQBGdgEA5VkBAEZ2AQAaWgEATFoBAEZ2AQBG dgEAhVoBAEZ2AQBsXQEARnYBAEZ2AQCcXQEAW1cBADFvAQAxbwEAMW8BADVvAQB+VgEAUm8BAFZg AQCFdwEAhXcBAIV3AQBdWAEAhXcBAIV3AQCsVgEAhXcBAIV3AQChVwEAhXcBAIV3AQCoWAEA/VMB AP5VAQCHaQEAh2kBAIdpAQCOaQEAs1UBALRpAQBWYAEAhXcBAIV3AQCFdwEAXVgBAIV3AQCFdwEA rFYBAIV3AQCFdwEAoVcBAIV3AQCFdwEAqFgBAN9VAQCelwEAxZcBAMWXAQB0lwEAxZcBAMWXAQDF lwEAqpcBAMWXAQDFlwEAxZcBALeXAQDFlwEAwJcBAMWXAQDFlwEAgJcBAJKYAQC9mAEAvZgBAL2Y AQC9mAEAvZgBAL2YAQC9mAEAvZgBAL2YAQC9mAEAvZgBAL2YAQC9mAEAvZgBAL2YAQC9mAEAvZgB AL2YAQC9mAEAvZgBAL2YAQC9mAEAvZgBAL2YAQC9mAEAvZgBAL2YAQCZmAEAvZgBALmYAQC9mAEA qpgBAL2YAQC9mAEAvZgBAL2YAQC9mAEAvZgBAL2YAQCLmAEAvZgBAL2YAQC9mAEAvZgBAL2YAQCL mAEAqZ0BAF2VAQBdlQEAXZUBAF2VAQBdlQEAXZUBAF2VAQBdlQEAXZUBAF2VAQBdlQEAXZUBAF2V AQBdlQEAXZUBAF2VAQBdlQEAXZUBAF2VAQBdlQEAXZUBAF2VAQBdlQEAXZUBAF2VAQBdlQEAXZUB AAiZAQBdlQEASngBAF2VAQAImQEACJkBAAiZAQBdlQEAXZUBAF2VAQBdlQEAXZUBAF2VAQBdlQEA XZUBAF2VAQBdlQEAXZUBAGl4AQBdlQEAXZUBAF2VAQBdlQEAeXgBAF2VAQBdlQEAXZUBAF2VAQBd lQEAXZUBAF2VAQBdlQEAIpkBAF2VAQB1eQEAmZkBACKZAQAimQEAIpkBAF2VAQCZmQEAXZUBAF2V AQBdlQEAkngBAF2VAQDHeAEA4HgBAF2VAQBdlQEAHnkBAF2VAQA2eQEAXZUBAF2VAQBPeQEAFZwB AB+OAQAfjgEAH44BADaOAQAtmwEAZo4BAJ9+AQCdlgEAnZYBAJ2WAQCdlgEAnZYBAJ2WAQCdlgEA FZ0BAJ2WAQCdlgEAnZYBAJ2WAQCdlgEAWJsBAJ2WAQCdlgEAnZYBAJ2WAQCdlgEAXJwBAJ2WAQCd lgEAnZYBAJ2WAQCdlgEAZJ0BAOeaAQB+iAEAfogBAH6IAQCFiAEApJoBAK2IAQCffgEAnZYBAJ2W AQCdlgEAnZYBAJ2WAQCdlgEAnZYBABWdAQCdlgEAnZYBAJ2WAQCdlgEAnZYBAFibAQCdlgEAnZYB AJ2WAQCdlgEAnZYBAFycAQCdlgEAnZYBAJ2WAQCdlgEAnZYBAGSdAQCjjgEAqI4BAIt4AQCLeAEA so4BAJSPAQCZjwEAYXkBAGF5AQCjjwEATY8BAFKPAQBIeQEASHkBAG2PAQD0jgEA+Y4BANl4AQDZ eAEAA48BAPOHAQD4hwEAq5kBAKuZAQBpiAEAAAAAAAEAAAAAAAAAAAQBAAAAAAAAAAAAHAQBAAAA AAAAAAAAY6YBANGmAQCcpgEAB6cBAIgCHAig1Y/6PPuk/na/PqJ/4a66V/us/nasVTAg+xaLcvu0 /uo1zl1KiULPjPu8/i07ZVWqsGuap/vE/t9FGj0DzxrmwfvM/srGmscX/nCr3PvU/k/cvL78sXf/ 9vvc/gzWa0HvkVa+Efzk/jz8f5CtH9CNLPzs/oOaVTEoXFHTRvz0/rXJpq2PrHGdYfz8/suL7iN3 Ipzqe/wE/21TeECRScyulvwM/1fOtl15EjyCsfwU/zdW+002lBDCy/wc/0+YSDhv6paQ5vwk/8c6 giXLhXTXAP0s//SXv5fNz4agG/00/+WsKheYCjTvNf08/46yNSr7ZziyUP1E/zs/xtLf1MiEa/1M /7rN0xonRN3Fhf1U/5bJJbvOn2uToP1c/4SlYn0kbKzbuv1k//baXw1YZquj1f1s/ybxw96T+OLz 7/10/7iA/6qorbW1Cv58/4tKfGwFX2KHJf6E/1MwwTRg/7zJP/6M/1UmupGMhU6WWv6U/71+KXAk d/nfdP6c/4+45bifvd+mj/6k/5R9dIjPX6n4qf6s/8+bqI+TcES5xP60/2sVD7/48AiK3/68/7Yx MWVVJbDN+f7E/6x/e9DG4j+ZFP/M/wY7KyrEEFzkLv/U/9OSc2mZJCSqSf/c/w7KAIPytYf9Y//k /+saEZJkCOW8fv/s/8yIUG8JzLyMmf/0/yxlGeJYF7fRs//8/wAAAAAAAECczv8EAAAAAAAQpdTo 6P8MAAAAYqzF63itAwAUAIQJlPh4OT+BHgAcALMVB8l7zpfAOAAkAHBc6nvOMn6PUwAsAGiA6auk ONLVbQA0AEUimhcmJ0+fiAA8ACf7xNQxomPtogBEAKityIw4Zd6wvQBMANtlqxqOCMeD2ABUAJod cUL5HV3E8gBcAFjnG6YsaU2SDQFkAOqNcBpk7gHaJwFsAEp375qZo22iQgF0AIVrfbR7eAnyXAF8 AHcY3Xmh5FS0dwGEAMLFm1uShluGkgGMAD1dlsjFUzXIrAGUALOgl/pctCqVxwGcAONfoJm9n0be 4QGkACWMOds0wpul/AGsAFyfmKNymsb2FgK0AM6+6VRTv9y3MQK8AOJBIvIX8/yITALEAKV4XNOb ziDMZgLMAN9TIXvzWhaYgQLUADowH5fctaDimwLcAJaz41xT0dmotgLkADxEp6TZfJv70ALsABBE pKdMTHa76wL0ABqcQLbvjquLBgP8ACyEV6YQ7x/QIAMEASkxkenlpBCbOwMMAZ0MnKH7mxDnVQMU ASn0O2LZICiscAMcAYXPp3peS0SAiwMkAS3drANA5CG/pQMsAY//RF4vnGeOwAM0AUG4jJydFzPU 2gM8Aakb47SS2xme9QNEAdl337puv5brDwRMAWvu8Js7AoevKgRUAQAAAAABAAAACgAAAGQAAADo AwAAECcAAKCGAQBAQg8AgJaYAADh9QUAypo7kSoBAAAAAADAAgIAYAQCAAQAAABwBQIAQAYCAAAA AAAAAACAAQAAALsMAgDoDAIA6AwCAOgMAgDoDAIA6AwCAOgMAgDoDAIA6AwCAOgMAgDoDAIA6AwC AOgMAgDoDAIA6AwCAOgMAgDoDAIA6AwCAOgMAgDoDAIA6AwCAOgMAgDoDAIA6AwCAOgMAgDoDAIA 6AwCAOgMAgCiDAIA6AwCAOAMAgDoDAIAxQwCAOgMAgDoDAIA6AwCAOgMAgDoDAIA6AwCAOgMAgCY DAIA6AwCAOgMAgDoDAIA6AwCAOgMAgCYDAIAAg0CAHANAgBSDQIAcA0CAAINAgACDQIAAg0CAHAN AgBwDQIAcA0CAHANAgBwDQIAcA0CAHANAgBwDQIAcA0CAHANAgBwDQIAHA0CAHANAgBwDQIAcA0C AHANAgAPDQIAcA0CAHANAgBwDQIAcA0CAHANAgBwDQIAcA0CAHANAgACDQIAcA0CADYNAgApDQIA Ag0CAAINAgACDQIAcA0CACkNAgBwDQIAcA0CAHANAgBwDQIAcA0CAA8NAgAcDQIAcA0CAHANAgAc DQIAcA0CAA8NAgBwDQIAcA0CAA8NAgClDQIA3g0CAMANAgDQDQIACA4CABoOAgDsDQIA7A0CAPkN AgANDgIAAw4CALMNAgCzDQIA+Q0CAAIRAgBAEQIAQBECACQRAgBAEQIAQBECAEARAgAXEQIAQBEC AEARAgBAEQIAKxECAEARAgDgEAIAQBECAEARAgAPEQIAuxICAPYSAgD2EgIA9hICAPYSAgD2EgIA 9hICAPYSAgD2EgIA9hICAPYSAgD2EgIA9hICAPYSAgD2EgIA9hICAPYSAgD2EgIA9hICAPYSAgD2 EgIA9hICAPYSAgD2EgIA9hICAPYSAgD2EgIA9hICAMISAgD2EgIA8BICAPYSAgDXEgIA9hICAPYS AgD2EgIA9hICAPYSAgD2EgIA9hICAH8SAgD2EgIA9hICAPYSAgD2EgIA9hICAH8SAgBOGAIAxR4C AMUeAgDFHgIAxR4CAMUeAgDFHgIAxR4CAMUeAgDFHgIAxR4CAMUeAgDFHgIAxR4CAMUeAgDFHgIA xR4CAMUeAgDFHgIAxR4CAMUeAgDFHgIAxR4CAMUeAgDFHgIAxR4CAMUeAgDFHgIATRMCAMUeAgCD GAIAxR4CAE0TAgBNEwIATRMCAMUeAgDFHgIAxR4CAMUeAgDFHgIAxR4CAMUeAgDFHgIAxR4CAMUe AgDFHgIApBgCAMUeAgDFHgIAxR4CAMUeAgC1GAIAxR4CAMUeAgDFHgIAxR4CAMUeAgDFHgIAxR4C AMUeAgDrEwIAxR4CAPEYAgB5FAIA6xMCAOsTAgDrEwIAxR4CAHkUAgDFHgIAxR4CAMUeAgAkGQIA xR4CAGAZAgCcGQIAxR4CAMUeAgDUGQIAxR4CAPQcAgDFHgIAxR4CACQdAgC3FgIA8y4CAPMuAgDz LgIA/S4CANwVAgAZLwIAfR8CAAEXAgABFwIAARcCAL0XAgABFwIAARcCAAcWAgABFwIAARcCAAsX AgABFwIAARcCAAwYAgBNEwIAWxUCAMEpAgDBKQIAwSkCAM4pAgADFQIA/SkCAH0fAgABFwIAARcC AAEXAgC9FwIAARcCAAEXAgAHFgIAARcCAAEXAgALFwIAARcCAAEXAgAMGAIALhUCAMZTAgAcVAIA HFQCAN5TAgAcVAIAHFQCABxUAgCjUwIAHFQCABxUAgAcVAIA0VMCABxUAgDVUwIAHFQCABxUAgAA VAIA7FQCABdVAgAXVQIAF1UCABdVAgAXVQIAF1UCABdVAgAXVQIAF1UCABdVAgAXVQIAF1UCABdV AgAXVQIAF1UCABdVAgAXVQIAF1UCABdVAgAXVQIAF1UCABdVAgAXVQIAF1UCABdVAgAXVQIAF1UC APNUAgAXVQIAE1UCABdVAgAEVQIAF1UCABdVAgAXVQIAF1UCABdVAgAXVQIAF1UCAOVUAgAXVQIA F1UCABdVAgAXVQIAF1UCAOVUAgBbQgIAAFMCAABTAgAAUwIAAFMCAABTAgAAUwIAAFMCAABTAgAA UwIAAFMCAABTAgAAUwIAAFMCAABTAgAAUwIAAFMCAABTAgAAUwIAAFMCAABTAgAAUwIAAFMCAABT AgAAUwIAAFMCAABTAgAAUwIARFYCAABTAgAHWAIAAFMCAERWAgBEVgIARFYCAABTAgAAUwIAAFMC AABTAgAAUwIAAFMCAABTAgAAUwIAAFMCAABTAgAAUwIAJlgCAABTAgAAUwIAAFMCAABTAgCzQgIA AFMCAABTAgAAUwIAAFMCAABTAgAAUwIAAFMCAABTAgBbVQIAAFMCAChXAgBAOgIAW1UCAFtVAgBb VQIAAFMCAEA6AgAAUwIAAFMCAABTAgDmQgIAAFMCAFpDAgCNQwIAAFMCAABTAgA1WAIAAFMCACND AgAAUwIAAFMCAO9DAgDDVwIAslkCALJZAgCyWQIAi1kCABNWAgDDWQIAWkQCAAFZAgABWQIAAVkC AAFZAgABWQIAAVkCAAFZAgCAXAIAAVkCAAFZAgABWQIAAVkCAAFZAgCkXAIAAVkCAAFZAgABWQIA AVkCAAFZAgC+XQIAAVkCAAFZAgABWQIAAVkCAAFZAgBfXQIAe1cCACxZAgAsWQIALFkCADNZAgD0 VgIAWFkCAFpEAgABWQIAAVkCAAFZAgABWQIAAVkCAAFZAgABWQIAgFwCAAFZAgABWQIAAVkCAAFZ AgABWQIApFwCAAFZAgABWQIAAVkCAAFZAgABWQIAvl0CAAFZAgABWQIAAVkCAAFZAgABWQIAX10C AO1LAgDySwIA30ICAN9CAgAATAIA60wCAPBMAgAbRAIAG0QCANVSAgBHTAIATEwCAFNDAgBTQwIA bEwCAJBMAgCVTAIAhkMCAIZDAgDZTAIAYkgCAGdIAgBsOgIAbDoCAHpIAgAAAAAAAQAAAAAAAAAA BAEAJBoBAAAAAAAAAAAAAAAAAAAAAABsLAEAciwBAHgsAQCALAEApSwBAMAsAQDrLAEAAy0BAB0t AQBKLQEAcS0BAIstAQCqLQEAeCwBAMMtAQDdLQEA+C0BADIuAQBDLgEAUi4BAHcuAQCfLgEAxy4B AOAuAQAFLwEAEy8BAC4vAQAAAAAAAAAAAHgsAQA+LwEAVS8BAGcvAQB+LwEAnS8BAM0vAQDuLwEA DDABACAwAQAsMAEAODABAEswAQBeMAEAfzABAJIwAQCrMAEAxTABAOIwAQADMQEAFzEBACMxAQAv MQEAPjEBAE8xAQBiMQEAeDEBAJIxAQCqMQEAuzEBAM4xAQDqMQEA+TEBABsyAQAvMgEAPjIBAE8y AQBiMgEAdTIBAIUyAQCpMgEAwDIBAN4yAQD4MgEAGjMBADQzAQBGMwEAWTMBAG8zAQCGMwEAoTMB ALgzAQDQMwEA6TMBAAE0AQARNAEAJTQBADs0AQBaNAEAcjQBAJE0AQCnNAEA0TQBAOU0AQD9NAEA CTUBABg1AQAvNQEATjUBAF81AQB1NQEAgjUBAJI1AQCoNQEAvDUBAMs1AQDdNQEA9zUBAAY2AQAR NgEAHTYBACc2AQA0NgEAPjYBAFc2AQBeNgEAcjYBAHw2AQD9NAEAgzYBAIg2AQCbNgEArjYBAL42 AQDJNgEA2DYBAOI2AQD2NgEACzcBACA3AQA2NwEATDcBAGI3AQB5NwEAkTcBAEhlbGxvLCBLb3N0 aWshCgBVUy1BU0NJSQAwMTIzNDU2Nzg5YWJjZGVmADAxMjM0NTY3ODlBQkNERUYALWluZgBpbmYA LW5hbgBuYW4ALUlORgBJTkYALU5BTgBOQU4AdmRwcmludGZfbABzcmMvY29tbW9uL3ZwcmludGZf Ym9keS5oAGlkeCA+PSAoc3NpemVfdClmbG9hdF9uZGlnaXRzICYmICJOb3QgYWxsIGRpZ2l0cyBo YXZlIGJlZW4gcHJpbnRlZCIAKG51bGwpAGRpb3V4WGZGZUVnR2FBY3NwQ1MlbQAnLSsgIzAAbnVt ZXJpY19ncm91cGluZ19pbml0AHNyYy9jb21tb24vbG9jYWxlLmgAbmRpZ2l0cyA+PSAxICYmICJB dHRlbXB0ZWQgdG8gZm9ybWF0IHNob3J0IG51bWJlciIAbnVtZXJpY19ncm91cGluZ19zdGVwACpu Zy0+Z3JvdXBpbmcgPiAwICYmICJBdHRlbXB0ZWQgdG8gcmVsb2FkIHplcm8gc3RlcHMiAGYxNmRl YwBzcmMvY29tbW9uL2Zsb2F0MTYuaAAhZjE2X2lzX3plcm8ocGFydHMpICYmICJGbG9hdGluZyBw b2ludCBoYXMgdmFsdWUgemVybyIAJXM6JWQ6IGFzc2VydGlvbiBmYWlsZWQgaW4gJXMoKTogJXMK AF9fZjEwZGVjAHNyYy9saWJjL2Zsb2F0MTAvZjEwZGVjLmNjAHdyaXR0ZW4gPiAwICYmICJJbnB1 dCB2YWx1ZSBjYW4gbm8gbG9uZ2VyIGJlIHplcm8iACpuZGlnaXRzID4gMCAmJiAiTm8gYnVmZmVy IHByb3ZpZGVkIHRvIHN0b3JlIGRpZ2l0cyIAY29udHJpYi9kb3VibGUtY29udmVyc2lvbi1kOGQ0 ZTY2L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uLmNjAERvdWJsZVRvQXNjaWkA IURvdWJsZSh2KS5Jc1NwZWNpYWwoKQBtb2RlID09IFNIT1JURVNUIHx8IG1vZGUgPT0gU0hPUlRF U1RfU0lOR0xFIHx8IHJlcXVlc3RlZF9kaWdpdHMgPj0gMABjb250cmliL2RvdWJsZS1jb252ZXJz aW9uLWQ4ZDRlNjYvZG91YmxlLWNvbnZlcnNpb24vdXRpbHMuaABWZWN0b3IAbGVuID09IDAgfHwg KGxlbiA+IDAgJiYgZGF0YSAhPSBudWxscHRyKQBvcGVyYXRvcltdADAgPD0gaW5kZXggJiYgaW5k ZXggPCBsZW5ndGhfAEJpZ251bUR0b2EAY29udHJpYi9kb3VibGUtY29udmVyc2lvbi1kOGQ0ZTY2 L2RvdWJsZS1jb252ZXJzaW9uL2JpZ251bS1kdG9hLmNjAHYgPiAwAGYgPT0gdgBOb3JtYWxpemVk RXhwb25lbnQAc2lnbmlmaWNhbmQgIT0gMABHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzAGRpZ2l0IDw9 IDkAYnVmZmVyWygqbGVuZ3RoKSAtIDFdICE9ICc5JwBidWZmZXJbKCpsZW5ndGgpIC0xXSAhPSAn OScAR2VuZXJhdGVDb3VudGVkRGlnaXRzAGNvdW50ID49IDAAZGlnaXQgPD0gMTAAQmlnbnVtVG9G aXhlZAAqZGVjaW1hbF9wb2ludCA9PSAtcmVxdWVzdGVkX2RpZ2l0cwBJbml0aWFsU2NhbGVkU3Rh cnRWYWx1ZXNQb3NpdGl2ZUV4cG9uZW50AGVzdGltYXRlZF9wb3dlciA+PSAwAGNvbnRyaWIvZG91 YmxlLWNvbnZlcnNpb24tZDhkNGU2Ni9kb3VibGUtY29udmVyc2lvbi9iaWdudW0uY2MASXNDbGFt cGVkKCkAb3RoZXIuSXNDbGFtcGVkKCkAU3VidHJhY3RCaWdudW0ATGVzc0VxdWFsKG90aGVyLCAq dGhpcykAU3F1YXJlAGFjY3VtdWxhdG9yID09IDAAQXNzaWduUG93ZXJVSW50MTYAYmFzZSAhPSAw AHBvd2VyX2V4cG9uZW50ID49IDAARGl2aWRlTW9kdWxvSW50QmlnbnVtAG90aGVyLnVzZWRfZGln aXRzXyA+IDAAb3RoZXIuYmlnaXRzX1tvdGhlci51c2VkX2RpZ2l0c18gLSAxXSA+PSAoKDEgPDwg a0JpZ2l0U2l6ZSkgLyAxNikAYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSA8IDB4MTAwMDAAQmln aXRMZW5ndGgoKSA9PSBvdGhlci5CaWdpdExlbmd0aCgpAHF1b3RpZW50IDwgMHgxMDAwMABkaXZp c2lvbl9lc3RpbWF0ZSA8IDB4MTAwMDAAQ29tcGFyZQBhLklzQ2xhbXBlZCgpAGIuSXNDbGFtcGVk KCkAUGx1c0NvbXBhcmUAYy5Jc0NsYW1wZWQoKQBBbGlnbgB1c2VkX2RpZ2l0c18gPj0gMABleHBv bmVudF8gPj0gMABCaWdpdHNTaGlmdExlZnQAc2hpZnRfYW1vdW50IDwga0JpZ2l0U2l6ZQBzaGlm dF9hbW91bnQgPj0gMABTdWJ0cmFjdFRpbWVzAGV4cG9uZW50XyA8PSBvdGhlci5leHBvbmVudF8A RmFzdEZpeGVkRHRvYQBjb250cmliL2RvdWJsZS1jb252ZXJzaW9uLWQ4ZDRlNjYvZG91YmxlLWNv bnZlcnNpb24vZml4ZWQtZHRvYS5jYwBmcmFjdGlvbmFsX2NvdW50IDw9IDIwAEZpbGxGcmFjdGlv bmFscwAtMTI4IDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDw9IDAAZnJhY3Rpb25hbHMgPj4gNTYg PT0gMABTaGlmdAAtNjQgPD0gc2hpZnRfYW1vdW50ICYmIHNoaWZ0X2Ftb3VudCA8PSA2NABNdWx0 aXBseQAoYWNjdW11bGF0b3IgPj4gMzIpID09IDAAR2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBv bmVudFJhbmdlAGNvbnRyaWIvZG91YmxlLWNvbnZlcnNpb24tZDhkNGU2Ni9kb3VibGUtY29udmVy c2lvbi9jYWNoZWQtcG93ZXJzLmNjADAgPD0gaW5kZXggJiYgaW5kZXggPCBzdGF0aWNfY2FzdDxp bnQ+KCgoc2l6ZW9mKGtDYWNoZWRQb3dlcnMpIC8gc2l6ZW9mKCooa0NhY2hlZFBvd2VycykpKSAv IHN0YXRpY19jYXN0PHNpemVfdD4oIShzaXplb2Yoa0NhY2hlZFBvd2VycykgJSBzaXplb2YoKihr Q2FjaGVkUG93ZXJzKSkpKSkpAG1pbl9leHBvbmVudCA8PSBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4 cG9uZW50AGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQgPD0gbWF4X2V4cG9uZW50AEZhc3RE dG9hAGNvbnRyaWIvZG91YmxlLWNvbnZlcnNpb24tZDhkNGU2Ni9kb3VibGUtY29udmVyc2lvbi9m YXN0LWR0b2EuY2MAR3Jpc3UzAG1vZGUgPT0gRkFTVF9EVE9BX1NIT1JURVNUX1NJTkdMRQBib3Vu ZGFyeV9wbHVzLmUoKSA9PSB3LmUoKQAoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSAr IHRlbl9tay5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkgJiYgKGtNYXhpbWFsVGFyZ2V0 RXhwb25lbnQgPj0gdy5lKCkgKyB0ZW5fbWsuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUp AHNjYWxlZF93LmUoKSA9PSBib3VuZGFyeV9wbHVzLmUoKSArIHRlbl9tay5lKCkgKyBEaXlGcDo6 a1NpZ25pZmljYW5kU2l6ZQBjb250cmliL2RvdWJsZS1jb252ZXJzaW9uLWQ4ZDRlNjYvZG91Ymxl LWNvbnZlcnNpb24vaWVlZS5oAHZhbHVlKCkgPiAwLjAATm9ybWFsaXplZEJvdW5kYXJpZXMAQXNE aXlGcABTaWduKCkgPiAwACFJc1NwZWNpYWwoKQBjb250cmliL2RvdWJsZS1jb252ZXJzaW9uLWQ4 ZDRlNjYvZG91YmxlLWNvbnZlcnNpb24vZGl5LWZwLmgARGlnaXRHZW4AbG93LmUoKSA9PSB3LmUo KSAmJiB3LmUoKSA9PSBoaWdoLmUoKQBsb3cuZigpICsgMSA8PSBoaWdoLmYoKSAtIDEAa01pbmlt YWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSAmJiB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9u ZW50AG9uZS5lKCkgPj0gLTYwACgoKHN0YXRpY19jYXN0PHVpbnQ2NF90PigweEZGRkZGRkZGKSA8 PCAzMikgKyAweEZGRkZGRkZGdSkpIC8gMTAgPj0gb25lLmYoKQBTdWJ0cmFjdABmXyA+PSBvdGhl ci5mXwBCaWdnZXN0UG93ZXJUZW4AbnVtYmVyIDwgKDF1IDw8IChudW1iZXJfYml0cyArIDEpKQBH cmlzdTNDb3VudGVkAERpZ2l0R2VuQ291bnRlZABSb3VuZFdlZWRDb3VudGVkAHJlc3QgPCB0ZW5f a2FwcGEAX19sb2NhbGVfdHJhbnNsYXRlX3N0cmluZwBzcmMvbGliYy9sb2NhbGUvbG9jYWxlX3Ry YW5zbGF0ZV9zdHJpbmcuYwBsZW4gPiAwICYmICJGYWlsZWQgdG8gZGVjb2RlIGNvbXBpbGUtdGlt ZSBzdHJpbmciAFVURi04AHZmcHJpbnRmX2wAZm9wX3dyaXRlX3BlZWsAc3JjL2NvbW1vbi9zdGRp by5oAHN0cmVhbS0+d3JpdGVidWZsZW4gPiAwICYmICJXcml0ZSBmbHVzaGluZyBkaWQgbm90IHlp ZWxkIGEgbmV3IHdyaXRlIGJ1ZmZlciIAKCFmc2Vla2FibGUoc3RyZWFtKSB8fCBzdHJlYW0tPnJl YWRidWZsZW4gPT0gMCkgJiYgIlJlYWQgYnVmZmVyIHN0aWxsIGxlZnQgaW50YWN0IgBmd3JpdGVf cHJvZHVjZQBidWZsZW4gPD0gc3RyZWFtLT53cml0ZWJ1ZmxlbiAmJiAiQXR0ZW1wdGVkIHRvIHBy b2R1Y2UgbW9yZSBkYXRhIHRoYW4gdGhlIGJ1ZmZlciBjYW4gaG9sZCIARmFpbGVkIHRvIGFjcXVp cmUgd3JpdGUgbG9jawBwdGhyZWFkX3J3bG9ja193cmxvY2sAc3JjL2xpYmMvcHRocmVhZC9wdGhy ZWFkX3J3bG9ja193cmxvY2suYwByd2xvY2stPl9fd3JpdGVfcmVjdXJzaW9uIDw9IDAgJiYgIklu dmFsaWQgd3JpdGUgcmVjdXJzaW9uIGNvdW50IgBeW3lZXQBeW25OXQBTdWNjZXNzAFRlbXBvcmFy eSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbgBJbnZhbGlkIHZhbHVlIGZvciBhaV9mbGFncwBO b24tcmVjb3ZlcmFibGUgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24AYWlfZmFtaWx5IG5vdCBz dXBwb3J0ZWQATWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQBob3N0bmFtZSBub3Igc2Vydm5hbWUg cHJvdmlkZWQsIG9yIG5vdCBrbm93bgBzZXJ2bmFtZSBub3Qgc3VwcG9ydGVkIGZvciBhaV9zb2Nr dHlwZQBhaV9zb2NrdHlwZSBub3Qgc3VwcG9ydGVkAFN5c3RlbSBlcnJvciByZXR1cm5lZCBpbiBl cnJubwBBcmd1bWVudCBidWZmZXIgb3ZlcmZsb3cAQ29udGVudCBvZiAiXHtcfSIgaW52YWxpZABJ bnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbgAnPycsICcqJywgb3IgJysnIG5vdCBwcmVjZWRlZCBi eSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24AIlx7XH0iIGltYmFsYW5jZQAiW10iIGltYmFsYW5j ZQBJbnZhbGlkIGNvbGxhdGluZyBlbGVtZW50IHJlZmVyZW5jZWQASW52YWxpZCBjaGFyYWN0ZXIg Y2xhc3MgdHlwZSByZWZlcmVuY2VkAFRyYWlsaW5nIGJhY2tzbGFzaCBjaGFyYWN0ZXIgaW4gcGF0 dGVybgAiXChcKSIgb3IgIigpIiBpbWJhbGFuY2UASW52YWxpZCBlbmRwb2ludCBpbiByYW5nZSBl eHByZXNzaW9uAE91dCBvZiBtZW1vcnkATnVtYmVyIGludmFsaWQgb3IgaW4gZXJyb3IARmFpbGVk IHRvIG1hdGNoAEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAUGVybWlzc2lvbiBkZW5pZWQAQWRkcmVz cyBhbHJlYWR5IGluIHVzZQBDYW4ndCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MAQWRkcmVzcyBm YW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCBmYW1pbHkAUmVzb3VyY2UgdGVtcG9yYXJp bHkgdW5hdmFpbGFibGUAT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAQmFkIGZpbGUgZGVz Y3JpcHRvcgBCYWQgbWVzc2FnZQBEZXZpY2UgYnVzeQBPcGVyYXRpb24gY2FuY2VsZWQATm8gY2hp bGQgcHJvY2Vzc2VzAFNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0AENvbm5lY3Rpb24g cmVmdXNlZABDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAUmVzb3VyY2UgZGVhZGxvY2sgYXZvaWRl ZABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE51bWVyaWNhbCBhcmd1bWVudCBvdXQgb2Yg ZG9tYWluAERpc2MgcXVvdGEgZXhjZWVkZWQARmlsZSBleGlzdHMAQmFkIGFkZHJlc3MARmlsZSB0 b28gbGFyZ2UATm8gcm91dGUgdG8gaG9zdABJZGVudGlmaWVyIHJlbW92ZWQASWxsZWdhbCBieXRl IHNlcXVlbmNlAE9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MASW50ZXJydXB0ZWQgc3lzdGVtIGNh bGwASW52YWxpZCBhcmd1bWVudABJbnB1dC9vdXRwdXQgZXJyb3IAU29ja2V0IGlzIGFscmVhZHkg Y29ubmVjdGVkAElzIGEgZGlyZWN0b3J5AFRvbyBtYW55IGxldmVscyBvZiBzeW1ib2xpYyBsaW5r cwBUb28gbWFueSBvcGVuIGZpbGVzAFRvbyBtYW55IGxpbmtzAE1lc3NhZ2UgdG9vIGxvbmcATXVs dGlob3AgYXR0ZW1wdGVkAEZpbGUgbmFtZSB0b28gbG9uZwBOZXR3b3JrIGlzIGRvd24ATmV0d29y ayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQATmV0d29yayBpcyB1bnJlYWNoYWJsZQBUb28g bWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAE9wZXJh dGlvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZQBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AEV4 ZWMgZm9ybWF0IGVycm9yAE5vIGxvY2tzIGF2YWlsYWJsZQBMaW5rIGhhcyBiZWVuIHNldmVyZWQA Q2Fubm90IGFsbG9jYXRlIG1lbW9yeQBObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBQcm90b2Nv bCBub3QgYXZhaWxhYmxlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAEZ1bmN0aW9uIG5vdCBpbXBs ZW1lbnRlZABTb2NrZXQgaXMgbm90IGNvbm5lY3RlZABOb3QgYSBkaXJlY3RvcnkARGlyZWN0b3J5 IG5vdCBlbXB0eQBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAU29ja2V0IG9wZXJhdGlvbiBvbiBub24t c29ja2V0AE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkAEluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRl dmljZQBEZXZpY2Ugbm90IGNvbmZpZ3VyZWQAVmFsdWUgdG9vIGxhcmdlIHRvIGJlIHN0b3JlZCBp biBkYXRhIHR5cGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABC cm9rZW4gcGlwZQBQcm90b2NvbCBlcnJvcgBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFByb3RvY29s IHdyb25nIHR5cGUgZm9yIHNvY2tldABSZXN1bHQgdG9vIGxhcmdlAFJlYWQtb25seSBmaWxlIHN5 c3RlbQBJbGxlZ2FsIHNlZWsATm8gc3VjaCBwcm9jZXNzAFN0YWxlIE5GUyBmaWxlIGhhbmRsZQBP cGVyYXRpb24gdGltZWQgb3V0AFRleHQgZmlsZSBidXN5AENyb3NzLWRldmljZSBsaW5rAENhcGFi aWxpdGllcyBpbnN1ZmZpY2llbnQAVW5rbm93biBzaWduYWwAQWJvcnQgdHJhcABBbGFybSBjbG9j awBCdXMgZXJyb3IAQ2hpbGQgZXhpdGVkAENvbnRpbnVlZABGbG9hdGluZyBwb2ludCBleGNlcHRp b24ASGFuZ3VwAElsbGVnYWwgaW5zdHJ1Y3Rpb24ASW50ZXJydXB0AEtpbGxlZABRdWl0AFNlZ21l bnRhdGlvbiBmYXVsdABTdXNwZW5kZWQgKHNpZ25hbCkAQmFkIHN5c3RlbSBjYWxsAFRlcm1pbmF0 ZWQAVHJhY2UvQlBUIHRyYXAAU3VzcGVuZGVkAFN0b3BwZWQgKHR0eSBpbnB1dCkAU3RvcHBlZCAo dHR5IG91dHB1dCkAVXJnZW50IEkvTyBjb25kaXRpb24AVXNlciBkZWZpbmVkIHNpZ25hbCAxAFVz ZXIgZGVmaW5lZCBzaWduYWwgMgBWaXJ0dWFsIHRpbWVyIGV4cGlyZWQAQ3B1dGltZSBsaW1pdCBl eGNlZWRlZABGaWxlc2l6ZSBsaW1pdCBleGNlZWRlZABVbmtub3duIGVycm9yACVzCgAlczogJXMK AHB0aHJlYWRfcndsb2NrX3RyeXdybG9jawBzcmMvbGliYy9wdGhyZWFkL3B0aHJlYWRfcndsb2Nr X3RyeXdybG9jay5jAHJ3bG9jay0+X193cml0ZV9yZWN1cnNpb24gPj0gMCAmJiAiQXR0ZW1wdGVk IHRvIHJlY3Vyc2l2ZWx5IHdyaXRlLWxvY2sgYSBub24tcmVjdXJzaXZlIHJ3bG9jayIAIUxJU1Rf RU1QVFkoJl9fcHRocmVhZF93cmxvY2tzKSAmJiAiQmFkIHdyaXRlLWxvY2sgY291bnQiAHB0aHJl YWRfcndsb2NrX3VubG9jawBzcmMvbGliYy9wdGhyZWFkL3B0aHJlYWRfcndsb2NrX3VubG9jay5j ACFMSVNUX0VNUFRZKCZfX3B0aHJlYWRfd3Jsb2NrcykgJiYgIkJhZCBsb2NrIGNvdW50IgAob2xk ICYgfkNMT1VEQUJJX0xPQ0tfS0VSTkVMX01BTkFHRUQpID09IChfX3B0aHJlYWRfdGhyZWFkX2lk IHwgQ0xPVURBQklfTE9DS19XUkxPQ0tFRCkgJiYgIlRoaXMgcndsb2NrIGlzIHdyaXRlLWxvY2tl ZCBieSBhIGRpZmZlcmVudCB0aHJlYWQiAEZhaWxlZCB0byB3cml0ZSB1bmxvY2sgYSByd2xvY2sA X19wdGhyZWFkX3JkbG9ja3MgPiAwICYmICJCYWQgbG9jayBjb3VudCIAcndsb2NrLT5fX3dyaXRl X3JlY3Vyc2lvbiA8PSAwICYmICJXcml0ZSByZWN1cnNpb24gZmllbGQgZG9lcyBub3QgbWF0Y2gg bG9jayB2YWx1ZSIARmFpbGVkIHRvIHJlYWQgdW5sb2NrIGEgcndsb2NrAChvbGQgJiB+Q0xPVURB QklfTE9DS19LRVJORUxfTUFOQUdFRCkgIT0gMCAmJiAiVGhpcyByd2xvY2sgaXMgbm90IGxvY2tl ZCIAAAAuAAAAAAAAACgAAABuAAAAdQAAAGwAAABsAAAAKQAAAAAAAAAAAIB/AAAAAAAAAAAAAACA AAAAAAAAAIAAAAAAAADwPwAAAAAAAACA/nmfUBNE0z+7vdfZ33zbvQAAAAAAADDDAAAAAAAAMEMA AAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWJ5VNXVoPk+IHskAAAAItFCInmMf/HRigAAAAAx0ZE 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 ALlAAAAAidqJ7scEJAAAAACJRCQIKcHT4tPmjUjg0+uJVCQE0+0J84tEJDSLVCQ4iVwkEIt8JAiL NCSLXCQEg8D/g9L/McmJRCQMiVQkFInqZmZmZmZmLg8fhAAAAAAAi0QkEA+k1gGLbCQUD6TCAQ+k 2AEB2wnLOVQkDIlEJBAZ9cH9H4npiegjbCQ0I0QkOIPhASnqGcZPdcWLfCQQiTQkMe0xwIneiVQk DItUJDwJ74n1AfbB7R+NbH0AhdJ0EIn3izQkiXIEif6LfCQMiTqD5v4JxQnOifOJ2Inqg8QYXl9b XcOJXCQMMe0xyTHA67oAAAAAAAAAAAAAAAAAAFVTV1bHxuj///9liz0AAAAAi0wkGItUJByLHDeN a/CNQ/iJLDeLbCQgUFVSUf90JCToivz//4PEFItD+ItT/IkcN15fW13DAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3sCt3pCiAQCwogEAAAAAANCiAQDg ogEA8KIBAAAAAAD/////BIACAAAEAQAAAAAAAAAAAAEAAAD//////////wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjbGFuZyB2ZXJzaW9uIDQuMC4wICh0YWdzL1JF TEVBU0VfNDAwL2ZpbmFsKQBMaW5rZXI6IExMRCA0LjAuMAAAAAAAAAAAAAAAAAAAAAAAAQAAALSA AgAAAAAABgAJAB0AAAC4gAIAAAAAAAYACQA3AAAAsIACAAAAAAAGAAkAWgAAAHBHAQAFAAAAAgAH AGoAAAAAkAIAAAAQAAEADAB/AAAA3AMBACQAAAABAAEAlAAAAGBKAQChAAAAAgAHAKcAAAAwSgEA MAAAAAIABwC4AAAAIEkBAAgBAAACAAcAywAAAMBIAQBfAAAAAgAHANwAAAC8gAIAAAAAAAYACQDo AAAAwJ4BAKADAAACAAcA7wAAAJCiAQAWAAAAAgAHAPUAAADwogEAAwAAAAIABwACAQAA4KIBAAMA AAACAAcADwEAAASAAgAYAAAAAQAIABoBAADQogEAAwAAAAIABwApAQAAsKIBABUAAAACAAcAOwEA AACQEgCAAAAAAQAMAFUBAADMDAEAJAAAAAEAAQBqAQAAoLABAEMCAAACAAcAvQEAAMDcAQBvAQAA AgAHAPUBAAAw3gEAoQYAAAIABwAtAgAA4OQBAJ4FAAACAAcAbQIAAIDqAQD+AAAAAgAHAKECAAAA DQEAFAQAAAEAAQDJAgAAwP8BAJIBAAACAAcACAMAABQRAQAsAAAAAQABADQDAABABgIAbAIAAAIA BwBEAwAAcAUCAMIAAAACAAcAUgMAAGAEAgADAQAAAgAHAGIDAADAAgIAlwEAAAIABwDoAAAAkGAC AKADAAACAAcAcAMAAAAaAQAkAAAAAQABAIQDAADAgAIAAAAAAAYACQCcAwAAxIACAAAAAAAGAAkA tAMAAIiQEgAEAAAAEQAMAL4DAACMkBIABAAAABEADADJAwAAkJASAAQAAAARAAwA1QMAAJSQEgAE AAAAEQAMAN8DAACEkRIAAgAAABEADADqAwAAAJACAAAAAAARAAoA+AMAAACQAgAAAAAAEQAKAAUE AACYkBIABAAAABEADAAUBAAAnJASAAQAAAARAAwAJAQAAKCQEgAEAAAAEQAMADsEAACkkBIABAAA ABEADABOBAAABAAAAAQAAAAWAAkAZAQAAAgAAAAEAAAAFgAJAHgEAAAAAAAABAAAABYACQCVBAAA AIACAAQAAAARAAgApwQAAABAAQBtBwAAEgAHAK4EAACokBIA3AAAABEADADABAAAoEcBAN4AAAAS AAcAzQQAAACQAgAAAAAAEQALANsEAACASAEAPwAAABIABwDjBAAAgEcBABIAAAASAAcA6AQAACCo AQBxCAAAEgAHADUFAACgzgEANwMAABIABwBsBQAAYLUBAO0AAAASAAcAngUAAHCzAQCdAAAAEgAH AMwFAAAQtAEASAEAABIABwD6BQAAcMoBADsCAAASAAcALgYAALC3AQCPAgAAEgAHAGIGAACgugEA AQEAABIABwCTBgAAsLsBAGMBAAASAAcAxQYAACC9AQC4AQAAEgAHAPcGAABAwwEAPwMAABIABwAr BwAAgMYBAO4DAAASAAcAZgcAAFC2AQBWAQAAEgAHAJAHAADgvgEAXwQAABIABwC3BwAAsMwBAOIB AAASAAcA5gcAAEC6AQBgAAAAEgAHABAIAADwsgEAewAAABIABwAyCAAA8LIBAHsAAAASAAcAVAgA AIDrAQDGAAAAEgAHALMIAABQ7AEAiQAAABIABwDfCAAAYKUBALYCAAASAAcAOQkAAODsAQDcDwAA EgAHAIEJAADA/AEAoAEAACIABwDFCQAAYP4BAGABAAAiAAcACQoAAJDSAQAiCgAAEgAHAEUKAADg 0QEAowAAABIABwBKCgAAYKIBACcAAAASAAcAXQoAAAwAAAAEAAAAFgAJAGMKAACwCAIAKAAAABIA BwBuCgAAQKMBABcCAAASAAcAdwoAAAAEAQAcAAAAEQABAIgKAABAEQEAHAAAABEAAQCWCgAAYAEC AFcBAAASAAcAsAoAACQaAQAYAgAAEQABAMEKAAAcBAEADAAAABEAAQDRCgAA0GkCAJIAAAASAAcA 1goAAKBqAgCyAwAAEgAHAN0KAABgbgIATgAAABIABwDkCgAAFAAAAAQAAAAWAAkA9goAAKBmAgC+ AAAAEgAHAAwLAACgZgIAvgAAABIABwAlCwAAoGYCAL4AAAASAAcAOgsAAGBnAgDIAQAAEgAHAE8L AABgZwIAyAEAABIABwBlCwAAYGcCAMgBAAASAAcAeQsAADBkAgAvAQAAEgAHAIwLAAAwZAIALwEA ABIABwCiCwAAMGQCAC8BAAASAAcAtAsAAGBlAgAoAAAAEgAHAMgLAAAQAAAABAAAABYACQDaCwAA hJASAAQAAAARAAwA7wsAABBLAQCsUwAAEgAHAPoLAABwaQIAXgAAABIABwABDAAAAKMBAD8AAAAS AAcACQwAAFBmAgBBAAAAEgAHABMMAACQZQIAEgAAABIABwAaDAAAsGUCAJ4AAAASAAcAIwwAACCA AgCQAAAAEQAIACwMAAAwaQIAMgAAABIABwAyDAAA4AgCAK9XAAASAAcAPQwAACBwAgAbAAAAEgAH AEcMAACAcwIARwAAABIABwBRDAAAoGoCALIDAAASAAcAWQwAAHBqAgAwAAAAEgAHAGAMAACwbgIA dQAAABIABwBoDAAAMG8CAG4AAAASAAcAbwwAAKBvAgB7AAAAEgAHAHUMAACAkBIABAAAABEADACD DAAAAJACAAAAAAARAAsAkAwAAEBwAgAyAwAAEgAHAAAucm9kYXRhAC50ZXh0AC5kYXRhAC50YnNz AC5jdG9ycwAuZHRvcnMALmJzcwAuY29tbWVudAAuc3ltdGFiAC5zaHN0cnRhYgAuc3RydGFiAAAu dGJzcy5fX3B0aHJlYWRfc2VsZl9vYmplY3QALnRic3MuX19wdGhyZWFkX3RocmVhZF9pZAAudGJz cy5fX3NhZmVzdGFja191bnNhZmVfc3RhY2tfcHRyAGRlZmF1bHRfc3lzY2FsbABpbml0aWFsX3Vu c2FmZV9zdGFjawBkcHJpbnRmLl9fb2JqX2xvY2FsZQB1c19hc2NpaV9jMzJzdG9tYnMAdXNfYXNj aWlfYzMydG9tYgB1c19hc2NpaV9tYnN0b2MzMnMAdXNfYXNjaWlfbWJ0b2MzMgAudGJzcy5lcnJu bwBmMTZkZWMAZWJhZGYAc3RkZXJyX2Nsb3NlAHN0ZGVycl9mbHVzaABzdGRlcnJfb3BzAHN0ZGVy cl9zZXR2YnVmAHN0ZGVycl93cml0ZV9wZWVrAHN0ZGVycl93cml0ZV9wZWVrLm51bGxidWYAZnBy aW50Zi5fX29ial9sb2NhbGUAX1pOMTdkb3VibGVfY29udmVyc2lvbkwyMUdlbmVyYXRlQ291bnRl ZERpZ2l0c0VpUGlQTlNfNkJpZ251bUVTMl9OU182VmVjdG9ySWNFRVMwXwBfWk4xN2RvdWJsZV9j b252ZXJzaW9uTDEyRmlsbERpZ2l0czMyRWpOU182VmVjdG9ySWNFRVBpAF9aTjE3ZG91YmxlX2Nv bnZlcnNpb25MMTJGaWxsRGlnaXRzNjRFeU5TXzZWZWN0b3JJY0VFUGkAX1pOMTdkb3VibGVfY29u dmVyc2lvbkwxNUZpbGxGcmFjdGlvbmFsc0V5aWlOU182VmVjdG9ySWNFRVBpUzJfAF9aTjE3ZG91 YmxlX2NvbnZlcnNpb25MN1JvdW5kVXBFTlNfNlZlY3RvckljRUVQaVMyXwBfWk4xN2RvdWJsZV9j b252ZXJzaW9uTDEza0NhY2hlZFBvd2Vyc0UAX1pOMTdkb3VibGVfY29udmVyc2lvbkwxNlJvdW5k V2VlZENvdW50ZWRFTlNfNlZlY3RvckljRUVpeXl5UGkAX1pOMTdkb3VibGVfY29udmVyc2lvbkwx N2tTbWFsbFBvd2Vyc09mVGVuRQB1dGZfOF9jMzJzdG9tYnMAdXRmXzhfYzMydG9tYgB1dGZfOF9t YnN0b2MzMnMAdXRmXzhfbWJ0b2MzMgBwZXJyb3IuX19vYmpfbG9jYWxlAC50YnNzLl9fcHRocmVh ZF93cmxvY2tzAC50YnNzLl9fcHRocmVhZF9yZGxvY2tzAF9fYXRfYmFzZQBfX2F0X25jcHVzAF9f YXRfcGFnZXN6AF9fYXRfcGhkcgBfX2F0X3BobnVtAF9fY3RvcnNfc3RhcnQAX19jdG9yc19zdG9w AF9fcHRfdGxzX2FsaWduAF9fcHRfdGxzX2ZpbGVzegBfX3B0X3Rsc19tZW1zel9hbGlnbmVkAF9f cHRfdGxzX3ZhZGRyX2FicwBfX3B0aHJlYWRfc2VsZl9vYmplY3QAX19wdGhyZWFkX3RocmVhZF9p ZABfX3NhZmVzdGFja191bnNhZmVfc3RhY2tfcHRyAF9fc3RhY2tfY2hrX2d1YXJkAF9zdGFydABj bG91ZGFiaV9zeXNjYWxscwBwcm9ncmFtX21haW4AX19kdG9yc19zdGFydABkcHJpbnRmAG1haW4A X1pOMTdkb3VibGVfY29udmVyc2lvbjEwQmlnbnVtRHRvYUVkTlNfMTRCaWdudW1EdG9hTW9kZUVp TlNfNlZlY3RvckljRUVQaVMzXwBfWk4xN2RvdWJsZV9jb252ZXJzaW9uNkJpZ251bTExUGx1c0Nv bXBhcmVFUktTMF9TMl9TMl8AX1pOMTdkb3VibGVfY29udmVyc2lvbjZCaWdudW0xMkFzc2lnbkJp Z251bUVSS1MwXwBfWk4xN2RvdWJsZV9jb252ZXJzaW9uNkJpZ251bTEyQXNzaWduVUludDE2RXQA X1pOMTdkb3VibGVfY29udmVyc2lvbjZCaWdudW0xMkFzc2lnblVJbnQ2NEV5AF9aTjE3ZG91Ymxl X2NvbnZlcnNpb242QmlnbnVtMTNTdWJ0cmFjdFRpbWVzRVJLUzBfaQBfWk4xN2RvdWJsZV9jb252 ZXJzaW9uNkJpZ251bTE0U3VidHJhY3RCaWdudW1FUktTMF8AX1pOMTdkb3VibGVfY29udmVyc2lv bjZCaWdudW0xNUJpZ2l0c1NoaWZ0TGVmdEVpAF9aTjE3ZG91YmxlX2NvbnZlcnNpb242QmlnbnVt MTZNdWx0aXBseUJ5VUludDMyRWoAX1pOMTdkb3VibGVfY29udmVyc2lvbjZCaWdudW0xNk11bHRp cGx5QnlVSW50NjRFeQBfWk4xN2RvdWJsZV9jb252ZXJzaW9uNkJpZ251bTE3QXNzaWduUG93ZXJV SW50MTZFdGkAX1pOMTdkb3VibGVfY29udmVyc2lvbjZCaWdudW0yMURpdmlkZU1vZHVsb0ludEJp Z251bUVSS1MwXwBfWk4xN2RvdWJsZV9jb252ZXJzaW9uNkJpZ251bTVBbGlnbkVSS1MwXwBfWk4x N2RvdWJsZV9jb252ZXJzaW9uNkJpZ251bTZTcXVhcmVFdgBfWk4xN2RvdWJsZV9jb252ZXJzaW9u NkJpZ251bTdDb21wYXJlRVJLUzBfUzJfAF9aTjE3ZG91YmxlX2NvbnZlcnNpb242QmlnbnVtOVNo aWZ0TGVmdEVpAF9aTjE3ZG91YmxlX2NvbnZlcnNpb242QmlnbnVtQzFFdgBfWk4xN2RvdWJsZV9j b252ZXJzaW9uNkJpZ251bUMyRXYAX1pOMTdkb3VibGVfY29udmVyc2lvbjE2UG93ZXJzT2ZUZW5D YWNoZTM2R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdlRWlpUE5TXzVEaXlGcEVQ aQBfWk4xN2RvdWJsZV9jb252ZXJzaW9uNURpeUZwOE11bHRpcGx5RVJLUzBfAF9aTjE3ZG91Ymxl X2NvbnZlcnNpb24yM0RvdWJsZVRvU3RyaW5nQ29udmVydGVyMTNEb3VibGVUb0FzY2lpRWROUzBf OER0b2FNb2RlRWlQY2lQYlBpUzRfAF9aTjE3ZG91YmxlX2NvbnZlcnNpb244RmFzdER0b2FFZE5T XzEyRmFzdER0b2FNb2RlRWlOU182VmVjdG9ySWNFRVBpUzNfAF9aTksxN2RvdWJsZV9jb252ZXJz aW9uNkRvdWJsZTIwTm9ybWFsaXplZEJvdW5kYXJpZXNFUE5TXzVEaXlGcEVTMl8AX1pOSzE3ZG91 YmxlX2NvbnZlcnNpb242U2luZ2xlMjBOb3JtYWxpemVkQm91bmRhcmllc0VQTlNfNURpeUZwRVMy XwBfWk4xN2RvdWJsZV9jb252ZXJzaW9uMTNGYXN0Rml4ZWREdG9hRWRpTlNfNlZlY3RvckljRUVQ aVMyXwBjZWlsAF9fYXNzZXJ0aW9uX2ZhaWxlZABlcnJubwBmZWdldHJvdW5kAF9fZjEwZGVjAF9f Y3R5cGVfdXNfYXNjaWkAX19jdHlwZV91dGZfOABfX2xvY2FsZV90cmFuc2xhdGVfc3RyaW5nAF9f bWVzc2FnZXNfZW5fdXMAX19udW1lcmljX3Bvc2l4AGV4aXQAbWVtY3B5AHN0cmxlbgBfX3B0aHJl YWRfcmRsb2NrcwBwdGhyZWFkX211dGV4X3RyeWxvY2sAcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2Nr AHB0aHJlYWRfc3Bpbl90cnlsb2NrAHB0aHJlYWRfbXV0ZXhfdW5sb2NrAHB0aHJlYWRfcndsb2Nr X3VubG9jawBwdGhyZWFkX3NwaW5fdW5sb2NrAHB0aHJlYWRfbXV0ZXhfbG9jawBwdGhyZWFkX3J3 bG9ja193cmxvY2sAcHRocmVhZF9zcGluX2xvY2sAX19wdGhyZWFkX3Rlcm1pbmF0ZQBfX3B0aHJl YWRfd3Jsb2NrcwBfX3RocmVhZF9hdGV4aXRfbGFzdAB2ZHByaW50Zl9sAGZmbHVzaABmcHJpbnRm AGZwcmludGZfbABwZXJyb3IAcGVycm9yX2wAX19zdGRlcnIAYWJvcnQAdmZwcmludGZfbABfX3Vk aXZkaTMAX191bW9kZGkzAG1lbW1vdmUAbWVtY2hyAHN0cm5sZW4Ac3Ryc3BuAHdyaXRlAF9fYXRl eGl0X2xhc3QAX19kdG9yc19zdG9wAF9fdWRpdm1vZGRpNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAAUAQEAFAEAACgbAAAAAAAAAAAAAAQAAAAA AAAAAQAAAAEAAAAyAAAAPBwBADwcAABWHgAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAMgAAAJQ6 AQCUOgAAJAAAAAAAAAAAAAAABAAAAAQAAAABAAAAAQAAABIAAAC4OgEAuDoAAAQAAAAAAAAAAAAA AAQAAAAEAAAAAQAAAAEAAAASAAAAwDoBAMA6AAAgAAAAAAAAAAAAAAAQAAAAEAAAAAEAAAABAAAA EgAAAOA6AQDgOgAAKAAAAAAAAAAAAAAACAAAAAgAAAAJAAAAAQAAAAYAAAAAQAEAAEAAAMczAQAA AAAAAAAAABAAAAAAAAAADwAAAAEAAAADAAAAAIACAACAAQCwAAAAAAAAAAAAAAAIAAAAAAAAABUA AAAIAAAAAwQAALCAAgCwgAEAGAAAAAAAAAAAAAAABAAAAAAAAAAbAAAAAQAAAAMAAAAAkAIAAJAB AAAAAAAAAAAAAAAAAAQAAAAAAAAAIgAAAAEAAAADAAAAAJACAACQAQAAAAAAAAAAAAAAAAAEAAAA AAAAACkAAAAIAAAAAwAAAACQAgAAkAEAhgEQAAAAAAAAAAAAEAAAAAAAAAAuAAAAAQAAADAAAAAA AAAAAJABAEAAAAAAAAAAAAAAAAEAAAABAAAANwAAAAIAAAAAAAAAAAAAAECQAQAACAAAEAAAACUA AAAEAAAAEAAAAD8AAAADAAAAAAAAAAAAAABAmAEAUQAAAAAAAAAAAAAAAQAAAAAAAABJAAAAAwAA AAAAAAAAAAAAkZgBAJ0MAAAAAAAAAAAAAAEAAAAAAAAA --001a113f2102484793054b62a333-- From owner-svn-src-head@freebsd.org Thu Mar 23 10:48:12 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 60DA0D19FEB; Thu, 23 Mar 2017 10:48:12 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1EFA21BD0; Thu, 23 Mar 2017 10:48:12 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NAmBD1056870; Thu, 23 Mar 2017 10:48:11 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NAmAFU056867; Thu, 23 Mar 2017 10:48:10 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201703231048.v2NAmAFU056867@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Thu, 23 Mar 2017 10:48:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315856 - in head/sys/compat/linuxkpi/common: include/linux src X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 10:48:12 -0000 Author: hselasky Date: Thu Mar 23 10:48:10 2017 New Revision: 315856 URL: https://svnweb.freebsd.org/changeset/base/315856 Log: Add support for ratelimited printouts in the LinuxKPI. MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/device.h head/sys/compat/linuxkpi/common/include/linux/kernel.h head/sys/compat/linuxkpi/common/src/linux_compat.c Modified: head/sys/compat/linuxkpi/common/include/linux/device.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/device.h Thu Mar 23 10:43:29 2017 (r315855) +++ head/sys/compat/linuxkpi/common/include/linux/device.h Thu Mar 23 10:48:10 2017 (r315856) @@ -144,6 +144,18 @@ show_class_attr_string(struct class *cla #define dev_printk(lvl, dev, fmt, ...) \ device_printf((dev)->bsddev, fmt, ##__VA_ARGS__) +#define dev_err_ratelimited(dev, ...) do { \ + static time_t __ratelimited; \ + if (linux_ratelimited(&__ratelimited)) \ + dev_err(dev, __VA_ARGS__); \ +} while (0) + +#define dev_warn_ratelimited(dev, ...) do { \ + static time_t __ratelimited; \ + if (linux_ratelimited(&__ratelimited)) \ + dev_warn(dev, __VA_ARGS__); \ +} while (0) + static inline void * dev_get_drvdata(const struct device *dev) { Modified: head/sys/compat/linuxkpi/common/include/linux/kernel.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/kernel.h Thu Mar 23 10:43:29 2017 (r315855) +++ head/sys/compat/linuxkpi/common/include/linux/kernel.h Thu Mar 23 10:48:10 2017 (r315856) @@ -224,6 +224,11 @@ scnprintf(char *buf, size_t size, const log_once(LOG_INFO, pr_fmt(fmt), ##__VA_ARGS__) #define pr_cont(fmt, ...) \ printk(KERN_CONT fmt, ##__VA_ARGS__) +#define pr_warn_ratelimited(...) do { \ + static time_t __ratelimited; \ + if (linux_ratelimited(&__ratelimited)) \ + pr_warning(__VA_ARGS__); \ +} while (0) #ifndef WARN #define WARN(condition, ...) ({ \ @@ -331,4 +336,6 @@ abs64(int64_t x) return (x < 0 ? -x : x); } +extern bool linux_ratelimited(time_t *); + #endif /* _LINUX_KERNEL_H_ */ Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c ============================================================================== --- head/sys/compat/linuxkpi/common/src/linux_compat.c Thu Mar 23 10:43:29 2017 (r315855) +++ head/sys/compat/linuxkpi/common/src/linux_compat.c Thu Mar 23 10:48:10 2017 (r315856) @@ -1484,6 +1484,20 @@ __unregister_chrdev(unsigned int major, bool linux_cpu_has_clflush; #endif +bool +linux_ratelimited(time_t *ptime) +{ + /* make sure uptime is not zero by OR'ing bit 31 */ + time_t curr = time_uptime | (1U << 31); + + /* check if one or more seconds have passed */ + if (*ptime != curr) { + *ptime = curr; + return (1); + } + return (0); +} + static void linux_compat_init(void *arg) { From owner-svn-src-head@freebsd.org Thu Mar 23 10:50:47 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 31F00D190B1; Thu, 23 Mar 2017 10:50:47 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F2AB01D61; Thu, 23 Mar 2017 10:50:46 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NAok57057058; Thu, 23 Mar 2017 10:50:46 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NAokvU057057; Thu, 23 Mar 2017 10:50:46 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703231050.v2NAokvU057057@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Thu, 23 Mar 2017 10:50:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315857 - head/sys/cam/scsi X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 10:50:47 -0000 Author: mav Date: Thu Mar 23 10:50:45 2017 New Revision: 315857 URL: https://svnweb.freebsd.org/changeset/base/315857 Log: Remove "UNMAPPED" messages printed on da periph attach. I think this message is not very useful for end user. Also its formatting does not match other messages printed at that time. Those who really need this information can always find it in `camcontrol negotiate daX -v`. MFC after: 2 weeks Modified: head/sys/cam/scsi/scsi_da.c Modified: head/sys/cam/scsi/scsi_da.c ============================================================================== --- head/sys/cam/scsi/scsi_da.c Thu Mar 23 10:48:10 2017 (r315856) +++ head/sys/cam/scsi/scsi_da.c Thu Mar 23 10:50:45 2017 (r315857) @@ -2546,7 +2546,6 @@ daregister(struct cam_periph *periph, vo if ((cpi.hba_misc & PIM_UNMAPPED) != 0) { softc->unmappedio = 1; softc->disk->d_flags |= DISKFLAG_UNMAPPED_BIO; - xpt_print(periph->path, "UNMAPPED\n"); } cam_strvis(softc->disk->d_descr, cgd->inq_data.vendor, sizeof(cgd->inq_data.vendor), sizeof(softc->disk->d_descr)); From owner-svn-src-head@freebsd.org Thu Mar 23 11:22:01 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8F7F3D19F17; Thu, 23 Mar 2017 11:22:01 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail107.syd.optusnet.com.au (mail107.syd.optusnet.com.au [211.29.132.53]) by mx1.freebsd.org (Postfix) with ESMTP id 5A0FD1642; Thu, 23 Mar 2017 11:22:01 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from besplex.bde.org (c122-106-153-191.carlnfd1.nsw.optusnet.com.au [122.106.153.191]) by mail107.syd.optusnet.com.au (Postfix) with ESMTPS id 9E805D4378F; Thu, 23 Mar 2017 22:21:52 +1100 (AEDT) Date: Thu, 23 Mar 2017 22:21:51 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315850 - head/sys/boot/forth In-Reply-To: <201703230834.v2N8YVDA003255@repo.freebsd.org> Message-ID: <20170323205948.N2588@besplex.bde.org> References: <201703230834.v2N8YVDA003255@repo.freebsd.org> MIME-Version: 1.0 X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.2 cv=AYLBJzfG c=1 sm=1 tr=0 a=Tj3pCpwHnMupdyZSltBt7Q==:117 a=Tj3pCpwHnMupdyZSltBt7Q==:17 a=nlC_4_pT8q9DhB4Ho9EA:9 a=ZInJBiMZPXY0Q4nUvIEA:9 a=45ClL6m2LaAA:10 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 11:22:01 -0000 On Thu, 23 Mar 2017, [UTF-8] Dag-Erling Sm=C3=B8rgrav wrote: > Log: > The original author abused Nd (one-line description, used by makewhatis) > for its side effect of producing an en-dash. This broke whatis with > newer versions of mdocml. Use \(en instead. Nd (or is it mumble-dash?) is broken for all man pages. Old man renders the dash for Nd as 2 hyphens in ascii. New man renders it as 1 hyphen in ascii. postscript output is even more broken. Old man renders the dash for Nd as an especially wide one. New man still seems to render it as 1 hyphen, and hyphens are especially narrow in postscript output for new man (they are 1.5 to 2 times narrower than with old man, and that is with a larger font for the smaller hyphens). Altogther, the dash for Nd is about 4 times larger with old man after adjusting for the font size (about 3 average characters wide instead of 3/4). Whatever the dash for Nd is, it shouldn't look like a hyphen. I compared the output of "man ls.1 | col -bx". The diffs were too large due to different policies for splitting lines, but this and 2 other known bugs were obvious (the others are sentence breaks after complicated sentenc= e terminations like ".)", and -width not working giving misformatted tables and lists). Different justification was even more obvious. -Tascii uses hyphens to split long lines with old man only, and this allows perfect right justification in postscript output for old man only. New man apparently doesn't try to right justify for -Tps any more than with -Tascii= =2E Bruce From owner-svn-src-head@freebsd.org Thu Mar 23 11:59:18 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D61FAD1AA0D; Thu, 23 Mar 2017 11:59:18 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9ACC0CCF; Thu, 23 Mar 2017 11:59:18 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NBxHnw085167; Thu, 23 Mar 2017 11:59:17 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NBxHLf085166; Thu, 23 Mar 2017 11:59:17 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201703231159.v2NBxHLf085166@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Thu, 23 Mar 2017 11:59:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315858 - head/sys/dev/aacraid X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 11:59:18 -0000 Author: avg Date: Thu Mar 23 11:59:17 2017 New Revision: 315858 URL: https://svnweb.freebsd.org/changeset/base/315858 Log: aacraid: rework r315083 for a clean build with and without AACRAID_DEBUG r315083 essentially reverted r263954 which was made for a good reason, but didn't take into account AACRAID_DEBUG. Now both types of build should be clean. MFC after: 5 days No MFC to: stable/10 Modified: head/sys/dev/aacraid/aacraid_cam.c Modified: head/sys/dev/aacraid/aacraid_cam.c ============================================================================== --- head/sys/dev/aacraid/aacraid_cam.c Thu Mar 23 10:50:45 2017 (r315857) +++ head/sys/dev/aacraid/aacraid_cam.c Thu Mar 23 11:59:17 2017 (r315858) @@ -243,13 +243,11 @@ static int aac_cam_probe(device_t dev) { struct aac_cam *camsc; - struct aac_softc *sc; camsc = (struct aac_cam *)device_get_softc(dev); if (!camsc->inf) return (0); - sc = camsc->inf->aac_sc; - fwprintf(sc, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, ""); + fwprintf(camsc->inf->aac_sc, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, ""); return (0); } @@ -1136,11 +1134,9 @@ static void aac_container_complete(struct aac_command *cm) { union ccb *ccb; - struct aac_softc *sc; u_int32_t status; - sc = cm->cm_sc; - fwprintf(sc, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, ""); + fwprintf(cm->cm_sc, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, ""); ccb = cm->cm_ccb; status = ((u_int32_t *)cm->cm_fib->data)[0]; From owner-svn-src-head@freebsd.org Thu Mar 23 12:25:27 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 84925D18E21; Thu, 23 Mar 2017 12:25:27 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F090811A0; Thu, 23 Mar 2017 12:25:26 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id v2NCPLg6066677 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 23 Mar 2017 14:25:21 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua v2NCPLg6066677 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id v2NCPLFG066667; Thu, 23 Mar 2017 14:25:21 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Thu, 23 Mar 2017 14:25:21 +0200 From: Konstantin Belousov To: Ed Schouten Cc: Ed Schouten , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315701 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 Message-ID: <20170323122521.GA43712@kib.kiev.ua> References: <201703220705.v2M75RHE066483@repo.freebsd.org> <20170322090258.GR43712@kib.kiev.ua> <20170322230026.GV43712@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.8.0 (2017-02-23) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 12:25:27 -0000 On Thu, Mar 23, 2017 at 08:43:20AM +0100, Ed Schouten wrote: > Thanks! I just gave the patch a try, but the comparison added to > imgact_elf.c now causes the brandinfo to be skipped entirely. Attached > is a patch that does work for me. > > Index: sys/kern/imgact_elf.c > =================================================================== > --- sys/kern/imgact_elf.c (revision 315828) > +++ sys/kern/imgact_elf.c (working copy) > @@ -312,8 +312,9 @@ > continue; > if (hdr->e_machine == bi->machine && > (hdr->e_ident[EI_OSABI] == bi->brand || > + (bi->compat_3_brand != NULL && > strcmp((const char *)&hdr->e_ident[OLD_EI_BRAND], > - bi->compat_3_brand) == 0)) { > + bi->compat_3_brand) == 0))) { > /* Looks good, but give brand a chance to veto */ > if (!bi->header_supported || > bi->header_supported(imgp)) { This looks fine, please commit. From owner-svn-src-head@freebsd.org Thu Mar 23 13:28:18 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3278CD18D41; Thu, 23 Mar 2017 13:28:18 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F2FC114E7; Thu, 23 Mar 2017 13:28:17 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NDSHUV022165; Thu, 23 Mar 2017 13:28:17 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NDSHaV022164; Thu, 23 Mar 2017 13:28:17 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201703231328.v2NDSHaV022164@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Thu, 23 Mar 2017 13:28:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315859 - head/sys/compat/linuxkpi/common/include/asm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 13:28:18 -0000 Author: hselasky Date: Thu Mar 23 13:28:16 2017 New Revision: 315859 URL: https://svnweb.freebsd.org/changeset/base/315859 Log: Function macros are preferred in the LinuxKPI. MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/asm/atomic.h Modified: head/sys/compat/linuxkpi/common/include/asm/atomic.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/asm/atomic.h Thu Mar 23 11:59:17 2017 (r315858) +++ head/sys/compat/linuxkpi/common/include/asm/atomic.h Thu Mar 23 13:28:16 2017 (r315859) @@ -191,7 +191,7 @@ atomic_cmpxchg(atomic_t *v, int old, int __ret; \ }) -#define cmpxchg_relaxed cmpxchg +#define cmpxchg_relaxed(...) cmpxchg(__VA_ARGS__) #define xchg(ptr, v) ({ \ __typeof(*(ptr)) __ret; \ From owner-svn-src-head@freebsd.org Thu Mar 23 14:09:46 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 94724D19CC4; Thu, 23 Mar 2017 14:09:46 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 645CB1A8E; Thu, 23 Mar 2017 14:09:46 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NE9jX9038182; Thu, 23 Mar 2017 14:09:45 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NE9jwm038181; Thu, 23 Mar 2017 14:09:45 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201703231409.v2NE9jwm038181@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Thu, 23 Mar 2017 14:09:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315860 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 14:09:46 -0000 Author: ed Date: Thu Mar 23 14:09:45 2017 New Revision: 315860 URL: https://svnweb.freebsd.org/changeset/base/315860 Log: Don't require the presence of the compat_3_brand. The existing ELF image activator requires the brandinfo to provide such a string unconditionally, even if the executable format in question doesn't use this type of branding. Skip matching when it's a null pointer. Reviewed by: kib MFC after: 2 weeks Modified: head/sys/kern/imgact_elf.c Modified: head/sys/kern/imgact_elf.c ============================================================================== --- head/sys/kern/imgact_elf.c Thu Mar 23 13:28:16 2017 (r315859) +++ head/sys/kern/imgact_elf.c Thu Mar 23 14:09:45 2017 (r315860) @@ -312,8 +312,9 @@ __elfN(get_brandinfo)(struct image_param continue; if (hdr->e_machine == bi->machine && (hdr->e_ident[EI_OSABI] == bi->brand || + (bi->compat_3_brand != NULL && strcmp((const char *)&hdr->e_ident[OLD_EI_BRAND], - bi->compat_3_brand) == 0)) { + bi->compat_3_brand) == 0))) { /* Looks good, but give brand a chance to veto */ if (!bi->header_supported || bi->header_supported(imgp)) { From owner-svn-src-head@freebsd.org Thu Mar 23 14:12:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A5FCED19EC8; Thu, 23 Mar 2017 14:12:23 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 65E371EC9; Thu, 23 Mar 2017 14:12:23 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NECMmP041273; Thu, 23 Mar 2017 14:12:22 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NECMr7041267; Thu, 23 Mar 2017 14:12:22 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201703231412.v2NECMr7041267@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Thu, 23 Mar 2017 14:12:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315861 - in head/sys: amd64/cloudabi32 amd64/cloudabi64 arm/cloudabi32 arm64/cloudabi64 i386/cloudabi32 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 14:12:23 -0000 Author: ed Date: Thu Mar 23 14:12:21 2017 New Revision: 315861 URL: https://svnweb.freebsd.org/changeset/base/315861 Log: Stop providing the compat_3_brand. As of r315860, the ELF image activator works fine for CloudABI without it. Reviewed by: kib MFC after: 2 weeks Modified: head/sys/amd64/cloudabi32/cloudabi32_sysvec.c head/sys/amd64/cloudabi64/cloudabi64_sysvec.c head/sys/arm/cloudabi32/cloudabi32_sysvec.c head/sys/arm64/cloudabi64/cloudabi64_sysvec.c head/sys/i386/cloudabi32/cloudabi32_sysvec.c Modified: head/sys/amd64/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi32/cloudabi32_sysvec.c Thu Mar 23 14:09:45 2017 (r315860) +++ head/sys/amd64/cloudabi32/cloudabi32_sysvec.c Thu Mar 23 14:12:21 2017 (r315861) @@ -227,6 +227,5 @@ Elf32_Brandinfo cloudabi32_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, - .compat_3_brand = "CloudABI", .flags = BI_BRAND_ONLY_STATIC, }; Modified: head/sys/amd64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Thu Mar 23 14:09:45 2017 (r315860) +++ head/sys/amd64/cloudabi64/cloudabi64_sysvec.c Thu Mar 23 14:12:21 2017 (r315861) @@ -213,5 +213,4 @@ Elf64_Brandinfo cloudabi64_brand = { .machine = EM_X86_64, .sysvec = &cloudabi64_elf_sysvec, .flags = BI_CAN_EXEC_DYN | BI_BRAND_ONLY_STATIC, - .compat_3_brand = "CloudABI", }; Modified: head/sys/arm/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/arm/cloudabi32/cloudabi32_sysvec.c Thu Mar 23 14:09:45 2017 (r315860) +++ head/sys/arm/cloudabi32/cloudabi32_sysvec.c Thu Mar 23 14:12:21 2017 (r315861) @@ -189,6 +189,5 @@ Elf32_Brandinfo cloudabi32_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_ARM, .sysvec = &cloudabi32_elf_sysvec, - .compat_3_brand = "CloudABI", .flags = BI_BRAND_ONLY_STATIC, }; Modified: head/sys/arm64/cloudabi64/cloudabi64_sysvec.c ============================================================================== --- head/sys/arm64/cloudabi64/cloudabi64_sysvec.c Thu Mar 23 14:09:45 2017 (r315860) +++ head/sys/arm64/cloudabi64/cloudabi64_sysvec.c Thu Mar 23 14:12:21 2017 (r315861) @@ -182,5 +182,4 @@ Elf64_Brandinfo cloudabi64_brand = { .machine = EM_AARCH64, .sysvec = &cloudabi64_elf_sysvec, .flags = BI_CAN_EXEC_DYN | BI_BRAND_ONLY_STATIC, - .compat_3_brand = "CloudABI", }; Modified: head/sys/i386/cloudabi32/cloudabi32_sysvec.c ============================================================================== --- head/sys/i386/cloudabi32/cloudabi32_sysvec.c Thu Mar 23 14:09:45 2017 (r315860) +++ head/sys/i386/cloudabi32/cloudabi32_sysvec.c Thu Mar 23 14:12:21 2017 (r315861) @@ -200,6 +200,5 @@ Elf32_Brandinfo cloudabi32_brand = { .brand = ELFOSABI_CLOUDABI, .machine = EM_386, .sysvec = &cloudabi32_elf_sysvec, - .compat_3_brand = "CloudABI", .flags = BI_BRAND_ONLY_STATIC, }; From owner-svn-src-head@freebsd.org Thu Mar 23 14:35:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 724D7D1A4A4; Thu, 23 Mar 2017 14:35:22 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4CD031A75; Thu, 23 Mar 2017 14:35:22 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NEZLk5050247; Thu, 23 Mar 2017 14:35:21 GMT (envelope-from rwatson@FreeBSD.org) Received: (from rwatson@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NEZLEl050244; Thu, 23 Mar 2017 14:35:21 GMT (envelope-from rwatson@FreeBSD.org) Message-Id: <201703231435.v2NEZLEl050244@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rwatson set sender to rwatson@FreeBSD.org using -f From: Robert Watson Date: Thu, 23 Mar 2017 14:35:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315862 - head/lib/libcasper/libcasper X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 14:35:22 -0000 Author: rwatson Date: Thu Mar 23 14:35:21 2017 New Revision: 315862 URL: https://svnweb.freebsd.org/changeset/base/315862 Log: In libcasper, prefer to send a function index or service name over the IPC channel to a zygote process, rather than sending a function pointer or service pointer. This avoids transfering pointers between address spaces, which while robust in this case (due to the zygote being forked() from the parent) is not generally a good idea, especially in the presence of increasingly popular control-flow integrity and pointer protection mitigation schemes. With this change, ping(8) and other sandboxed tools using libcasper for DNS resolution now work on architectures with tagged memory again. Reviewed by: oshogbo MFC after: 1 week Sponsored by: DARPA, AFRL Modified: head/lib/libcasper/libcasper/libcasper_service.c head/lib/libcasper/libcasper/zygote.c head/lib/libcasper/libcasper/zygote.h Modified: head/lib/libcasper/libcasper/libcasper_service.c ============================================================================== --- head/lib/libcasper/libcasper/libcasper_service.c Thu Mar 23 14:12:21 2017 (r315861) +++ head/lib/libcasper/libcasper/libcasper_service.c Thu Mar 23 14:35:21 2017 (r315862) @@ -1,11 +1,16 @@ /*- * Copyright (c) 2012 The FreeBSD Foundation * Copyright (c) 2015 Mariusz Zaborski + * Copyright (c) 2017 Robert N. M. Watson * All rights reserved. * * This software was developed by Pawel Jakub Dawidek under sponsorship from * the FreeBSD Foundation. * + * This software was developed by SRI International and the University of + * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) + * ("CTSRD"), as part of the DARPA CRASH research programme. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -130,18 +135,25 @@ casper_limit(const nvlist_t *oldlimits, return (0); } -static void +void service_execute(int chanfd) { + struct casper_service *casserv; struct service *service; + const char *servname; nvlist_t *nvl; int procfd; nvl = nvlist_recv(chanfd, 0); if (nvl == NULL) exit(1); - service = (struct service *)(uintptr_t)nvlist_take_number(nvl, - "service"); + if (!nvlist_exists_string(nvl, "service")) + exit(1); + servname = nvlist_get_string(nvl, "service"); + casserv = service_find(servname); + if (casserv == NULL) + exit(1); + service = casserv->cs_service; procfd = nvlist_take_descriptor(nvl, "procfd"); nvlist_destroy(nvl); @@ -172,12 +184,11 @@ casper_command(const char *cmd, const nv if (!casper_allowed_service(limits, servname)) return (ENOTCAPABLE); - if (zygote_clone(service_execute, &chanfd, &procfd) == -1) + if (zygote_clone_service_execute(&chanfd, &procfd) == -1) return (errno); nvl = nvlist_create(0); - nvlist_add_number(nvl, "service", - (uint64_t)(uintptr_t)casserv->cs_service); + nvlist_add_string(nvl, "service", servname); nvlist_move_descriptor(nvl, "procfd", procfd); if (nvlist_send(chanfd, nvl) == -1) { error = errno; Modified: head/lib/libcasper/libcasper/zygote.c ============================================================================== --- head/lib/libcasper/libcasper/zygote.c Thu Mar 23 14:12:21 2017 (r315861) +++ head/lib/libcasper/libcasper/zygote.c Thu Mar 23 14:35:21 2017 (r315862) @@ -1,11 +1,16 @@ /*- * Copyright (c) 2012 The FreeBSD Foundation * Copyright (c) 2015 Mariusz Zaborski - * All rights reserved. + * Copyright (c) 2017 Robert N. M. Watson * * This software was developed by Pawel Jakub Dawidek under sponsorship from * the FreeBSD Foundation. * + * All rights reserved. + * This software was developed by SRI International and the University of + * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) + * ("CTSRD"), as part of the DARPA CRASH research programme. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -50,8 +55,10 @@ __FBSDID("$FreeBSD$"); /* Zygote info. */ static int zygote_sock = -1; +#define ZYGOTE_SERVICE_EXECUTE 1 + int -zygote_clone(zygote_func_t *func, int *chanfdp, int *procfdp) +zygote_clone(uint64_t funcidx, int *chanfdp, int *procfdp) { nvlist_t *nvl; int error; @@ -63,7 +70,7 @@ zygote_clone(zygote_func_t *func, int *c } nvl = nvlist_create(0); - nvlist_add_number(nvl, "func", (uint64_t)(uintptr_t)func); + nvlist_add_number(nvl, "funcidx", funcidx); nvl = nvlist_xfer(zygote_sock, nvl, 0); if (nvl == NULL) return (-1); @@ -81,6 +88,13 @@ zygote_clone(zygote_func_t *func, int *c return (0); } +int +zygote_clone_service_execute(int *chanfdp, int *procfdp) +{ + + return (zygote_clone(ZYGOTE_SERVICE_EXECUTE, chanfdp, procfdp)); +} + /* * This function creates sandboxes on-demand whoever has access to it via * 'sock' socket. Function sends two descriptors to the caller: process @@ -93,6 +107,7 @@ zygote_main(int sock) int error, procfd; int chanfd[2]; nvlist_t *nvlin, *nvlout; + uint64_t funcidx; zygote_func_t *func; pid_t pid; @@ -109,10 +124,17 @@ zygote_main(int sock) } continue; } - func = (zygote_func_t *)(uintptr_t)nvlist_get_number(nvlin, - "func"); + funcidx = nvlist_get_number(nvlin, "funcidx"); nvlist_destroy(nvlin); + switch (funcidx) { + case ZYGOTE_SERVICE_EXECUTE: + func = service_execute; + break; + default: + exit(0); + } + /* * Someone is requesting a new process, create one. */ Modified: head/lib/libcasper/libcasper/zygote.h ============================================================================== --- head/lib/libcasper/libcasper/zygote.h Thu Mar 23 14:12:21 2017 (r315861) +++ head/lib/libcasper/libcasper/zygote.h Thu Mar 23 14:35:21 2017 (r315862) @@ -36,6 +36,12 @@ typedef void zygote_func_t(int); int zygote_init(void); -int zygote_clone(zygote_func_t *func, int *chanfdp, int *procfdp); +int zygote_clone(uint64_t funcidx, int *chanfdp, int *procfdp); +int zygote_clone_service_execute(int *chanfdp, int *procfdp); + +/* + * Functions reachable via zygote_clone(). + */ +zygote_func_t service_execute; #endif /* !_ZYGOTE_H_ */ From owner-svn-src-head@freebsd.org Thu Mar 23 15:44:51 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DEC78D182E3; Thu, 23 Mar 2017 15:44:51 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: from mail-wr0-f177.google.com (mail-wr0-f177.google.com [209.85.128.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7FB801B37; Thu, 23 Mar 2017 15:44:51 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: by mail-wr0-f177.google.com with SMTP id y90so32601066wrb.0; Thu, 23 Mar 2017 08:44:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:reply-to:in-reply-to:references :from:date:message-id:subject:to:cc; bh=//zf2ZU/SehNHT2vLFRMmva5OkObUllZWCXTYcWLF5A=; b=tSbxFwyPdPzgTliR5aoZ1hBdC7/1hf11Hqe5gNU+2rxuQ/t+Y/4iQVE+m6iOlhoNDK 8gl4h9TDqnmTJR1zM7fAyth6CL65YcAko0XNw57ms0xUJlmyAaCTEfo4iNq+ffHUScfk R2yNsZw63QUM2kLfTQQ6BarjMDFEHdhXxIssxBjMYKV1dgD0H9wK/FynI52M3WbMRGMy qmHzSj3JypkcmR52v6IoQ1+ItumDIEiZSLFevvCBTex/5o03r/QuykC98fEc7JjQL9BW HJ86xOA/Gv0BfbY28iXGziGMHj8Qf2WyyGZ3T/DEviQkrqDoxqwk9/ZZK9jCU9os4mYu DkQA== X-Gm-Message-State: AFeK/H3STln3EAekDajSTge2Tnfc4AtE/9XK0rNwPm8MBdPzRaCqJQ7veMkPnsAOYCuZ9A== X-Received: by 10.223.161.156 with SMTP id u28mr3055475wru.203.1490282483457; Thu, 23 Mar 2017 08:21:23 -0700 (PDT) Received: from mail-wr0-f176.google.com (mail-wr0-f176.google.com. [209.85.128.176]) by smtp.gmail.com with ESMTPSA id p38sm2121518wrb.46.2017.03.23.08.21.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 23 Mar 2017 08:21:23 -0700 (PDT) Received: by mail-wr0-f176.google.com with SMTP id u108so149755267wrb.3; Thu, 23 Mar 2017 08:21:23 -0700 (PDT) X-Received: by 10.223.160.243 with SMTP id n48mr3357852wrn.198.1490282483163; Thu, 23 Mar 2017 08:21:23 -0700 (PDT) MIME-Version: 1.0 Reply-To: cem@freebsd.org Received: by 10.80.169.4 with HTTP; Thu, 23 Mar 2017 08:21:22 -0700 (PDT) In-Reply-To: <201703231048.v2NAmAFU056867@repo.freebsd.org> References: <201703231048.v2NAmAFU056867@repo.freebsd.org> From: Conrad Meyer Date: Thu, 23 Mar 2017 08:21:22 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r315856 - in head/sys/compat/linuxkpi/common: include/linux src To: Hans Petter Selasky Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 15:44:52 -0000 On Thu, Mar 23, 2017 at 3:48 AM, Hans Petter Selasky wrote: > Author: hselasky > Date: Thu Mar 23 10:48:10 2017 > New Revision: 315856 > URL: https://svnweb.freebsd.org/changeset/base/315856 > > Log: > Add support for ratelimited printouts in the LinuxKPI. > > ... --- head/sys/compat/linuxkpi/common/include/linux/kernel.h Thu Mar 23 10:43:29 2017 (r315855) > +++ head/sys/compat/linuxkpi/common/include/linux/kernel.h Thu Mar 23 10:48:10 2017 (r315856) > @@ -224,6 +224,11 @@ scnprintf(char *buf, size_t size, const > log_once(LOG_INFO, pr_fmt(fmt), ##__VA_ARGS__) > #define pr_cont(fmt, ...) \ > printk(KERN_CONT fmt, ##__VA_ARGS__) > +#define pr_warn_ratelimited(...) do { \ > + static time_t __ratelimited; \ > + if (linux_ratelimited(&__ratelimited)) \ > + pr_warning(__VA_ARGS__); \ > +} while (0) > > #ifndef WARN > #define WARN(condition, ...) ({ \ > @@ -331,4 +336,6 @@ abs64(int64_t x) > return (x < 0 ? -x : x); > } > > +extern bool linux_ratelimited(time_t *); > + > #endif /* _LINUX_KERNEL_H_ */ > > Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c > ============================================================================== > --- head/sys/compat/linuxkpi/common/src/linux_compat.c Thu Mar 23 10:43:29 2017 (r315855) > +++ head/sys/compat/linuxkpi/common/src/linux_compat.c Thu Mar 23 10:48:10 2017 (r315856) > @@ -1484,6 +1484,20 @@ __unregister_chrdev(unsigned int major, > bool linux_cpu_has_clflush; > #endif > > +bool > +linux_ratelimited(time_t *ptime) > +{ > + /* make sure uptime is not zero by OR'ing bit 31 */ > + time_t curr = time_uptime | (1U << 31); > + > + /* check if one or more seconds have passed */ > + if (*ptime != curr) { > + *ptime = curr; > + return (1); > + } > + return (0); > +} > + Hi Hans, Is there any reason to use this hand-rolled thing to limit ratelimited logging instead of ppsratecheck()? Best, Conrad From owner-svn-src-head@freebsd.org Thu Mar 23 15:56:16 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0BEAED1882C; Thu, 23 Mar 2017 15:56:16 +0000 (UTC) (envelope-from hps@selasky.org) Received: from mail.turbocat.net (turbocat.net [IPv6:2a01:4f8:c17:6c4b::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BF67A1370; Thu, 23 Mar 2017 15:56:15 +0000 (UTC) (envelope-from hps@selasky.org) Received: from hps2016.home.selasky.org (unknown [62.141.129.119]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.turbocat.net (Postfix) with ESMTPSA id 815B71FE085; Thu, 23 Mar 2017 16:55:13 +0100 (CET) Subject: Re: svn commit: r315856 - in head/sys/compat/linuxkpi/common: include/linux src To: cem@freebsd.org References: <201703231048.v2NAmAFU056867@repo.freebsd.org> Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org From: Hans Petter Selasky Message-ID: <16937453-2516-71e0-c5cb-b086ebf1444d@selasky.org> Date: Thu, 23 Mar 2017 16:55:21 +0100 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 15:56:16 -0000 On 03/23/17 16:21, Conrad Meyer wrote: > > Hi Hans, > > Is there any reason to use this hand-rolled thing to limit ratelimited > logging instead of ppsratecheck()? I can convert the code into using ppsratecheck(). I wasn't aware about that function. --HPS From owner-svn-src-head@freebsd.org Thu Mar 23 16:01:52 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 87721D18A50; Thu, 23 Mar 2017 16:01:52 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 473C11953; Thu, 23 Mar 2017 16:01:52 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NG1pCo084839; Thu, 23 Mar 2017 16:01:51 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NG1pIq084838; Thu, 23 Mar 2017 16:01:51 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201703231601.v2NG1pIq084838@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Thu, 23 Mar 2017 16:01:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315863 - head/sys/compat/linuxkpi/common/include/linux X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 16:01:52 -0000 Author: hselasky Date: Thu Mar 23 16:01:51 2017 New Revision: 315863 URL: https://svnweb.freebsd.org/changeset/base/315863 Log: Add proper error checking for the string to number conversion functions in the LinuxKPI. MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/kernel.h Modified: head/sys/compat/linuxkpi/common/include/linux/kernel.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/kernel.h Thu Mar 23 14:35:21 2017 (r315862) +++ head/sys/compat/linuxkpi/common/include/linux/kernel.h Thu Mar 23 16:01:51 2017 (r315863) @@ -256,11 +256,98 @@ scnprintf(char *buf, size_t size, const #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -#define simple_strtoul(...) strtoul(__VA_ARGS__) -#define simple_strtol(...) strtol(__VA_ARGS__) -#define kstrtol(a,b,c) ({*(c) = strtol(a,0,b); 0;}) -#define kstrtoint(a,b,c) ({*(c) = strtol(a,0,b); 0;}) -#define kstrtouint(a,b,c) ({*(c) = strtol(a,0,b); 0;}) +static inline unsigned long long +simple_strtoull(const char *cp, char **endp, unsigned int base) +{ + return (strtouq(cp, endp, base)); +} + +static inline long long +simple_strtoll(const char *cp, char **endp, unsigned int base) +{ + return (strtoq(cp, endp, base)); +} + +static inline unsigned long +simple_strtoul(const char *cp, char **endp, unsigned int base) +{ + return (strtoul(cp, endp, base)); +} + +static inline long +simple_strtol(const char *cp, char **endp, unsigned int base) +{ + return (strtol(cp, endp, base)); +} + +static inline int +kstrtoul(const char *cp, unsigned int base, unsigned long *res) +{ + char *end; + + *res = strtoul(cp, &end, base); + + if (*cp == 0 || *end != 0) + return (-EINVAL); + return (0); +} + +static inline int +kstrtol(const char *cp, unsigned int base, long *res) +{ + char *end; + + *res = strtol(cp, &end, base); + + if (*cp == 0 || *end != 0) + return (-EINVAL); + return (0); +} + +static inline int +kstrtoint(const char *cp, unsigned int base, int *res) +{ + char *end; + long temp; + + *res = temp = strtol(cp, &end, base); + + if (*cp == 0 || *end != 0) + return (-EINVAL); + if (temp != (int)temp) + return (-ERANGE); + return (0); +} + +static inline int +kstrtouint(const char *cp, unsigned int base, unsigned int *res) +{ + char *end; + unsigned long temp; + + *res = temp = strtoul(cp, &end, base); + + if (*cp == 0 || *end != 0) + return (-EINVAL); + if (temp != (unsigned int)temp) + return (-ERANGE); + return (0); +} + +static inline int +kstrtou32(const char *cp, unsigned int base, u32 *res) +{ + char *end; + unsigned long temp; + + *res = temp = strtoul(cp, &end, base); + + if (*cp == 0 || *end != 0) + return (-EINVAL); + if (temp != (u32)temp) + return (-ERANGE); + return (0); +} #define min(x, y) ((x) < (y) ? (x) : (y)) #define max(x, y) ((x) > (y) ? (x) : (y)) From owner-svn-src-head@freebsd.org Thu Mar 23 16:23:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8B9ABD1A292; Thu, 23 Mar 2017 16:23:56 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 664B8185D; Thu, 23 Mar 2017 16:23:56 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NGNtab094867; Thu, 23 Mar 2017 16:23:55 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NGNttr094863; Thu, 23 Mar 2017 16:23:55 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201703231623.v2NGNttr094863@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Thu, 23 Mar 2017 16:23:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315864 - in head/sys/compat/linuxkpi/common: include/linux src X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 16:23:56 -0000 Author: hselasky Date: Thu Mar 23 16:23:55 2017 New Revision: 315864 URL: https://svnweb.freebsd.org/changeset/base/315864 Log: Use ppsratecheck() for ratelimiting in the LinuxKPI. Suggested by: cem @ MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/device.h head/sys/compat/linuxkpi/common/include/linux/kernel.h head/sys/compat/linuxkpi/common/src/linux_compat.c Modified: head/sys/compat/linuxkpi/common/include/linux/device.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/device.h Thu Mar 23 16:01:51 2017 (r315863) +++ head/sys/compat/linuxkpi/common/include/linux/device.h Thu Mar 23 16:23:55 2017 (r315864) @@ -145,13 +145,13 @@ show_class_attr_string(struct class *cla device_printf((dev)->bsddev, fmt, ##__VA_ARGS__) #define dev_err_ratelimited(dev, ...) do { \ - static time_t __ratelimited; \ + static linux_ratelimit_t __ratelimited; \ if (linux_ratelimited(&__ratelimited)) \ dev_err(dev, __VA_ARGS__); \ } while (0) #define dev_warn_ratelimited(dev, ...) do { \ - static time_t __ratelimited; \ + static linux_ratelimit_t __ratelimited; \ if (linux_ratelimited(&__ratelimited)) \ dev_warn(dev, __VA_ARGS__); \ } while (0) Modified: head/sys/compat/linuxkpi/common/include/linux/kernel.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/kernel.h Thu Mar 23 16:01:51 2017 (r315863) +++ head/sys/compat/linuxkpi/common/include/linux/kernel.h Thu Mar 23 16:23:55 2017 (r315864) @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -225,7 +226,7 @@ scnprintf(char *buf, size_t size, const #define pr_cont(fmt, ...) \ printk(KERN_CONT fmt, ##__VA_ARGS__) #define pr_warn_ratelimited(...) do { \ - static time_t __ratelimited; \ + static linux_ratelimit_t __ratelimited; \ if (linux_ratelimited(&__ratelimited)) \ pr_warning(__VA_ARGS__); \ } while (0) @@ -423,6 +424,15 @@ abs64(int64_t x) return (x < 0 ? -x : x); } -extern bool linux_ratelimited(time_t *); +typedef struct linux_ratelimit { + struct timeval lasttime; + int counter; +} linux_ratelimit_t; + +static inline bool +linux_ratelimited(linux_ratelimit_t *rl) +{ + return (ppsratecheck(&rl->lasttime, &rl->counter, 1)); +} #endif /* _LINUX_KERNEL_H_ */ Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c ============================================================================== --- head/sys/compat/linuxkpi/common/src/linux_compat.c Thu Mar 23 16:01:51 2017 (r315863) +++ head/sys/compat/linuxkpi/common/src/linux_compat.c Thu Mar 23 16:23:55 2017 (r315864) @@ -1484,20 +1484,6 @@ __unregister_chrdev(unsigned int major, bool linux_cpu_has_clflush; #endif -bool -linux_ratelimited(time_t *ptime) -{ - /* make sure uptime is not zero by OR'ing bit 31 */ - time_t curr = time_uptime | (1U << 31); - - /* check if one or more seconds have passed */ - if (*ptime != curr) { - *ptime = curr; - return (1); - } - return (0); -} - static void linux_compat_init(void *arg) { From owner-svn-src-head@freebsd.org Thu Mar 23 18:07:47 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4F4DBD1A346; Thu, 23 Mar 2017 18:07:47 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: from mail-wr0-f178.google.com (mail-wr0-f178.google.com [209.85.128.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E2D6D1608; Thu, 23 Mar 2017 18:07:46 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: by mail-wr0-f178.google.com with SMTP id l37so153115739wrc.1; Thu, 23 Mar 2017 11:07:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:reply-to:in-reply-to:references :from:date:message-id:subject:to:cc:content-transfer-encoding; bh=nneNp4oc9fnVGljXn4GK6u4oEUW4Ycgdx6vVaO0qUQM=; b=dG0Z/h4naUgHAGv+Aal6mAuiBmRydSgC4Ye8fnl2yDyX1NfbYxC6tHEOdgXpGpc27V Mvv0IoUx+Ok+urIgBrTEQO2bGu7tsDPMOADYEkVAJulZcH1kZvQC37tCclmgpYt7+k3M YkJ6ABJ3SoFZLLauaqLV4eZMDkyyq8O8gm8oZKRv/P+qFiu1QRbkNz548SiuS1SrpX/H OS4F7sQa0ENAnEFdSthnwePNJdgijLUD42k1h4hv3qrT10uKEnHfgXjh2ZqVX5BT1dmC dGaF9GmrLET+wWdX7rtwqARlEoh0jYkNxpsk/1++VLyDuSiK3edSKQwwN+ZfS74wmKjo 9ONw== X-Gm-Message-State: AFeK/H2ruBX9UYHmdaWcC3icMVbOO75L1iSt0QlVPzSoN9QG3XrTjS+aEUeVBEduGZuHEA== X-Received: by 10.223.139.5 with SMTP id n5mr3073843wra.200.1490282315688; Thu, 23 Mar 2017 08:18:35 -0700 (PDT) Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com. [74.125.82.46]) by smtp.gmail.com with ESMTPSA id w99sm6240602wrb.3.2017.03.23.08.18.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 23 Mar 2017 08:18:35 -0700 (PDT) Received: by mail-wm0-f46.google.com with SMTP id n11so63982584wma.1; Thu, 23 Mar 2017 08:18:35 -0700 (PDT) X-Received: by 10.28.111.136 with SMTP id c8mr3367293wmi.128.1490282315401; Thu, 23 Mar 2017 08:18:35 -0700 (PDT) MIME-Version: 1.0 Reply-To: cem@freebsd.org Received: by 10.80.169.4 with HTTP; Thu, 23 Mar 2017 08:18:34 -0700 (PDT) In-Reply-To: <20170323205948.N2588@besplex.bde.org> References: <201703230834.v2N8YVDA003255@repo.freebsd.org> <20170323205948.N2588@besplex.bde.org> From: Conrad Meyer Date: Thu, 23 Mar 2017 08:18:34 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r315850 - head/sys/boot/forth To: Bruce Evans Cc: =?UTF-8?Q?Dag=2DErling_Sm=C3=B8rgrav?= , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 18:07:47 -0000 On Thu, Mar 23, 2017 at 4:21 AM, Bruce Evans wrote: > On Thu, 23 Mar 2017, [UTF-8] Dag-Erling Sm=C3=B8rgrav wrote: > >> Log: >> The original author abused Nd (one-line description, used by makewhatis= ) >> for its side effect of producing an en-dash. This broke whatis with >> newer versions of mdocml. Use \(en instead. > > > Nd (or is it mumble-dash?) is broken for all man pages. Old man renders > the dash for Nd as 2 hyphens in ascii. New man renders it as 1 hyphen in > ascii. postscript output is even more broken. Old man renders the dash > for Nd as an especially wide one. New man still seems to render it as 1 > hyphen, and hyphens are especially narrow in postscript output for new > man (they are 1.5 to 2 times narrower than with old man, and that is with > a larger font for the smaller hyphens). Altogther, the dash for Nd is > about 4 times larger with old man after adjusting for the font size > (about 3 average characters wide instead of 3/4). > > Whatever the dash for Nd is, it shouldn't look like a hyphen. Yep. In this context an 'em' dash should be used instead of an 'en' dash. Theoretically, there also should not be spaces around the dashes. I'm not sure that's easy to do in manual pages, though. http://www.thepunctuationguide.com/em-dash.html http://www.thepunctuationguide.com/en-dash.html Best, Conrad From owner-svn-src-head@freebsd.org Thu Mar 23 19:07:53 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C34A9D1A7B8; Thu, 23 Mar 2017 19:07:53 +0000 (UTC) (envelope-from rdivacky@vlakno.cz) Received: from vlakno.cz (mail.vlakno.cz [91.217.96.224]) by mx1.freebsd.org (Postfix) with ESMTP id 854BA1A98; Thu, 23 Mar 2017 19:07:52 +0000 (UTC) (envelope-from rdivacky@vlakno.cz) Received: by vlakno.cz (Postfix, from userid 1002) id 450B912CB65; Thu, 23 Mar 2017 19:58:53 +0100 (CET) Date: Thu, 23 Mar 2017 19:58:53 +0100 From: Roman Divacky To: Warner Losh Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315773 - head/sbin/devd Message-ID: <20170323185853.GA87388@vlakno.cz> References: <201703230236.v2N2apvX051799@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201703230236.v2N2apvX051799@repo.freebsd.org> User-Agent: Mutt/1.8.0 (2017-02-23) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 19:07:53 -0000 On Thu, Mar 23, 2017 at 02:36:51AM +0000, Warner Losh wrote: > Author: imp > Date: Thu Mar 23 02:36:51 2017 > New Revision: 315773 > URL: https://svnweb.freebsd.org/changeset/base/315773 > > Log: > Implement quote escaping. String values may now contain " if you > it is preceded by \. > > foo="I \"like\" C++" > > gives the value 'I "like" C++' to the variable 'foo'. If a character > other than " follows the \, both the \ and that character are passed > through. > > Differential Revision: https://reviews.freebsd.org/D6286 > Sponsored by: Netflix > > Modified: > head/sbin/devd/devd.cc > head/sbin/devd/devd.hh > > Modified: head/sbin/devd/devd.cc > ============================================================================== > --- head/sbin/devd/devd.cc Thu Mar 23 02:33:27 2017 (r315772) > +++ head/sbin/devd/devd.cc Thu Mar 23 02:36:51 2017 (r315773) > @@ -411,6 +411,32 @@ var_list::is_set(const string &var) cons > return (_vars.find(var) != _vars.end()); > } > > +/** fix_value > + * > + * Removes quoted characters that have made it this far. \" are > + * converted to ". For all other characters, both \ and following > + * character. So the string 'fre\:\"' is translated to 'fred\:"'. > + */ > +const std::string & > +var_list::fix_value(const std::string &val) const > +{ > + char *tmp, *dst; > + const char *src; > + std::string *rv; > + > + dst = tmp = new char[val.length()]; > + src = val.c_str(); > + while (*src) { > + if (*src == '\\' && src[1] == '"') > + src++; > + else > + *dst++ = *src++; > + } > + rv = new string(tmp); > + delete tmp; > + return *rv; > +} Can the temporary char[] be stack allocated? Also, when returning a reference to a heap allocated string who is responsible for freeing it? Perhaps you can just return std::string and let the compiler optimize it? Roman From owner-svn-src-head@freebsd.org Thu Mar 23 19:29:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1B497CBB44B; Thu, 23 Mar 2017 19:29:15 +0000 (UTC) (envelope-from landonf@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A6C151945; Thu, 23 Mar 2017 19:29:14 +0000 (UTC) (envelope-from landonf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NJTDlY068903; Thu, 23 Mar 2017 19:29:13 GMT (envelope-from landonf@FreeBSD.org) Received: (from landonf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NJTDNS068895; Thu, 23 Mar 2017 19:29:13 GMT (envelope-from landonf@FreeBSD.org) Message-Id: <201703231929.v2NJTDNS068895@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: landonf set sender to landonf@FreeBSD.org using -f From: "Landon J. Fuller" Date: Thu, 23 Mar 2017 19:29:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315866 - in head/sys: dev/bhnd/nvram mips/broadcom X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 19:29:15 -0000 Author: landonf Date: Thu Mar 23 19:29:12 2017 New Revision: 315866 URL: https://svnweb.freebsd.org/changeset/base/315866 Log: [mips/broadcom]: Early boot NVRAM support Add support for early boot access to NVRAM variables, using a new bhnd_nvram_data_getvar_direct() API to support zero-allocation direct reading of NVRAM variables from a bhnd_nvram_io instance backed by the CFE NVRAM device. Approved by: adrian (mentor) Differential Revision: https://reviews.freebsd.org/D9913 Modified: head/sys/dev/bhnd/nvram/bhnd_nvram_data.c head/sys/dev/bhnd/nvram/bhnd_nvram_data.h head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcm.c head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcmraw.c head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcmvar.h head/sys/dev/bhnd/nvram/bhnd_nvram_data_btxt.c head/sys/dev/bhnd/nvram/bhnd_nvram_data_sprom.c head/sys/dev/bhnd/nvram/bhnd_nvram_data_sprom_subr.c head/sys/dev/bhnd/nvram/bhnd_nvram_data_spromvar.h head/sys/dev/bhnd/nvram/bhnd_nvram_data_tlv.c head/sys/dev/bhnd/nvram/bhnd_nvram_datavar.h head/sys/dev/bhnd/nvram/bhnd_sprom.c head/sys/mips/broadcom/bcm_machdep.c head/sys/mips/broadcom/bcm_machdep.h head/sys/mips/broadcom/bcm_nvram_cfe.c head/sys/mips/broadcom/bcm_nvram_cfevar.h Modified: head/sys/dev/bhnd/nvram/bhnd_nvram_data.c ============================================================================== --- head/sys/dev/bhnd/nvram/bhnd_nvram_data.c Thu Mar 23 17:11:34 2017 (r315865) +++ head/sys/dev/bhnd/nvram/bhnd_nvram_data.c Thu Mar 23 19:29:12 2017 (r315866) @@ -228,6 +228,41 @@ bhnd_nvram_data_probe_classes(struct bhn } /** + * Read a variable directly from @p io and decode as @p type. + * + * This may be used to perform reading of NVRAM variables during the very + * early boot process, prior to the availability of the kernel allocator. + * + * @param cls An NVRAM class capable of parsing @p io. + * @param io NVRAM data to be parsed. + * @param name The raw name of the variable to be fetched, + * including any device path (/pci/1/1/varname) or + * alias prefix (0:varname). + * @param[out] buf On success, the requested value will be written + * to this buffer. This argment may be NULL if + * the value is not desired. + * @param[in,out] len The capacity of @p buf. On success, will be set + * to the actual size of the requested value. + * @param type The data type to be written to @p buf. + * + * @retval 0 success + * @retval ENOMEM If @p buf is non-NULL and a buffer of @p len is too + * small to hold the requested value. + * @retval ENOENT If @p name is not found in @p io. + * @retval EFTYPE If the variable data cannot be coerced to @p type. + * @retval ERANGE If value coercion would overflow @p type. + * @retval non-zero If parsing @p io otherwise fails, a regular unix error + * code will be returned. + */ +int +bhnd_nvram_data_getvar_direct(bhnd_nvram_data_class *cls, + struct bhnd_nvram_io *io, const char *name, void *buf, size_t *len, + bhnd_nvram_type type) +{ + return (cls->op_getvar_direct(io, name, buf, len, type)); +} + +/** * Allocate and initialize a new instance of data class @p cls, copying and * parsing NVRAM data from @p io. * Modified: head/sys/dev/bhnd/nvram/bhnd_nvram_data.h ============================================================================== --- head/sys/dev/bhnd/nvram/bhnd_nvram_data.h Thu Mar 23 17:11:34 2017 (r315865) +++ head/sys/dev/bhnd/nvram/bhnd_nvram_data.h Thu Mar 23 19:29:12 2017 (r315866) @@ -105,6 +105,11 @@ int bhnd_nvram_data_probe_classes( bhnd_nvram_data_class *classes[], size_t num_classes); +int bhnd_nvram_data_getvar_direct( + bhnd_nvram_data_class *cls, + struct bhnd_nvram_io *io, const char *name, + void *buf, size_t *len, bhnd_nvram_type type); + int bhnd_nvram_data_new(bhnd_nvram_data_class *cls, struct bhnd_nvram_data **nv, struct bhnd_nvram_io *io); Modified: head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcm.c ============================================================================== --- head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcm.c Thu Mar 23 17:11:34 2017 (r315865) +++ head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcm.c Thu Mar 23 19:29:12 2017 (r315866) @@ -144,9 +144,229 @@ bhnd_nvram_bcm_probe(struct bhnd_nvram_i if (le32toh(hdr.magic) != BCM_NVRAM_MAGIC) return (ENXIO); + if (le32toh(hdr.size) > bhnd_nvram_io_getsize(io)) + return (ENXIO); + return (BHND_NVRAM_DATA_PROBE_DEFAULT); } +/** + * Parser states for bhnd_nvram_bcm_getvar_direct_common(). + */ +typedef enum { + BCM_PARSE_KEY_START, + BCM_PARSE_KEY_CONT, + BCM_PARSE_KEY, + BCM_PARSE_NEXT_KEY, + BCM_PARSE_VALUE_START, + BCM_PARSE_VALUE +} bcm_parse_state; + +static int +bhnd_nvram_bcm_getvar_direct(struct bhnd_nvram_io *io, const char *name, + void *outp, size_t *olen, bhnd_nvram_type otype) +{ + return (bhnd_nvram_bcm_getvar_direct_common(io, name, outp, olen, otype, + true)); +} + +/** + * Common BCM/BCMRAW implementation of bhnd_nvram_getvar_direct(). + */ +int +bhnd_nvram_bcm_getvar_direct_common(struct bhnd_nvram_io *io, const char *name, + void *outp, size_t *olen, bhnd_nvram_type otype, bool have_header) +{ + struct bhnd_nvram_bcmhdr hdr; + char buf[512]; + bcm_parse_state pstate; + size_t limit, offset; + size_t buflen, bufpos; + size_t namelen, namepos; + size_t vlen; + int error; + + limit = bhnd_nvram_io_getsize(io); + offset = 0; + + /* Fetch and validate the header */ + if (have_header) { + if ((error = bhnd_nvram_io_read(io, offset, &hdr, sizeof(hdr)))) + return (error); + + if (le32toh(hdr.magic) != BCM_NVRAM_MAGIC) + return (ENXIO); + + offset += sizeof(hdr); + limit = bhnd_nv_ummin(le32toh(hdr.size), limit); + } + + /* Loop our parser until we find the requested variable, or hit EOF */ + pstate = BCM_PARSE_KEY_START; + buflen = 0; + bufpos = 0; + namelen = strlen(name); + namepos = 0; + vlen = 0; + + while ((offset - bufpos) < limit) { + BHND_NV_ASSERT(bufpos <= buflen, + ("buf position invalid (%zu > %zu)", bufpos, buflen)); + BHND_NV_ASSERT(buflen <= sizeof(buf), + ("buf length invalid (%zu > %zu", buflen, sizeof(buf))); + + /* Repopulate our parse buffer? */ + if (buflen - bufpos == 0) { + BHND_NV_ASSERT(offset < limit, ("offset overrun")); + + buflen = bhnd_nv_ummin(sizeof(buf), limit - offset); + bufpos = 0; + + error = bhnd_nvram_io_read(io, offset, buf, buflen); + if (error) + return (error); + + offset += buflen; + } + + switch (pstate) { + case BCM_PARSE_KEY_START: + BHND_NV_ASSERT(buflen - bufpos > 0, ("empty buffer!")); + + /* An extra '\0' denotes NVRAM EOF */ + if (buf[bufpos] == '\0') + return (ENOENT); + + /* Reset name matching position */ + namepos = 0; + + /* Start name matching */ + pstate = BCM_PARSE_KEY_CONT; + break; + + case BCM_PARSE_KEY_CONT: { + size_t navail, nleft; + + nleft = namelen - namepos; + navail = bhnd_nv_ummin(buflen - bufpos, nleft); + + if (strncmp(name+namepos, buf+bufpos, navail) == 0) { + /* Matched */ + namepos += navail; + bufpos += navail; + + /* If we've matched the full variable name, + * look for its trailing delimiter */ + if (namepos == namelen) + pstate = BCM_PARSE_KEY; + } else { + /* No match; advance to next entry and restart + * name matching */ + pstate = BCM_PARSE_NEXT_KEY; + } + + break; + } + + case BCM_PARSE_KEY: + BHND_NV_ASSERT(buflen - bufpos > 0, ("empty buffer!")); + + if (buf[bufpos] == '=') { + /* Key fully matched; advance past '=' and + * parse the value */ + bufpos++; + pstate = BCM_PARSE_VALUE_START; + } else { + /* No match; advance to next entry and restart + * name matching */ + pstate = BCM_PARSE_NEXT_KEY; + } + + break; + + case BCM_PARSE_NEXT_KEY: { + const char *p; + + /* Scan for a '\0' terminator */ + p = memchr(buf+bufpos, '\0', buflen - bufpos); + + if (p != NULL) { + /* Found entry terminator; restart name + * matching at next entry */ + pstate = BCM_PARSE_KEY_START; + bufpos = (p - buf) + 1 /* skip '\0' */; + } else { + /* Consumed full buffer looking for '\0'; + * force repopulation of the buffer and + * retry */ + bufpos = buflen; + } + + break; + } + + case BCM_PARSE_VALUE_START: { + const char *p; + + /* Scan for a '\0' terminator */ + p = memchr(buf+bufpos, '\0', buflen - bufpos); + + if (p != NULL) { + /* Found entry terminator; parse the value */ + vlen = p - &buf[bufpos]; + pstate = BCM_PARSE_VALUE; + + } else if (p == NULL && offset == limit) { + /* Hit EOF without a terminating '\0'; + * treat the entry as implicitly terminated */ + vlen = buflen - bufpos; + pstate = BCM_PARSE_VALUE; + + } else if (p == NULL && bufpos > 0) { + size_t nread; + + /* Move existing value data to start of + * buffer */ + memmove(buf, buf+bufpos, buflen - bufpos); + buflen = bufpos; + bufpos = 0; + + /* Populate full buffer to allow retry of + * value parsing */ + nread = bhnd_nv_ummin(sizeof(buf) - buflen, + limit - offset); + + error = bhnd_nvram_io_read(io, offset, + buf+buflen, nread); + if (error) + return (error); + + offset += nread; + buflen += nread; + } else { + /* Value exceeds our buffer capacity */ + BHND_NV_LOG("cannot parse value for '%s' " + "(exceeds %zu byte limit)\n", name, + sizeof(buf)); + + return (ENXIO); + } + + break; + } + + case BCM_PARSE_VALUE: + BHND_NV_ASSERT(vlen <= buflen, ("value buf overrun")); + + return (bhnd_nvram_value_coerce(buf+bufpos, vlen, + BHND_NVRAM_TYPE_STRING, outp, olen, otype)); + } + } + + /* Variable not found */ + return (ENOENT); +} + static int bhnd_nvram_bcm_serialize(bhnd_nvram_data_class *cls, bhnd_nvram_plist *props, bhnd_nvram_plist *options, void *outp, size_t *olen) Modified: head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcmraw.c ============================================================================== --- head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcmraw.c Thu Mar 23 17:11:34 2017 (r315865) +++ head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcmraw.c Thu Mar 23 19:29:12 2017 (r315866) @@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$"); #include "bhnd_nvram_private.h" #include "bhnd_nvram_datavar.h" +#include "bhnd_nvram_data_bcmvar.h" /* * Broadcom-RAW NVRAM data class. @@ -133,6 +134,14 @@ bhnd_nvram_bcmraw_probe(struct bhnd_nvra } static int +bhnd_nvram_bcmraw_getvar_direct(struct bhnd_nvram_io *io, const char *name, + void *buf, size_t *len, bhnd_nvram_type type) +{ + return (bhnd_nvram_bcm_getvar_direct_common(io, name, buf, len, type, + false)); +} + +static int bhnd_nvram_bcmraw_serialize(bhnd_nvram_data_class *cls, bhnd_nvram_plist *props, bhnd_nvram_plist *options, void *outp, size_t *olen) { Modified: head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcmvar.h ============================================================================== --- head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcmvar.h Thu Mar 23 17:11:34 2017 (r315865) +++ head/sys/dev/bhnd/nvram/bhnd_nvram_data_bcmvar.h Thu Mar 23 19:29:12 2017 (r315866) @@ -69,4 +69,8 @@ struct bhnd_nvram_bcmhdr { uint32_t sdram_ncdl; /**< sdram_ncdl */ } __packed; +int bhnd_nvram_bcm_getvar_direct_common(struct bhnd_nvram_io *io, + const char *name, void *outp, size_t *olen, bhnd_nvram_type otype, + bool have_header); + #endif /* _BHND_NVRAM_BHND_NVRAM_BCMVAR_H_ */ Modified: head/sys/dev/bhnd/nvram/bhnd_nvram_data_btxt.c ============================================================================== --- head/sys/dev/bhnd/nvram/bhnd_nvram_data_btxt.c Thu Mar 23 17:11:34 2017 (r315865) +++ head/sys/dev/bhnd/nvram/bhnd_nvram_data_btxt.c Thu Mar 23 19:29:12 2017 (r315866) @@ -124,6 +124,226 @@ bhnd_nvram_btxt_probe(struct bhnd_nvram_ return (BHND_NVRAM_DATA_PROBE_MAYBE); } + +/** + * Parser states for bhnd_nvram_bcm_getvar_direct_common(). + */ +typedef enum { + BTXT_PARSE_LINE_START, + BTXT_PARSE_KEY, + BTXT_PARSE_KEY_END, + BTXT_PARSE_NEXT_LINE, + BTXT_PARSE_VALUE_START, + BTXT_PARSE_VALUE +} btxt_parse_state; + +static int +bhnd_nvram_btxt_getvar_direct(struct bhnd_nvram_io *io, const char *name, + void *outp, size_t *olen, bhnd_nvram_type otype) +{ + char buf[512]; + btxt_parse_state pstate; + size_t limit, offset; + size_t buflen, bufpos; + size_t namelen, namepos; + size_t vlen; + int error; + + limit = bhnd_nvram_io_getsize(io); + offset = 0; + + /* Loop our parser until we find the requested variable, or hit EOF */ + pstate = BTXT_PARSE_LINE_START; + buflen = 0; + bufpos = 0; + namelen = strlen(name); + namepos = 0; + vlen = 0; + + while ((offset - bufpos) < limit) { + BHND_NV_ASSERT(bufpos <= buflen, + ("buf position invalid (%zu > %zu)", bufpos, buflen)); + BHND_NV_ASSERT(buflen <= sizeof(buf), + ("buf length invalid (%zu > %zu", buflen, sizeof(buf))); + + /* Repopulate our parse buffer? */ + if (buflen - bufpos == 0) { + BHND_NV_ASSERT(offset < limit, ("offset overrun")); + + buflen = bhnd_nv_ummin(sizeof(buf), limit - offset); + bufpos = 0; + + error = bhnd_nvram_io_read(io, offset, buf, buflen); + if (error) + return (error); + + offset += buflen; + } + + switch (pstate) { + case BTXT_PARSE_LINE_START: + BHND_NV_ASSERT(bufpos < buflen, ("empty buffer!")); + + /* Reset name matching position */ + namepos = 0; + + /* Trim any leading whitespace */ + while (bufpos < buflen && bhnd_nv_isspace(buf[bufpos])) + { + bufpos++; + } + + if (bufpos == buflen) { + /* Continue parsing the line */ + pstate = BTXT_PARSE_LINE_START; + } else if (bufpos < buflen && buf[bufpos] == '#') { + /* Comment; skip to next line */ + pstate = BTXT_PARSE_NEXT_LINE; + } else { + /* Start name matching */ + pstate = BTXT_PARSE_KEY; + } + + + break; + + case BTXT_PARSE_KEY: { + size_t navail, nleft; + + nleft = namelen - namepos; + navail = bhnd_nv_ummin(buflen - bufpos, nleft); + + if (strncmp(name+namepos, buf+bufpos, navail) == 0) { + /* Matched */ + namepos += navail; + bufpos += navail; + + if (namepos == namelen) { + /* Matched the full variable; look for + * its trailing delimiter */ + pstate = BTXT_PARSE_KEY_END; + } else { + /* Continue matching the name */ + pstate = BTXT_PARSE_KEY; + } + } else { + /* No match; advance to next entry and restart + * name matching */ + pstate = BTXT_PARSE_NEXT_LINE; + } + + break; + } + + case BTXT_PARSE_KEY_END: + BHND_NV_ASSERT(bufpos < buflen, ("empty buffer!")); + + if (buf[bufpos] == '=') { + /* Key fully matched; advance past '=' and + * parse the value */ + bufpos++; + pstate = BTXT_PARSE_VALUE_START; + } else { + /* No match; advance to next line and restart + * name matching */ + pstate = BTXT_PARSE_NEXT_LINE; + } + + break; + + case BTXT_PARSE_NEXT_LINE: { + const char *p; + + /* Scan for a '\r', '\n', or '\r\n' terminator */ + p = memchr(buf+bufpos, '\n', buflen - bufpos); + if (p == NULL) + p = memchr(buf+bufpos, '\r', buflen - bufpos); + + if (p != NULL) { + /* Found entry terminator; restart name + * matching at next line */ + pstate = BTXT_PARSE_LINE_START; + bufpos = (p - buf); + } else { + /* Consumed full buffer looking for newline; + * force repopulation of the buffer and + * retry */ + pstate = BTXT_PARSE_NEXT_LINE; + bufpos = buflen; + } + + break; + } + + case BTXT_PARSE_VALUE_START: { + const char *p; + + /* Scan for a terminating newline */ + p = memchr(buf+bufpos, '\n', buflen - bufpos); + if (p == NULL) + p = memchr(buf+bufpos, '\r', buflen - bufpos); + + if (p != NULL) { + /* Found entry terminator; parse the value */ + vlen = p - &buf[bufpos]; + pstate = BTXT_PARSE_VALUE; + + } else if (p == NULL && offset == limit) { + /* Hit EOF without a terminating newline; + * treat the entry as implicitly terminated */ + vlen = buflen - bufpos; + pstate = BTXT_PARSE_VALUE; + + } else if (p == NULL && bufpos > 0) { + size_t nread; + + /* Move existing value data to start of + * buffer */ + memmove(buf, buf+bufpos, buflen - bufpos); + buflen = bufpos; + bufpos = 0; + + /* Populate full buffer to allow retry of + * value parsing */ + nread = bhnd_nv_ummin(sizeof(buf) - buflen, + limit - offset); + + error = bhnd_nvram_io_read(io, offset, + buf+buflen, nread); + if (error) + return (error); + + offset += nread; + buflen += nread; + } else { + /* Value exceeds our buffer capacity */ + BHND_NV_LOG("cannot parse value for '%s' " + "(exceeds %zu byte limit)\n", name, + sizeof(buf)); + + return (ENXIO); + } + + break; + } + + case BTXT_PARSE_VALUE: + BHND_NV_ASSERT(vlen <= buflen, ("value buf overrun")); + + /* Trim any trailing whitespace */ + while (vlen > 0 && bhnd_nv_isspace(buf[bufpos+vlen-1])) + vlen--; + + /* Write the value to the caller's buffer */ + return (bhnd_nvram_value_coerce(buf+bufpos, vlen, + BHND_NVRAM_TYPE_STRING, outp, olen, otype)); + } + } + + /* Variable not found */ + return (ENOENT); +} + static int bhnd_nvram_btxt_serialize(bhnd_nvram_data_class *cls, bhnd_nvram_plist *props, bhnd_nvram_plist *options, void *outp, size_t *olen) Modified: head/sys/dev/bhnd/nvram/bhnd_nvram_data_sprom.c ============================================================================== --- head/sys/dev/bhnd/nvram/bhnd_nvram_data_sprom.c Thu Mar 23 17:11:34 2017 (r315865) +++ head/sys/dev/bhnd/nvram/bhnd_nvram_data_sprom.c Thu Mar 23 19:29:12 2017 (r315866) @@ -68,8 +68,7 @@ static const bhnd_sprom_layout *bhnd_nv static int bhnd_nvram_sprom_ident( struct bhnd_nvram_io *io, - const bhnd_sprom_layout **ident, - struct bhnd_nvram_io **shadow); + const bhnd_sprom_layout **ident); static int bhnd_nvram_sprom_write_var( bhnd_sprom_opcode_state *state, @@ -77,6 +76,13 @@ static int bhnd_nvram_sprom_write_var bhnd_nvram_val *value, struct bhnd_nvram_io *io); +static int bhnd_nvram_sprom_read_var( + struct bhnd_sprom_opcode_state *state, + struct bhnd_sprom_opcode_idx_entry *entry, + struct bhnd_nvram_io *io, + union bhnd_nvram_sprom_storage *storage, + bhnd_nvram_val *val); + static int bhnd_nvram_sprom_write_offset( const struct bhnd_nvram_vardefn *var, struct bhnd_nvram_io *data, @@ -153,10 +159,6 @@ bhnd_nvram_sprom_check_magic(struct bhnd * * @param io An I/O context mapping the SPROM data to be identified. * @param[out] ident On success, the identified SPROM layout. - * @param[out] shadow On success, a correctly sized iobuf instance mapping - * a copy of the identified SPROM image. The caller is - * responsible for deallocating this instance via - * bhnd_nvram_io_free() * * @retval 0 success * @retval non-zero If identifying @p io otherwise fails, a regular unix @@ -164,77 +166,69 @@ bhnd_nvram_sprom_check_magic(struct bhnd */ static int bhnd_nvram_sprom_ident(struct bhnd_nvram_io *io, - const bhnd_sprom_layout **ident, struct bhnd_nvram_io **shadow) + const bhnd_sprom_layout **ident) { - struct bhnd_nvram_io *buf; - uint8_t crc; - size_t crc_errors; - size_t sprom_sz_max; - int error; + uint8_t crc; + size_t crc_errors; + size_t nbytes; + int error; - /* Find the largest SPROM layout size */ - sprom_sz_max = 0; - for (size_t i = 0; i < bhnd_sprom_num_layouts; i++) { - sprom_sz_max = bhnd_nv_ummax(sprom_sz_max, - bhnd_sprom_layouts[i].size); - } - - /* Allocate backing buffer and initialize CRC state */ - buf = bhnd_nvram_iobuf_empty(0, sprom_sz_max); crc = BHND_NVRAM_CRC8_INITIAL; crc_errors = 0; + nbytes = 0; /* We iterate the SPROM layouts smallest to largest, allowing us to * perform incremental checksum calculation */ for (size_t i = 0; i < bhnd_sprom_num_layouts; i++) { const bhnd_sprom_layout *layout; - void *ptr; - size_t nbytes, nr; + u_char buf[512]; + size_t nread; uint16_t magic; uint8_t srev; bool crc_valid; bool have_magic; layout = &bhnd_sprom_layouts[i]; - nbytes = bhnd_nvram_io_getsize(buf); - if ((layout->flags & SPROM_LAYOUT_MAGIC_NONE)) { + have_magic = true; + if ((layout->flags & SPROM_LAYOUT_MAGIC_NONE)) have_magic = false; - } else { - have_magic = true; - } - /* Layout instances must be ordered from smallest to largest by - * the nvram_map compiler */ + /* + * Read image data and update CRC (errors are reported + * after the signature check) + * + * Layout instances must be ordered from smallest to largest by + * the nvram_map compiler, allowing us to incrementally update + * our CRC. + */ if (nbytes > layout->size) - BHND_NV_PANIC("SPROM layout is defined out-of-order"); + BHND_NV_PANIC("SPROM layout defined out-of-order"); - /* Calculate number of additional bytes to be read */ - nr = layout->size - nbytes; + nread = layout->size - nbytes; - /* Adjust the buffer size and fetch a write pointer */ - if ((error = bhnd_nvram_io_setsize(buf, layout->size))) - goto failed; + while (nread > 0) { + size_t nr; - error = bhnd_nvram_io_write_ptr(buf, nbytes, &ptr, nr, NULL); - if (error) - goto failed; + nr = bhnd_nv_ummin(nread, sizeof(buf)); + + if ((error = bhnd_nvram_io_read(io, nbytes, buf, nr))) + return (error); + + crc = bhnd_nvram_crc8(buf, nr, crc); + crc_valid = (crc == BHND_NVRAM_CRC8_VALID); + if (!crc_valid) + crc_errors++; - /* Read image data and update CRC (errors are reported - * after the signature check) */ - if ((error = bhnd_nvram_io_read(io, nbytes, ptr, nr))) - goto failed; - - crc = bhnd_nvram_crc8(ptr, nr, crc); - crc_valid = (crc == BHND_NVRAM_CRC8_VALID); - if (!crc_valid) - crc_errors++; + nread -= nr; + nbytes += nr; + } - /* Fetch SPROM revision */ - error = bhnd_nvram_io_read(buf, layout->srev_offset, &srev, + /* Read SPROM revision */ + error = bhnd_nvram_io_read(io, layout->srev_offset, &srev, sizeof(srev)); if (error) - goto failed; + return (error); /* Early sromrev 1 devices (specifically some BCM440x enet * cards) are reported to have been incorrectly programmed @@ -248,7 +242,7 @@ bhnd_nvram_sprom_ident(struct bhnd_nvram /* Check the magic value, skipping to the next layout on * failure. */ - error = bhnd_nvram_sprom_check_magic(buf, layout, &magic); + error = bhnd_nvram_sprom_check_magic(io, layout, &magic); if (error) { /* If the CRC is was valid, log the mismatch */ if (crc_valid || BHND_NV_VERBOSE) { @@ -256,8 +250,7 @@ bhnd_nvram_sprom_ident(struct bhnd_nvram "0x%hx (expected 0x%hx)\n", srev, magic, layout->magic_value); - error = ENXIO; - goto failed; + return (ENXIO); } continue; @@ -277,40 +270,93 @@ bhnd_nvram_sprom_ident(struct bhnd_nvram } /* Identified */ - *shadow = buf; *ident = layout; return (0); } - /* No match -- set error and fallthrough */ - error = ENXIO; + /* No match */ if (crc_errors > 0 && BHND_NV_VERBOSE) { BHND_NV_LOG("sprom parsing failed with %zu CRC errors\n", crc_errors); } -failed: - bhnd_nvram_io_free(buf); - return (error); + return (ENXIO); } static int bhnd_nvram_sprom_probe(struct bhnd_nvram_io *io) { const bhnd_sprom_layout *layout; - struct bhnd_nvram_io *shadow; int error; /* Try to parse the input */ - if ((error = bhnd_nvram_sprom_ident(io, &layout, &shadow))) + if ((error = bhnd_nvram_sprom_ident(io, &layout))) return (error); - /* Clean up the shadow iobuf */ - bhnd_nvram_io_free(shadow); - return (BHND_NVRAM_DATA_PROBE_DEFAULT); } +static int +bhnd_nvram_sprom_getvar_direct(struct bhnd_nvram_io *io, const char *name, + void *buf, size_t *len, bhnd_nvram_type type) +{ + const bhnd_sprom_layout *layout; + bhnd_sprom_opcode_state state; + const struct bhnd_nvram_vardefn *var; + size_t vid; + int error; + + /* Look up the variable definition and ID */ + if ((var = bhnd_nvram_find_vardefn(name)) == NULL) + return (ENOENT); + + vid = bhnd_nvram_get_vardefn_id(var); + + /* Identify the SPROM image layout */ + if ((error = bhnd_nvram_sprom_ident(io, &layout))) + return (error); + + /* Initialize SPROM layout interpreter */ + if ((error = bhnd_sprom_opcode_init(&state, layout))) { + BHND_NV_LOG("error initializing opcode state: %d\n", error); + return (ENXIO); + } + + /* Find SPROM layout entry for the requested variable */ + while ((error = bhnd_sprom_opcode_next_var(&state)) == 0) { + bhnd_sprom_opcode_idx_entry entry; + union bhnd_nvram_sprom_storage storage; + bhnd_nvram_val val; + + /* Fetch the variable's entry state */ + if ((error = bhnd_sprom_opcode_init_entry(&state, &entry))) + return (error); + + /* Match against expected VID */ + if (entry.vid != vid) + continue; + + /* Decode variable to a new value instance */ + error = bhnd_nvram_sprom_read_var(&state, &entry, io, &storage, + &val); + if (error) + return (error); + + /* Perform value coercion */ + error = bhnd_nvram_val_encode(&val, buf, len, type); + + /* Clean up */ + bhnd_nvram_val_release(&val); + return (error); + } + + /* Hit EOF without matching the requested variable? */ + if (error == ENOENT) + return (ENOENT); + + /* Some other parse error occured */ + return (error); +} /** * Return the SPROM layout definition for the given @p sromrev, or NULL if @@ -365,7 +411,7 @@ bhnd_nvram_sprom_write_var(bhnd_sprom_op var_base_type = bhnd_nvram_base_type(var->type); /* Fetch the element count from the SPROM variable layout definition */ - if ((error = bhnd_sprom_opcode_parse_var(state, entry))) + if ((error = bhnd_sprom_opcode_eval_var(state, entry))) return (error); nelem = state->var.nelem; @@ -717,7 +763,12 @@ bhnd_nvram_sprom_new(struct bhnd_nvram_d sp = (struct bhnd_nvram_sprom *)nv; /* Identify the SPROM input data */ - if ((error = bhnd_nvram_sprom_ident(io, &sp->layout, &sp->data))) + if ((error = bhnd_nvram_sprom_ident(io, &sp->layout))) + return (error); + + /* Copy SPROM image to our shadow buffer */ + sp->data = bhnd_nvram_iobuf_copy_range(io, 0, sp->layout->size); + if (sp->data == NULL) goto failed; /* Initialize SPROM binding eval state */ @@ -989,9 +1040,15 @@ bhnd_nvram_sprom_read_offset(const struc } /** - * Common variable decoding; fetches and decodes variable to @p val, - * using @p storage for actual data storage. + * Read a SPROM variable value from @p io. * + * @param state The SPROM opcode state describing the layout of @p io. + * @param entry The variable's SPROM opcode index entry. + * @param io The input I/O context. + * @param storage Storage to be used with @p val. + * @param[out] val Value instance to be initialized with the + * parsed variable data. + * * The returned @p val instance will hold a borrowed reference to @p storage, * and must be copied via bhnd_nvram_val_copy() if it will be referenced beyond * the lifetime of @p storage. @@ -1000,13 +1057,12 @@ bhnd_nvram_sprom_read_offset(const struc * via bhnd_nvram_val_release(). */ static int -bhnd_nvram_sprom_getvar_common(struct bhnd_nvram_data *nv, void *cookiep, +bhnd_nvram_sprom_read_var(struct bhnd_sprom_opcode_state *state, + struct bhnd_sprom_opcode_idx_entry *entry, struct bhnd_nvram_io *io, union bhnd_nvram_sprom_storage *storage, bhnd_nvram_val *val) { - struct bhnd_nvram_sprom *sp; - bhnd_sprom_opcode_idx_entry *entry; - const struct bhnd_nvram_vardefn *var; union bhnd_nvram_sprom_storage *inp; + const struct bhnd_nvram_vardefn *var; bhnd_nvram_type var_btype; uint32_t intv; size_t ilen, ipos, iwidth; @@ -1014,14 +1070,9 @@ bhnd_nvram_sprom_getvar_common(struct bh bool all_bits_set; int error; - sp = (struct bhnd_nvram_sprom *)nv; - entry = cookiep; - - BHND_NV_ASSERT(cookiep != NULL, ("NULL variable cookiep")); - /* Fetch canonical variable definition */ - var = SPROM_COOKIE_TO_NVRAM_VAR(cookiep); - BHND_NV_ASSERT(var != NULL, ("invalid cookiep %p", cookiep)); + var = bhnd_nvram_get_vardefn(entry->vid); + BHND_NV_ASSERT(var != NULL, ("invalid entry")); /* * Fetch the array length from the SPROM variable definition. @@ -1030,12 +1081,12 @@ bhnd_nvram_sprom_getvar_common(struct bh * canonical NVRAM variable definition, but some SPROM layouts may * define a smaller element count. */ - if ((error = bhnd_sprom_opcode_parse_var(&sp->state, entry))) { + if ((error = bhnd_sprom_opcode_eval_var(state, entry))) { BHND_NV_LOG("variable evaluation failed: %d\n", error); return (error); } - nelem = sp->state.var.nelem; + nelem = state->var.nelem; if (nelem > var->nelem) { BHND_NV_LOG("SPROM array element count %zu cannot be " "represented by '%s' element count of %hhu\n", nelem, @@ -1070,7 +1121,7 @@ bhnd_nvram_sprom_getvar_common(struct bh /* * Decode the SPROM data, iteratively decoding up to nelem values. */ - if ((error = bhnd_sprom_opcode_seek(&sp->state, entry))) { + if ((error = bhnd_sprom_opcode_seek(state, entry))) { BHND_NV_LOG("variable seek failed: %d\n", error); return (error); } @@ -1081,7 +1132,7 @@ bhnd_nvram_sprom_getvar_common(struct bh all_bits_set = true; else all_bits_set = false; - while ((error = bhnd_sprom_opcode_next_binding(&sp->state)) == 0) { + while ((error = bhnd_sprom_opcode_next_binding(state)) == 0) { bhnd_sprom_opcode_bind *binding; bhnd_sprom_opcode_var *binding_var; bhnd_nvram_type intv_type; @@ -1091,12 +1142,12 @@ bhnd_nvram_sprom_getvar_common(struct bh void *ptr; BHND_NV_ASSERT( - sp->state.var_state >= SPROM_OPCODE_VAR_STATE_OPEN, + state->var_state >= SPROM_OPCODE_VAR_STATE_OPEN, ("invalid var state")); - BHND_NV_ASSERT(sp->state.var.have_bind, ("invalid bind state")); + BHND_NV_ASSERT(state->var.have_bind, ("invalid bind state")); - binding_var = &sp->state.var; - binding = &sp->state.var.bind; + binding_var = &state->var; + binding = &state->var.bind; if (ipos >= nelem) { BHND_NV_LOG("output skip %u positioned " @@ -1107,17 +1158,16 @@ bhnd_nvram_sprom_getvar_common(struct bh /* Calculate input skip bytes for this binding */ skip_in_bytes = binding->skip_in; - error = bhnd_sprom_opcode_apply_scale(&sp->state, - &skip_in_bytes); + error = bhnd_sprom_opcode_apply_scale(state, &skip_in_bytes); if (error) return (error); /* Bind */ - offset = sp->state.offset; + offset = state->offset; for (size_t i = 0; i < binding->count; i++) { /* Read the offset value, OR'ing with the current * value of intv */ - error = bhnd_nvram_sprom_read_offset(var, sp->data, + error = bhnd_nvram_sprom_read_offset(var, io, binding_var->base_type, offset, binding_var->mask, @@ -1209,6 +1259,39 @@ bhnd_nvram_sprom_getvar_common(struct bh return (error); } + +/** + * Common variable decoding; fetches and decodes variable to @p val, + * using @p storage for actual data storage. + * + * The returned @p val instance will hold a borrowed reference to @p storage, + * and must be copied via bhnd_nvram_val_copy() if it will be referenced beyond + * the lifetime of @p storage. + * + * The caller is responsible for releasing any allocated value state + * via bhnd_nvram_val_release(). + */ +static int +bhnd_nvram_sprom_getvar_common(struct bhnd_nvram_data *nv, void *cookiep, + union bhnd_nvram_sprom_storage *storage, bhnd_nvram_val *val) +{ + struct bhnd_nvram_sprom *sp; + bhnd_sprom_opcode_idx_entry *entry; + const struct bhnd_nvram_vardefn *var; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Thu Mar 23 19:35:37 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2F514CBB866 for ; Thu, 23 Mar 2017 19:35:37 +0000 (UTC) (envelope-from ian@freebsd.org) Received: from pmta2.delivery6.ore.mailhop.org (pmta2.delivery6.ore.mailhop.org [54.200.129.228]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 13F141F70 for ; Thu, 23 Mar 2017 19:35:36 +0000 (UTC) (envelope-from ian@freebsd.org) X-MHO-User: b9245c40-0fff-11e7-8c45-c35e37f62db1 X-Report-Abuse-To: https://support.duocircle.com/support/solutions/articles/5000540958-duocircle-standard-smtp-abuse-information X-Originating-IP: 73.78.92.27 X-Mail-Handler: DuoCircle Outbound SMTP Received: from ilsoft.org (unknown [73.78.92.27]) by outbound2.ore.mailhop.org (Halon) with ESMTPSA id b9245c40-0fff-11e7-8c45-c35e37f62db1; Thu, 23 Mar 2017 19:34:26 +0000 (UTC) Received: from rev (rev [172.22.42.240]) by ilsoft.org (8.15.2/8.15.2) with ESMTP id v2NJYVAd004352; Thu, 23 Mar 2017 13:34:31 -0600 (MDT) (envelope-from ian@freebsd.org) Message-ID: <1490297671.58015.102.camel@freebsd.org> Subject: Re: svn commit: r315773 - head/sbin/devd From: Ian Lepore To: Roman Divacky , Warner Losh Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Date: Thu, 23 Mar 2017 13:34:31 -0600 In-Reply-To: <20170323185853.GA87388@vlakno.cz> References: <201703230236.v2N2apvX051799@repo.freebsd.org> <20170323185853.GA87388@vlakno.cz> Content-Type: text/plain; charset="ISO-8859-1" X-Mailer: Evolution 3.18.5.1 FreeBSD GNOME Team Port Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 19:35:37 -0000 On Thu, 2017-03-23 at 19:58 +0100, Roman Divacky wrote: > On Thu, Mar 23, 2017 at 02:36:51AM +0000, Warner Losh wrote: > > > > Author: imp > > Date: Thu Mar 23 02:36:51 2017 > > New Revision: 315773 > > URL: https://svnweb.freebsd.org/changeset/base/315773 > > > > Log: > >   Implement quote escaping. String values may now contain " if you > >   it is preceded by \. > >    > >   foo="I \"like\" C++" > >    > >   gives the value 'I "like" C++' to the variable 'foo'. If a > > character > >   other than " follows the \, both the \ and that character are > > passed > >   through. > >    > >   Differential Revision: https://reviews.freebsd.org/D6286 > >   Sponsored by: Netflix > > > > Modified: > >   head/sbin/devd/devd.cc > >   head/sbin/devd/devd.hh > > > > Modified: head/sbin/devd/devd.cc > > =================================================================== > > =========== > > --- head/sbin/devd/devd.cc Thu Mar 23 02:33:27 2017 ( > > r315772) > > +++ head/sbin/devd/devd.cc Thu Mar 23 02:36:51 2017 ( > > r315773) > > @@ -411,6 +411,32 @@ var_list::is_set(const string &var) cons > >   return (_vars.find(var) != _vars.end()); > >  } > >   > > +/** fix_value > > + * > > + * Removes quoted characters that have made it this far. \" are > > + * converted to ". For all other characters, both \ and following > > + * character. So the string 'fre\:\"' is translated to 'fred\:"'. > > + */ > > +const std::string & > > +var_list::fix_value(const std::string &val) const > > +{ > > + char *tmp, *dst; > > + const char *src; > > + std::string *rv; > > + > > + dst = tmp = new char[val.length()]; > > + src = val.c_str(); > > + while (*src) { > > + if (*src == '\\' && src[1] == '"') > > + src++; > > + else > > + *dst++ = *src++; > > + } > > + rv = new string(tmp); > > + delete tmp; > > + return *rv; > > +} > Can the temporary char[] be stack allocated? Also, when returning a > reference to > a heap allocated string who is responsible for freeing it? Perhaps > you can just > return std::string and let the compiler optimize it? > > Roman > Returning a reference to a new'd string is not good. IMO, the implementation of the function should take into account the idea that embedded escaped quotes are rare.  The function should be optimized for readability and the common case of simply copying the string unmodified, something like: std::string var_list::fix_value(const std::string &val) const { std::string rv(val); std::string::size_type pos(0); while ((pos = rv.find("\\\"", pos)) != rv.npos) { rv.erase(pos, 1); } return (rv); } -- Ian From owner-svn-src-head@freebsd.org Thu Mar 23 19:54:43 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4AB39CBBFAE; Thu, 23 Mar 2017 19:54:43 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 17B4C1963; Thu, 23 Mar 2017 19:54:43 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NJsg3E081129; Thu, 23 Mar 2017 19:54:42 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NJsgHx081128; Thu, 23 Mar 2017 19:54:42 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <201703231954.v2NJsgHx081128@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Thu, 23 Mar 2017 19:54:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315867 - head/sys/i386/i386 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 19:54:43 -0000 Author: glebius Date: Thu Mar 23 19:54:41 2017 New Revision: 315867 URL: https://svnweb.freebsd.org/changeset/base/315867 Log: Remove Solaris 2.6 syscalls selector. Discussed with: kib Modified: head/sys/i386/i386/machdep.c Modified: head/sys/i386/i386/machdep.c ============================================================================== --- head/sys/i386/i386/machdep.c Thu Mar 23 19:29:12 2017 (r315866) +++ head/sys/i386/i386/machdep.c Thu Mar 23 19:54:41 2017 (r315867) @@ -2449,7 +2449,6 @@ init386(int first) /* XXX does this work? */ /* XXX yes! */ ldt[LBSDICALLS_SEL] = ldt[LSYS5CALLS_SEL]; - ldt[LSOL26CALLS_SEL] = ldt[LSYS5CALLS_SEL]; /* transfer to user mode */ From owner-svn-src-head@freebsd.org Thu Mar 23 21:11:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ECF9DD19457; Thu, 23 Mar 2017 21:11:56 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BA2F11FBA; Thu, 23 Mar 2017 21:11:56 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NLBtPQ013198; Thu, 23 Mar 2017 21:11:55 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NLBtZ8013196; Thu, 23 Mar 2017 21:11:55 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703232111.v2NLBtZ8013196@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Thu, 23 Mar 2017 21:11:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315869 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 21:11:57 -0000 Author: mav Date: Thu Mar 23 21:11:55 2017 New Revision: 315869 URL: https://svnweb.freebsd.org/changeset/base/315869 Log: Remove write-only crn field from struct isp_pcmd. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_freebsd.h Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Thu Mar 23 20:23:00 2017 (r315868) +++ head/sys/dev/isp/isp_freebsd.c Thu Mar 23 21:11:55 2017 (r315869) @@ -731,7 +731,6 @@ isp_free_pcmd(ispsoftc_t *isp, union ccb if (ISP_PCMD(ccb)) { #ifdef ISP_TARGET_MODE PISP_PCMD(ccb)->datalen = 0; - PISP_PCMD(ccb)->crn = 0; #endif PISP_PCMD(ccb)->next = isp->isp_osinfo.pcmd_free; isp->isp_osinfo.pcmd_free = ISP_PCMD(ccb); @@ -4209,7 +4208,6 @@ isp_fcp_next_crn(ispsoftc_t *isp, uint8_ } if (nxp->crnseed == 0) nxp->crnseed = 1; - PISP_PCMD(cmd)->crn = nxp->crnseed; *crnp = nxp->crnseed++; return (0); } Modified: head/sys/dev/isp/isp_freebsd.h ============================================================================== --- head/sys/dev/isp/isp_freebsd.h Thu Mar 23 20:23:00 2017 (r315868) +++ head/sys/dev/isp/isp_freebsd.h Thu Mar 23 21:11:55 2017 (r315869) @@ -176,7 +176,6 @@ struct isp_pcmd { struct ispsoftc * isp; /* containing isp */ struct callout wdog; /* watchdog timer */ uint32_t datalen; /* data length for this command (target mode only) */ - uint8_t crn; /* command reference number */ }; #define ISP_PCMD(ccb) (ccb)->ccb_h.spriv_ptr1 #define PISP_PCMD(ccb) ((struct isp_pcmd *)ISP_PCMD(ccb)) From owner-svn-src-head@freebsd.org Thu Mar 23 21:18:11 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CE4FFD19676; Thu, 23 Mar 2017 21:18:11 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9DA3213CE; Thu, 23 Mar 2017 21:18:11 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NLIAkJ014150; Thu, 23 Mar 2017 21:18:10 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NLIAQH014149; Thu, 23 Mar 2017 21:18:10 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703232118.v2NLIAQH014149@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Thu, 23 Mar 2017 21:18:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315870 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 21:18:11 -0000 Author: mav Date: Thu Mar 23 21:18:10 2017 New Revision: 315870 URL: https://svnweb.freebsd.org/changeset/base/315870 Log: isp field in struct isp_pcmd is also unused. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_freebsd.h Modified: head/sys/dev/isp/isp_freebsd.h ============================================================================== --- head/sys/dev/isp/isp_freebsd.h Thu Mar 23 21:11:55 2017 (r315869) +++ head/sys/dev/isp/isp_freebsd.h Thu Mar 23 21:18:10 2017 (r315870) @@ -173,7 +173,6 @@ typedef struct tstate { struct isp_pcmd { struct isp_pcmd * next; bus_dmamap_t dmap; /* dma map for this command */ - struct ispsoftc * isp; /* containing isp */ struct callout wdog; /* watchdog timer */ uint32_t datalen; /* data length for this command (target mode only) */ }; From owner-svn-src-head@freebsd.org Thu Mar 23 21:56:38 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 572D7CA1BEC; Thu, 23 Mar 2017 21:56:38 +0000 (UTC) (envelope-from lidl@FreeBSD.org) Received: from hydra.pix.net (hydra.pix.net [IPv6:2001:470:e254::4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.pix.net", Issuer "Pix.Com Technologies LLC CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 0B22113E2; Thu, 23 Mar 2017 21:56:37 +0000 (UTC) (envelope-from lidl@FreeBSD.org) Received: from torb.pix.net (torb.pix.net [IPv6:2001:470:e254:10:1042:6a31:1deb:9f8a]) (authenticated bits=0) by hydra.pix.net (8.16.0.19/8.15.2) with ESMTPA id v2NLuPxB038678; Thu, 23 Mar 2017 17:56:25 -0400 (EDT) (envelope-from lidl@FreeBSD.org) Subject: Re: svn commit: r315653 - in head: lib/libstand sys/boot/common sys/boot/i386/libi386 To: Toomas Soome , Ian Lepore References: <201703202220.v2KMKHVP050735@repo.freebsd.org> <20170321123547.GC86500@zxy.spb.ru> <1490109312.13094.41.camel@freebsd.org> Cc: Slawa Olhovchenkov , Toomas Soome , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org From: Kurt Lidl Reply-To: lidl@FreeBSD.org Message-ID: <978b5e59-97f5-459e-5a8e-00848fe2dab1@FreeBSD.org> Date: Thu, 23 Mar 2017 17:56:25 -0400 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 21:56:38 -0000 On 3/21/17 11:53 AM, Toomas Soome wrote: > >> On 21. märts 2017, at 17:15, Ian Lepore wrote: >> >> On Tue, 2017-03-21 at 15:35 +0300, Slawa Olhovchenkov wrote: >>> On Mon, Mar 20, 2017 at 10:20:17PM +0000, Toomas Soome wrote: >>> >>>> >>>> Author: tsoome >>>> Date: Mon Mar 20 22:20:17 2017 >>>> New Revision: 315653 >>>> URL: https://svnweb.freebsd.org/changeset/base/315653 >>>> >>>> Log: >>>> loader: verify the value from dhcp.interface-mtu and use snprintf >>>> to set mtu >>>> >>>> Since the uset can set dhcp.interface-mtu, we need to try to >>>> validate the >>>> value. So we verify if the conversion to int is successful and we >>>> will not >>>> allow to set value greater than max IPv4 packet size. >>>> >>>> + tmp > USHRT_MAX) { >>>> + printf("%s: bad value: >>>> \"%s\", " >>>> + "ignoring\n", >>>> + "dhcp.interface-mtu", >>>> val); >>> === >>> USHRT_MAX Maximum value for an object of type unsigned short >>> int >>> 65535 (216-1) or greater* >>> >>> * the actual value depends on the particular system and library >>> implementation, but shall reflect the limits of these types in the >>> target platform. >>> === >>> >>> I mean IF_MAXMTU more correct. >>> >> >> The context here is libstand; because it is standalone by design, the >> code doesn't have access to IF_MAXMTU or other kernel/userland >> constants. There is also no question that a short is 16 bits or that >> USHRT_MAX will be anything other than 65535 in that environment. If >> some platform did appear that had a different-sized short by default, >> we would add whatever flags are necessary to force it back to 16 bits >> in src/share/mk/bsd.stand.mk. >> > > > Also note the “upper†value is entirely fictional - we felt we need > to pick some “sane†default, with current (common 1Gb/s) ethernet hardware > you will be in trouble long before reaching that value;) All the world is not an VAX, nor is every network Ethernet. HIPPI, not that you see much of it nowadays, had a MTU for switched networks of 65280 (64K - 216 bytes of overhead). Using USHRT_MAX is exactly the right thing here. -Kurt From owner-svn-src-head@freebsd.org Thu Mar 23 22:06:08 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 228DCD1B069; Thu, 23 Mar 2017 22:06:08 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DB1641C27; Thu, 23 Mar 2017 22:06:07 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NM67dF034916; Thu, 23 Mar 2017 22:06:07 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NM66R8034912; Thu, 23 Mar 2017 22:06:06 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201703232206.v2NM66R8034912@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Thu, 23 Mar 2017 22:06:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315871 - in head: contrib/ntp contrib/ntp/adjtimed contrib/ntp/clockstuff contrib/ntp/html contrib/ntp/include contrib/ntp/include/isc contrib/ntp/kernel contrib/ntp/kernel/sys contrib... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 22:06:08 -0000 Author: delphij Date: Thu Mar 23 22:06:06 2017 New Revision: 315871 URL: https://svnweb.freebsd.org/changeset/base/315871 Log: MFV r315791: ntp 4.2.8p10. Added: head/contrib/ntp/sntp/harden/ - copied from r315791, vendor/ntp/dist/sntp/harden/ head/contrib/ntp/sntp/m4/ntp_harden.m4 - copied unchanged from r315791, vendor/ntp/dist/sntp/m4/ntp_harden.m4 head/contrib/ntp/sntp/scripts/genHardFlags - copied unchanged from r315791, vendor/ntp/dist/sntp/scripts/genHardFlags Deleted: head/contrib/ntp/compile head/contrib/ntp/config.guess head/contrib/ntp/config.sub head/contrib/ntp/depcomp head/contrib/ntp/install-sh head/contrib/ntp/ltmain.sh head/contrib/ntp/missing head/contrib/ntp/sntp/compile head/contrib/ntp/sntp/config.guess head/contrib/ntp/sntp/config.sub head/contrib/ntp/sntp/depcomp head/contrib/ntp/sntp/install-sh head/contrib/ntp/sntp/ltmain.sh head/contrib/ntp/sntp/missing head/contrib/ntp/tests/ head/contrib/ntp/ylwrap Modified: head/contrib/ntp/COPYRIGHT head/contrib/ntp/ChangeLog head/contrib/ntp/CommitLog head/contrib/ntp/Makefile.in head/contrib/ntp/NEWS head/contrib/ntp/aclocal.m4 head/contrib/ntp/adjtimed/Makefile.am head/contrib/ntp/adjtimed/Makefile.in head/contrib/ntp/clockstuff/Makefile.am head/contrib/ntp/clockstuff/Makefile.in head/contrib/ntp/config.h.in head/contrib/ntp/configure head/contrib/ntp/configure.ac head/contrib/ntp/html/copyright.html head/contrib/ntp/include/Makefile.in head/contrib/ntp/include/isc/Makefile.in head/contrib/ntp/include/libssl_compat.h head/contrib/ntp/include/ntp_crypto.h head/contrib/ntp/include/ntp_fp.h head/contrib/ntp/include/ntp_md5.h head/contrib/ntp/include/ntp_stdlib.h head/contrib/ntp/include/ntpd.h head/contrib/ntp/include/ssl_applink.c head/contrib/ntp/kernel/Makefile.in head/contrib/ntp/kernel/sys/Makefile.in head/contrib/ntp/lib/isc/inet_pton.c head/contrib/ntp/libntp/Makefile.am head/contrib/ntp/libntp/Makefile.in head/contrib/ntp/libntp/a_md5encrypt.c head/contrib/ntp/libntp/audio.c head/contrib/ntp/libntp/authkeys.c head/contrib/ntp/libntp/emalloc.c head/contrib/ntp/libntp/libssl_compat.c head/contrib/ntp/libntp/ntp_intres.c head/contrib/ntp/libntp/recvbuff.c head/contrib/ntp/libntp/ssl_init.c head/contrib/ntp/libntp/statestr.c head/contrib/ntp/libntp/work_fork.c head/contrib/ntp/libparse/Makefile.am head/contrib/ntp/libparse/Makefile.in head/contrib/ntp/libparse/clk_trimtsip.c head/contrib/ntp/libparse/gpstolfp.c head/contrib/ntp/ntpd/Makefile.am head/contrib/ntp/ntpd/Makefile.in head/contrib/ntp/ntpd/invoke-ntp.conf.texi head/contrib/ntp/ntpd/invoke-ntp.keys.texi head/contrib/ntp/ntpd/invoke-ntpd.texi head/contrib/ntp/ntpd/ntp.conf.5man head/contrib/ntp/ntpd/ntp.conf.5mdoc head/contrib/ntp/ntpd/ntp.conf.html head/contrib/ntp/ntpd/ntp.conf.man.in head/contrib/ntp/ntpd/ntp.conf.mdoc.in head/contrib/ntp/ntpd/ntp.keys.5man head/contrib/ntp/ntpd/ntp.keys.5mdoc head/contrib/ntp/ntpd/ntp.keys.html head/contrib/ntp/ntpd/ntp.keys.man.in head/contrib/ntp/ntpd/ntp.keys.mdoc.in head/contrib/ntp/ntpd/ntp_config.c head/contrib/ntp/ntpd/ntp_control.c head/contrib/ntp/ntpd/ntp_crypto.c head/contrib/ntp/ntpd/ntp_io.c head/contrib/ntp/ntpd/ntp_loopfilter.c head/contrib/ntp/ntpd/ntp_parser.c head/contrib/ntp/ntpd/ntp_parser.h head/contrib/ntp/ntpd/ntp_peer.c head/contrib/ntp/ntpd/ntp_proto.c head/contrib/ntp/ntpd/ntp_restrict.c head/contrib/ntp/ntpd/ntp_scanner.c head/contrib/ntp/ntpd/ntpd-opts.c head/contrib/ntp/ntpd/ntpd-opts.h head/contrib/ntp/ntpd/ntpd.1ntpdman head/contrib/ntp/ntpd/ntpd.1ntpdmdoc head/contrib/ntp/ntpd/ntpd.c head/contrib/ntp/ntpd/ntpd.html head/contrib/ntp/ntpd/ntpd.man.in head/contrib/ntp/ntpd/ntpd.mdoc.in head/contrib/ntp/ntpd/refclock_datum.c head/contrib/ntp/ntpd/refclock_gpsdjson.c head/contrib/ntp/ntpd/refclock_jjy.c head/contrib/ntp/ntpd/refclock_mx4200.c head/contrib/ntp/ntpd/refclock_nmea.c head/contrib/ntp/ntpd/refclock_oncore.c head/contrib/ntp/ntpd/refclock_parse.c head/contrib/ntp/ntpdate/Makefile.am head/contrib/ntp/ntpdate/Makefile.in head/contrib/ntp/ntpdate/ntpdate.c head/contrib/ntp/ntpdc/Makefile.am head/contrib/ntp/ntpdc/Makefile.in head/contrib/ntp/ntpdc/invoke-ntpdc.texi head/contrib/ntp/ntpdc/ntpdc-opts.c head/contrib/ntp/ntpdc/ntpdc-opts.h head/contrib/ntp/ntpdc/ntpdc.1ntpdcman head/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc head/contrib/ntp/ntpdc/ntpdc.c head/contrib/ntp/ntpdc/ntpdc.html head/contrib/ntp/ntpdc/ntpdc.man.in head/contrib/ntp/ntpdc/ntpdc.mdoc.in head/contrib/ntp/ntpdc/ntpdc_ops.c head/contrib/ntp/ntpq/Makefile.am head/contrib/ntp/ntpq/Makefile.in head/contrib/ntp/ntpq/invoke-ntpq.texi head/contrib/ntp/ntpq/libntpq.c head/contrib/ntp/ntpq/ntpq-opts.c head/contrib/ntp/ntpq/ntpq-opts.h head/contrib/ntp/ntpq/ntpq-subs.c head/contrib/ntp/ntpq/ntpq.1ntpqman head/contrib/ntp/ntpq/ntpq.1ntpqmdoc head/contrib/ntp/ntpq/ntpq.c head/contrib/ntp/ntpq/ntpq.html head/contrib/ntp/ntpq/ntpq.man.in head/contrib/ntp/ntpq/ntpq.mdoc.in head/contrib/ntp/ntpsnmpd/Makefile.am head/contrib/ntp/ntpsnmpd/Makefile.in head/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi head/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c head/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h head/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman head/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc head/contrib/ntp/ntpsnmpd/ntpsnmpd.html head/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in head/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in head/contrib/ntp/packageinfo.sh head/contrib/ntp/parseutil/Makefile.am head/contrib/ntp/parseutil/Makefile.in head/contrib/ntp/scripts/Makefile.in head/contrib/ntp/scripts/build/Makefile.in head/contrib/ntp/scripts/calc_tickadj/Makefile.in head/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman head/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc head/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html head/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in head/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in head/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi head/contrib/ntp/scripts/invoke-plot_summary.texi head/contrib/ntp/scripts/invoke-summary.texi head/contrib/ntp/scripts/lib/Makefile.in head/contrib/ntp/scripts/ntp-wait/Makefile.in head/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi head/contrib/ntp/scripts/ntp-wait/ntp-wait-opts head/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman head/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc head/contrib/ntp/scripts/ntp-wait/ntp-wait.html head/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in head/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in head/contrib/ntp/scripts/ntpsweep/Makefile.in head/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi head/contrib/ntp/scripts/ntpsweep/ntpsweep-opts head/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman head/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc head/contrib/ntp/scripts/ntpsweep/ntpsweep.html head/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in head/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in head/contrib/ntp/scripts/ntptrace/Makefile.in head/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi head/contrib/ntp/scripts/ntptrace/ntptrace-opts head/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman head/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc head/contrib/ntp/scripts/ntptrace/ntptrace.html head/contrib/ntp/scripts/ntptrace/ntptrace.man.in head/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in head/contrib/ntp/scripts/plot_summary-opts head/contrib/ntp/scripts/plot_summary.1plot_summaryman head/contrib/ntp/scripts/plot_summary.1plot_summarymdoc head/contrib/ntp/scripts/plot_summary.html head/contrib/ntp/scripts/plot_summary.man.in head/contrib/ntp/scripts/plot_summary.mdoc.in head/contrib/ntp/scripts/summary-opts head/contrib/ntp/scripts/summary.1summaryman head/contrib/ntp/scripts/summary.1summarymdoc head/contrib/ntp/scripts/summary.html head/contrib/ntp/scripts/summary.man.in head/contrib/ntp/scripts/summary.mdoc.in head/contrib/ntp/scripts/update-leap/Makefile.in head/contrib/ntp/scripts/update-leap/invoke-update-leap.texi head/contrib/ntp/scripts/update-leap/update-leap-opts head/contrib/ntp/scripts/update-leap/update-leap.1update-leapman head/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc head/contrib/ntp/scripts/update-leap/update-leap.html head/contrib/ntp/scripts/update-leap/update-leap.man.in head/contrib/ntp/scripts/update-leap/update-leap.mdoc.in head/contrib/ntp/sntp/COPYRIGHT head/contrib/ntp/sntp/Makefile.am head/contrib/ntp/sntp/Makefile.in head/contrib/ntp/sntp/aclocal.m4 head/contrib/ntp/sntp/config.h.in head/contrib/ntp/sntp/configure head/contrib/ntp/sntp/configure.ac head/contrib/ntp/sntp/crypto.c head/contrib/ntp/sntp/include/Makefile.in head/contrib/ntp/sntp/include/copyright.def head/contrib/ntp/sntp/include/version.def head/contrib/ntp/sntp/include/version.texi head/contrib/ntp/sntp/invoke-sntp.texi head/contrib/ntp/sntp/kod_management.c head/contrib/ntp/sntp/libevent/Makefile.am head/contrib/ntp/sntp/libevent/Makefile.in head/contrib/ntp/sntp/libevent/build-aux/compile head/contrib/ntp/sntp/libevent/build-aux/config.guess head/contrib/ntp/sntp/libevent/build-aux/config.sub head/contrib/ntp/sntp/libevent/build-aux/depcomp head/contrib/ntp/sntp/libevent/build-aux/install-sh head/contrib/ntp/sntp/libevent/build-aux/ltmain.sh head/contrib/ntp/sntp/libevent/build-aux/missing head/contrib/ntp/sntp/libevent/build-aux/ylwrap head/contrib/ntp/sntp/libevent/config.h.in head/contrib/ntp/sntp/libevent/configure head/contrib/ntp/sntp/libevent/configure.ac head/contrib/ntp/sntp/libevent/m4/libtool.m4 head/contrib/ntp/sntp/libevent/m4/ltoptions.m4 head/contrib/ntp/sntp/libevent/m4/ltsugar.m4 head/contrib/ntp/sntp/libevent/m4/ltversion.m4 head/contrib/ntp/sntp/libevent/m4/lt~obsolete.m4 head/contrib/ntp/sntp/libevent/test/regress_ssl.c head/contrib/ntp/sntp/libopts/Makefile.am head/contrib/ntp/sntp/libopts/Makefile.in head/contrib/ntp/sntp/m4/libtool.m4 head/contrib/ntp/sntp/m4/ltoptions.m4 head/contrib/ntp/sntp/m4/ltsugar.m4 head/contrib/ntp/sntp/m4/ltversion.m4 head/contrib/ntp/sntp/m4/lt~obsolete.m4 head/contrib/ntp/sntp/m4/ntp_compiler.m4 head/contrib/ntp/sntp/m4/ntp_libevent.m4 head/contrib/ntp/sntp/m4/ntp_libntp.m4 head/contrib/ntp/sntp/m4/ntp_openssl.m4 head/contrib/ntp/sntp/m4/ntp_prog_cc.m4 head/contrib/ntp/sntp/m4/version.m4 head/contrib/ntp/sntp/scm-rev head/contrib/ntp/sntp/scripts/Makefile.am head/contrib/ntp/sntp/scripts/Makefile.in head/contrib/ntp/sntp/sntp-opts.c head/contrib/ntp/sntp/sntp-opts.h head/contrib/ntp/sntp/sntp.1sntpman head/contrib/ntp/sntp/sntp.1sntpmdoc head/contrib/ntp/sntp/sntp.html head/contrib/ntp/sntp/sntp.man.in head/contrib/ntp/sntp/sntp.mdoc.in head/contrib/ntp/sntp/tests/Makefile.am head/contrib/ntp/sntp/tests/Makefile.in head/contrib/ntp/sntp/unity/Makefile.am head/contrib/ntp/sntp/unity/Makefile.in head/contrib/ntp/sntp/version.c head/contrib/ntp/util/Makefile.am head/contrib/ntp/util/Makefile.in head/contrib/ntp/util/invoke-ntp-keygen.texi head/contrib/ntp/util/ntp-keygen-opts.c head/contrib/ntp/util/ntp-keygen-opts.h head/contrib/ntp/util/ntp-keygen.1ntp-keygenman head/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc head/contrib/ntp/util/ntp-keygen.c head/contrib/ntp/util/ntp-keygen.html head/contrib/ntp/util/ntp-keygen.man.in head/contrib/ntp/util/ntp-keygen.mdoc.in head/usr.sbin/ntp/config.h head/usr.sbin/ntp/doc/ntp-keygen.8 head/usr.sbin/ntp/doc/ntp.conf.5 head/usr.sbin/ntp/doc/ntp.keys.5 head/usr.sbin/ntp/doc/ntpd.8 head/usr.sbin/ntp/doc/ntpdc.8 head/usr.sbin/ntp/doc/ntpq.8 head/usr.sbin/ntp/doc/sntp.8 head/usr.sbin/ntp/scripts/mkver Directory Properties: head/contrib/ntp/ (props changed) Modified: head/contrib/ntp/COPYRIGHT ============================================================================== --- head/contrib/ntp/COPYRIGHT Thu Mar 23 21:18:10 2017 (r315870) +++ head/contrib/ntp/COPYRIGHT Thu Mar 23 22:06:06 2017 (r315871) @@ -4,7 +4,7 @@ This file is automatically generated fro jpg "Clone me," says Dolly sheepishly. - Last update: 17-Jan-2015 00:16 UTC + Last update: 2-Jan-2017 11:58 UTC _________________________________________________________________ The following copyright notice applies to all files collectively @@ -33,7 +33,7 @@ This file is automatically generated fro Burnicki is: *********************************************************************** * * -* Copyright (c) Network Time Foundation 2011-2015 * +* Copyright (c) Network Time Foundation 2011-2017 * * * * All Rights Reserved * * * Modified: head/contrib/ntp/ChangeLog ============================================================================== --- head/contrib/ntp/ChangeLog Thu Mar 23 21:18:10 2017 (r315870) +++ head/contrib/ntp/ChangeLog Thu Mar 23 22:06:06 2017 (r315871) @@ -1,6 +1,77 @@ --- +(4.2.8p10-win-beta1) 2017/03/21 Released by Harlan Stenn +(4.2.8p10) + +* [Sec 3389] NTP-01-016: Denial of Service via Malformed Config + (Pentest report 01.2017) +* [Sec 3388] NTP-01-014: Buffer Overflow in DPTS Clock + (Pentest report 01.2017) +* [Sec 3387] NTP-01-012: Authenticated DoS via Malicious Config Option + (Pentest report 01.2017) +* [Sec 3386] NTP-01-011: ntpq_stripquotes() returns incorrect Value + (Pentest report 01.2017) +* [Sec 3385] NTP-01-010: ereallocarray()/eallocarray() underused. HStenn +* [Sec 3384] NTP-01-009: Privileged execution of User Library code + (Pentest report 01.2017) +* [Sec 3383] NTP-01-008: Stack Buffer Overflow from Command Line + (Pentest report 01.2017) +* [Sec 3382] NTP-01-007: Data Structure terminated insufficiently + (Pentest report 01.2017) +* [Sec 3380] NTP-01-005: Off-by-one in Oncore GPS Receiver + (Pentest report 01.2017) +* [Sec 3379] NTP-01-004: Potential Overflows in ctl_put() functions + (Pentest report 01.2017) +* [Sec 3378] NTP-01-003: Improper use of snprintf() in mx4200_send() + (Pentest report 01.2017) +* [Sec 3377] NTP-01-002: Buffer Overflow in ntpq when fetching reslist + (Pentest report 01.2017) +* [Bug 3363] Support for openssl-1.1.0 without compatibility modes + - rework of patch set from . +* [Bug 3356] Bugfix 3072 breaks multicastclient +* [Bug 3216] libntp audio ioctl() args incorrectly cast to int + on 4.4BSD-Lite derived platforms + - original patch by Majdi S. Abbas +* [Bug 3215] 'make distcheck' fails with new BK repo format +* [Bug 3173] forking async worker: interrupted pipe I/O + - initial patch by Christos Zoulas +* [Bug 3139] (...) time_pps_create: Exec format error + - move loader API from 'inline' to proper source + - augment pathless dlls with absolute path to NTPD + - use 'msyslog()' instead of 'printf() 'for reporting trouble +* [Bug 3107] Incorrect Logic for Peer Event Limiting + - applied patch by Matthew Van Gundy +* [Bug 3065] Quiet warnings on NetBSD + - applied some of the patches provided by Havard. Not all of them + still match the current code base, and I did not touch libopt. +* [Bug 3062] Change the process name of forked DNS worker + - applied patch by Reinhard Max. See bugzilla for limitations. +* [Bug 2923] Trap Configuration Fail + - fixed dependency inversion from [Bug 2837] +* [Bug 2896] Nothing happens if minsane < maxclock < minclock + - produce ERROR log message about dysfunctional daemon. +* [Bug 2851] allow -4/-6 on restrict line with mask + - applied patch by Miroslav Lichvar for ntp4.2.6 compat +* [Bug 2645] out-of-bound pointers in ctl_putsys and decode_bitflags + - Fixed these and some more locations of this pattern. + Probably din't get them all, though. +* Update copyright year. +* bk-7 trigger updates + +--- +(4.2.8p9-win) 2017/02/01 Released by Harlan Stenn + +* [Bug 3144] NTP does not build without openSSL. + - added missed changeset for automatic openssl lib detection + - fixed some minor warning issues +* [Bug 3095] More compatibility with openssl 1.1. +* configure.ac cleanup. stenn@ntp.org +* openssl configure cleanup. stenn@ntp.org + +--- (4.2.8p9) 2016/11/21 Released by Harlan Stenn -(4.2.8p9) 2016/MM/DD Released by Harlan Stenn * [Sec 3119] Trap crash * [Sec 3118] Mode 6 information disclosure and DDoS vector Modified: head/contrib/ntp/CommitLog ============================================================================== --- head/contrib/ntp/CommitLog Thu Mar 23 21:18:10 2017 (r315870) +++ head/contrib/ntp/CommitLog Thu Mar 23 22:06:06 2017 (r315871) @@ -1,3 +1,441 @@ +ChangeSet@1.3729, 2017-02-01 07:39:35-05:00, stenn@deacon.udel.edu + NTP_4_2_8P9_WIN + TAG: NTP_4_2_8P9_WIN + + ChangeLog@1.1857 +3 -0 + NTP_4_2_8P9_WIN + + ntpd/invoke-ntp.conf.texi@1.204 +1 -1 + NTP_4_2_8P9_WIN + + ntpd/invoke-ntp.keys.texi@1.193 +1 -1 + NTP_4_2_8P9_WIN + + ntpd/invoke-ntpd.texi@1.509 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntp.conf.5man@1.238 +3 -3 + NTP_4_2_8P9_WIN + + ntpd/ntp.conf.5mdoc@1.238 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntp.conf.html@1.188 +1 -1 + NTP_4_2_8P9_WIN + + ntpd/ntp.conf.man.in@1.238 +3 -3 + NTP_4_2_8P9_WIN + + ntpd/ntp.conf.mdoc.in@1.238 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntp.keys.5man@1.227 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntp.keys.5mdoc@1.227 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntp.keys.html@1.189 +1 -1 + NTP_4_2_8P9_WIN + + ntpd/ntp.keys.man.in@1.227 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntp.keys.mdoc.in@1.227 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntpd-opts.c@1.531 +245 -245 + NTP_4_2_8P9_WIN + + ntpd/ntpd-opts.h@1.530 +3 -3 + NTP_4_2_8P9_WIN + + ntpd/ntpd.1ntpdman@1.338 +3 -3 + NTP_4_2_8P9_WIN + + ntpd/ntpd.1ntpdmdoc@1.338 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntpd.html@1.182 +2 -2 + NTP_4_2_8P9_WIN + + ntpd/ntpd.man.in@1.338 +3 -3 + NTP_4_2_8P9_WIN + + ntpd/ntpd.mdoc.in@1.338 +2 -2 + NTP_4_2_8P9_WIN + + ntpdc/invoke-ntpdc.texi@1.506 +2 -2 + NTP_4_2_8P9_WIN + + ntpdc/ntpdc-opts.c@1.524 +107 -107 + NTP_4_2_8P9_WIN + + ntpdc/ntpdc-opts.h@1.523 +3 -3 + NTP_4_2_8P9_WIN + + ntpdc/ntpdc.1ntpdcman@1.337 +3 -3 + NTP_4_2_8P9_WIN + + ntpdc/ntpdc.1ntpdcmdoc@1.337 +2 -2 + NTP_4_2_8P9_WIN + + ntpdc/ntpdc.html@1.350 +2 -2 + NTP_4_2_8P9_WIN + + ntpdc/ntpdc.man.in@1.337 +3 -3 + NTP_4_2_8P9_WIN + + ntpdc/ntpdc.mdoc.in@1.337 +2 -2 + NTP_4_2_8P9_WIN + + ntpq/invoke-ntpq.texi@1.514 +2 -2 + NTP_4_2_8P9_WIN + + ntpq/ntpq-opts.c@1.531 +114 -114 + NTP_4_2_8P9_WIN + + ntpq/ntpq-opts.h@1.529 +3 -3 + NTP_4_2_8P9_WIN + + ntpq/ntpq.1ntpqman@1.342 +3 -3 + NTP_4_2_8P9_WIN + + ntpq/ntpq.1ntpqmdoc@1.342 +2 -2 + NTP_4_2_8P9_WIN + + ntpq/ntpq.html@1.179 +2 -2 + NTP_4_2_8P9_WIN + + ntpq/ntpq.man.in@1.342 +3 -3 + NTP_4_2_8P9_WIN + + ntpq/ntpq.mdoc.in@1.342 +2 -2 + NTP_4_2_8P9_WIN + + ntpsnmpd/invoke-ntpsnmpd.texi@1.508 +11 -10 + NTP_4_2_8P9_WIN + + ntpsnmpd/ntpsnmpd-opts.c@1.526 +68 -68 + NTP_4_2_8P9_WIN + + ntpsnmpd/ntpsnmpd-opts.h@1.525 +3 -3 + NTP_4_2_8P9_WIN + + ntpsnmpd/ntpsnmpd.1ntpsnmpdman@1.337 +3 -3 + NTP_4_2_8P9_WIN + + ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc@1.337 +2 -2 + NTP_4_2_8P9_WIN + + ntpsnmpd/ntpsnmpd.html@1.177 +1 -1 + NTP_4_2_8P9_WIN + + ntpsnmpd/ntpsnmpd.man.in@1.337 +3 -3 + NTP_4_2_8P9_WIN + + ntpsnmpd/ntpsnmpd.mdoc.in@1.337 +2 -2 + NTP_4_2_8P9_WIN + + packageinfo.sh@1.534 +1 -1 + NTP_4_2_8P9_WIN + + scripts/calc_tickadj/calc_tickadj.1calc_tickadjman@1.98 +3 -3 + NTP_4_2_8P9_WIN + + scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc@1.99 +2 -2 + NTP_4_2_8P9_WIN + + scripts/calc_tickadj/calc_tickadj.html@1.100 +1 -1 + NTP_4_2_8P9_WIN + + scripts/calc_tickadj/calc_tickadj.man.in@1.97 +3 -3 + NTP_4_2_8P9_WIN + + scripts/calc_tickadj/calc_tickadj.mdoc.in@1.99 +2 -2 + NTP_4_2_8P9_WIN + + scripts/calc_tickadj/invoke-calc_tickadj.texi@1.102 +1 -1 + NTP_4_2_8P9_WIN + + scripts/invoke-plot_summary.texi@1.120 +2 -2 + NTP_4_2_8P9_WIN + + scripts/invoke-summary.texi@1.119 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntp-wait/invoke-ntp-wait.texi@1.329 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntp-wait/ntp-wait-opts@1.65 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntp-wait/ntp-wait.1ntp-waitman@1.326 +3 -3 + NTP_4_2_8P9_WIN + + scripts/ntp-wait/ntp-wait.1ntp-waitmdoc@1.327 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntp-wait/ntp-wait.html@1.346 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntp-wait/ntp-wait.man.in@1.326 +3 -3 + NTP_4_2_8P9_WIN + + scripts/ntp-wait/ntp-wait.mdoc.in@1.327 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntpsweep/invoke-ntpsweep.texi@1.117 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntpsweep/ntpsweep-opts@1.67 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntpsweep/ntpsweep.1ntpsweepman@1.105 +3 -3 + NTP_4_2_8P9_WIN + + scripts/ntpsweep/ntpsweep.1ntpsweepmdoc@1.105 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntpsweep/ntpsweep.html@1.118 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntpsweep/ntpsweep.man.in@1.105 +3 -3 + NTP_4_2_8P9_WIN + + scripts/ntpsweep/ntpsweep.mdoc.in@1.106 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntptrace/invoke-ntptrace.texi@1.118 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntptrace/ntptrace-opts@1.67 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntptrace/ntptrace.1ntptraceman@1.105 +3 -3 + NTP_4_2_8P9_WIN + + scripts/ntptrace/ntptrace.1ntptracemdoc@1.106 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntptrace/ntptrace.html@1.119 +2 -2 + NTP_4_2_8P9_WIN + + scripts/ntptrace/ntptrace.man.in@1.105 +3 -3 + NTP_4_2_8P9_WIN + + scripts/ntptrace/ntptrace.mdoc.in@1.107 +2 -2 + NTP_4_2_8P9_WIN + + scripts/plot_summary-opts@1.68 +2 -2 + NTP_4_2_8P9_WIN + + scripts/plot_summary.1plot_summaryman@1.118 +3 -3 + NTP_4_2_8P9_WIN + + scripts/plot_summary.1plot_summarymdoc@1.118 +2 -2 + NTP_4_2_8P9_WIN + + scripts/plot_summary.html@1.121 +2 -2 + NTP_4_2_8P9_WIN + + scripts/plot_summary.man.in@1.118 +3 -3 + NTP_4_2_8P9_WIN + + scripts/plot_summary.mdoc.in@1.118 +2 -2 + NTP_4_2_8P9_WIN + + scripts/summary-opts@1.67 +2 -2 + NTP_4_2_8P9_WIN + + scripts/summary.1summaryman@1.117 +3 -3 + NTP_4_2_8P9_WIN + + scripts/summary.1summarymdoc@1.117 +2 -2 + NTP_4_2_8P9_WIN + + scripts/summary.html@1.120 +2 -2 + NTP_4_2_8P9_WIN + + scripts/summary.man.in@1.117 +3 -3 + NTP_4_2_8P9_WIN + + scripts/summary.mdoc.in@1.117 +2 -2 + NTP_4_2_8P9_WIN + + scripts/update-leap/invoke-update-leap.texi@1.18 +1 -1 + NTP_4_2_8P9_WIN + + scripts/update-leap/update-leap-opts@1.18 +2 -2 + NTP_4_2_8P9_WIN + + scripts/update-leap/update-leap.1update-leapman@1.18 +3 -3 + NTP_4_2_8P9_WIN + + scripts/update-leap/update-leap.1update-leapmdoc@1.18 +2 -2 + NTP_4_2_8P9_WIN + + scripts/update-leap/update-leap.html@1.18 +1 -1 + NTP_4_2_8P9_WIN + + scripts/update-leap/update-leap.man.in@1.18 +3 -3 + NTP_4_2_8P9_WIN + + scripts/update-leap/update-leap.mdoc.in@1.18 +2 -2 + NTP_4_2_8P9_WIN + + sntp/invoke-sntp.texi@1.506 +2 -2 + NTP_4_2_8P9_WIN + + sntp/sntp-opts.c@1.525 +159 -159 + NTP_4_2_8P9_WIN + + sntp/sntp-opts.h@1.523 +3 -3 + NTP_4_2_8P9_WIN + + sntp/sntp.1sntpman@1.341 +3 -3 + NTP_4_2_8P9_WIN + + sntp/sntp.1sntpmdoc@1.341 +2 -2 + NTP_4_2_8P9_WIN + + sntp/sntp.html@1.521 +2 -2 + NTP_4_2_8P9_WIN + + sntp/sntp.man.in@1.341 +3 -3 + NTP_4_2_8P9_WIN + + sntp/sntp.mdoc.in@1.341 +2 -2 + NTP_4_2_8P9_WIN + + util/invoke-ntp-keygen.texi@1.509 +2 -2 + NTP_4_2_8P9_WIN + + util/ntp-keygen-opts.c@1.527 +173 -173 + NTP_4_2_8P9_WIN + + util/ntp-keygen-opts.h@1.525 +3 -3 + NTP_4_2_8P9_WIN + + util/ntp-keygen.1ntp-keygenman@1.337 +3 -3 + NTP_4_2_8P9_WIN + + util/ntp-keygen.1ntp-keygenmdoc@1.337 +2 -2 + NTP_4_2_8P9_WIN + + util/ntp-keygen.html@1.183 +2 -2 + NTP_4_2_8P9_WIN + + util/ntp-keygen.man.in@1.337 +3 -3 + NTP_4_2_8P9_WIN + + util/ntp-keygen.mdoc.in@1.337 +2 -2 + NTP_4_2_8P9_WIN + +ChangeSet@1.3728, 2017-01-28 09:32:36-05:00, stenn@pogo.udel.edu + typos + + sntp/m4/ntp_openssl.m4@1.26 +13 -13 + typos + +ChangeSet@1.3726, 2017-01-27 11:21:38+00:00, stenn@psp-deb1.ntp.org + ntp-4.2.8p9-win + + ChangeLog@1.1855 +4 -1 + ntp-4.2.8p9-win + + packageinfo.sh@1.533 +1 -1 + ntp-4.2.8p9-win + +ChangeSet@1.3725, 2017-01-27 11:09:20+00:00, stenn@psp-deb1.ntp.org + bk-7 repos don't have a ChangeSet file + + sntp/Makefile.am@1.89 +1 -1 + bk-7 repos don't have a ChangeSet file + +ChangeSet@1.3724, 2017-01-21 15:12:35+01:00, perlinger@ntp.org + [Bug 3144] NTP does not build without openSSL + - pulled missing changeset, minor warning fixes + + ChangeLog@1.1854 +2 -1 + [Bug 3144] NTP does not build without openSSL + - pulled missing changeset, minor warning fixes + + include/ssl_applink.c@1.3 +9 -1 + [Bug 3144] NTP does not build without openSSL + - minor warning fixes + + ports/winnt/ntpd/ntservice.c@1.31 +1 -0 + [Bug 3144] NTP does not build without openSSL + - pulled missing changeset, minor warning fixes + +ChangeSet@1.3720.1.2, 2017-01-10 06:07:05-05:00, stenn@pogo.udel.edu + configure.ac cleanup + + ChangeLog@1.1852.1.1 +5 -0 + configure.ac cleanup + + configure.ac@1.607 +1 -1 + configure.ac cleanup + +ChangeSet@1.3720.1.1, 2017-01-10 06:05:44-05:00, stenn@pogo.udel.edu + openssl configure cleanup + + sntp/m4/ntp_libntp.m4@1.34 +1 -3 + openssl configure cleanup + + sntp/m4/ntp_openssl.m4@1.25 +19 -1 + openssl configure cleanup + +ChangeSet@1.3722, 2016-11-23 08:34:52+01:00, perlinger@ntp.org + Bug 3144 - NTP does not build without openSSL + - fix SNTP to build '--without-crypto',too + - remove some warnings that result from '--without-crypto' + + ntpd/ntp_control.c@1.215 +4 -1 + Bug 3144 - NTP does not build without openSSL + - remove some warnings that result from '--without-crypto' + + ntpd/ntp_proto.c@1.398 +1 -1 + Bug 3144 - NTP does not build without openSSL + - remove some warnings that result from '--without-crypto' + + sntp/crypto.c@1.24 +1 -1 + Bug 3144 - NTP does not build without openSSL + - fix SNTP to build '--without-crypto', too + +ChangeSet@1.3721, 2016-11-22 22:22:46+01:00, perlinger@ntp.org + [Bug 3144] NTP does not build without openSSL + + ChangeLog@1.1853 +3 -1 + [Bug 3144] NTP does not build without openSSL + + include/ntp_md5.h@1.11 +4 -0 + [Bug 3144] NTP does not build without openSSL + - pull in "libssl_compat.h" if built with openssl + - provide compliant API otherwise + + libntp/a_md5encrypt.c@1.40 +0 -1 + [Bug 3144] NTP does not build without openSSL + - do not directly include "libssl_compat.h" -- comes with "ntp_md5.h" + + libntp/libssl_compat.c@1.2.1.1 +10 -7 + [Bug 3144] NTP does not build without openSSL + - compiles code only if openssl is indeed required + + ntpd/ntp_control.c@1.214 +1 -3 + [Bug 3144] NTP does not build without openSSL + - do not directly include "libssl_compat.h" -- comes with "ntp_md5.h" + - fix long-standing warning + + ntpd/ntp_io.c@1.418 +9 -5 + [Bug 3144] NTP does not build without openSSL + - sidekick: Fix annoying warnings for Debug Build (Win64/32 issue) + + ports/winnt/ntpd/ntp_iocompletionport.c@1.78 +4 -6 + [Bug 3144] NTP does not build without openSSL + - sidekick: Fix annoying warnings MSVC emits + ChangeSet@1.3720, 2016-11-21 08:08:21-05:00, stenn@deacon.udel.edu NTP_4_2_8P9 TAG: NTP_4_2_8P9 @@ -557,7 +995,6 @@ ChangeSet@1.3701, 2016-10-24 07:37:25+02 [winio2 - unlocked] - eliminate critical section, simplify API - the great renaming - ChangeSet@1.3698.1.7, 2016-10-23 05:18:04+00:00, stenn@psp-deb1.ntp.org ntp-4.2.8p9-PRE @@ -889,7 +1326,7 @@ ChangeSet@1.3698.1.7, 2016-10-23 05:18:0 util/ntp-keygen.mdoc.in@1.335 +2 -2 ntp-4.2.8p9-PRE -ChangeSet@1.3688.4.1, 2016-10-20 19:28:06+00:00, stenn@psp-deb1.ntp.org +ChangeSet@1.3688.5.1, 2016-10-20 19:28:06+00:00, stenn@psp-deb1.ntp.org cleanup ChangeLog@1.1836.4.1 +1 -0 @@ -910,7 +1347,6 @@ ChangeSet@1.3686.19.1, 2016-10-20 09:21: ChangeLog@1.1834.19.1 +4 -0 [Sec 3113] Broadcast Mode Poll Interval Enforcement DoS - include/ntp.h@1.220.1.1 +1 -1 [Sec 3113] Broadcast Mode Poll Interval Enforcement DoS @@ -953,7 +1389,7 @@ ChangeSet@1.3698.1.2, 2016-10-10 22:34:5 tests/bug-3102/zeroorg.py@1.0 +0 -0 -ChangeSet@1.3688.3.2, 2016-10-10 01:46:05-07:00, harlan@max.pfcs.com +ChangeSet@1.3688.4.1, 2016-10-10 01:46:05-07:00, harlan@max.pfcs.com Fix typos in include/ntp.h ChangeLog@1.1836.3.1 +1 -0 @@ -989,6 +1425,89 @@ ChangeSet@1.3699, 2016-10-04 08:36:17+02 [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order using the loopback-ppsapi-provider.dll - fix wrong instance initialisation +ChangeSet@1.3688.3.2, 2016-10-02 09:01:53+02:00, perlinger@ntp.org + [Bug 3095] Compatibility with openssl 1.1 + - add autolib hader + - fix linker input selection + + include/ssl_applink.c@1.2 +15 -3 + [Bug 3095] Compatibility with openssl 1.1 + - the graet renaming of v1.1.0 + + libntp/libssl_compat.c@1.3 +4 -0 + [Bug 3095] Compatibility with openssl 1.1 + - make sure 'inttypes.h' is included before SSL headers (macro definitiion order) + + ports/winnt/include/msvc_ssl_autolib.h@1.1 +94 -0 + [Bug 3095] Compatibility with openssl 1.1 + create automagic library selection header + + ports/winnt/include/msvc_ssl_autolib.h@1.0 +0 -0 + + ports/winnt/vs2008/debug-x64.vsprops@1.2 +2 -2 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2008/debug.vsprops@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2008/release-x64.vsprops@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2008/release.vsprops@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2013/debug-x64.props@1.3 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2013/debug.props@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2013/libntp/libntp.vcxproj@1.13 +2 -1 + [Bug 3095] Compatibility with openssl 1.1 + - add autolib hader + + ports/winnt/vs2013/libntp/libntp.vcxproj.filters@1.11 +3 -0 + [Bug 3095] Compatibility with openssl 1.1 + - add autolib hader + + ports/winnt/vs2013/release-x64.props@1.3 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2013/release.props@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2015/debug-x64.props@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2015/debug.props@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2015/libntp/libntp.vcxproj@1.3 +1 -0 + [Bug 3095] Compatibility with openssl 1.1 + - add autolib hader + + ports/winnt/vs2015/libntp/libntp.vcxproj.filters@1.3 +3 -0 + [Bug 3095] Compatibility with openssl 1.1 + - add autolib hader + + ports/winnt/vs2015/release-x64.props@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + + ports/winnt/vs2015/release.props@1.2 +1 -1 + [Bug 3095] Compatibility with openssl 1.1 + - fix linker input selection + ChangeSet@1.3698, 2016-10-01 10:52:11+00:00, stenn@psp-deb1.ntp.org Update NEWS for 3119 @@ -8089,31 +8608,24 @@ ChangeSet@1.3552.1.13, 2015-08-20 10:15: sntp/libevent/test/bench_httpclient.c@1.8 +5 -1 reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here. - sntp/libevent/test/regress.c@1.8 +6 -2 reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here. - sntp/libevent/test/regress_dns.c@1.10 +6 -5 reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here. - sntp/libevent/test/regress_http.c@1.10 +8 -4 reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here. - sntp/libevent/test/regress_minheap.c@1.5 +2 -1 reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here. - sntp/libevent/test/test-ratelim.c@1.11 +6 -2 reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here. - sntp/libevent/test/test-time.c@1.7 +2 -1 reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here. - ChangeSet@1.3552.1.12, 2015-08-20 01:10:57+02:00, viperus@ubuntu.(none) Makefile.am: @@ -8151,67 +8663,51 @@ ChangeSet@1.3552.1.10, 2015-08-20 00:23: ntpd/refclock_palisade.c@1.43 +2 -2 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - ntpq/ntpq.c@1.161 +7 -7 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libevent/sample/http-server.c@1.11 +2 -2 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libevent/test/bench_httpclient.c@1.7 +1 -1 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libevent/test/regress.c@1.7 +2 -2 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libevent/test/regress_dns.c@1.9 +4 -4 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libevent/test/regress_http.c@1.9 +3 -3 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libevent/test/regress_minheap.c@1.4 +1 -1 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libevent/test/test-ratelim.c@1.10 +2 -2 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libevent/test/test-time.c@1.6 +1 -1 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/libopts/compat/pathfind.c@1.12 +5 -5 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/tests/fileHandlingTest.c@1.3 +1 -1 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - sntp/tests/packetProcessing.c@1.8 +1 -1 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - tests/libntp/a_md5encrypt.c@1.12 +1 -1 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - tests/libntp/calendar.c@1.6.1.1 +4 -4 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - tests/libntp/caljulian.c@1.10 +1 -1 Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc. - ChangeSet@1.3552.1.9, 2015-08-17 13:56:23+02:00, viperus@ubuntu.(none) Makefile.am: @@ -8595,7 +9091,6 @@ ChangeSet@1.3548.1.13, 2015-08-06 20:41: tests/libntp/socktoa.c@1.9 +2 -2 fixed. Tests are skipped when you do ./build --disable-ipv6 - tests/ntpq/Makefile.am@1.2 +8 -37 changes @@ -8636,7 +9131,6 @@ ChangeSet@1.3548.1.11, 2015-08-06 10:27: tests/libntp/run-socktoa.c@1.11 +7 -7 Minor changes due to the autogenerated ruby script - tests/libntp/socktoa.c@1.8 +22 -6 update @@ -8811,8 +9305,6 @@ ChangeSet@1.3548.1.2, 2015-08-01 22:40:5 Added test ntp_singd again, renamed it to ntp_signdT (including the original ntp_signd.c doesn't work if you have 2 files with the same name). I included the original ntp_signd.c, so static functions can be tested. Additional .o objects had to be added for everyhting to work. - - tests/ntpd/ntp_signdT.c@1.2 +17 -2 MUST ADD #define HAVE_NTP_NAME above the #include "ntp_NAME.c" @@ -8918,15 +9410,12 @@ ChangeSet@1.3529.1.18, 2015-07-27 19:46: tests/libntp/run-lfptostr.c@1.6 +11 -11 update - tests/libntp/run-netof.c@1.6 +0 -1 update - tests/libntp/run-socktoa.c@1.9 +6 -6 update - tests/ntpd/Makefile.am@1.6.1.4 +8 -3 Merge @@ -8942,11 +9431,9 @@ ChangeSet@1.3529.1.18, 2015-07-27 19:46: tests/ntpd/run-ntp_signd.c@1.3 +2 -2 update - tests/ntpd/run-rc_cmdlength.c@1.2 +8 -3 update - ChangeSet@1.3543, 2015-07-27 04:11:08+00:00, stenn@psp-at1.ntp.org [Bug 2595] ntpdate man page quirks. Hal Murray, Harlan Stenn @@ -9192,165 +9679,126 @@ ChangeSet@1.3529.1.10, 2015-07-25 16:54: tests/libntp/netof.c@1.3.1.1 +8 -0 adding declarations - tests/libntp/numtoa.c@1.6 +2 -0 adding declarations - tests/libntp/numtohost.c@1.5 +2 -0 adding declarations - tests/libntp/octtoint.c@1.3.1.1 +10 -0 adding declarations - tests/libntp/prettydate.c@1.3 +3 -0 adding declarations - tests/libntp/recvbuff.c@1.5 +4 -0 adding declarations - tests/libntp/refidsmear.c@1.5 +6 -3 adding declarations - tests/libntp/refnumtoa.c@1.5 +4 -0 adding declarations - tests/libntp/run-clocktime.c@1.9 +1 -1 update tests/libntp/run-lfpfunc.c@1.16 +9 -9 update - tests/libntp/run-netof.c@1.5 +4 -4 update - tests/libntp/run-numtoa.c@1.9 +2 -2 update - tests/libntp/run-numtohost.c@1.9 +1 -1 update - tests/libntp/run-octtoint.c@1.6 +7 -7 update - tests/libntp/run-prettydate.c@1.4 +1 -1 update - tests/libntp/run-recvbuff.c@1.4 +3 -3 update - tests/libntp/run-refidsmear.c@1.5 +1 -1 update - tests/libntp/run-refnumtoa.c@1.7 +2 -2 update - tests/libntp/run-sfptostr.c@1.4 +7 -7 update - tests/libntp/run-socktoa.c@1.8 +6 -6 update - tests/libntp/run-ssl_init.c@1.8 +5 -5 update - tests/libntp/run-statestr.c@1.9 +4 -4 update - tests/libntp/run-strtolfp.c@1.4 +6 -6 update - tests/libntp/run-timespecops.c@1.9 +28 -28 update - tests/libntp/run-timevalops.c@1.11 +28 -28 update - tests/libntp/run-tstotv.c@1.4 +3 -3 update - tests/libntp/run-tvtots.c@1.5 +3 -3 update - tests/libntp/run-vi64ops.c@1.7 +3 -3 update - tests/libntp/run-ymd2yd.c@1.10 +4 -4 update - tests/libntp/sfptostr.c@1.3 +10 -0 update - tests/libntp/sockaddrtest.c@1.2 +1 -0 update - tests/libntp/socktoa.c@1.3.1.1 +6 -0 added declarations tests/libntp/ssl_init.c@1.8 +6 -0 added declarations - tests/libntp/statestr.c@1.5 +4 -0 added declarations - tests/libntp/strtolfp.c@1.2.1.1 +9 -0 added declarations - tests/libntp/timespecops.c@1.8 +40 -1 added declarations - tests/libntp/timevalops.c@1.11 +37 -1 added declarations - tests/libntp/tstotv.c@1.3 +5 -0 added declarations - tests/libntp/tvtots.c@1.5 +3 -0 added declarations - tests/libntp/vi64ops.c@1.6 +6 -0 added declarations - tests/libntp/ymd2yd.c@1.6 +5 -0 added declarations - ChangeSet@1.3536, 2015-07-25 02:08:32+02:00, tomek@tomek-n56vz.(none) run-ntp_restrict.c: @@ -9408,57 +9856,45 @@ ChangeSet@1.3529.1.9, 2015-07-24 18:38:0 tests/libntp/calendar.c@1.6 +42 -18 added function declarations + minor comment fixes - tests/libntp/caljulian.c@1.9 +10 -0 added declarations tests/libntp/caltontp.c@1.3 +5 -0 added declarations - *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Thu Mar 23 22:12:15 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EF172D1B1E8; Thu, 23 Mar 2017 22:12:15 +0000 (UTC) (envelope-from landonf@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BC025103F; Thu, 23 Mar 2017 22:12:15 +0000 (UTC) (envelope-from landonf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NMCE5h038171; Thu, 23 Mar 2017 22:12:14 GMT (envelope-from landonf@FreeBSD.org) Received: (from landonf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NMCEuS038170; Thu, 23 Mar 2017 22:12:14 GMT (envelope-from landonf@FreeBSD.org) Message-Id: <201703232212.v2NMCEuS038170@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: landonf set sender to landonf@FreeBSD.org using -f From: "Landon J. Fuller" Date: Thu, 23 Mar 2017 22:12:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315872 - head/sys/dev/bhnd/bcma X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 22:12:16 -0000 Author: landonf Date: Thu Mar 23 22:12:14 2017 New Revision: 315872 URL: https://svnweb.freebsd.org/changeset/base/315872 Log: Add a workaround for the BCM4706's dangling core region EROM entries. Approved by: adrian (mentor, implicit) Modified: head/sys/dev/bhnd/bcma/bcma_erom.c Modified: head/sys/dev/bhnd/bcma/bcma_erom.c ============================================================================== --- head/sys/dev/bhnd/bcma/bcma_erom.c Thu Mar 23 22:06:06 2017 (r315871) +++ head/sys/dev/bhnd/bcma/bcma_erom.c Thu Mar 23 22:12:14 2017 (r315872) @@ -1344,6 +1344,19 @@ bcma_erom_next_corecfg(struct bcma_erom goto failed; } + /* + * Seek to the next core entry (if any), skipping any dangling/invalid + * region entries. + * + * On the BCM4706, the EROM entry for the memory controller core + * (0x4bf/0x52E) contains a dangling/unused slave wrapper port region + * descriptor. + */ + if ((error = bcma_erom_seek_next(erom, BCMA_EROM_ENTRY_TYPE_CORE))) { + if (error != ENOENT) + goto failed; + } + *result = cfg; return (0); From owner-svn-src-head@freebsd.org Thu Mar 23 22:14:09 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B03CED1B35D; Thu, 23 Mar 2017 22:14:09 +0000 (UTC) (envelope-from landonf@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7D31011EB; Thu, 23 Mar 2017 22:14:09 +0000 (UTC) (envelope-from landonf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2NME8Nb039170; Thu, 23 Mar 2017 22:14:08 GMT (envelope-from landonf@FreeBSD.org) Received: (from landonf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2NME8op039169; Thu, 23 Mar 2017 22:14:08 GMT (envelope-from landonf@FreeBSD.org) Message-Id: <201703232214.v2NME8op039169@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: landonf set sender to landonf@FreeBSD.org using -f From: "Landon J. Fuller" Date: Thu, 23 Mar 2017 22:14:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315873 - head/sys/dev/bhnd/cores/chipc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 22:14:09 -0000 Author: landonf Date: Thu Mar 23 22:14:08 2017 New Revision: 315873 URL: https://svnweb.freebsd.org/changeset/base/315873 Log: Add Northstar/BCM4706 core ID for ChipCommon. Approved by: adrian (mentor, implicit) Modified: head/sys/dev/bhnd/cores/chipc/chipc.c Modified: head/sys/dev/bhnd/cores/chipc/chipc.c ============================================================================== --- head/sys/dev/bhnd/cores/chipc/chipc.c Thu Mar 23 22:12:14 2017 (r315872) +++ head/sys/dev/bhnd/cores/chipc/chipc.c Thu Mar 23 22:14:08 2017 (r315873) @@ -69,6 +69,7 @@ static struct bhnd_device_quirk chipc_qu /* Supported device identifiers */ static const struct bhnd_device chipc_devices[] = { BHND_DEVICE(BCM, CC, NULL, chipc_quirks), + BHND_DEVICE(BCM, 4706_CC, NULL, chipc_quirks), BHND_DEVICE_END }; From owner-svn-src-head@freebsd.org Thu Mar 23 22:17:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AABECD1B51F; Thu, 23 Mar 2017 22:17:06 +0000 (UTC) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: from pdx.rh.CN85.dnsmgr.net (br1.CN84in.dnsmgr.net [69.59.192.140]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6CD1915DF; Thu, 23 Mar 2017 22:17:05 +0000 (UTC) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: from pdx.rh.CN85.dnsmgr.net (localhost [127.0.0.1]) by pdx.rh.CN85.dnsmgr.net (8.13.3/8.13.3) with ESMTP id v2NMGoo4082408; Thu, 23 Mar 2017 15:16:50 -0700 (PDT) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: (from freebsd@localhost) by pdx.rh.CN85.dnsmgr.net (8.13.3/8.13.3/Submit) id v2NMGoHV082407; Thu, 23 Mar 2017 15:16:50 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201703232216.v2NMGoHV082407@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r315653 - in head: lib/libstand sys/boot/common sys/boot/i386/libi386 In-Reply-To: <978b5e59-97f5-459e-5a8e-00848fe2dab1@FreeBSD.org> To: lidl@freebsd.org Date: Thu, 23 Mar 2017 15:16:50 -0700 (PDT) CC: Toomas Soome , Ian Lepore , Slawa Olhovchenkov , Toomas Soome , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Reply-To: rgrimes@freebsd.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Mar 2017 22:17:06 -0000 > On 3/21/17 11:53 AM, Toomas Soome wrote: > > > >> On 21. m?rts 2017, at 17:15, Ian Lepore wrote: > >> > >> On Tue, 2017-03-21 at 15:35 +0300, Slawa Olhovchenkov wrote: > >>> On Mon, Mar 20, 2017 at 10:20:17PM +0000, Toomas Soome wrote: > >>> > >>>> > >>>> Author: tsoome > >>>> Date: Mon Mar 20 22:20:17 2017 > >>>> New Revision: 315653 > >>>> URL: https://svnweb.freebsd.org/changeset/base/315653 > >>>> > >>>> Log: > >>>> loader: verify the value from dhcp.interface-mtu and use snprintf > >>>> to set mtu > >>>> > >>>> Since the uset can set dhcp.interface-mtu, we need to try to > >>>> validate the > >>>> value. So we verify if the conversion to int is successful and we > >>>> will not > >>>> allow to set value greater than max IPv4 packet size. > >>>> > >>>> + tmp > USHRT_MAX) { > >>>> + printf("%s: bad value: > >>>> \"%s\", " > >>>> + "ignoring\n", > >>>> + "dhcp.interface-mtu", > >>>> val); > >>> === > >>> USHRT_MAX Maximum value for an object of type unsigned short > >>> int > >>> 65535 (216-1) or greater* > >>> > >>> * the actual value depends on the particular system and library > >>> implementation, but shall reflect the limits of these types in the > >>> target platform. > >>> === > >>> > >>> I mean IF_MAXMTU more correct. > >>> > >> > >> The context here is libstand; because it is standalone by design, the > >> code doesn't have access to IF_MAXMTU or other kernel/userland > >> constants. There is also no question that a short is 16 bits or that > >> USHRT_MAX will be anything other than 65535 in that environment. If > >> some platform did appear that had a different-sized short by default, > >> we would add whatever flags are necessary to force it back to 16 bits > >> in src/share/mk/bsd.stand.mk. > >> > > > > > > Also note the ?upper? value is entirely fictional - we felt we need > > to pick some ?sane? default, with current (common 1Gb/s) ethernet hardware > > you will be in trouble long before reaching that value;) > > All the world is not an VAX, nor is every network Ethernet. > > HIPPI, not that you see much of it nowadays, had a MTU for > switched networks of 65280 (64K - 216 bytes of overhead). > Using USHRT_MAX is exactly the right thing here. USHRT_MAX _could_ easily be >16 bits in the not too distant future, though this code doesnt seem to be able to include the proper header to get to a proper define it should probably just localally #define it to be 65535 to avoid the breakage 10 years from now. > -Kurt -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Fri Mar 24 00:02:14 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 51238D18679; Fri, 24 Mar 2017 00:02:14 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 19BB11D29; Fri, 24 Mar 2017 00:02:14 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2O02D1P085204; Fri, 24 Mar 2017 00:02:13 GMT (envelope-from mm@FreeBSD.org) Received: (from mm@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2O02CK1085189; Fri, 24 Mar 2017 00:02:12 GMT (envelope-from mm@FreeBSD.org) Message-Id: <201703240002.v2O02CK1085189@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mm set sender to mm@FreeBSD.org using -f From: Martin Matuska Date: Fri, 24 Mar 2017 00:02:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315876 - in head: contrib/libarchive/libarchive contrib/libarchive/libarchive/test contrib/libarchive/tar contrib/libarchive/tar/test contrib/libarchive/test_utils lib/libarchive lib/l... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 00:02:14 -0000 Author: mm Date: Fri Mar 24 00:02:12 2017 New Revision: 315876 URL: https://svnweb.freebsd.org/changeset/base/315876 Log: MFV r315875: Sync libarchive with vendor. Vendor changes (FreeBSD-related): - store extended attributes with extattr_set_link() if no fd is provided - add extended attribute tests to libarchive and bsdtar - fix tar's test_option_acls - support the UF_HIDDEN file flag X-MFC with: 315636 Added: head/contrib/libarchive/libarchive/archive_platform_xattr.h - copied unchanged from r315875, vendor/libarchive/dist/libarchive/archive_platform_xattr.h head/contrib/libarchive/libarchive/test/test_xattr_platform.c - copied unchanged from r315875, vendor/libarchive/dist/libarchive/test/test_xattr_platform.c head/contrib/libarchive/tar/test/test_option_xattrs.c - copied unchanged from r315875, vendor/libarchive/dist/tar/test/test_option_xattrs.c Modified: head/contrib/libarchive/libarchive/archive_entry.c head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c head/contrib/libarchive/libarchive/archive_write_disk_posix.c head/contrib/libarchive/tar/bsdtar.1 head/contrib/libarchive/tar/test/test_option_acls.c head/contrib/libarchive/test_utils/test_common.h head/contrib/libarchive/test_utils/test_main.c head/lib/libarchive/config_freebsd.h head/lib/libarchive/tests/Makefile head/usr.bin/tar/tests/Makefile Directory Properties: head/contrib/libarchive/ (props changed) Modified: head/contrib/libarchive/libarchive/archive_entry.c ============================================================================== --- head/contrib/libarchive/libarchive/archive_entry.c Thu Mar 23 23:44:31 2017 (r315875) +++ head/contrib/libarchive/libarchive/archive_entry.c Fri Mar 24 00:02:12 2017 (r315876) @@ -1708,6 +1708,9 @@ static struct flag { #ifdef UF_COMPRESSED { "nocompressed",L"nocompressed", UF_COMPRESSED, 0 }, #endif +#ifdef UF_HIDDEN + { "nohidden", L"nohidden", UF_HIDDEN, 0 }, +#endif #if defined(FS_UNRM_FL) { "nouunlink", L"nouunlink", FS_UNRM_FL, 0}, #elif defined(EXT2_UNRM_FL) Copied: head/contrib/libarchive/libarchive/archive_platform_xattr.h (from r315875, vendor/libarchive/dist/libarchive/archive_platform_xattr.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/libarchive/libarchive/archive_platform_xattr.h Fri Mar 24 00:02:12 2017 (r315876, copy of r315875, vendor/libarchive/dist/libarchive/archive_platform_xattr.h) @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2017 Martin Matuska + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* !!ONLY FOR USE INTERNALLY TO LIBARCHIVE!! */ + +#ifndef ARCHIVE_PLATFORM_XATTR_H_INCLUDED +#define ARCHIVE_PLATFORM_XATTR_H_INCLUDED + +/* + * Determine if we support extended attributes + */ +#if ARCHIVE_XATTR_LINUX || ARCHIVE_XATTR_DARWIN || ARCHIVE_XATTR_FREEBSD || \ + ARCHIVE_XATTR_AIX +#define ARCHIVE_XATTR_SUPPORT 1 +#endif + +#endif /* ARCHIVE_PLATFORM_XATTR_H_INCLUDED */ Modified: head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c ============================================================================== --- head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c Thu Mar 23 23:44:31 2017 (r315875) +++ head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c Fri Mar 24 00:02:12 2017 (r315876) @@ -423,12 +423,10 @@ setup_mac_metadata(struct archive_read_d } #endif -#if (HAVE_FGETXATTR && HAVE_FLISTXATTR && HAVE_LISTXATTR && \ - HAVE_LLISTXATTR && HAVE_GETXATTR && HAVE_LGETXATTR) || \ - (HAVE_FGETEA && HAVE_FLISTEA && HAVE_LISTEA) +#if ARCHIVE_XATTR_LINUX || ARCHIVE_XATTR_DARWIN || ARCHIVE_XATTR_AIX /* - * Linux and AIX extended attribute support. + * Linux, Darwin and AIX extended attribute support. * * TODO: By using a stack-allocated buffer for the first * call to getxattr(), we might be able to avoid the second @@ -446,21 +444,32 @@ setup_xattr(struct archive_read_disk *a, ssize_t size; void *value = NULL; -#if HAVE_FGETXATTR - if (fd >= 0) + + if (fd >= 0) { +#if ARCHIVE_XATTR_LINUX size = fgetxattr(fd, name, NULL, 0); - else if (!a->follow_symlinks) - size = lgetxattr(accpath, name, NULL, 0); - else - size = getxattr(accpath, name, NULL, 0); -#elif HAVE_FGETEA - if (fd >= 0) +#elif ARCHIVE_XATTR_DARWIN + size = fgetxattr(fd, name, NULL, 0, 0, 0); +#elif ARCHIVE_XATTR_AIX size = fgetea(fd, name, NULL, 0); - else if (!a->follow_symlinks) +#endif + } else if (!a->follow_symlinks) { +#if ARCHIVE_XATTR_LINUX + size = lgetxattr(accpath, name, NULL, 0); +#elif ARCHIVE_XATTR_DARWIN + size = getxattr(accpath, name, NULL, 0, 0, XATTR_NOFOLLOW); +#elif ARCHIVE_XATTR_AIX size = lgetea(accpath, name, NULL, 0); - else +#endif + } else { +#if ARCHIVE_XATTR_LINUX + size = getxattr(accpath, name, NULL, 0); +#elif ARCHIVE_XATTR_DARWIN + size = getxattr(accpath, name, NULL, 0, 0, 0); +#elif ARCHIVE_XATTR_AIX size = getea(accpath, name, NULL, 0); #endif + } if (size == -1) { archive_set_error(&a->archive, errno, @@ -473,21 +482,32 @@ setup_xattr(struct archive_read_disk *a, return (ARCHIVE_FATAL); } -#if HAVE_FGETXATTR - if (fd >= 0) + + if (fd >= 0) { +#if ARCHIVE_XATTR_LINUX size = fgetxattr(fd, name, value, size); - else if (!a->follow_symlinks) - size = lgetxattr(accpath, name, value, size); - else - size = getxattr(accpath, name, value, size); -#elif HAVE_FGETEA - if (fd >= 0) +#elif ARCHIVE_XATTR_DARWIN + size = fgetxattr(fd, name, value, size, 0, 0); +#elif ARCHIVE_XATTR_AIX size = fgetea(fd, name, value, size); - else if (!a->follow_symlinks) +#endif + } else if (!a->follow_symlinks) { +#if ARCHIVE_XATTR_LINUX + size = lgetxattr(accpath, name, value, size); +#elif ARCHIVE_XATTR_DARWIN + size = getxattr(accpath, name, value, size, 0, XATTR_NOFOLLOW); +#elif ARCHIVE_XATTR_AIX size = lgetea(accpath, name, value, size); - else +#endif + } else { +#if ARCHIVE_XATTR_LINUX + size = getxattr(accpath, name, value, size); +#elif ARCHIVE_XATTR_DARWIN + size = getxattr(accpath, name, value, size, 0, 0); +#elif ARCHIVE_XATTR_AIX size = getea(accpath, name, value, size); #endif + } if (size == -1) { archive_set_error(&a->archive, errno, @@ -517,21 +537,31 @@ setup_xattrs(struct archive_read_disk *a return (ARCHIVE_WARN); } -#if HAVE_FLISTXATTR - if (*fd >= 0) + if (*fd >= 0) { +#if ARCHIVE_XATTR_LINUX list_size = flistxattr(*fd, NULL, 0); - else if (!a->follow_symlinks) - list_size = llistxattr(path, NULL, 0); - else - list_size = listxattr(path, NULL, 0); -#elif HAVE_FLISTEA - if (*fd >= 0) +#elif ARCHIVE_XATTR_DARWIN + list_size = flistxattr(*fd, NULL, 0, 0); +#elif ARCHIVE_XATTR_AIX list_size = flistea(*fd, NULL, 0); - else if (!a->follow_symlinks) +#endif + } else if (!a->follow_symlinks) { +#if ARCHIVE_XATTR_LINUX + list_size = llistxattr(path, NULL, 0); +#elif ARCHIVE_XATTR_DARWIN + list_size = listxattr(path, NULL, 0, XATTR_NOFOLLOW); +#elif ARCHIVE_XATTR_AIX list_size = llistea(path, NULL, 0); - else +#endif + } else { +#if ARCHIVE_XATTR_LINUX + list_size = listxattr(path, NULL, 0); +#elif ARCHIVE_XATTR_DARWIN + list_size = listxattr(path, NULL, 0, 0); +#elif ARCHIVE_XATTR_AIX list_size = listea(path, NULL, 0); #endif + } if (list_size == -1) { if (errno == ENOTSUP || errno == ENOSYS) @@ -549,21 +579,31 @@ setup_xattrs(struct archive_read_disk *a return (ARCHIVE_FATAL); } -#if HAVE_FLISTXATTR - if (*fd >= 0) + if (*fd >= 0) { +#if ARCHIVE_XATTR_LINUX list_size = flistxattr(*fd, list, list_size); - else if (!a->follow_symlinks) - list_size = llistxattr(path, list, list_size); - else - list_size = listxattr(path, list, list_size); -#elif HAVE_FLISTEA - if (*fd >= 0) +#elif ARCHIVE_XATTR_DARWIN + list_size = flistxattr(*fd, list, list_size, 0); +#elif ARCHIVE_XATTR_AIX list_size = flistea(*fd, list, list_size); - else if (!a->follow_symlinks) +#endif + } else if (!a->follow_symlinks) { +#if ARCHIVE_XATTR_LINUX + list_size = llistxattr(path, list, list_size); +#elif ARCHIVE_XATTR_DARWIN + list_size = listxattr(path, list, list_size, XATTR_NOFOLLOW); +#elif ARCHIVE_XATTR_AIX list_size = llistea(path, list, list_size); - else +#endif + } else { +#if ARCHIVE_XATTR_LINUX + list_size = listxattr(path, list, list_size); +#elif ARCHIVE_XATTR_DARWIN + list_size = listxattr(path, list, list_size, 0); +#elif ARCHIVE_XATTR_AIX list_size = listea(path, list, list_size); #endif + } if (list_size == -1) { archive_set_error(&a->archive, errno, @@ -583,8 +623,7 @@ setup_xattrs(struct archive_read_disk *a return (ARCHIVE_OK); } -#elif HAVE_EXTATTR_GET_FILE && HAVE_EXTATTR_LIST_FILE && \ - HAVE_DECL_EXTATTR_NAMESPACE_USER +#elif ARCHIVE_XATTR_FREEBSD /* * FreeBSD extattr interface. Modified: head/contrib/libarchive/libarchive/archive_write_disk_posix.c ============================================================================== --- head/contrib/libarchive/libarchive/archive_write_disk_posix.c Thu Mar 23 23:44:31 2017 (r315875) +++ head/contrib/libarchive/libarchive/archive_write_disk_posix.c Fri Mar 24 00:02:12 2017 (r315876) @@ -39,9 +39,9 @@ __FBSDID("$FreeBSD$"); #ifdef HAVE_SYS_EXTATTR_H #include #endif -#if defined(HAVE_SYS_XATTR_H) +#if HAVE_SYS_XATTR_H #include -#elif defined(HAVE_ATTR_XATTR_H) +#elif HAVE_ATTR_XATTR_H #include #endif #ifdef HAVE_SYS_EA_H @@ -664,8 +664,21 @@ _archive_write_disk_header(struct archiv } #endif - if (a->flags & ARCHIVE_EXTRACT_XATTR) + if (a->flags & ARCHIVE_EXTRACT_XATTR) { +#if ARCHIVE_XATTR_DARWIN + /* + * On MacOS, extended attributes get stored in mac_metadata, + * too. If we intend to extract mac_metadata and it is present + * we skip extracting extended attributes. + */ + size_t metadata_size; + + if ((a->flags & ARCHIVE_EXTRACT_MAC_METADATA) == 0 || + archive_entry_mac_metadata(a->entry, + &metadata_size) == NULL || metadata_size == 0) +#endif a->todo |= TODO_XATTR; + } if (a->flags & ARCHIVE_EXTRACT_FFLAGS) a->todo |= TODO_FFLAGS; if (a->flags & ARCHIVE_EXTRACT_SECURE_SYMLINKS) { @@ -4070,9 +4083,9 @@ skip_appledouble: } #endif -#if HAVE_LSETXATTR || HAVE_LSETEA +#if ARCHIVE_XATTR_LINUX || ARCHIVE_XATTR_DARWIN || ARCHIVE_XATTR_AIX /* - * Restore extended attributes - Linux and AIX implementations: + * Restore extended attributes - Linux, Darwin and AIX implementations: * AIX' ea interface is syntaxwise identical to the Linux xattr interface. */ static int @@ -4092,20 +4105,22 @@ set_xattrs(struct archive_write_disk *a) strncmp(name, "xfsroot.", 8) != 0 && strncmp(name, "system.", 7) != 0) { int e; -#if HAVE_FSETXATTR - if (a->fd >= 0) + if (a->fd >= 0) { +#if ARCHIVE_XATTR_LINUX e = fsetxattr(a->fd, name, value, size, 0); - else -#elif HAVE_FSETEA - if (a->fd >= 0) +#elif ARCHIVE_XATTR_DARWIN + e = fsetxattr(a->fd, name, value, size, 0, 0); +#elif ARCHIVE_XATTR_AIX e = fsetea(a->fd, name, value, size, 0); - else #endif - { -#if HAVE_LSETXATTR + } else { +#if ARCHIVE_XATTR_LINUX e = lsetxattr(archive_entry_pathname(entry), name, value, size, 0); -#elif HAVE_LSETEA +#elif ARCHIVE_XATTR_DARWIN + e = setxattr(archive_entry_pathname(entry), + name, value, size, 0, XATTR_NOFOLLOW); +#elif ARCHIVE_XATTR_AIX e = lsetea(archive_entry_pathname(entry), name, value, size, 0); #endif @@ -4134,7 +4149,7 @@ set_xattrs(struct archive_write_disk *a) } return (ret); } -#elif HAVE_EXTATTR_SET_FILE && HAVE_DECL_EXTATTR_NAMESPACE_USER +#elif ARCHIVE_XATTR_FREEBSD /* * Restore extended attributes - FreeBSD implementation */ @@ -4169,15 +4184,12 @@ set_xattrs(struct archive_write_disk *a) continue; } errno = 0; -#if HAVE_EXTATTR_SET_FD - if (a->fd >= 0) + + if (a->fd >= 0) { e = extattr_set_fd(a->fd, namespace, name, value, size); - else -#endif - /* TODO: should we use extattr_set_link() instead? */ - { - e = extattr_set_file( + } else { + e = extattr_set_link( archive_entry_pathname(entry), namespace, name, value, size); } Copied: head/contrib/libarchive/libarchive/test/test_xattr_platform.c (from r315875, vendor/libarchive/dist/libarchive/test/test_xattr_platform.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/libarchive/libarchive/test/test_xattr_platform.c Fri Mar 24 00:02:12 2017 (r315876, copy of r315875, vendor/libarchive/dist/libarchive/test/test_xattr_platform.c) @@ -0,0 +1,102 @@ +/*- + * Copyright (c) 2003-2010 Tim Kientzle + * Copyright (c) 2017 Martin Matuska + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "test.h" +__FBSDID("$FreeBSD$"); + +DEFINE_TEST(test_xattr_platform) +{ +#if !ARCHIVE_XATTR_SUPPORT + skipping("Extended attributes are not supported on this platform"); +#else /* ARCHIVE_XATTR_SUPPORT */ + struct archive *a; + struct archive_entry *ae; + const char *name; + const void *value; + size_t size, insize; + int e, r; + const char *attrname = "user.libarchive.test"; + const char *readval = "readval"; + const char *writeval = "writeval"; + + assertMakeFile("readtest", 0644, "a"); + + if (!setXattr("readtest", attrname, readval, strlen(readval) + 1)) { + skipping("Extended attributes are not supported on this " + "filesystem"); + return; + } + + /* Read test */ + assert(NULL != (a = archive_read_disk_new())); + ae = archive_entry_new(); + assert(ae != NULL); + archive_entry_set_pathname(ae, "readtest"); + assertEqualInt(ARCHIVE_OK, + archive_read_disk_entry_from_file(a, ae, -1, NULL)); + e = archive_entry_xattr_reset(ae); + assert(e > 0); + + r = 0; + while (archive_entry_xattr_next(ae, &name, &value, + &size) == ARCHIVE_OK) { + if (name != NULL && value != NULL && size > 0 && + strcmp(name, attrname) == 0) { + failure("Attribute value does not match"); + assertEqualString((const char *)value, readval); + r = 1; + break; + } + } + failure("Attribute not found: %s", attrname); + assertEqualInt(r, 1); + + archive_entry_free(ae); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); + + assert(NULL != (a = archive_write_disk_new())); + archive_write_disk_set_options(a, ARCHIVE_EXTRACT_TIME | + ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_XATTR); + + /* Write test */ + ae = archive_entry_new(); + assert(ae != NULL); + archive_entry_set_pathname(ae, "writetest"); + archive_entry_set_filetype(ae, AE_IFREG); + archive_entry_set_perm(ae, 0654); + archive_entry_set_mtime(ae, 123456, 7890); + archive_entry_set_size(ae, 0); + archive_entry_xattr_add_entry(ae, attrname, writeval, + strlen(writeval) + 1); + assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); + archive_entry_free(ae); + assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); + assertEqualInt(ARCHIVE_OK, archive_write_free(a)); + + value = getXattr("writetest", attrname, &insize); + if (assertEqualInt(insize, strlen(writeval) + 1) != 0) + assertEqualMem(value, writeval, insize); +#endif +} Modified: head/contrib/libarchive/tar/bsdtar.1 ============================================================================== --- head/contrib/libarchive/tar/bsdtar.1 Thu Mar 23 23:44:31 2017 (r315875) +++ head/contrib/libarchive/tar/bsdtar.1 Fri Mar 24 00:02:12 2017 (r315876) @@ -169,7 +169,7 @@ restricted pax format and bzip2 compress (c, r, u, x modes only) Archive or extract POSIX.1e or NFSv4 ACLs. This is the reverse of .Fl Fl no-acls -and the default behavior in c, r, and u modes (except Mac OS X) or if +and the default behavior in c, r, and u modes (except on Mac OS X) or if .Nm is run in x mode as root. On Mac OS X this option translates extended ACLs to NFSv4 ACLs. To store extended ACLs the @@ -396,7 +396,7 @@ except it compares mtime entries instead Honor the nodump file flag by skipping this file. .It Fl Fl nopreserveHFSCompression (x mode only) -Mac OS X specific(v10.6 or later). Do not compress extracted regular files +Mac OS X specific (v10.6 or later). Do not compress extracted regular files which were compressed with HFS+ compression before archived. By default, compress the regular files again with HFS+ compression. .It Fl Fl null @@ -416,7 +416,7 @@ Do not archive or extract POSIX.1e or NF .Fl Fl acls and the default behavior if .Nm -is run as non-root in x mode (on Mac OS X also in c, r and u modes). +is run as non-root in x mode (on Mac OS X as any user in c, r, u and x modes). .It Fl Fl no-fflags (c, r, u, x modes only) Do not archive or extract file flags. This is the reverse of Modified: head/contrib/libarchive/tar/test/test_option_acls.c ============================================================================== --- head/contrib/libarchive/tar/test/test_option_acls.c Thu Mar 23 23:44:31 2017 (r315875) +++ head/contrib/libarchive/tar/test/test_option_acls.c Fri Mar 24 00:02:12 2017 (r315876) @@ -25,9 +25,9 @@ #include "test.h" __FBSDID("$FreeBSD$"); -#if HAVE_POSIX_ACL || HAVE_DARWIN_ACL +#if ARCHIVE_ACL_FREEBSD || ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_LIBACL static const acl_perm_t acl_perms[] = { -#if HAVE_DARWIN_ACL +#if ARCHIVE_ACL_DARWIN ACL_READ_DATA, ACL_LIST_DIRECTORY, ACL_WRITE_DATA, @@ -46,11 +46,11 @@ static const acl_perm_t acl_perms[] = { ACL_WRITE_SECURITY, ACL_CHANGE_OWNER, ACL_SYNCHRONIZE -#else /* !HAVE_DARWIN_ACL */ +#else /* !ARCHIVE_ACL_DARWIN */ ACL_EXECUTE, ACL_WRITE, ACL_READ, -#if HAVE_FREEBSD_NFS4_ACL +#if ARCHIVE_ACL_FREEBSD_NFS4 ACL_READ_DATA, ACL_LIST_DIRECTORY, ACL_WRITE_DATA, @@ -67,18 +67,18 @@ static const acl_perm_t acl_perms[] = { ACL_WRITE_ACL, ACL_WRITE_OWNER, ACL_SYNCHRONIZE -#endif /* HAVE_FREEBSD_NFS4_ACL */ -#endif /* !HAVE_DARWIN_ACL */ +#endif /* ARCHIVE_ACL_FREEBSD_NFS4 */ +#endif /* !ARCHIVE_ACL_DARWIN */ }; -#if HAVE_DARWIN_ACL || HAVE_FREEBSD_NFS4_ACL +#if ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_FREEBSD_NFS4 static const acl_flag_t acl_flags[] = { -#if HAVE_DARWIN_ACL +#if ARCHIVE_ACL_DARWIN ACL_ENTRY_INHERITED, ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_LIMIT_INHERIT, ACL_ENTRY_ONLY_INHERIT -#else /* HAVE_FREEBSD_NFS4_ACL */ +#else /* ARCHIVE_ACL_FREEBSD_NFS4 */ ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_NO_PROPAGATE_INHERIT, @@ -86,9 +86,9 @@ static const acl_flag_t acl_flags[] = { ACL_ENTRY_SUCCESSFUL_ACCESS, ACL_ENTRY_FAILED_ACCESS, ACL_ENTRY_INHERITED -#endif /* HAVE_FREEBSD_NFS4_ACL */ +#endif /* ARCHIVE_ACL_FREEBSD_NFS4 */ }; -#endif /* HAVE_DARWIN_ACL || HAVE_FREEBSD_NFS4_ACL */ +#endif /* ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_FREEBSD_NFS4 */ /* * Compare two ACL entries on FreeBSD or on Mac OS X @@ -100,10 +100,10 @@ compare_acl_entry(acl_entry_t ae_a, acl_ acl_permset_t permset_a, permset_b; int perm_a, perm_b, perm_start, perm_end; void *qual_a, *qual_b; -#if HAVE_FREEBSD_NFS4_ACL +#if ARCHIVE_ACL_FREEBSD_NFS4 acl_entry_type_t type_a, type_b; #endif -#if HAVE_FREEBSD_NFS4_ACL || HAVE_DARWIN_ACL +#if ARCHIVE_ACL_FREEBSD_NFS4 || ARCHIVE_ACL_DARWIN acl_flagset_t flagset_a, flagset_b; int flag_a, flag_b; #endif @@ -123,7 +123,7 @@ compare_acl_entry(acl_entry_t ae_a, acl_ return (0); /* Compare ACL qualifier */ -#if HAVE_DARWIN_ACL +#if ARCHIVE_ACL_DARWIN if (tag_a == ACL_EXTENDED_ALLOW || tag_b == ACL_EXTENDED_DENY) #else if (tag_a == ACL_USER || tag_a == ACL_GROUP) @@ -139,7 +139,7 @@ compare_acl_entry(acl_entry_t ae_a, acl_ acl_free(qual_a); return (-1); } -#if HAVE_DARWIN_ACL +#if ARCHIVE_ACL_DARWIN if (memcmp(((guid_t *)qual_a)->g_guid, ((guid_t *)qual_b)->g_guid, KAUTH_GUID_SIZE) != 0) #else @@ -157,7 +157,7 @@ compare_acl_entry(acl_entry_t ae_a, acl_ acl_free(qual_b); } -#if HAVE_FREEBSD_NFS4_ACL +#if ARCHIVE_ACL_FREEBSD_NFS4 if (is_nfs4) { /* Compare NFS4 ACL type */ r = acl_get_entry_type_np(ae_a, &type_a); @@ -185,7 +185,7 @@ compare_acl_entry(acl_entry_t ae_a, acl_ perm_start = 0; perm_end = (int)(sizeof(acl_perms) / sizeof(acl_perms[0])); -#if HAVE_FREEBSD_NFS4_ACL +#if ARCHIVE_ACL_FREEBSD_NFS4 if (is_nfs4) perm_start = 3; else @@ -193,7 +193,7 @@ compare_acl_entry(acl_entry_t ae_a, acl_ #endif /* Cycle through all perms and compare their value */ for (i = perm_start; i < perm_end; i++) { -#if HAVE_LIBACL +#if ARCHIVE_ACL_LIBACL perm_a = acl_get_perm(permset_a, acl_perms[i]); perm_b = acl_get_perm(permset_b, acl_perms[i]); #else @@ -206,7 +206,7 @@ compare_acl_entry(acl_entry_t ae_a, acl_ return (0); } -#if HAVE_FREEBSD_NFS4_ACL || HAVE_DARWIN_ACL +#if ARCHIVE_ACL_FREEBSD_NFS4 || ARCHIVE_ACL_DARWIN if (is_nfs4) { r = acl_get_flagset_np(ae_a, &flagset_a); failure("acl_get_flagset_np() error: %s", strerror(errno)); @@ -227,14 +227,14 @@ compare_acl_entry(acl_entry_t ae_a, acl_ return (0); } } -#else /* HAVE_FREEBSD_NFS4_ACL || HAVE_DARWIN_ACL*/ +#else /* ARCHIVE_ACL_FREEBSD_NFS4 || ARCHIVE_ACL_DARWIN */ (void)is_nfs4; /* UNUSED */ #endif return (1); } -#endif /* HAVE_POSIX_ACL || HAVE_DARWIN_ACL */ +#endif /* ARCHIVE_ACL_FREEBSD || ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_LIBACL */ -#if HAVE_SUN_ACL || HAVE_DARWIN_ACL || HAVE_POSIX_ACL +#if ARCHIVE_ACL_SUPPORT /* * Clear default ACLs or inheritance flags */ @@ -243,15 +243,17 @@ clear_inheritance_flags(const char *path { switch (type) { case ARCHIVE_TEST_ACL_TYPE_POSIX1E: -#if HAVE_POSIX_ACL +#if ARCHIVE_ACL_POSIX1E +#if !ARCHIVE_ACL_SUNOS acl_delete_def_file(path); #else /* Solaris */ setTestAcl(path); #endif +#endif /* ARCHIVE_ACL_POSIX1E */ break; case ARCHIVE_TEST_ACL_TYPE_NFS4: -#if HAVE_NFS4_ACL +#if ARCHIVE_ACL_NFS4 setTestAcl(path); #endif break; @@ -266,31 +268,40 @@ compare_acls(const char *path_a, const c { int ret = 1; int is_nfs4 = 0; -#if HAVE_SUN_ACL +#if ARCHIVE_ACL_SUNOS void *acl_a, *acl_b; int aclcnt_a, aclcnt_b; aclent_t *aclent_a, *aclent_b; ace_t *ace_a, *ace_b; int e; -#else +#elif ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_FREEBSD || ARCHIVE_ACL_LIBACL acl_t acl_a, acl_b; acl_entry_t aclent_a, aclent_b; int a, b, r; #endif +#if ARCHIVE_ACL_LIBRICHACL + struct richacl *richacl_a, *richacl_b; + + richacl_a = NULL; + richacl_b = NULL; +#endif +#if ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_FREEBSD || ARCHIVE_ACL_LIBACL || \ + ARCHIVE_ACL_SUNOS acl_a = NULL; acl_b = NULL; -#if HAVE_SUN_ACL +#endif +#if ARCHIVE_ACL_SUNOS acl_a = sunacl_get(GETACL, &aclcnt_a, 0, path_a); if (acl_a == NULL) { -#if HAVE_SUN_NFS4_ACL +#if ARCHIVE_ACL_SUNOS_NFS4 is_nfs4 = 1; acl_a = sunacl_get(ACE_GETACL, &aclcnt_a, 0, path_a); #endif failure("acl_get() error: %s", strerror(errno)); if (assert(acl_a != NULL) == 0) return (-1); -#if HAVE_SUN_NFS4_ACL +#if ARCHIVE_ACL_SUNOS_NFS4 acl_b = sunacl_get(ACE_GETACL, &aclcnt_b, 0, path_b); #endif } else @@ -321,7 +332,7 @@ compare_acls(const char *path_a, const c goto exit_free; } } -#if HAVE_SUN_NFS4_ACL +#if ARCHIVE_ACL_SUNOS_NFS4 else { ace_a = &((ace_t *)acl_a)[e]; ace_b = &((ace_t *)acl_b)[e]; @@ -335,30 +346,57 @@ compare_acls(const char *path_a, const c } #endif } -#else /* !HAVE_SUN_ACL */ -#if HAVE_DARWIN_ACL +#else /* !ARCHIVE_ACL_SUNOS */ +#if ARCHIVE_ACL_LIBRICHACL + richacl_a = richacl_get_file(path_a); +#if !ARCHIVE_ACL_LIBACL + if (richacl_a == NULL && + (errno == ENODATA || errno == ENOTSUP || errno == ENOSYS)) + return (0); + failure("richacl_get_file() error: %s (%s)", path_a, strerror(errno)); + if (assert(richacl_a != NULL) == 0) + return (-1); +#endif + if (richacl_a != NULL) { + richacl_b = richacl_get_file(path_b); + if (richacl_b == NULL && + (errno == ENODATA || errno == ENOTSUP || errno == ENOSYS)) + return (0); + failure("richacl_get_file() error: %s (%s)", path_b, + strerror(errno)); + if (assert(richacl_b != NULL) == 0) { + richacl_free(richacl_a); + return (-1); + } + if (richacl_compare(richacl_a, richacl_b) == 0) + ret = 0; + richacl_free(richacl_a); + richacl_free(richacl_b); + return (ret); + } +#endif /* ARCHIVE_ACL_LIBRICHACL */ +#if ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_FREEBSD || ARCHIVE_ACL_LIBACL +#if ARCHIVE_ACL_DARWIN is_nfs4 = 1; acl_a = acl_get_file(path_a, ACL_TYPE_EXTENDED); -#elif HAVE_FREEBSD_NFS4_ACL +#elif ARCHIVE_ACL_FREEBSD_NFS4 acl_a = acl_get_file(path_a, ACL_TYPE_NFS4); if (acl_a != NULL) is_nfs4 = 1; #endif -#if !HAVE_DARWIN_ACL if (acl_a == NULL) acl_a = acl_get_file(path_a, ACL_TYPE_ACCESS); -#endif failure("acl_get_file() error: %s (%s)", path_a, strerror(errno)); if (assert(acl_a != NULL) == 0) return (-1); -#if HAVE_DARWIN_ACL +#if ARCHIVE_ACL_DARWIN acl_b = acl_get_file(path_b, ACL_TYPE_EXTENDED); -#elif HAVE_FREEBSD_NFS4_ACL +#elif ARCHIVE_ACL_FREEBSD_NFS4 acl_b = acl_get_file(path_b, ACL_TYPE_NFS4); #endif -#if !HAVE_DARWIN_ACL +#if !ARCHIVE_ACL_DARWIN if (acl_b == NULL) { -#if HAVE_FREEBSD_NFS4_ACL +#if ARCHIVE_ACL_FREEBSD_NFS4 if (is_nfs4) { acl_free(acl_a); return (0); @@ -382,7 +420,7 @@ compare_acls(const char *path_a, const c ret = 0; goto exit_free; } -#if HAVE_DARWIN_ACL +#if ARCHIVE_ACL_DARWIN while (a == 0 && b == 0) #else /* FreeBSD, Linux */ while (a == 1 && b == 1) @@ -399,9 +437,10 @@ compare_acls(const char *path_a, const c /* Entry count must match */ if (a != b) ret = 0; -#endif /* !HAVE_SUN_ACL */ +#endif /* ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_FREEBSD || ARCHIVE_ACL_LIBACL */ +#endif /* !ARCHIVE_ACL_SUNOS */ exit_free: -#if HAVE_SUN_ACL +#if ARCHIVE_ACL_SUNOS free(acl_a); free(acl_b); #else @@ -410,13 +449,13 @@ exit_free: #endif return (ret); } -#endif /* HAVE_SUN_ACL || HAVE_DARWIN_ACL || HAVE_POSIX_ACL */ +#endif /* ARCHIVE_ACL_SUPPORT */ DEFINE_TEST(test_option_acls) { -#if !HAVE_SUN_ACL && !HAVE_DARWIN_ACL && !HAVE_POSIX_ACL +#if !ARCHIVE_ACL_SUPPORT skipping("ACLs are not supported on this platform"); -#else /* HAVE_SUN_ACL || HAVE_DARWIN_ACL || HAVE_POSIX_ACL */ +#else /* ARCHIVE_ACL_SUPPORT */ int acltype, r; assertMakeFile("f", 0644, "a"); @@ -465,5 +504,5 @@ DEFINE_TEST(test_option_acls) assertEqualInt(r, 0); r = compare_acls("f", "noacls_noacls/f"); assertEqualInt(r, 0); -#endif /* HAVE_SUN_ACL || HAVE_DARWIN_ACL || HAVE_POSIX_ACL */ +#endif /* ARCHIVE_ACL_SUPPORT */ } Copied: head/contrib/libarchive/tar/test/test_option_xattrs.c (from r315875, vendor/libarchive/dist/tar/test/test_option_xattrs.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/libarchive/tar/test/test_option_xattrs.c Fri Mar 24 00:02:12 2017 (r315876, copy of r315875, vendor/libarchive/dist/tar/test/test_option_xattrs.c) @@ -0,0 +1,87 @@ +/*- + * Copyright (c) 2017 Martin Matuska + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "test.h" +__FBSDID("$FreeBSD$"); + +DEFINE_TEST(test_option_xattrs) +{ +#if !ARCHIVE_XATTR_SUPPORT + skipping("Extended atributes are not supported on this platform"); +#else /* ARCHIVE_XATTR_SUPPORT */ + + const char *testattr = "user.libarchive.test"; + const char *testval = "testval"; + const void *readval; + size_t size; + int r; + + /* Create a file. */ + assertMakeFile("f", 0644, "a"); + + if (!setXattr("f", "user.libarchive.test", testval, + strlen(testval) + 1)) { + skipping("Can't set user extended attributes on this " + "filesystem"); + return; + } + + /* Archive with xattrs */ + r = systemf("%s -c --no-mac-metadata --xattrs -f xattrs.tar f >xattrs.out 2>xattrs.err", testprog); + assertEqualInt(r, 0); + + /* Archive without xattrs */ + r = systemf("%s -c --no-mac-metadata --no-xattrs -f noxattrs.tar f >noxattrs.out 2>noxattrs.err", testprog); + assertEqualInt(r, 0); + + /* Extract xattrs with xattrs */ + assertMakeDir("xattrs_xattrs", 0755); + r = systemf("%s -x -C xattrs_xattrs --no-same-permissions --xattrs -f xattrs.tar >xattrs_xattrs.out 2>xattrs_xattrs.err", testprog); + assertEqualInt(r, 0); + readval = getXattr("xattrs_xattrs/f", testattr, &size); + if(assertEqualInt(size, strlen(testval) + 1) != 0) + assertEqualMem(readval, testval, size); + + /* Extract xattrs without xattrs */ + assertMakeDir("xattrs_noxattrs", 0755); + r = systemf("%s -x -C xattrs_noxattrs -p --no-xattrs -f xattrs.tar >xattrs_noxattrs.out 2>xattrs_noxattrs.err", testprog); + assertEqualInt(r, 0); + readval = getXattr("xattrs_noxattrs/f", testattr, &size); + assert(readval == NULL); + + /* Extract noxattrs with xattrs */ + assertMakeDir("noxattrs_xattrs", 0755); + r = systemf("%s -x -C noxattrs_xattrs --no-same-permissions --xattrs -f noxattrs.tar >noxattrs_xattrs.out 2>noxattrs_xattrs.err", testprog); + assertEqualInt(r, 0); + readval = getXattr("noxattrs_xattrs/f", testattr, &size); + assert(readval == NULL); + + /* Extract noxattrs with noxattrs */ + assertMakeDir("noxattrs_noxattrs", 0755); + r = systemf("%s -x -C noxattrs_noxattrs -p --no-xattrs -f noxattrs.tar >noxattrs_noxattrs.out 2>noxattrs_noxattrs.err", testprog); + assertEqualInt(r, 0); + readval = getXattr("noxattrs_noxattrs/f", testattr, &size); + assert(readval == NULL); +#endif /* ARCHIVE_XATTR_SUPPORT */ +} Modified: head/contrib/libarchive/test_utils/test_common.h ============================================================================== --- head/contrib/libarchive/test_utils/test_common.h Thu Mar 23 23:44:31 2017 (r315875) +++ head/contrib/libarchive/test_utils/test_common.h Fri Mar 24 00:02:12 2017 (r315876) @@ -79,6 +79,9 @@ #ifdef HAVE_SYS_ACL_H #include #endif +#ifdef HAVE_SYS_RICHACL_H +#include +#endif #ifdef HAVE_WINDOWS_H #include #endif @@ -131,6 +134,7 @@ #define ARCHIVE_TEST_ACL_TYPE_POSIX1E 1 #define ARCHIVE_TEST_ACL_TYPE_NFS4 2 +#include "archive_platform_xattr.h" /* * Redefine DEFINE_TEST for use in defining the test functions. @@ -343,6 +347,12 @@ int canNodump(void); /* Set test ACLs */ int setTestAcl(const char *path); +/* Get extended attribute */ +const void *getXattr(const char *, const char *, size_t *); + +/* Set extended attribute */ +int setXattr(const char *, const char *, const void *, size_t); + /* Return true if the file has large i-node number(>0xffffffff). */ int is_LargeInode(const char *); Modified: head/contrib/libarchive/test_utils/test_main.c ============================================================================== --- head/contrib/libarchive/test_utils/test_main.c Thu Mar 23 23:44:31 2017 (r315875) +++ head/contrib/libarchive/test_utils/test_main.c Fri Mar 24 00:02:12 2017 (r315876) @@ -67,6 +67,17 @@ #ifdef HAVE_SYS_ACL_H #include #endif +#ifdef HAVE_SYS_EA_H +#include +#endif +#ifdef HAVE_SYS_EXTATTR_H +#include +#endif +#if HAVE_SYS_XATTR_H +#include +#elif HAVE_ATTR_XATTR_H +#include +#endif #ifdef HAVE_SYS_RICHACL_H #include #endif @@ -2440,6 +2451,83 @@ canNodump(void) return (0); } +/* Get extended attribute from a path */ +const void * +getXattr(const char *path, const char *name, size_t *sizep) +{ + void *value = NULL; +#if ARCHIVE_XATTR_SUPPORT + ssize_t size; +#if ARCHIVE_XATTR_LINUX + size = lgetxattr(path, name, NULL, 0); +#elif ARCHIVE_XATTR_DARWIN + size = getxattr(path, name, NULL, 0, 0, XATTR_NOFOLLOW); +#elif ARCHIVE_XATTR_AIX + size = lgetea(path, name, NULL, 0); +#elif ARCHIVE_XATTR_FREEBSD + size = extattr_get_link(path, EXTATTR_NAMESPACE_USER, name + 5, + NULL, 0); +#endif + + if (size >= 0) { *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Fri Mar 24 00:55:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EC91ECA13C4; Fri, 24 Mar 2017 00:55:17 +0000 (UTC) (envelope-from eri@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AFD581882; Fri, 24 Mar 2017 00:55:17 +0000 (UTC) (envelope-from eri@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2O0tGL3006528; Fri, 24 Mar 2017 00:55:16 GMT (envelope-from eri@FreeBSD.org) Received: (from eri@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2O0tG48006527; Fri, 24 Mar 2017 00:55:16 GMT (envelope-from eri@FreeBSD.org) Message-Id: <201703240055.v2O0tG48006527@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eri set sender to eri@FreeBSD.org using -f From: =?UTF-8?Q?Ermal_Lu=c3=a7i?= Date: Fri, 24 Mar 2017 00:55:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315877 - head/sys/net X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 00:55:18 -0000 Author: eri Date: Fri Mar 24 00:55:16 2017 New Revision: 315877 URL: https://svnweb.freebsd.org/changeset/base/315877 Log: Correct handling of ALTQ with epair(4) interfaces but presenting that ALTQ(9) is supported. Approved by: ae MFC after: 2 weeks Modified: head/sys/net/if_epair.c Modified: head/sys/net/if_epair.c ============================================================================== --- head/sys/net/if_epair.c Fri Mar 24 00:02:12 2017 (r315876) +++ head/sys/net/if_epair.c Fri Mar 24 00:55:16 2017 (r315877) @@ -831,7 +831,8 @@ epair_clone_create(struct if_clone *ifc, ifp->if_start = epair_start; ifp->if_ioctl = epair_ioctl; ifp->if_init = epair_init; - ifp->if_snd.ifq_maxlen = ifqmaxlen; + if_setsendqlen(ifp, ifqmaxlen); + if_setsendqready(ifp); /* Assign a hopefully unique, locally administered etheraddr. */ eaddr[0] = 0x02; eaddr[3] = (ifp->if_index >> 8) & 0xff; @@ -857,7 +858,8 @@ epair_clone_create(struct if_clone *ifc, ifp->if_start = epair_start; ifp->if_ioctl = epair_ioctl; ifp->if_init = epair_init; - ifp->if_snd.ifq_maxlen = ifqmaxlen; + if_setsendqlen(ifp, ifqmaxlen); + if_setsendqready(ifp); /* We need to play some tricks here for the second interface. */ strlcpy(name, epairname, len); error = if_clone_create(name, len, (caddr_t)scb); From owner-svn-src-head@freebsd.org Fri Mar 24 01:23:08 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6A309CA1CF1; Fri, 24 Mar 2017 01:23:08 +0000 (UTC) (envelope-from kevlo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 37325885; Fri, 24 Mar 2017 01:23:08 +0000 (UTC) (envelope-from kevlo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2O1N73v018519; Fri, 24 Mar 2017 01:23:07 GMT (envelope-from kevlo@FreeBSD.org) Received: (from kevlo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2O1N7Gi018518; Fri, 24 Mar 2017 01:23:07 GMT (envelope-from kevlo@FreeBSD.org) Message-Id: <201703240123.v2O1N7Gi018518@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevlo set sender to kevlo@FreeBSD.org using -f From: Kevin Lo Date: Fri, 24 Mar 2017 01:23:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315878 - head/sys/dev/xen/netback X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 01:23:08 -0000 Author: kevlo Date: Fri Mar 24 01:23:07 2017 New Revision: 315878 URL: https://svnweb.freebsd.org/changeset/base/315878 Log: Don't initialize if_output to ether_output(), ether_ifattach() does it for us already. While here, remove NOTYET code since if_watchdog is no longer used. Reviewed by: royger MFC after: 3 days Modified: head/sys/dev/xen/netback/netback.c Modified: head/sys/dev/xen/netback/netback.c ============================================================================== --- head/sys/dev/xen/netback/netback.c Fri Mar 24 00:55:16 2017 (r315877) +++ head/sys/dev/xen/netback/netback.c Fri Mar 24 01:23:07 2017 (r315878) @@ -1232,11 +1232,7 @@ create_netdev(device_t dev) if_initname(ifp, xnb->if_name, IF_DUNIT_NONE); ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_ioctl = xnb_ioctl; - ifp->if_output = ether_output; ifp->if_start = xnb_start; -#ifdef notyet - ifp->if_watchdog = xnb_watchdog; -#endif ifp->if_init = xnb_ifinit; ifp->if_mtu = ETHERMTU; ifp->if_snd.ifq_maxlen = NET_RX_RING_SIZE - 1; From owner-svn-src-head@freebsd.org Fri Mar 24 01:30:19 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DB48ECA1D8C; Fri, 24 Mar 2017 01:30:19 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9A8FBA53; Fri, 24 Mar 2017 01:30:19 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2O1UIVl018846; Fri, 24 Mar 2017 01:30:18 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2O1UIA5018845; Fri, 24 Mar 2017 01:30:18 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201703240130.v2O1UIA5018845@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Fri, 24 Mar 2017 01:30:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315879 - head/sys/powerpc/mpc85xx X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 01:30:20 -0000 Author: jhibbits Date: Fri Mar 24 01:30:18 2017 New Revision: 315879 URL: https://svnweb.freebsd.org/changeset/base/315879 Log: Switch qoriq_gpio over to using ofw_bus_search_compatible This will make it easier to add more compatibility strings in the future, if necessary. Modified: head/sys/powerpc/mpc85xx/qoriq_gpio.c Modified: head/sys/powerpc/mpc85xx/qoriq_gpio.c ============================================================================== --- head/sys/powerpc/mpc85xx/qoriq_gpio.c Fri Mar 24 01:23:07 2017 (r315878) +++ head/sys/powerpc/mpc85xx/qoriq_gpio.c Fri Mar 24 01:30:18 2017 (r315879) @@ -215,13 +215,18 @@ qoriq_gpio_pin_toggle(device_t dev, uint return (0); } +static struct ofw_compat_data gpio_matches[] = { + {"fsl,qoriq-gpio", 1}, + {"fsl,pq3-gpio", 1}, + {"fsl,mpc8572-gpio", 1}, + {0, 0} +}; + static int qoriq_gpio_probe(device_t dev) { - if (!ofw_bus_is_compatible(dev, "fsl,qoriq-gpio") && - !ofw_bus_is_compatible(dev, "fsl,pq3-gpio") && - !ofw_bus_is_compatible(dev, "fsl,mpc8572-gpio")) + if (ofw_bus_search_compatible(dev, gpio_matches)->ocd_data == 0) return (ENXIO); device_set_desc(dev, "Freescale QorIQ GPIO driver"); From owner-svn-src-head@freebsd.org Fri Mar 24 01:52:11 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 99467CA2363; Fri, 24 Mar 2017 01:52:11 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5C3E014DF; Fri, 24 Mar 2017 01:52:11 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2O1qAnT028447; Fri, 24 Mar 2017 01:52:10 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2O1qAdQ028446; Fri, 24 Mar 2017 01:52:10 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201703240152.v2O1qAdQ028446@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Fri, 24 Mar 2017 01:52:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315880 - head/sys/powerpc/mpc85xx X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 01:52:11 -0000 Author: jhibbits Date: Fri Mar 24 01:52:10 2017 New Revision: 315880 URL: https://svnweb.freebsd.org/changeset/base/315880 Log: Don't bother checking core version We already constrain by SoC, so there's no need to check the core version, too. Modified: head/sys/powerpc/mpc85xx/mpc85xx_gpio.c Modified: head/sys/powerpc/mpc85xx/mpc85xx_gpio.c ============================================================================== --- head/sys/powerpc/mpc85xx/mpc85xx_gpio.c Fri Mar 24 01:30:18 2017 (r315879) +++ head/sys/powerpc/mpc85xx/mpc85xx_gpio.c Fri Mar 24 01:52:10 2017 (r315880) @@ -179,7 +179,6 @@ mpc85xx_gpio_pin_toggle(device_t dev, ui static int mpc85xx_gpio_probe(device_t dev) { - uint16_t vers; uint32_t svr; if (!ofw_bus_status_okay(dev)) @@ -188,16 +187,6 @@ mpc85xx_gpio_probe(device_t dev) if (!ofw_bus_is_compatible(dev, "gpio")) return (ENXIO); - vers = mfpvr() >> 16; - switch (vers) { - case FSL_E500v1: - case FSL_E500v2: - case FSL_E500mc: - break; - default: - return (ENXIO); - } - svr = mfspr(SPR_SVR); switch (SVR_VER(svr)) { case SVR_MPC8533: From owner-svn-src-head@freebsd.org Fri Mar 24 03:40:25 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CF531D193D0; Fri, 24 Mar 2017 03:40:25 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from smtp-out-so.shaw.ca (smtp-out-so.shaw.ca [64.59.136.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 70AB0E2A; Fri, 24 Mar 2017 03:40:25 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from spqr.komquats.com ([96.50.22.10]) by shaw.ca with SMTP id rG5Hca0AUsa1krG5IcFYWZ; Thu, 23 Mar 2017 21:40:18 -0600 X-Authority-Analysis: v=2.2 cv=W+NIbVek c=1 sm=1 tr=0 a=jvE2nwUzI0ECrNeyr98KWA==:117 a=jvE2nwUzI0ECrNeyr98KWA==:17 a=8nJEP1OIZ-IA:10 a=6Iz7jQTuP9IA:10 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=3_mYSEdGjyZgiJlhfz4A:9 a=wPNLvfGTeEIA:10 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTPS id 6C57F10F; Thu, 23 Mar 2017 20:40:15 -0700 (PDT) Received: from slippy (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id v2O3eEKh002609; Thu, 23 Mar 2017 20:40:14 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <201703240340.v2O3eEKh002609@slippy.cwsent.com> X-Mailer: exmh version 2.8.0 04/21/2012 with nmh-1.6 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Ian Lepore cc: Roman Divacky , Warner Losh , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315773 - head/sbin/devd In-Reply-To: Message from Ian Lepore of "Thu, 23 Mar 2017 13:34:31 -0600." <1490297671.58015.102.camel@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Date: Thu, 23 Mar 2017 20:40:14 -0700 X-CMAE-Envelope: MS4wfE959jd2f9lc0/Kn5dU3Zzmqzi/NSODN4I9z9PksHoxhZvYtM1uhKXAiprxWbOVuQu8jMxCnJ+5MvXaik2vr5fqAcBLUNcvpTb/H+bPyU7eP/sarur1w AAQg+WbN2vccYyrjI98nzYPeKazY/wSIf+EfrguWfIxBuhLZTVJGxbthYL6scbLgUWvaH4q62XrF4KlyjOSo0Jfe3eIRMnL5tEQxmpH79/FnL2FNbd7VBAPX sFm7XDfuAjMjQ9t2M4I705eJEK9lBOZltSD5e6F/PDjpc0yqWzs26wQd7E54Uec7hs6l96Pqkj2n6VviwHsQOgLupZaTfsuj5+G2GlNZ6kQ= X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 03:40:25 -0000 In message <1490297671.58015.102.camel@freebsd.org>, Ian Lepore writes: > On Thu, 2017-03-23 at 19:58 +0100, Roman Divacky wrote: > > On Thu, Mar 23, 2017 at 02:36:51AM +0000, Warner Losh wrote: > > > > > > Author: imp > > > Date: Thu Mar 23 02:36:51 2017 > > > New Revision: 315773 > > > URL: https://svnweb.freebsd.org/changeset/base/315773 > > > > > > Log: > > >   Implement quote escaping. String values may now contain " if you > > >   it is preceded by \. > > >    > > >   foo="I \"like\" C++" > > >    > > >   gives the value 'I "like" C++' to the variable 'foo'. If a > > > character > > >   other than " follows the \, both the \ and that character are > > > passed > > >   through. > > >    > > >   Differential Revision: https://reviews.freebsd.org/D6286 > > >   Sponsored by: Netflix > > > > > > Modified: > > >   head/sbin/devd/devd.cc > > >   head/sbin/devd/devd.hh > > > > > > Modified: head/sbin/devd/devd.cc > > > =================================================================== > > > =========== > > > --- head/sbin/devd/devd.cc Thu Mar 23 02:33:27 2017 ( > > > r315772) > > > +++ head/sbin/devd/devd.cc Thu Mar 23 02:36:51 2017 ( > > > r315773) > > > @@ -411,6 +411,32 @@ var_list::is_set(const string &var) cons > > >   return (_vars.find(var) != _vars.end()); > > >  } > > >   > > > +/** fix_value > > > + * > > > + * Removes quoted characters that have made it this far. \" are > > > + * converted to ". For all other characters, both \ and following > > > + * character. So the string 'fre\:\"' is translated to 'fred\:"'. > > > + */ > > > +const std::string & > > > +var_list::fix_value(const std::string &val) const > > > +{ > > > + char *tmp, *dst; > > > + const char *src; > > > + std::string *rv; > > > + > > > + dst = tmp = new char[val.length()]; > > > + src = val.c_str(); > > > + while (*src) { > > > + if (*src == '\\' && src[1] == '"') > > > + src++; > > > + else > > > + *dst++ = *src++; > > > + } > > > + rv = new string(tmp); > > > + delete tmp; > > > + return *rv; > > > +} > > Can the temporary char[] be stack allocated? Also, when returning a > > reference to > > a heap allocated string who is responsible for freeing it? Perhaps > > you can just > > return std::string and let the compiler optimize it? > > > > Roman > > > > Returning a reference to a new'd string is not good. > > IMO, the implementation of the function should take into account the > idea that embedded escaped quotes are rare.  The function should be > optimized for readability and the common case of simply copying the > string unmodified, something like: > > > std::string > var_list::fix_value(const std::string &val) const > { > std::string rv(val); > std::string::size_type pos(0); > > while ((pos = rv.find("\\\"", pos)) != rv.npos) { > rv.erase(pos, 1); > } > return (rv); > } This revision caused devd a little gas. It failed to start moused for usb attached mice (ums0 & ums1) to my latpop and nut failed to recognize my USB connected UPS on a server. downstairs due to a permission issue which nut provides a devd.conf file with: chgrp uucp /dev/$cdev; chmod g+rw /dev/$cdev -- Cheers, Cy Schubert FreeBSD UNIX: Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few. From owner-svn-src-head@freebsd.org Fri Mar 24 07:09:34 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 71F38D1BCE3; Fri, 24 Mar 2017 07:09:34 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 35CE014AE; Fri, 24 Mar 2017 07:09:34 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2O79XLb057552; Fri, 24 Mar 2017 07:09:33 GMT (envelope-from ed@FreeBSD.org) Received: (from ed@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2O79XpE057551; Fri, 24 Mar 2017 07:09:33 GMT (envelope-from ed@FreeBSD.org) Message-Id: <201703240709.v2O79XpE057551@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ed set sender to ed@FreeBSD.org using -f From: Ed Schouten Date: Fri, 24 Mar 2017 07:09:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315892 - head/sys/compat/cloudabi X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 07:09:34 -0000 Author: ed Date: Fri Mar 24 07:09:33 2017 New Revision: 315892 URL: https://svnweb.freebsd.org/changeset/base/315892 Log: Include to obtain the memcpy() prototype. I got a report of this source file not building on Raspberry Pi. It's interesting that this only fails for that target and not for others. Again, that's no reason not to include the right headers. PR: 217969 Reported by: Johannes Jost Meixner MFC after: 1 week Modified: head/sys/compat/cloudabi/cloudabi_clock.c Modified: head/sys/compat/cloudabi/cloudabi_clock.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_clock.c Fri Mar 24 07:03:26 2017 (r315891) +++ head/sys/compat/cloudabi/cloudabi_clock.c Fri Mar 24 07:09:33 2017 (r315892) @@ -29,6 +29,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include From owner-svn-src-head@freebsd.org Fri Mar 24 07:38:34 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 69735D1B3B6; Fri, 24 Mar 2017 07:38:34 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from smtp-out-no.shaw.ca (smtp-out-no.shaw.ca [64.59.134.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 07767693; Fri, 24 Mar 2017 07:38:33 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from spqr.komquats.com ([96.50.22.10]) by shaw.ca with SMTP id rJnlcgsVwUiwTrJnmcEbjk; Fri, 24 Mar 2017 01:38:26 -0600 X-Authority-Analysis: v=2.2 cv=Qo0u5R6d c=1 sm=1 tr=0 a=jvE2nwUzI0ECrNeyr98KWA==:117 a=jvE2nwUzI0ECrNeyr98KWA==:17 a=8nJEP1OIZ-IA:10 a=6Iz7jQTuP9IA:10 a=VxmjJ2MpAAAA:8 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=A280ri9A0HIyo5GazOIA:9 a=wPNLvfGTeEIA:10 a=7gXAzLPJhVmCkEl4_tsf:22 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTPS id AF50FA9; Fri, 24 Mar 2017 00:38:24 -0700 (PDT) Received: from slippy (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id v2O7cOhb003757; Fri, 24 Mar 2017 00:38:24 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <201703240738.v2O7cOhb003757@slippy.cwsent.com> X-Mailer: exmh version 2.8.0 04/21/2012 with nmh-1.6 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Ian Lepore , Roman Divacky , Warner Losh , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315773 - head/sbin/devd In-Reply-To: Message from Cy Schubert of "Thu, 23 Mar 2017 20:40:14 -0700." <201703240340.v2O3eEKh002609@slippy.cwsent.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Date: Fri, 24 Mar 2017 00:38:24 -0700 X-CMAE-Envelope: MS4wfHUcyUCUeo7ZOknILkGat6fHIMwDvDCL+hoipfo4XSn3lG19d1M0/PvQdIVe9H1V2IQBwls+KYVtXBL4nxZWO1l/GVLkSSReD/0Yv992tOK8oMFJzSEk b4DzafHi4vZrMzK4C6ooUa/1aCFUP8eMLI+9DSpmuj4oNlunSZOstRydNxRRQ0lymhGIyIxXG6ScWG5FbxNNqA2fYm782S7DwhwEQ1yd1qlukOe2/xNsfIxx LaCTLOlfKg5kG16EpJESTaHfGuqFqAFNHKT+9aR1v1hKx5bU2MWXFM8m7Pa6SDg1JGVufr9KAeGyzsYpA1SBJn6CnoJp4z1WE17/rt+dgSE= X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 07:38:34 -0000 In message <201703240340.v2O3eEKh002609@slippy.cwsent.com>, Cy Schubert writes: > In message <1490297671.58015.102.camel@freebsd.org>, Ian Lepore writes: > > On Thu, 2017-03-23 at 19:58 +0100, Roman Divacky wrote: > > > On Thu, Mar 23, 2017 at 02:36:51AM +0000, Warner Losh wrote: > > > > > > > > Author: imp > > > > Date: Thu Mar 23 02:36:51 2017 > > > > New Revision: 315773 > > > > URL: https://svnweb.freebsd.org/changeset/base/315773 > > > > > > > > Log: > > > >   Implement quote escaping. String values may now contain " if you > > > >   it is preceded by \. > > > >    > > > >   foo="I \"like\" C++" > > > >    > > > >   gives the value 'I "like" C++' to the variable 'foo'. If a > > > > character > > > >   other than " follows the \, both the \ and that character are > > > > passed > > > >   through. > > > >    > > > >   Differential Revision: https://reviews.freebsd.org/D6286 > > > >   Sponsored by: Netflix > > > > > > > > Modified: > > > >   head/sbin/devd/devd.cc > > > >   head/sbin/devd/devd.hh > > > > > > > > Modified: head/sbin/devd/devd.cc > > > > =================================================================== > > > > =========== > > > > --- head/sbin/devd/devd.cc Thu Mar 23 02:33:27 2017 ( > > > > r315772) > > > > +++ head/sbin/devd/devd.cc Thu Mar 23 02:36:51 2017 ( > > > > r315773) > > > > @@ -411,6 +411,32 @@ var_list::is_set(const string &var) cons > > > >   return (_vars.find(var) != _vars.end()); > > > >  } > > > >   > > > > +/** fix_value > > > > + * > > > > + * Removes quoted characters that have made it this far. \" are > > > > + * converted to ". For all other characters, both \ and following > > > > + * character. So the string 'fre\:\"' is translated to 'fred\:"'. > > > > + */ > > > > +const std::string & > > > > +var_list::fix_value(const std::string &val) const > > > > +{ > > > > + char *tmp, *dst; > > > > + const char *src; > > > > + std::string *rv; > > > > + > > > > + dst = tmp = new char[val.length()]; > > > > + src = val.c_str(); > > > > + while (*src) { > > > > + if (*src == '\\' && src[1] == '"') > > > > + src++; > > > > + else > > > > + *dst++ = *src++; > > > > + } > > > > + rv = new string(tmp); > > > > + delete tmp; > > > > + return *rv; > > > > +} > > > Can the temporary char[] be stack allocated? Also, when returning a > > > reference to > > > a heap allocated string who is responsible for freeing it? Perhaps > > > you can just > > > return std::string and let the compiler optimize it? > > > > > > Roman > > > > > > > Returning a reference to a new'd string is not good. > > > > IMO, the implementation of the function should take into account the > > idea that embedded escaped quotes are rare.  The function should be > > optimized for readability and the common case of simply copying the > > string unmodified, something like: > > > > > > std::string > > var_list::fix_value(const std::string &val) const > > { > > std::string rv(val); > > std::string::size_type pos(0); > > > > while ((pos = rv.find("\\\"", pos)) != rv.npos) { > > rv.erase(pos, 1); > > } > > return (rv); > > } > > This revision caused devd a little gas. It failed to start moused for usb > attached mice (ums0 & ums1) to my latpop and nut failed to recognize my USB > connected UPS on a server. downstairs due to a permission issue which nut > provides a devd.conf file with: > > chgrp uucp /dev/$cdev; chmod g+rw /dev/$cdev Hi Ian, Your example above fixes the problem. -- Cheers, Cy Schubert FreeBSD UNIX: Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few. From owner-svn-src-head@freebsd.org Fri Mar 24 07:57:08 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 77F8AD1B805; Fri, 24 Mar 2017 07:57:08 +0000 (UTC) (envelope-from des@des.no) Received: from smtp.des.no (smtp.des.no [194.63.250.102]) by mx1.freebsd.org (Postfix) with ESMTP id 36CEFE74; Fri, 24 Mar 2017 07:57:07 +0000 (UTC) (envelope-from des@des.no) Received: from desk.des.no (smtp.des.no [194.63.250.102]) by smtp.des.no (Postfix) with ESMTP id 2FCC4DE94; Fri, 24 Mar 2017 07:57:00 +0000 (UTC) Received: by desk.des.no (Postfix, from userid 1001) id DE85043357; Fri, 24 Mar 2017 08:56:59 +0100 (CET) From: =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= To: Conrad Meyer Cc: Bruce Evans , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315850 - head/sys/boot/forth References: <201703230834.v2N8YVDA003255@repo.freebsd.org> <20170323205948.N2588@besplex.bde.org> Date: Fri, 24 Mar 2017 08:56:59 +0100 In-Reply-To: (Conrad Meyer's message of "Thu, 23 Mar 2017 08:18:34 -0700") Message-ID: <86lgrvrttg.fsf@desk.des.no> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 07:57:08 -0000 Conrad Meyer writes: > Yep. In this context an 'em' dash should be used instead of an 'en' > dash. Theoretically, there also should not be spaces around the > dashes. I'm not sure that's easy to do in manual pages, though. The Chicago Manual of Style agrees with you. The Oxford Style Manual agrees with me. I actually prefer the former style, but don't trust software to break lines correctly. It's easy enough to do, though: Index: sys/boot/forth/beastie.4th.8 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sys/boot/forth/beastie.4th.8 (revision 315894) +++ sys/boot/forth/beastie.4th.8 (working copy) @@ -33,10 +33,10 @@ .Sh DESCRIPTION The file that goes by the name of .Nm -is a set of commands designed to draw the ASCII art FreeBSD mascot -\(en known simply as -.Em beastie -\(en to the right of the boot loader menu. +is a set of commands designed to draw the ASCII art FreeBSD +mascot\(emknown simply as +.Em beastie Ns +\(emto the right of the boot loader menu. The commands of .Nm by themselves are not enough for most uses. DES --=20 Dag-Erling Sm=C3=B8rgrav - des@des.no From owner-svn-src-head@freebsd.org Fri Mar 24 09:37:02 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F39B4CA1C82; Fri, 24 Mar 2017 09:37:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9191D1AD8; Fri, 24 Mar 2017 09:37:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2O9b0qm018444; Fri, 24 Mar 2017 09:37:00 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2O9b0FP018437; Fri, 24 Mar 2017 09:37:00 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703240937.v2O9b0FP018437@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 24 Mar 2017 09:37:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315896 - in head: cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/ztest cddl/contrib/opensolaris/lib/libzpool/common sys/cddl/compat/opensolaris/kern sys/cddl/compat/open... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 09:37:02 -0000 Author: mav Date: Fri Mar 24 09:37:00 2017 New Revision: 315896 URL: https://svnweb.freebsd.org/changeset/base/315896 Log: MFV r315290, r315291: 7303 dynamic metaslab selection illumos/illumos-gate@8363e80ae72609660f6090766ca8c2c18aa53f0c https://github.com/illumos/illumos-gate/commit/8363e80ae72609660f6090766ca8c2c18 https://www.illumos.org/issues/7303 This change introduces a new weighting algorithm to improve metaslab selection. The new weighting algorithm relies on the SPACEMAP_HISTOGRAM feature. As a result, the metaslab weight now encodes the type of weighting algorithm used (size-based vs segment-based). This also introduce a new allocation tracing facility and two new dcmds to help debug allocation problems. Each zio now contains a zio_alloc_list_t structure that is populated as the zio goes through the allocations stage. Here's an example of how to use the tracing facility: > c5ec000::print zio_t io_alloc_list | ::walk list | ::metaslab_trace MSID DVA ASIZE WEIGHT RESULT VDEV - 0 400 0 NOT_ALLOCATABLE ztest.0a - 0 400 0 NOT_ALLOCATABLE ztest.0a - 0 400 0 ENOSPC ztest.0a - 0 200 0 NOT_ALLOCATABLE ztest.0a - 0 200 0 NOT_ALLOCATABLE ztest.0a - 0 200 0 ENOSPC ztest.0a 1 0 400 1 x 8M 17b1a00 ztest.0a > 1ff2400::print zio_t io_alloc_list | ::walk list | ::metaslab_trace MSID DVA ASIZE WEIGHT RESULT VDEV - 0 200 0 NOT_ALLOCATABLE mirror-2 - 0 200 0 NOT_ALLOCATABLE mirror-0 1 0 200 1 x 4M 112ae00 mirror-1 - 1 200 0 NOT_ALLOCATABLE mirror-2 - 1 200 0 NOT_ALLOCATABLE mirror-0 1 1 200 1 x 4M 112b000 mirror-1 - 2 200 0 NOT_ALLOCATABLE mirror-2 If the metaslab is using segment-based weighting then the WEIGHT column will display the number of segments available in the bucket where the allocation attempt was made. Author: George Wilson Reviewed by: Alex Reece Reviewed by: Chris Siden Reviewed by: Dan Kimmel Reviewed by: Matthew Ahrens Reviewed by: Paul Dagnelie Reviewed by: Pavel Zakharov Reviewed by: Prakash Surya Reviewed by: Don Brady Approved by: Richard Lowe Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c head/cddl/contrib/opensolaris/cmd/ztest/ztest.c head/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c head/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c head/sys/cddl/compat/opensolaris/sys/kstat.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_debug.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Directory Properties: head/cddl/contrib/opensolaris/ (props changed) head/cddl/contrib/opensolaris/cmd/zdb/ (props changed) head/sys/cddl/contrib/opensolaris/ (props changed) Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Fri Mar 24 08:06:00 2017 (r315895) +++ head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Fri Mar 24 09:37:00 2017 (r315896) @@ -2589,10 +2589,21 @@ zdb_leak_init(spa_t *spa, zdb_cb_t *zcb) if (!dump_opt['L']) { vdev_t *rvd = spa->spa_root_vdev; + + /* + * We are going to be changing the meaning of the metaslab's + * ms_tree. Ensure that the allocator doesn't try to + * use the tree. + */ + spa->spa_normal_class->mc_ops = &zdb_metaslab_ops; + spa->spa_log_class->mc_ops = &zdb_metaslab_ops; + for (uint64_t c = 0; c < rvd->vdev_children; c++) { vdev_t *vd = rvd->vdev_child[c]; + metaslab_group_t *mg = vd->vdev_mg; for (uint64_t m = 0; m < vd->vdev_ms_count; m++) { metaslab_t *msp = vd->vdev_ms[m]; + ASSERT3P(msp->ms_group, ==, mg); mutex_enter(&msp->ms_lock); metaslab_unload(msp); @@ -2613,8 +2624,6 @@ zdb_leak_init(spa_t *spa, zdb_cb_t *zcb) (longlong_t)m, (longlong_t)vd->vdev_ms_count); - msp->ms_ops = &zdb_metaslab_ops; - /* * We don't want to spend the CPU * manipulating the size-ordered @@ -2624,7 +2633,10 @@ zdb_leak_init(spa_t *spa, zdb_cb_t *zcb) msp->ms_tree->rt_ops = NULL; VERIFY0(space_map_load(msp->ms_sm, msp->ms_tree, SM_ALLOC)); - msp->ms_loaded = B_TRUE; + + if (!msp->ms_loaded) { + msp->ms_loaded = B_TRUE; + } } mutex_exit(&msp->ms_lock); } @@ -2646,8 +2658,10 @@ zdb_leak_fini(spa_t *spa) vdev_t *rvd = spa->spa_root_vdev; for (int c = 0; c < rvd->vdev_children; c++) { vdev_t *vd = rvd->vdev_child[c]; + metaslab_group_t *mg = vd->vdev_mg; for (int m = 0; m < vd->vdev_ms_count; m++) { metaslab_t *msp = vd->vdev_ms[m]; + ASSERT3P(mg, ==, msp->ms_group); mutex_enter(&msp->ms_lock); /* @@ -2661,7 +2675,10 @@ zdb_leak_fini(spa_t *spa) * from the ms_tree. */ range_tree_vacate(msp->ms_tree, zdb_leak, vd); - msp->ms_loaded = B_FALSE; + + if (msp->ms_loaded) { + msp->ms_loaded = B_FALSE; + } mutex_exit(&msp->ms_lock); } Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c ============================================================================== --- head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Fri Mar 24 08:06:00 2017 (r315895) +++ head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Fri Mar 24 09:37:00 2017 (r315896) @@ -173,7 +173,7 @@ static const ztest_shared_opts_t ztest_o .zo_mirrors = 2, .zo_raidz = 4, .zo_raidz_parity = 1, - .zo_vdev_size = SPA_MINDEVSIZE * 2, + .zo_vdev_size = SPA_MINDEVSIZE * 4, /* 256m default size */ .zo_datasets = 7, .zo_threads = 23, .zo_passtime = 60, /* 60 seconds */ Modified: head/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c ============================================================================== --- head/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Fri Mar 24 08:06:00 2017 (r315895) +++ head/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Fri Mar 24 09:37:00 2017 (r315896) @@ -97,6 +97,11 @@ kstat_create(char *module, int instance, /*ARGSUSED*/ void +kstat_named_init(kstat_named_t *knp, const char *name, uchar_t type) +{} + +/*ARGSUSED*/ +void kstat_install(kstat_t *ksp) {} Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c ============================================================================== --- head/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c Fri Mar 24 08:06:00 2017 (r315895) +++ head/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c Fri Mar 24 09:37:00 2017 (r315896) @@ -129,3 +129,19 @@ kstat_delete(kstat_t *ksp) sysctl_ctx_free(&ksp->ks_sysctl_ctx); free(ksp, M_KSTAT); } + +void +kstat_set_string(char *dst, const char *src) +{ + + bzero(dst, KSTAT_STRLEN); + (void) strncpy(dst, src, KSTAT_STRLEN - 1); +} + +void +kstat_named_init(kstat_named_t *knp, const char *name, uchar_t data_type) +{ + + kstat_set_string(knp->name, name); + knp->data_type = data_type; +} Modified: head/sys/cddl/compat/opensolaris/sys/kstat.h ============================================================================== --- head/sys/cddl/compat/opensolaris/sys/kstat.h Fri Mar 24 08:06:00 2017 (r315895) +++ head/sys/cddl/compat/opensolaris/sys/kstat.h Fri Mar 24 09:37:00 2017 (r315896) @@ -69,5 +69,7 @@ kstat_t *kstat_create(char *module, int uchar_t type, ulong_t ndata, uchar_t flags); void kstat_install(kstat_t *ksp); void kstat_delete(kstat_t *ksp); +void kstat_set_string(char *, const char *); +void kstat_named_init(kstat_named_t *, const char *, uchar_t); #endif /* _OPENSOLARIS_SYS_KSTAT_H_ */ Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c Fri Mar 24 08:06:00 2017 (r315895) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c Fri Mar 24 09:37:00 2017 (r315896) @@ -41,11 +41,6 @@ SYSCTL_NODE(_vfs_zfs, OID_AUTO, metaslab #define GANG_ALLOCATION(flags) \ ((flags) & (METASLAB_GANG_CHILD | METASLAB_GANG_HEADER)) -#define METASLAB_WEIGHT_PRIMARY (1ULL << 63) -#define METASLAB_WEIGHT_SECONDARY (1ULL << 62) -#define METASLAB_ACTIVE_MASK \ - (METASLAB_WEIGHT_PRIMARY | METASLAB_WEIGHT_SECONDARY) - uint64_t metaslab_aliquot = 512ULL << 10; uint64_t metaslab_gang_bang = SPA_MAXBLOCKSIZE + 1; /* force gang blocks */ SYSCTL_QUAD(_vfs_zfs_metaslab, OID_AUTO, gang_bang, CTLFLAG_RWTUN, @@ -55,7 +50,7 @@ SYSCTL_QUAD(_vfs_zfs_metaslab, OID_AUTO, /* * The in-core space map representation is more compact than its on-disk form. * The zfs_condense_pct determines how much more compact the in-core - * space_map representation must be before we compact it on-disk. + * space map representation must be before we compact it on-disk. * Values should be greater than or equal to 100. */ int zfs_condense_pct = 200; @@ -153,7 +148,7 @@ SYSCTL_QUAD(_vfs_zfs_metaslab, OID_AUTO, /* * The minimum free space, in percent, which must be available * in a space map to continue allocations in a first-fit fashion. - * Once the space_map's free space drops below this level we dynamically + * Once the space map's free space drops below this level we dynamically * switch to using best-fit allocations. */ int metaslab_df_free_pct = 4; @@ -230,7 +225,38 @@ SYSCTL_INT(_vfs_zfs_metaslab, OID_AUTO, &metaslab_bias_enabled, 0, "Enable metaslab group biasing"); -static uint64_t metaslab_fragmentation(metaslab_t *); +/* + * Enable/disable segment-based metaslab selection. + */ +boolean_t zfs_metaslab_segment_weight_enabled = B_TRUE; + +/* + * When using segment-based metaslab selection, we will continue + * allocating from the active metaslab until we have exhausted + * zfs_metaslab_switch_threshold of its buckets. + */ +int zfs_metaslab_switch_threshold = 2; + +/* + * Internal switch to enable/disable the metaslab allocation tracing + * facility. + */ +boolean_t metaslab_trace_enabled = B_TRUE; + +/* + * Maximum entries that the metaslab allocation tracing facility will keep + * in a given list when running in non-debug mode. We limit the number + * of entries in non-debug mode to prevent us from using up too much memory. + * The limit should be sufficiently large that we don't expect any allocation + * to every exceed this value. In debug mode, the system will panic if this + * limit is ever reached allowing for further investigation. + */ +uint64_t metaslab_trace_max_entries = 5000; + +static uint64_t metaslab_weight(metaslab_t *); +static void metaslab_set_fragmentation(metaslab_t *); + +kmem_cache_t *metaslab_alloc_trace_cache; /* * ========================================================================== @@ -475,11 +501,6 @@ metaslab_class_expandable_space(metaslab return (space); } -/* - * ========================================================================== - * Metaslab groups - * ========================================================================== - */ static int metaslab_compare(const void *x1, const void *x2) { @@ -505,6 +526,57 @@ metaslab_compare(const void *x1, const v } /* + * Verify that the space accounting on disk matches the in-core range_trees. + */ +void +metaslab_verify_space(metaslab_t *msp, uint64_t txg) +{ + spa_t *spa = msp->ms_group->mg_vd->vdev_spa; + uint64_t allocated = 0; + uint64_t freed = 0; + uint64_t sm_free_space, msp_free_space; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + if ((zfs_flags & ZFS_DEBUG_METASLAB_VERIFY) == 0) + return; + + /* + * We can only verify the metaslab space when we're called + * from syncing context with a loaded metaslab that has an allocated + * space map. Calling this in non-syncing context does not + * provide a consistent view of the metaslab since we're performing + * allocations in the future. + */ + if (txg != spa_syncing_txg(spa) || msp->ms_sm == NULL || + !msp->ms_loaded) + return; + + sm_free_space = msp->ms_size - space_map_allocated(msp->ms_sm) - + space_map_alloc_delta(msp->ms_sm); + + /* + * Account for future allocations since we would have already + * deducted that space from the ms_freetree. + */ + for (int t = 0; t < TXG_CONCURRENT_STATES; t++) { + allocated += + range_tree_space(msp->ms_alloctree[(txg + t) & TXG_MASK]); + } + freed = range_tree_space(msp->ms_freetree[TXG_CLEAN(txg) & TXG_MASK]); + + msp_free_space = range_tree_space(msp->ms_tree) + allocated + + msp->ms_deferspace + freed; + + VERIFY3U(sm_free_space, ==, msp_free_space); +} + +/* + * ========================================================================== + * Metaslab groups + * ========================================================================== + */ +/* * Update the allocatable flag and the metaslab group's capacity. * The allocatable flag is set to true if the capacity is below * the zfs_mg_noalloc_threshold or has a fragmentation value that is @@ -1078,7 +1150,7 @@ static range_tree_ops_t metaslab_rt_ops /* * ========================================================================== - * Metaslab block operations + * Common allocator routines * ========================================================================== */ @@ -1097,31 +1169,22 @@ metaslab_block_maxsize(metaslab_t *msp) return (rs->rs_end - rs->rs_start); } -uint64_t -metaslab_block_alloc(metaslab_t *msp, uint64_t size) +static range_seg_t * +metaslab_block_find(avl_tree_t *t, uint64_t start, uint64_t size) { - uint64_t start; - range_tree_t *rt = msp->ms_tree; - - VERIFY(!msp->ms_condensing); + range_seg_t *rs, rsearch; + avl_index_t where; - start = msp->ms_ops->msop_alloc(msp, size); - if (start != -1ULL) { - vdev_t *vd = msp->ms_group->mg_vd; + rsearch.rs_start = start; + rsearch.rs_end = start + size; - VERIFY0(P2PHASE(start, 1ULL << vd->vdev_ashift)); - VERIFY0(P2PHASE(size, 1ULL << vd->vdev_ashift)); - VERIFY3U(range_tree_space(rt) - size, <=, msp->ms_size); - range_tree_remove(rt, start, size); + rs = avl_find(t, &rsearch, &where); + if (rs == NULL) { + rs = avl_nearest(t, where, AVL_AFTER); } - return (start); -} -/* - * ========================================================================== - * Common allocator routines - * ========================================================================== - */ + return (rs); +} /* * This is a helper function that can be used by the allocator to find @@ -1132,15 +1195,7 @@ static uint64_t metaslab_block_picker(avl_tree_t *t, uint64_t *cursor, uint64_t size, uint64_t align) { - range_seg_t *rs, rsearch; - avl_index_t where; - - rsearch.rs_start = *cursor; - rsearch.rs_end = *cursor + size; - - rs = avl_find(t, &rsearch, &where); - if (rs == NULL) - rs = avl_nearest(t, where, AVL_AFTER); + range_seg_t *rs = metaslab_block_find(t, *cursor, size); while (rs != NULL) { uint64_t offset = P2ROUNDUP(rs->rs_start, align); @@ -1365,6 +1420,7 @@ int metaslab_load(metaslab_t *msp) { int error = 0; + boolean_t success = B_FALSE; ASSERT(MUTEX_HELD(&msp->ms_lock)); ASSERT(!msp->ms_loaded); @@ -1382,14 +1438,18 @@ metaslab_load(metaslab_t *msp) else range_tree_add(msp->ms_tree, msp->ms_start, msp->ms_size); - msp->ms_loaded = (error == 0); + success = (error == 0); msp->ms_loading = B_FALSE; - if (msp->ms_loaded) { + if (success) { + ASSERT3P(msp->ms_group, !=, NULL); + msp->ms_loaded = B_TRUE; + for (int t = 0; t < TXG_DEFER_SIZE; t++) { range_tree_walk(msp->ms_defertree[t], range_tree_remove, msp->ms_tree); } + msp->ms_max_size = metaslab_block_maxsize(msp); } cv_broadcast(&msp->ms_load_cv); return (error); @@ -1402,6 +1462,7 @@ metaslab_unload(metaslab_t *msp) range_tree_vacate(msp->ms_tree, NULL, NULL); msp->ms_loaded = B_FALSE; msp->ms_weight &= ~METASLAB_ACTIVE_MASK; + msp->ms_max_size = 0; } int @@ -1446,21 +1507,23 @@ metaslab_init(metaslab_group_t *mg, uint ms->ms_tree = range_tree_create(&metaslab_rt_ops, ms, &ms->ms_lock); metaslab_group_add(mg, ms); - ms->ms_fragmentation = metaslab_fragmentation(ms); - ms->ms_ops = mg->mg_class->mc_ops; + metaslab_set_fragmentation(ms); /* * If we're opening an existing pool (txg == 0) or creating * a new one (txg == TXG_INITIAL), all space is available now. * If we're adding space to an existing pool, the new space * does not become available until after this txg has synced. + * The metaslab's weight will also be initialized when we sync + * out this txg. This ensures that we don't attempt to allocate + * from it before we have initialized it completely. */ if (txg <= TXG_INITIAL) metaslab_sync_done(ms, 0); /* * If metaslab_debug_load is set and we're initializing a metaslab - * that has an allocated space_map object then load the its space + * that has an allocated space map object then load the its space * map so that can verify frees. */ if (metaslab_debug_load && ms->ms_sm != NULL) { @@ -1487,7 +1550,6 @@ metaslab_fini(metaslab_t *msp) metaslab_group_remove(mg, msp); mutex_enter(&msp->ms_lock); - VERIFY(msp->ms_group == NULL); vdev_space_update(mg->mg_vd, -space_map_allocated(msp->ms_sm), 0, -msp->ms_size); @@ -1560,8 +1622,8 @@ int zfs_frag_table[FRAGMENTATION_TABLE_S * not support this metric. Otherwise, the return value should be in the * range [0, 100]. */ -static uint64_t -metaslab_fragmentation(metaslab_t *msp) +static void +metaslab_set_fragmentation(metaslab_t *msp) { spa_t *spa = msp->ms_group->mg_vd->vdev_spa; uint64_t fragmentation = 0; @@ -1569,18 +1631,22 @@ metaslab_fragmentation(metaslab_t *msp) boolean_t feature_enabled = spa_feature_is_enabled(spa, SPA_FEATURE_SPACEMAP_HISTOGRAM); - if (!feature_enabled) - return (ZFS_FRAG_INVALID); + if (!feature_enabled) { + msp->ms_fragmentation = ZFS_FRAG_INVALID; + return; + } /* * A null space map means that the entire metaslab is free * and thus is not fragmented. */ - if (msp->ms_sm == NULL) - return (0); + if (msp->ms_sm == NULL) { + msp->ms_fragmentation = 0; + return; + } /* - * If this metaslab's space_map has not been upgraded, flag it + * If this metaslab's space map has not been upgraded, flag it * so that we upgrade next time we encounter it. */ if (msp->ms_sm->sm_dbuf->db_size != sizeof (space_map_phys_t)) { @@ -1593,12 +1659,14 @@ metaslab_fragmentation(metaslab_t *msp) spa_dbgmsg(spa, "txg %llu, requesting force condense: " "msp %p, vd %p", txg, msp, vd); } - return (ZFS_FRAG_INVALID); + msp->ms_fragmentation = ZFS_FRAG_INVALID; + return; } for (int i = 0; i < SPACE_MAP_HISTOGRAM_SIZE; i++) { uint64_t space = 0; uint8_t shift = msp->ms_sm->sm_shift; + int idx = MIN(shift - SPA_MINBLOCKSHIFT + i, FRAGMENTATION_TABLE_SIZE - 1); @@ -1615,7 +1683,8 @@ metaslab_fragmentation(metaslab_t *msp) if (total > 0) fragmentation /= total; ASSERT3U(fragmentation, <=, 100); - return (fragmentation); + + msp->ms_fragmentation = fragmentation; } /* @@ -1624,30 +1693,20 @@ metaslab_fragmentation(metaslab_t *msp) * the LBA range, and whether the metaslab is loaded. */ static uint64_t -metaslab_weight(metaslab_t *msp) +metaslab_space_weight(metaslab_t *msp) { metaslab_group_t *mg = msp->ms_group; vdev_t *vd = mg->mg_vd; uint64_t weight, space; ASSERT(MUTEX_HELD(&msp->ms_lock)); - - /* - * This vdev is in the process of being removed so there is nothing - * for us to do here. - */ - if (vd->vdev_removing) { - ASSERT0(space_map_allocated(msp->ms_sm)); - ASSERT0(vd->vdev_ms_shift); - return (0); - } + ASSERT(!vd->vdev_removing); /* * The baseline weight is the metaslab's free space. */ space = msp->ms_size - space_map_allocated(msp->ms_sm); - msp->ms_fragmentation = metaslab_fragmentation(msp); if (metaslab_fragmentation_factor_enabled && msp->ms_fragmentation != ZFS_FRAG_INVALID) { /* @@ -1696,6 +1755,210 @@ metaslab_weight(metaslab_t *msp) weight |= (msp->ms_weight & METASLAB_ACTIVE_MASK); } + WEIGHT_SET_SPACEBASED(weight); + return (weight); +} + +/* + * Return the weight of the specified metaslab, according to the segment-based + * weighting algorithm. The metaslab must be loaded. This function can + * be called within a sync pass since it relies only on the metaslab's + * range tree which is always accurate when the metaslab is loaded. + */ +static uint64_t +metaslab_weight_from_range_tree(metaslab_t *msp) +{ + uint64_t weight = 0; + uint32_t segments = 0; + + ASSERT(msp->ms_loaded); + + for (int i = RANGE_TREE_HISTOGRAM_SIZE - 1; i >= SPA_MINBLOCKSHIFT; + i--) { + uint8_t shift = msp->ms_group->mg_vd->vdev_ashift; + int max_idx = SPACE_MAP_HISTOGRAM_SIZE + shift - 1; + + segments <<= 1; + segments += msp->ms_tree->rt_histogram[i]; + + /* + * The range tree provides more precision than the space map + * and must be downgraded so that all values fit within the + * space map's histogram. This allows us to compare loaded + * vs. unloaded metaslabs to determine which metaslab is + * considered "best". + */ + if (i > max_idx) + continue; + + if (segments != 0) { + WEIGHT_SET_COUNT(weight, segments); + WEIGHT_SET_INDEX(weight, i); + WEIGHT_SET_ACTIVE(weight, 0); + break; + } + } + return (weight); +} + +/* + * Calculate the weight based on the on-disk histogram. This should only + * be called after a sync pass has completely finished since the on-disk + * information is updated in metaslab_sync(). + */ +static uint64_t +metaslab_weight_from_spacemap(metaslab_t *msp) +{ + uint64_t weight = 0; + + for (int i = SPACE_MAP_HISTOGRAM_SIZE - 1; i >= 0; i--) { + if (msp->ms_sm->sm_phys->smp_histogram[i] != 0) { + WEIGHT_SET_COUNT(weight, + msp->ms_sm->sm_phys->smp_histogram[i]); + WEIGHT_SET_INDEX(weight, i + + msp->ms_sm->sm_shift); + WEIGHT_SET_ACTIVE(weight, 0); + break; + } + } + return (weight); +} + +/* + * Compute a segment-based weight for the specified metaslab. The weight + * is determined by highest bucket in the histogram. The information + * for the highest bucket is encoded into the weight value. + */ +static uint64_t +metaslab_segment_weight(metaslab_t *msp) +{ + metaslab_group_t *mg = msp->ms_group; + uint64_t weight = 0; + uint8_t shift = mg->mg_vd->vdev_ashift; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + /* + * The metaslab is completely free. + */ + if (space_map_allocated(msp->ms_sm) == 0) { + int idx = highbit64(msp->ms_size) - 1; + int max_idx = SPACE_MAP_HISTOGRAM_SIZE + shift - 1; + + if (idx < max_idx) { + WEIGHT_SET_COUNT(weight, 1ULL); + WEIGHT_SET_INDEX(weight, idx); + } else { + WEIGHT_SET_COUNT(weight, 1ULL << (idx - max_idx)); + WEIGHT_SET_INDEX(weight, max_idx); + } + WEIGHT_SET_ACTIVE(weight, 0); + ASSERT(!WEIGHT_IS_SPACEBASED(weight)); + + return (weight); + } + + ASSERT3U(msp->ms_sm->sm_dbuf->db_size, ==, sizeof (space_map_phys_t)); + + /* + * If the metaslab is fully allocated then just make the weight 0. + */ + if (space_map_allocated(msp->ms_sm) == msp->ms_size) + return (0); + /* + * If the metaslab is already loaded, then use the range tree to + * determine the weight. Otherwise, we rely on the space map information + * to generate the weight. + */ + if (msp->ms_loaded) { + weight = metaslab_weight_from_range_tree(msp); + } else { + weight = metaslab_weight_from_spacemap(msp); + } + + /* + * If the metaslab was active the last time we calculated its weight + * then keep it active. We want to consume the entire region that + * is associated with this weight. + */ + if (msp->ms_activation_weight != 0 && weight != 0) + WEIGHT_SET_ACTIVE(weight, WEIGHT_GET_ACTIVE(msp->ms_weight)); + return (weight); +} + +/* + * Determine if we should attempt to allocate from this metaslab. If the + * metaslab has a maximum size then we can quickly determine if the desired + * allocation size can be satisfied. Otherwise, if we're using segment-based + * weighting then we can determine the maximum allocation that this metaslab + * can accommodate based on the index encoded in the weight. If we're using + * space-based weights then rely on the entire weight (excluding the weight + * type bit). + */ +boolean_t +metaslab_should_allocate(metaslab_t *msp, uint64_t asize) +{ + boolean_t should_allocate; + + if (msp->ms_max_size != 0) + return (msp->ms_max_size >= asize); + + if (!WEIGHT_IS_SPACEBASED(msp->ms_weight)) { + /* + * The metaslab segment weight indicates segments in the + * range [2^i, 2^(i+1)), where i is the index in the weight. + * Since the asize might be in the middle of the range, we + * should attempt the allocation if asize < 2^(i+1). + */ + should_allocate = (asize < + 1ULL << (WEIGHT_GET_INDEX(msp->ms_weight) + 1)); + } else { + should_allocate = (asize <= + (msp->ms_weight & ~METASLAB_WEIGHT_TYPE)); + } + return (should_allocate); +} + +static uint64_t +metaslab_weight(metaslab_t *msp) +{ + vdev_t *vd = msp->ms_group->mg_vd; + spa_t *spa = vd->vdev_spa; + uint64_t weight; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + /* + * This vdev is in the process of being removed so there is nothing + * for us to do here. + */ + if (vd->vdev_removing) { + ASSERT0(space_map_allocated(msp->ms_sm)); + ASSERT0(vd->vdev_ms_shift); + return (0); + } + + metaslab_set_fragmentation(msp); + + /* + * Update the maximum size if the metaslab is loaded. This will + * ensure that we get an accurate maximum size if newly freed space + * has been added back into the free tree. + */ + if (msp->ms_loaded) + msp->ms_max_size = metaslab_block_maxsize(msp); + + /* + * Segment-based weighting requires space map histogram support. + */ + if (zfs_metaslab_segment_weight_enabled && + spa_feature_is_enabled(spa, SPA_FEATURE_SPACEMAP_HISTOGRAM) && + (msp->ms_sm == NULL || msp->ms_sm->sm_dbuf->db_size == + sizeof (space_map_phys_t))) { + weight = metaslab_segment_weight(msp); + } else { + weight = metaslab_space_weight(msp); + } return (weight); } @@ -1714,6 +1977,7 @@ metaslab_activate(metaslab_t *msp, uint6 } } + msp->ms_activation_weight = msp->ms_weight; metaslab_group_sort(msp->ms_group, msp, msp->ms_weight | activation_weight); } @@ -1724,18 +1988,56 @@ metaslab_activate(metaslab_t *msp, uint6 } static void -metaslab_passivate(metaslab_t *msp, uint64_t size) +metaslab_passivate(metaslab_t *msp, uint64_t weight) { + uint64_t size = weight & ~METASLAB_WEIGHT_TYPE; + /* * If size < SPA_MINBLOCKSIZE, then we will not allocate from * this metaslab again. In that case, it had better be empty, * or we would be leaving space on the table. */ - ASSERT(size >= SPA_MINBLOCKSIZE || range_tree_space(msp->ms_tree) == 0); - metaslab_group_sort(msp->ms_group, msp, MIN(msp->ms_weight, size)); + ASSERT(size >= SPA_MINBLOCKSIZE || + range_tree_space(msp->ms_tree) == 0); + ASSERT0(weight & METASLAB_ACTIVE_MASK); + + msp->ms_activation_weight = 0; + metaslab_group_sort(msp->ms_group, msp, weight); ASSERT((msp->ms_weight & METASLAB_ACTIVE_MASK) == 0); } +/* + * Segment-based metaslabs are activated once and remain active until + * we either fail an allocation attempt (similar to space-based metaslabs) + * or have exhausted the free space in zfs_metaslab_switch_threshold + * buckets since the metaslab was activated. This function checks to see + * if we've exhaused the zfs_metaslab_switch_threshold buckets in the + * metaslab and passivates it proactively. This will allow us to select a + * metaslabs with larger contiguous region if any remaining within this + * metaslab group. If we're in sync pass > 1, then we continue using this + * metaslab so that we don't dirty more block and cause more sync passes. + */ +void +metaslab_segment_may_passivate(metaslab_t *msp) +{ + spa_t *spa = msp->ms_group->mg_vd->vdev_spa; + + if (WEIGHT_IS_SPACEBASED(msp->ms_weight) || spa_sync_pass(spa) > 1) + return; + + /* + * Since we are in the middle of a sync pass, the most accurate + * information that is accessible to us is the in-core range tree + * histogram; calculate the new weight based on that information. + */ + uint64_t weight = metaslab_weight_from_range_tree(msp); + int activation_idx = WEIGHT_GET_INDEX(msp->ms_activation_weight); + int current_idx = WEIGHT_GET_INDEX(weight); + + if (current_idx <= activation_idx - zfs_metaslab_switch_threshold) + metaslab_passivate(msp, weight); +} + static void metaslab_preload(void *arg) { @@ -1748,11 +2050,7 @@ metaslab_preload(void *arg) metaslab_load_wait(msp); if (!msp->ms_loaded) (void) metaslab_load(msp); - - /* - * Set the ms_access_txg value so that we don't unload it right away. - */ - msp->ms_access_txg = spa_syncing_txg(spa) + metaslab_unload_delay + 1; + msp->ms_selected_txg = spa_syncing_txg(spa); mutex_exit(&msp->ms_lock); } @@ -1773,10 +2071,7 @@ metaslab_group_preload(metaslab_group_t /* * Load the next potential metaslabs */ - msp = avl_first(t); - while (msp != NULL) { - metaslab_t *msp_next = AVL_NEXT(t, msp); - + for (msp = avl_first(t); msp != NULL; msp = AVL_NEXT(t, msp)) { /* * We preload only the maximum number of metaslabs specified * by metaslab_preload_limit. If a metaslab is being forced @@ -1784,27 +2079,11 @@ metaslab_group_preload(metaslab_group_t * that force condensing happens in the next txg. */ if (++m > metaslab_preload_limit && !msp->ms_condense_wanted) { - msp = msp_next; continue; } - /* - * We must drop the metaslab group lock here to preserve - * lock ordering with the ms_lock (when grabbing both - * the mg_lock and the ms_lock, the ms_lock must be taken - * first). As a result, it is possible that the ordering - * of the metaslabs within the avl tree may change before - * we reacquire the lock. The metaslab cannot be removed from - * the tree while we're in syncing context so it is safe to - * drop the mg_lock here. If the metaslabs are reordered - * nothing will break -- we just may end up loading a - * less than optimal one. - */ - mutex_exit(&mg->mg_lock); VERIFY(taskq_dispatch(mg->mg_taskq, metaslab_preload, msp, TQ_SLEEP) != 0); - mutex_enter(&mg->mg_lock); - msp = msp_next; } mutex_exit(&mg->mg_lock); } @@ -1953,7 +2232,7 @@ metaslab_condense(metaslab_t *msp, uint6 mutex_enter(&msp->ms_lock); /* - * While we would ideally like to create a space_map representation + * While we would ideally like to create a space map representation * that consists only of allocation records, doing so can be * prohibitively expensive because the in-core free tree can be * large, and therefore computationally expensive to subtract @@ -2016,7 +2295,7 @@ metaslab_sync(metaslab_t *msp, uint64_t * metaslab_sync() is the metaslab's ms_tree. No other thread can * be modifying this txg's alloctree, freetree, freed_tree, or * space_map_phys_t. Therefore, we only hold ms_lock to satify - * space_map ASSERTs. We drop it whenever we call into the DMU, + * space map ASSERTs. We drop it whenever we call into the DMU, * because the DMU can call down to us (e.g. via zio_free()) at * any time. */ @@ -2038,7 +2317,7 @@ metaslab_sync(metaslab_t *msp, uint64_t mutex_enter(&msp->ms_lock); /* - * Note: metaslab_condense() clears the space_map's histogram. + * Note: metaslab_condense() clears the space map's histogram. * Therefore we must verify and remove this histogram before * condensing. */ @@ -2063,16 +2342,38 @@ metaslab_sync(metaslab_t *msp, uint64_t */ space_map_histogram_clear(msp->ms_sm); space_map_histogram_add(msp->ms_sm, msp->ms_tree, tx); - } else { + + /* + * Since we've cleared the histogram we need to add back + * any free space that has already been processed, plus + * any deferred space. This allows the on-disk histogram + * to accurately reflect all free space even if some space + * is not yet available for allocation (i.e. deferred). + */ + space_map_histogram_add(msp->ms_sm, *freed_tree, tx); + /* - * Since the space map is not loaded we simply update the - * exisiting histogram with what was freed in this txg. This - * means that the on-disk histogram may not have an accurate - * view of the free space but it's close enough to allow - * us to make allocation decisions. + * Add back any deferred free space that has not been + * added back into the in-core free tree yet. This will + * ensure that we don't end up with a space map histogram + * that is completely empty unless the metaslab is fully + * allocated. */ - space_map_histogram_add(msp->ms_sm, *freetree, tx); + for (int t = 0; t < TXG_DEFER_SIZE; t++) { + space_map_histogram_add(msp->ms_sm, + msp->ms_defertree[t], tx); + } } + + /* + * Always add the free space from this sync pass to the space + * map histogram. We want to make sure that the on-disk histogram + * accounts for all free space. If the space map is not loaded, + * then we will lose some accuracy but will correct it the next + * time we load the space map. + */ + space_map_histogram_add(msp->ms_sm, *freetree, tx); + metaslab_group_histogram_add(mg, msp); metaslab_group_histogram_verify(mg); metaslab_class_histogram_verify(mg->mg_class); @@ -2091,6 +2392,7 @@ metaslab_sync(metaslab_t *msp, uint64_t range_tree_vacate(alloctree, NULL, NULL); ASSERT0(range_tree_space(msp->ms_alloctree[txg & TXG_MASK])); + ASSERT0(range_tree_space(msp->ms_alloctree[TXG_CLEAN(txg) & TXG_MASK])); ASSERT0(range_tree_space(msp->ms_freetree[txg & TXG_MASK])); mutex_exit(&msp->ms_lock); @@ -2112,9 +2414,11 @@ metaslab_sync_done(metaslab_t *msp, uint { metaslab_group_t *mg = msp->ms_group; vdev_t *vd = mg->mg_vd; + spa_t *spa = vd->vdev_spa; range_tree_t **freed_tree; range_tree_t **defer_tree; int64_t alloc_delta, defer_delta; + boolean_t defer_allowed = B_TRUE; ASSERT(!vd->vdev_ishole); @@ -2149,9 +2453,20 @@ metaslab_sync_done(metaslab_t *msp, uint freed_tree = &msp->ms_freetree[TXG_CLEAN(txg) & TXG_MASK]; defer_tree = &msp->ms_defertree[txg % TXG_DEFER_SIZE]; + uint64_t free_space = metaslab_class_get_space(spa_normal_class(spa)) - + metaslab_class_get_alloc(spa_normal_class(spa)); + if (free_space <= spa_get_slop_space(spa)) { + defer_allowed = B_FALSE; + } + + defer_delta = 0; alloc_delta = space_map_alloc_delta(msp->ms_sm); - defer_delta = range_tree_space(*freed_tree) - - range_tree_space(*defer_tree); + if (defer_allowed) { + defer_delta = range_tree_space(*freed_tree) - + range_tree_space(*defer_tree); + } else { + defer_delta -= range_tree_space(*defer_tree); + } vdev_space_update(vd, alloc_delta + defer_delta, defer_delta, 0); @@ -2172,7 +2487,12 @@ metaslab_sync_done(metaslab_t *msp, uint */ range_tree_vacate(*defer_tree, msp->ms_loaded ? range_tree_add : NULL, msp->ms_tree); - range_tree_swap(freed_tree, defer_tree); + if (defer_allowed) { + range_tree_swap(freed_tree, defer_tree); + } else { + range_tree_vacate(*freed_tree, + msp->ms_loaded ? range_tree_add : NULL, msp->ms_tree); + } space_map_update(msp->ms_sm); @@ -2187,7 +2507,18 @@ metaslab_sync_done(metaslab_t *msp, uint vdev_dirty(vd, VDD_METASLAB, msp, txg + 1); } - if (msp->ms_loaded && msp->ms_access_txg < txg) { + /* + * Calculate the new weights before unloading any metaslabs. + * This will give us the most accurate weighting. + */ + metaslab_group_sort(mg, msp, metaslab_weight(msp)); + + /* + * If the metaslab is loaded and we've not tried to load or allocate + * from it in 'metaslab_unload_delay' txgs, then unload it. + */ + if (msp->ms_loaded && + msp->ms_selected_txg + metaslab_unload_delay < txg) { for (int t = 1; t < TXG_CONCURRENT_STATES; t++) { VERIFY0(range_tree_space( msp->ms_alloctree[(txg + t) & TXG_MASK])); @@ -2197,7 +2528,6 @@ metaslab_sync_done(metaslab_t *msp, uint metaslab_unload(msp); } - metaslab_group_sort(mg, msp, metaslab_weight(msp)); mutex_exit(&msp->ms_lock); } @@ -2232,6 +2562,113 @@ metaslab_distance(metaslab_t *msp, dva_t /* * ========================================================================== *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Fri Mar 24 11:46:51 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 71A90D1B80B; Fri, 24 Mar 2017 11:46:51 +0000 (UTC) (envelope-from mmel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2FF321943; Fri, 24 Mar 2017 11:46:51 +0000 (UTC) (envelope-from mmel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OBkog9071277; Fri, 24 Mar 2017 11:46:50 GMT (envelope-from mmel@FreeBSD.org) Received: (from mmel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OBknuh071271; Fri, 24 Mar 2017 11:46:49 GMT (envelope-from mmel@FreeBSD.org) Message-Id: <201703241146.v2OBknuh071271@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmel set sender to mmel@FreeBSD.org using -f From: Michal Meloun Date: Fri, 24 Mar 2017 11:46:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315900 - in head: lib/libthread_db/arch/arm sys/arm/arm sys/arm/include X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 11:46:51 -0000 Author: mmel Date: Fri Mar 24 11:46:49 2017 New Revision: 315900 URL: https://svnweb.freebsd.org/changeset/base/315900 Log: Cleanup structures related to VFP and/or mcontext_t. - in mcontext_t, rename newer used 'union __vfp' to equaly sized 'mc_spare'. Space allocated by 'union __vfp' is too small and cannot hold full VFP context. - move structures defined in fp.h to more appropriate headers. - remove all unused VFP structures. MFC after: 2 weeks Deleted: head/sys/arm/include/fp.h Modified: head/lib/libthread_db/arch/arm/libpthread_md.c head/sys/arm/arm/vfp.c head/sys/arm/include/pcb.h head/sys/arm/include/reg.h head/sys/arm/include/ucontext.h head/sys/arm/include/vfp.h Modified: head/lib/libthread_db/arch/arm/libpthread_md.c ============================================================================== --- head/lib/libthread_db/arch/arm/libpthread_md.c Fri Mar 24 10:27:05 2017 (r315899) +++ head/lib/libthread_db/arch/arm/libpthread_md.c Fri Mar 24 11:46:49 2017 (r315900) @@ -90,7 +90,7 @@ pt_fpreg_to_ucontext(const struct fpreg mcontext_t *mc = &uc->uc_mcontext; /* XXX */ - memset(&mc->__fpu, 0, sizeof(mc->__fpu)); + memset(&mc->mc_spare, 0, sizeof(mc->mc_spare)); } void Modified: head/sys/arm/arm/vfp.c ============================================================================== --- head/sys/arm/arm/vfp.c Fri Mar 24 10:27:05 2017 (r315899) +++ head/sys/arm/arm/vfp.c Fri Mar 24 11:46:49 2017 (r315900) @@ -37,7 +37,6 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include #include #include Modified: head/sys/arm/include/pcb.h ============================================================================== --- head/sys/arm/include/pcb.h Fri Mar 24 10:27:05 2017 (r315899) +++ head/sys/arm/include/pcb.h Fri Mar 24 11:46:49 2017 (r315900) @@ -38,8 +38,8 @@ #ifndef _MACHINE_PCB_H_ #define _MACHINE_PCB_H_ -#include #include +#include /* Modified: head/sys/arm/include/reg.h ============================================================================== --- head/sys/arm/include/reg.h Fri Mar 24 10:27:05 2017 (r315899) +++ head/sys/arm/include/reg.h Fri Mar 24 11:46:49 2017 (r315900) @@ -3,8 +3,6 @@ #ifndef MACHINE_REG_H #define MACHINE_REG_H -#include - struct reg { unsigned int r[13]; unsigned int r_sp; @@ -13,6 +11,14 @@ struct reg { unsigned int r_cpsr; }; +struct fp_extended_precision { + u_int32_t fp_exponent; + u_int32_t fp_mantissa_hi; + u_int32_t fp_mantissa_lo; +}; + +typedef struct fp_extended_precision fp_reg_t; + struct fpreg { unsigned int fpr_fpsr; fp_reg_t fpr[8]; Modified: head/sys/arm/include/ucontext.h ============================================================================== --- head/sys/arm/include/ucontext.h Fri Mar 24 10:27:05 2017 (r315899) +++ head/sys/arm/include/ucontext.h Fri Mar 24 11:46:49 2017 (r315900) @@ -63,38 +63,14 @@ typedef __greg_t __gregset_t[_NGREG]; #define _REG_LR _REG_R14 #define _REG_PC _REG_R15 -/* - * Floating point register state - */ -/* Note: the storage layout of this structure must be identical to ARMFPE! */ -typedef struct { - unsigned int __fp_fpsr; - struct { - unsigned int __fp_exponent; - unsigned int __fp_mantissa_hi; - unsigned int __fp_mantissa_lo; - } __fp_fr[8]; -} __fpregset_t; - -typedef struct { - unsigned int __vfp_fpscr; - unsigned int __vfp_fstmx[33]; - unsigned int __vfp_fpsid; -} __vfpregset_t; - typedef struct { __gregset_t __gregs; - union { - __fpregset_t __fpregs; - __vfpregset_t __vfpregs; - } __fpu; -} mcontext_t; - -/* Machine-dependent uc_flags */ -#define _UC_ARM_VFP 0x00010000 /* FPU field is VFP */ -/* used by signal delivery to indicate status of signal stack */ -#define _UC_SETSTACK 0x00020000 -#define _UC_CLRSTACK 0x00040000 + /* + * Originally, rest of this structure was named __fpu, 35 * 4 bytes + * long, never accessed from kernel. + */ + unsigned int mc_spare[35]; +} mcontext_t; #endif /* !_MACHINE_MCONTEXT_H_ */ Modified: head/sys/arm/include/vfp.h ============================================================================== --- head/sys/arm/include/vfp.h Fri Mar 24 10:27:05 2017 (r315899) +++ head/sys/arm/include/vfp.h Fri Mar 24 11:46:49 2017 (r315900) @@ -133,9 +133,19 @@ #define COPROC11 (0x3 << 22) #ifndef LOCORE +struct vfp_state { + uint64_t reg[32]; + uint32_t fpscr; + uint32_t fpexec; + uint32_t fpinst; + uint32_t fpinst2; +}; + +#ifdef _KERNEL void vfp_init(void); void vfp_store(struct vfp_state *, boolean_t); void vfp_discard(struct thread *); -#endif +#endif /* _KERNEL */ +#endif /* LOCORE */ #endif From owner-svn-src-head@freebsd.org Fri Mar 24 13:46:28 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 28AA9D149CE; Fri, 24 Mar 2017 13:46:28 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EC6803A4; Fri, 24 Mar 2017 13:46:27 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2ODkR1j019399; Fri, 24 Mar 2017 13:46:27 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2ODkQtJ019397; Fri, 24 Mar 2017 13:46:26 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201703241346.v2ODkQtJ019397@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Fri, 24 Mar 2017 13:46:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315901 - head/sbin/devd X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 13:46:28 -0000 Author: imp Date: Fri Mar 24 13:46:26 2017 New Revision: 315901 URL: https://svnweb.freebsd.org/changeset/base/315901 Log: Use a more stream-lined version of fix_value. Submitted by: ian@ Modified: head/sbin/devd/devd.cc head/sbin/devd/devd.hh Modified: head/sbin/devd/devd.cc ============================================================================== --- head/sbin/devd/devd.cc Fri Mar 24 11:46:49 2017 (r315900) +++ head/sbin/devd/devd.cc Fri Mar 24 13:46:26 2017 (r315901) @@ -417,24 +417,16 @@ var_list::is_set(const string &var) cons * converted to ". For all other characters, both \ and following * character. So the string 'fre\:\"' is translated to 'fred\:"'. */ -const std::string & +std::string var_list::fix_value(const std::string &val) const { - char *tmp, *dst; - const char *src; - std::string *rv; - - dst = tmp = new char[val.length()]; - src = val.c_str(); - while (*src) { - if (*src == '\\' && src[1] == '"') - src++; - else - *dst++ = *src++; - } - rv = new string(tmp); - delete tmp; - return *rv; + std::string rv(val); + std::string::size_type pos(0); + + while ((pos = rv.find("\\\"", pos)) != rv.npos) { + rv.erase(pos, 1); + } + return (rv); } void Modified: head/sbin/devd/devd.hh ============================================================================== --- head/sbin/devd/devd.hh Fri Mar 24 11:46:49 2017 (r315900) +++ head/sbin/devd/devd.hh Fri Mar 24 13:46:26 2017 (r315901) @@ -57,7 +57,7 @@ public: static const std::string nothing; private: - const std::string &fix_value(const std::string &val) const; + std::string fix_value(const std::string &val) const; std::map _vars; }; From owner-svn-src-head@freebsd.org Fri Mar 24 14:25:57 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B5E81D1B94E; Fri, 24 Mar 2017 14:25:57 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 82D274E; Fri, 24 Mar 2017 14:25:57 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OEPuaT035757; Fri, 24 Mar 2017 14:25:56 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OEPuGs035756; Fri, 24 Mar 2017 14:25:56 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201703241425.v2OEPuGs035756@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Fri, 24 Mar 2017 14:25:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315903 - head/sys/dev/e1000 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 14:25:57 -0000 Author: sbruno Date: Fri Mar 24 14:25:56 2017 New Revision: 315903 URL: https://svnweb.freebsd.org/changeset/base/315903 Log: Add missing 'else' to 3-state conditional during setup of interrupts. We don't want to overwrite the 82574 interrupt setup with a different configuration. PR: 218041 Submitted by: razmyslov@viva64.com Modified: head/sys/dev/e1000/if_em.c Modified: head/sys/dev/e1000/if_em.c ============================================================================== --- head/sys/dev/e1000/if_em.c Fri Mar 24 14:19:52 2017 (r315902) +++ head/sys/dev/e1000/if_em.c Fri Mar 24 14:25:56 2017 (r315903) @@ -1941,10 +1941,11 @@ em_if_msix_intr_assign(if_ctx_t ctx, int tx_que->eims = 1 << (22 + i); adapter->ims |= tx_que->eims; adapter->ivars |= (8 | tx_que->msix) << (8 + (i * 4)); - } if (adapter->hw.mac.type == e1000_82575) + } else if (adapter->hw.mac.type == e1000_82575) { tx_que->eims = E1000_EICR_TX_QUEUE0 << (i % adapter->tx_num_queues); - else + } else { tx_que->eims = 1 << (i % adapter->tx_num_queues); + } } /* Link interrupt */ From owner-svn-src-head@freebsd.org Fri Mar 24 14:27:31 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 53442D1BA5B; Fri, 24 Mar 2017 14:27:31 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 20637360; Fri, 24 Mar 2017 14:27:31 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OERUgx035953; Fri, 24 Mar 2017 14:27:30 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OERUVs035952; Fri, 24 Mar 2017 14:27:30 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201703241427.v2OERUVs035952@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Fri, 24 Mar 2017 14:27:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315905 - head/sys/dev/e1000 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 14:27:31 -0000 Author: sbruno Date: Fri Mar 24 14:27:29 2017 New Revision: 315905 URL: https://svnweb.freebsd.org/changeset/base/315905 Log: Add missing 'else' to conditional. This doesn't really affect the code flow or configuration in any way. Modified: head/sys/dev/e1000/if_em.c Modified: head/sys/dev/e1000/if_em.c ============================================================================== --- head/sys/dev/e1000/if_em.c Fri Mar 24 14:26:01 2017 (r315904) +++ head/sys/dev/e1000/if_em.c Fri Mar 24 14:27:29 2017 (r315905) @@ -3231,7 +3231,7 @@ em_if_enable_intr(if_ctx_t ctx) if (hw->mac.type == e1000_82574) { E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK); ims_mask |= adapter->ims; - } if (adapter->intr_type == IFLIB_INTR_MSIX && hw->mac.type >= igb_mac_min) { + } else if (adapter->intr_type == IFLIB_INTR_MSIX && hw->mac.type >= igb_mac_min) { u32 mask = (adapter->que_mask | adapter->link_mask); E1000_WRITE_REG(&adapter->hw, E1000_EIAC, mask); From owner-svn-src-head@freebsd.org Fri Mar 24 14:44:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 66F34D19250; Fri, 24 Mar 2017 14:44:05 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2F8EB149A; Fri, 24 Mar 2017 14:44:05 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OEi4Vg044431; Fri, 24 Mar 2017 14:44:04 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OEi3t9044424; Fri, 24 Mar 2017 14:44:03 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703241444.v2OEi3t9044424@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 24 Mar 2017 14:44:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315908 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 14:44:05 -0000 Author: mav Date: Fri Mar 24 14:44:03 2017 New Revision: 315908 URL: https://svnweb.freebsd.org/changeset/base/315908 Log: Unify initiator and target DMA setup and command sending. The code is so alike that it is pointless to keep it separate. MFC after: 2 weeks Modified: head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_freebsd.h head/sys/dev/isp/isp_library.c head/sys/dev/isp/isp_library.h head/sys/dev/isp/isp_pci.c head/sys/dev/isp/isp_sbus.c head/sys/dev/isp/ispvar.h Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Fri Mar 24 14:40:53 2017 (r315907) +++ head/sys/dev/isp/isp_freebsd.c Fri Mar 24 14:44:03 2017 (r315908) @@ -1372,10 +1372,7 @@ isp_target_start_ctio(ispsoftc_t *isp, u } else { ct2_entry_t *cto = (ct2_entry_t *) local; - if (isp->isp_osinfo.sixtyfourbit) - cto->ct_header.rqs_entry_type = RQSTYPE_CTIO3; - else - cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2; + cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2; cto->ct_header.rqs_entry_count = 1; cto->ct_header.rqs_seqno |= ATPD_SEQ_NOTIFY_CAM; ATPD_SET_SEQNO(cto, atp); @@ -1468,14 +1465,8 @@ isp_target_start_ctio(ispsoftc_t *isp, u isp_prt(isp, ISP_LOGTDEBUG0, "%s: ests base %p vaddr %p ecmd_dma %jx addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests, (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RESPONSE_SIZE + sense_length); cto->rsp.m2.ct_datalen = MIN_FCP_RESPONSE_SIZE + sense_length; - if (cto->ct_header.rqs_entry_type == RQSTYPE_CTIO3) { - cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base = DMA_LO32(addr); - cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi = DMA_HI32(addr); - cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length; - } else { - cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base = DMA_LO32(addr); - cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length; - } + cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base = DMA_LO32(addr); + cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length; } if (sense_length) { isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[0x%x] seq %u nc %d CDB0=%x sstatus=0x%x flags=0x%x resid=%d sense: %x %x/%x/%x", __func__, @@ -3468,7 +3459,7 @@ isp_action(struct cam_sim *sim, union cc cpi->max_lun = ISP_MAX_LUNS(isp) == 0 ? 255 : ISP_MAX_LUNS(isp) - 1; cpi->bus_id = cam_sim_bus(sim); - if (isp->isp_osinfo.sixtyfourbit) + if (sizeof (bus_size_t) > 4) cpi->maxio = (ISP_NSEG64_MAX - 1) * PAGE_SIZE; else cpi->maxio = (ISP_NSEG_MAX - 1) * PAGE_SIZE; Modified: head/sys/dev/isp/isp_freebsd.h ============================================================================== --- head/sys/dev/isp/isp_freebsd.h Fri Mar 24 14:40:53 2017 (r315907) +++ head/sys/dev/isp/isp_freebsd.h Fri Mar 24 14:44:03 2017 (r315908) @@ -293,7 +293,6 @@ struct isposinfo { struct isp_pcmd * pcmd_pool; struct isp_pcmd * pcmd_free; - int sixtyfourbit; /* sixtyfour bit platform */ int mbox_sleeping; int mbox_sleep_ok; int mboxbsy; @@ -505,6 +504,13 @@ default: \ d->ds_base = DMA_LO32(e->ds_addr); \ d->ds_count = e->ds_len; \ } +#if (BUS_SPACE_MAXADDR > UINT32_MAX) +#define XS_NEED_DMA64_SEG(s, n) \ + (((bus_dma_segment_t *)s)[n].ds_addr + \ + ((bus_dma_segment_t *)s)[n].ds_len > UINT32_MAX) +#else +#define XS_NEED_DMA64_SEG(s, n) (0) +#endif #define XS_ISP(ccb) cam_sim_softc(xpt_path_sim((ccb)->ccb_h.path)) #define XS_CHANNEL(ccb) cam_sim_bus(xpt_path_sim((ccb)->ccb_h.path)) #define XS_TGT(ccb) (ccb)->ccb_h.target_id Modified: head/sys/dev/isp/isp_library.c ============================================================================== --- head/sys/dev/isp/isp_library.c Fri Mar 24 14:40:53 2017 (r315907) +++ head/sys/dev/isp/isp_library.c Fri Mar 24 14:44:03 2017 (r315908) @@ -61,8 +61,8 @@ int isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir, ispds64_t *ecmd) { uint8_t storage[QENTRY_LEN]; - uint8_t type, nqe; - uint32_t seg, curseg, seglim, nxt, nxtnxt, ddf; + uint8_t type, nqe, need64; + uint32_t seg, seglim, nxt, nxtnxt, ddf; ispds_t *dsp = NULL; ispds64_t *dsp64 = NULL; void *qe0, *qe1; @@ -88,8 +88,21 @@ isp_send_cmd(ispsoftc_t *isp, void *fqe, goto copy_and_sync; } + need64 = 0; + for (seg = 0; seg < nsegs; seg++) + need64 |= XS_NEED_DMA64_SEG(segp, seg); + if (need64) { + if (type == RQSTYPE_T2RQS) + ((isphdr_t *)fqe)->rqs_entry_type = type = RQSTYPE_T3RQS; + else if (type == RQSTYPE_REQUEST) + ((isphdr_t *)fqe)->rqs_entry_type = type = RQSTYPE_A64; + else if (type == RQSTYPE_CTIO2) + ((isphdr_t *)fqe)->rqs_entry_type = type = RQSTYPE_CTIO3; + } + /* - * First figure out how many pieces of data to transfer and what kind and how many we can put into the first queue entry. + * First figure out how many pieces of data to transfer, what + * kind and how many we can put into the first queue entry. */ switch (type) { case RQSTYPE_REQUEST: @@ -121,15 +134,27 @@ isp_send_cmd(ispsoftc_t *isp, void *fqe, dsp64 = &((ispreqt7_t *)fqe)->req_dataseg; seglim = 1; break; +#ifdef ISP_TARGET_MODE + case RQSTYPE_CTIO2: + dsp = ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg; + seglim = ISP_RQDSEG_T2; + break; + case RQSTYPE_CTIO3: + dsp64 = ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg64; + seglim = ISP_RQDSEG_T3; + break; + case RQSTYPE_CTIO7: + dsp64 = &((ct7_entry_t *)fqe)->rsp.m0.ds; + seglim = 1; + break; +#endif default: return (CMD_COMPLETE); } - - if (seglim > nsegs) { + if (seglim > nsegs) seglim = nsegs; - } - - for (seg = curseg = 0; curseg < seglim; curseg++) { + seg = 0; + while (seg < seglim) { if (dsp64) { XS_GET_DMA64_SEG(dsp64++, segp, seg++); } else { @@ -137,7 +162,6 @@ isp_send_cmd(ispsoftc_t *isp, void *fqe, } } - /* * Second, start building additional continuation segments as needed. */ @@ -164,10 +188,10 @@ isp_send_cmd(ispsoftc_t *isp, void *fqe, crq->req_header.rqs_entry_count = 1; dsp = crq->req_dataseg; } - if (seg + seglim > nsegs) { - seglim = nsegs - seg; - } - for (curseg = 0; curseg < seglim; curseg++) { + seglim += seg; + if (seglim > nsegs) + seglim = nsegs; + while (seg < seglim) { if (dsp64) { XS_GET_DMA64_SEG(dsp64++, segp, seg++); } else { @@ -191,23 +215,17 @@ copy_and_sync: switch (type) { case RQSTYPE_REQUEST: ((ispreq_t *)fqe)->req_flags |= ddf; - /* - * This is historical and not clear whether really needed. - */ - if (nsegs == 0) { + /* This is historical and not clear whether really needed. */ + if (nsegs == 0) nsegs = 1; - } ((ispreq_t *)fqe)->req_seg_count = nsegs; isp_put_request(isp, fqe, qe0); break; case RQSTYPE_CMDONLY: ((ispreq_t *)fqe)->req_flags |= ddf; - /* - * This is historical and not clear whether really needed. - */ - if (nsegs == 0) { + /* This is historical and not clear whether really needed. */ + if (nsegs == 0) nsegs = 1; - } ((ispextreq_t *)fqe)->req_seg_count = nsegs; isp_put_extended_request(isp, fqe, qe0); break; @@ -233,11 +251,34 @@ copy_and_sync: } break; case RQSTYPE_T7RQS: - ((ispreqt7_t *)fqe)->req_alen_datadir = ddf; + ((ispreqt7_t *)fqe)->req_alen_datadir = ddf; ((ispreqt7_t *)fqe)->req_seg_count = nsegs; ((ispreqt7_t *)fqe)->req_dl = totalcnt; isp_put_request_t7(isp, fqe, qe0); break; +#ifdef ISP_TARGET_MODE + case RQSTYPE_CTIO2: + case RQSTYPE_CTIO3: + if (((ct2_entry_t *)fqe)->ct_flags & CT2_FLAG_MODE2) { + ((ct2_entry_t *)fqe)->ct_seg_count = 1; + } else { + ((ct2_entry_t *)fqe)->ct_seg_count = nsegs; + } + if (ISP_CAP_2KLOGIN(isp)) { + isp_put_ctio2e(isp, fqe, qe0); + } else { + isp_put_ctio2(isp, fqe, qe0); + } + break; + case RQSTYPE_CTIO7: + if (((ct7_entry_t *)fqe)->ct_flags & CT7_FLAG_MODE2) { + ((ct7_entry_t *)fqe)->ct_seg_count = 1; + } else { + ((ct7_entry_t *)fqe)->ct_seg_count = nsegs; + } + isp_put_ctio7(isp, fqe, qe0); + break; +#endif default: return (CMD_COMPLETE); } @@ -2057,168 +2098,6 @@ isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_ ISP_IOZPUT_32(isp, src->fcp_rsp_rsplen, &dst->fcp_rsp_rsplen); } -#ifdef ISP_TARGET_MODE - -/* - * Command shipping- finish off first queue entry and do dma mapping and - * additional segments as needed. - * - * Called with the first queue entry mostly filled out. - * Our job here is to finish that and add additional data - * segments if needed. - * - * We used to do synthetic entries to split data and status - * at this level, but that started getting too tricky. - */ -int -isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir, void *snsptr, uint32_t snslen) -{ - uint8_t storage[QENTRY_LEN]; - uint8_t type, nqe; - uint32_t seg, curseg, seglim, nxt, nxtnxt; - ispds_t *dsp = NULL; - ispds64_t *dsp64 = NULL; - void *qe0, *qe1; - - qe0 = isp_getrqentry(isp); - if (qe0 == NULL) { - return (CMD_EAGAIN); - } - nxt = ISP_NXT_QENTRY(isp->isp_reqidx, RQUEST_QUEUE_LEN(isp)); - - type = ((isphdr_t *)fqe)->rqs_entry_type; - nqe = 1; - seglim = 0; - - /* - * If we have data to transmit, figure out how many segments can fit into the first entry. - */ - if (ddir != ISP_NOXFR) { - /* - * First, figure out how many pieces of data to transfer and what kind and how many we can put into the first queue entry. - */ - switch (type) { - case RQSTYPE_CTIO2: - dsp = ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg; - seglim = ISP_RQDSEG_T2; - break; - case RQSTYPE_CTIO3: - dsp64 = ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg64; - seglim = ISP_RQDSEG_T3; - break; - case RQSTYPE_CTIO7: - dsp64 = &((ct7_entry_t *)fqe)->rsp.m0.ds; - seglim = 1; - break; - default: - return (CMD_COMPLETE); - } - } - - /* - * First, fill out any of the data transfer stuff that fits - * in the first queue entry. - */ - if (seglim > nsegs) { - seglim = nsegs; - } - - for (seg = curseg = 0; curseg < seglim; curseg++) { - if (dsp64) { - XS_GET_DMA64_SEG(dsp64++, segp, seg++); - } else { - XS_GET_DMA_SEG(dsp++, segp, seg++); - } - } - - /* - * Second, start building additional continuation segments as needed. - */ - while (seg < nsegs) { - nxtnxt = ISP_NXT_QENTRY(nxt, RQUEST_QUEUE_LEN(isp)); - if (nxtnxt == isp->isp_reqodx) { - isp->isp_reqodx = ISP_READ(isp, isp->isp_rqstoutrp); - if (nxtnxt == isp->isp_reqodx) - return (CMD_EAGAIN); - } - ISP_MEMZERO(storage, QENTRY_LEN); - qe1 = ISP_QUEUE_ENTRY(isp->isp_rquest, nxt); - nxt = nxtnxt; - if (dsp64) { - ispcontreq64_t *crq = (ispcontreq64_t *) storage; - seglim = ISP_CDSEG64; - crq->req_header.rqs_entry_type = RQSTYPE_A64_CONT; - crq->req_header.rqs_entry_count = 1; - dsp64 = crq->req_dataseg; - } else { - ispcontreq_t *crq = (ispcontreq_t *) storage; - seglim = ISP_CDSEG; - crq->req_header.rqs_entry_type = RQSTYPE_DATASEG; - crq->req_header.rqs_entry_count = 1; - dsp = crq->req_dataseg; - } - if (seg + seglim > nsegs) { - seglim = nsegs - seg; - } - for (curseg = 0; curseg < seglim; curseg++) { - if (dsp64) { - XS_GET_DMA64_SEG(dsp64++, segp, seg++); - } else { - XS_GET_DMA_SEG(dsp++, segp, seg++); - } - } - if (dsp64) { - isp_put_cont64_req(isp, (ispcontreq64_t *)storage, qe1); - } else { - isp_put_cont_req(isp, (ispcontreq_t *)storage, qe1); - } - if (isp->isp_dblev & ISP_LOGTDEBUG1) { - isp_print_bytes(isp, "additional queue entry", - QENTRY_LEN, qe1); - } - nqe++; - } - - /* - * Third, not patch up the first queue entry with the number of segments - * we actually are going to be transmitting. At the same time, handle - * any mode 2 requests. - */ - ((isphdr_t *)fqe)->rqs_entry_count = nqe; - switch (type) { - case RQSTYPE_CTIO2: - case RQSTYPE_CTIO3: - if (((ct2_entry_t *)fqe)->ct_flags & CT2_FLAG_MODE2) { - ((ct2_entry_t *)fqe)->ct_seg_count = 1; - } else { - ((ct2_entry_t *)fqe)->ct_seg_count = nsegs; - } - if (ISP_CAP_2KLOGIN(isp)) { - isp_put_ctio2e(isp, fqe, qe0); - } else { - isp_put_ctio2(isp, fqe, qe0); - } - break; - case RQSTYPE_CTIO7: - if (((ct7_entry_t *)fqe)->ct_flags & CT7_FLAG_MODE2) { - ((ct7_entry_t *)fqe)->ct_seg_count = 1; - } else { - ((ct7_entry_t *)fqe)->ct_seg_count = nsegs; - } - isp_put_ctio7(isp, fqe, qe0); - break; - default: - return (CMD_COMPLETE); - } - if (isp->isp_dblev & ISP_LOGTDEBUG1) { - isp_print_bytes(isp, "first queue entry", QENTRY_LEN, qe0); - } - ISP_ADD_REQUEST(isp, nxt); - return (CMD_QUEUED); -} - -#endif - /* * Find port database entries */ Modified: head/sys/dev/isp/isp_library.h ============================================================================== --- head/sys/dev/isp/isp_library.h Fri Mar 24 14:40:53 2017 (r315907) +++ head/sys/dev/isp/isp_library.h Fri Mar 24 14:44:03 2017 (r315908) @@ -156,9 +156,8 @@ void isp_put_fcp_rsp_iu(ispsoftc_t *isp, #else #include "isp_target.h" #endif - -int isp_send_tgt_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddir_t, void *, uint32_t); #endif + int isp_find_pdb_empty(ispsoftc_t *, int, fcportdb_t **); int isp_find_pdb_by_wwpn(ispsoftc_t *, int, uint64_t, fcportdb_t **); int isp_find_pdb_by_handle(ispsoftc_t *, int, uint16_t, fcportdb_t **); Modified: head/sys/dev/isp/isp_pci.c ============================================================================== --- head/sys/dev/isp/isp_pci.c Fri Mar 24 14:40:53 2017 (r315907) +++ head/sys/dev/isp/isp_pci.c Fri Mar 24 14:44:03 2017 (r315908) @@ -682,8 +682,6 @@ isp_pci_attach(device_t dev) pcs->pci_dev = dev; isp->isp_dev = dev; isp->isp_nchan = 1; - if (sizeof (bus_addr_t) > 4) - isp->isp_osinfo.sixtyfourbit = 1; mtx_init(&isp->isp_lock, "isp", NULL, MTX_DEF); /* @@ -1527,7 +1525,7 @@ isp_pci_mbxdma(ispsoftc_t *isp) slim = (1UL << 24); llim = BUS_SPACE_MAXADDR_32BIT; } - if (isp->isp_osinfo.sixtyfourbit) + if (sizeof (bus_size_t) > 4) nsegs = ISP_NSEG64_MAX; else nsegs = ISP_NSEG_MAX; @@ -1839,122 +1837,39 @@ typedef struct { #define MUSHERR_NOQENTRIES -2 -#ifdef ISP_TARGET_MODE -static void -tdma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) -{ - mush_t *mp; - ispsoftc_t *isp; - struct ccb_scsiio *csio; - isp_ddir_t ddir; - ispreq_t *rq; - - mp = (mush_t *) arg; - if (error) { - mp->error = error; - return; - } - csio = mp->cmd_token; - isp = mp->isp; - rq = mp->rq; - if (nseg) { - if (isp->isp_osinfo.sixtyfourbit) { - if (nseg >= ISP_NSEG64_MAX) { - isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG64_MAX); - mp->error = EFAULT; - return; - } - if (rq->req_header.rqs_entry_type == RQSTYPE_CTIO2) { - rq->req_header.rqs_entry_type = RQSTYPE_CTIO3; - } - } else { - if (nseg >= ISP_NSEG_MAX) { - isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG_MAX); - mp->error = EFAULT; - return; - } - } - if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { - bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREWRITE); - ddir = ISP_TO_DEVICE; - } else if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT) { - bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREREAD); - ddir = ISP_FROM_DEVICE; - } else { - dm_segs = NULL; - nseg = 0; - ddir = ISP_NOXFR; - } - } else { - dm_segs = NULL; - nseg = 0; - ddir = ISP_NOXFR; - } - - error = isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, &csio->sense_data, csio->sense_len); - switch (error) { - case CMD_EAGAIN: - mp->error = MUSHERR_NOQENTRIES; - case CMD_QUEUED: - break; - default: - mp->error = EIO; - } -} -#endif - static void dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) { - mush_t *mp; - ispsoftc_t *isp; - struct ccb_scsiio *csio; + mush_t *mp = (mush_t *) arg; + ispsoftc_t *isp= mp->isp; + struct ccb_scsiio *csio = mp->cmd_token; isp_ddir_t ddir; - ispreq_t *rq; + int sdir; - mp = (mush_t *) arg; if (error) { mp->error = error; return; } - csio = mp->cmd_token; - isp = mp->isp; - rq = mp->rq; - if (nseg) { - if (isp->isp_osinfo.sixtyfourbit) { - if (nseg >= ISP_NSEG64_MAX) { - isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG64_MAX); - mp->error = EFAULT; - return; - } - if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) { - rq->req_header.rqs_entry_type = RQSTYPE_T3RQS; - } else if (rq->req_header.rqs_entry_type == RQSTYPE_REQUEST) { - rq->req_header.rqs_entry_type = RQSTYPE_A64; - } - } else { - if (nseg >= ISP_NSEG_MAX) { - isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG_MAX); - mp->error = EFAULT; - return; - } - } + if (nseg == 0) { + ddir = ISP_NOXFR; + } else { if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { - bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREREAD); ddir = ISP_FROM_DEVICE; - } else if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT) { - bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREWRITE); + } else { ddir = ISP_TO_DEVICE; + } + if ((csio->ccb_h.func_code == XPT_CONT_TARGET_IO) ^ + ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)) { + sdir = BUS_DMASYNC_PREREAD; } else { - ddir = ISP_NOXFR; + sdir = BUS_DMASYNC_PREWRITE; } - } else { - dm_segs = NULL; - nseg = 0; - ddir = ISP_NOXFR; + bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, + sdir); } - error = isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, (ispds64_t *)csio->req_map); + error = isp_send_cmd(isp, mp->rq, dm_segs, nseg, XS_XFRLEN(csio), + ddir, (ispds64_t *)csio->req_map); switch (error) { case CMD_EAGAIN: mp->error = MUSHERR_NOQENTRIES; @@ -1971,7 +1886,6 @@ static int isp_pci_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff) { mush_t mush, *mp; - void (*eptr)(void *, bus_dma_segment_t *, int, int); int error; mp = &mush; @@ -1980,15 +1894,8 @@ isp_pci_dmasetup(ispsoftc_t *isp, struct mp->rq = ff; mp->error = 0; -#ifdef ISP_TARGET_MODE - if (csio->ccb_h.func_code == XPT_CONT_TARGET_IO) - eptr = tdma2; - else -#endif - eptr = dma2; - error = bus_dmamap_load_ccb(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, - (union ccb *)csio, eptr, mp, 0); + (union ccb *)csio, dma2, mp, 0); if (error == EINPROGRESS) { bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap); mp->error = EINVAL; Modified: head/sys/dev/isp/isp_sbus.c ============================================================================== --- head/sys/dev/isp/isp_sbus.c Fri Mar 24 14:40:53 2017 (r315907) +++ head/sys/dev/isp/isp_sbus.c Fri Mar 24 14:44:03 2017 (r315908) @@ -592,37 +592,36 @@ typedef struct { static void dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) { - mush_t *mp; - ispsoftc_t *isp; - struct ccb_scsiio *csio; + mush_t *mp = (mush_t *) arg; + ispsoftc_t *isp = mp->isp; + struct ccb_scsiio *csio = mp->cmd_token; isp_ddir_t ddir; - ispreq_t *rq; + int sdir; - mp = (mush_t *) arg; if (error) { mp->error = error; return; } - csio = mp->cmd_token; - isp = mp->isp; - rq = mp->rq; - if (nseg) { + if (nseg == 0) { + ddir = ISP_NOXFR; + } else { if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { - bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREREAD); ddir = ISP_FROM_DEVICE; - } else if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT) { - bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREWRITE); + } else { ddir = ISP_TO_DEVICE; + } + if ((csio->ccb_h.func_code == XPT_CONT_TARGET_IO) ^ + ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)) { + sdir = BUS_DMASYNC_PREREAD; } else { - ddir = ISP_NOXFR; + sdir = BUS_DMASYNC_PREWRITE; } - } else { - dm_segs = NULL; - nseg = 0; - ddir = ISP_NOXFR; + bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, + sdir); } - if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, NULL) != CMD_QUEUED) { + if (isp_send_cmd(isp, mp->rq, dm_segs, nseg, XS_XFRLEN(csio), + ddir, NULL) != CMD_QUEUED) { mp->error = MUSHERR_NOQENTRIES; } } Modified: head/sys/dev/isp/ispvar.h ============================================================================== --- head/sys/dev/isp/ispvar.h Fri Mar 24 14:40:53 2017 (r315907) +++ head/sys/dev/isp/ispvar.h Fri Mar 24 14:44:03 2017 (r315908) @@ -999,6 +999,7 @@ void isp_async(ispsoftc_t *, ispasync_t, * XS_DMA_ADDR_T Platform PCI DMA Address Type * XS_GET_DMA_SEG(..) Get 32 bit dma segment list value * XS_GET_DMA64_SEG(..) Get 64 bit dma segment list value + * XS_NEED_DMA64_SEG(..) dma segment needs 64 bit storage * XS_ISP(xs) gets an instance out of an XS_T * XS_CHANNEL(xs) gets the channel (bus # for DUALBUS cards) "" * XS_TGT(xs) gets the target "" From owner-svn-src-head@freebsd.org Fri Mar 24 14:45:59 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 978F1D19307; Fri, 24 Mar 2017 14:45:59 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 66BD11644; Fri, 24 Mar 2017 14:45:59 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OEjwfY044534; Fri, 24 Mar 2017 14:45:58 GMT (envelope-from des@FreeBSD.org) Received: (from des@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OEjwdw044532; Fri, 24 Mar 2017 14:45:58 GMT (envelope-from des@FreeBSD.org) Message-Id: <201703241445.v2OEjwdw044532@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: des set sender to des@FreeBSD.org using -f From: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= Date: Fri, 24 Mar 2017 14:45:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315909 - in head/contrib/openpam: include/security lib/libpam X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 14:45:59 -0000 Author: des Date: Fri Mar 24 14:45:58 2017 New Revision: 315909 URL: https://svnweb.freebsd.org/changeset/base/315909 Log: Restore the NULL check that was removed in upstream r913. It is not unreasonable to call pam_end() with a NULL pamh in error handling code. Reported by: rwatson Modified: head/contrib/openpam/include/security/pam_appl.h head/contrib/openpam/lib/libpam/pam_end.c Modified: head/contrib/openpam/include/security/pam_appl.h ============================================================================== --- head/contrib/openpam/include/security/pam_appl.h Fri Mar 24 14:44:03 2017 (r315908) +++ head/contrib/openpam/include/security/pam_appl.h Fri Mar 24 14:45:58 2017 (r315909) @@ -72,8 +72,7 @@ pam_close_session(pam_handle_t *_pamh, int pam_end(pam_handle_t *_pamh, - int _status) - OPENPAM_NONNULL((1)); + int _status); int pam_get_data(const pam_handle_t *_pamh, Modified: head/contrib/openpam/lib/libpam/pam_end.c ============================================================================== --- head/contrib/openpam/lib/libpam/pam_end.c Fri Mar 24 14:44:03 2017 (r315908) +++ head/contrib/openpam/lib/libpam/pam_end.c Fri Mar 24 14:45:58 2017 (r315909) @@ -60,6 +60,8 @@ pam_end(pam_handle_t *pamh, int i; ENTER(); + if (pamh == NULL) + RETURNC(PAM_SYSTEM_ERR); /* clear module data */ while ((dp = pamh->module_data) != NULL) { From owner-svn-src-head@freebsd.org Fri Mar 24 16:01:21 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 24712D1BF1B; Fri, 24 Mar 2017 16:01:21 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E5B42947; Fri, 24 Mar 2017 16:01:20 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OG1JGR075254; Fri, 24 Mar 2017 16:01:19 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OG1JdU075253; Fri, 24 Mar 2017 16:01:19 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <201703241601.v2OG1JdU075253@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Fri, 24 Mar 2017 16:01:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315910 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 16:01:21 -0000 Author: glebius Date: Fri Mar 24 16:01:19 2017 New Revision: 315910 URL: https://svnweb.freebsd.org/changeset/base/315910 Log: Make sendfile(2) more robust against file change. This fixes a possible crash when the file shrinks. This also fixes sendfile(2) not sending more data in a case when the file grows, and the request is open-ended or specifies a size that is greater than old file size. PR: 217789 Reviewed by: gallatin MFC after: 10 days Modified: head/sys/kern/kern_sendfile.c Modified: head/sys/kern/kern_sendfile.c ============================================================================== --- head/sys/kern/kern_sendfile.c Fri Mar 24 14:45:58 2017 (r315909) +++ head/sys/kern/kern_sendfile.c Fri Mar 24 16:01:19 2017 (r315910) @@ -689,11 +689,10 @@ retry_space: goto done; } if (va.va_size != obj_size) { - if (nbytes == 0) - rem += va.va_size - obj_size; - else if (offset + nbytes > va.va_size) - rem -= (offset + nbytes - va.va_size); obj_size = va.va_size; + rem = nbytes ? + omin(nbytes + offset, obj_size) : obj_size; + rem -= off; } } From owner-svn-src-head@freebsd.org Fri Mar 24 16:18:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 46EF5D1B364; Fri, 24 Mar 2017 16:18:22 +0000 (UTC) (envelope-from gavin@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 13DC51345; Fri, 24 Mar 2017 16:18:22 +0000 (UTC) (envelope-from gavin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OGIL6G080885; Fri, 24 Mar 2017 16:18:21 GMT (envelope-from gavin@FreeBSD.org) Received: (from gavin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OGILKH080884; Fri, 24 Mar 2017 16:18:21 GMT (envelope-from gavin@FreeBSD.org) Message-Id: <201703241618.v2OGILKH080884@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gavin set sender to gavin@FreeBSD.org using -f From: Gavin Atkinson Date: Fri, 24 Mar 2017 16:18:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315911 - head/sys/x86/x86 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 16:18:22 -0000 Author: gavin Date: Fri Mar 24 16:18:20 2017 New Revision: 315911 URL: https://svnweb.freebsd.org/changeset/base/315911 Log: Improve grammar on a warning, and only use one line rather than two when printing it. Modified: head/sys/x86/x86/mp_x86.c Modified: head/sys/x86/x86/mp_x86.c ============================================================================== --- head/sys/x86/x86/mp_x86.c Fri Mar 24 16:01:19 2017 (r315910) +++ head/sys/x86/x86/mp_x86.c Fri Mar 24 16:18:20 2017 (r315911) @@ -209,14 +209,14 @@ add_deterministic_cache(int type, int le if (caches[level - 1].id_shift > pkg_id_shift) { printf("WARNING: L%u data cache covers more " - "APIC IDs than a package\n", level); - printf("%u > %u\n", caches[level - 1].id_shift, pkg_id_shift); + "APIC IDs than a package (%u > %u)\n", level, + caches[level - 1].id_shift, pkg_id_shift); caches[level - 1].id_shift = pkg_id_shift; } if (caches[level - 1].id_shift < core_id_shift) { - printf("WARNING: L%u data cache covers less " - "APIC IDs than a core\n", level); - printf("%u < %u\n", caches[level - 1].id_shift, core_id_shift); + printf("WARNING: L%u data cache covers fewer " + "APIC IDs than a core (%u < %u)\n", level, + caches[level - 1].id_shift, core_id_shift); caches[level - 1].id_shift = core_id_shift; } From owner-svn-src-head@freebsd.org Fri Mar 24 16:18:59 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 50714D1B3D0; Fri, 24 Mar 2017 16:18:59 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 156D314E4; Fri, 24 Mar 2017 16:18:59 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OGIwcx080947; Fri, 24 Mar 2017 16:18:58 GMT (envelope-from eugen@FreeBSD.org) Received: (from eugen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OGIweq080946; Fri, 24 Mar 2017 16:18:58 GMT (envelope-from eugen@FreeBSD.org) Message-Id: <201703241618.v2OGIweq080946@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eugen set sender to eugen@FreeBSD.org using -f From: Eugene Grosbein Date: Fri, 24 Mar 2017 16:18:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315912 - head/usr.sbin/pw X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 16:18:59 -0000 Author: eugen (ports committer) Date: Fri Mar 24 16:18:57 2017 New Revision: 315912 URL: https://svnweb.freebsd.org/changeset/base/315912 Log: Properly initialise with content of pw.conf(5) that was mistakenly ignored. Also, respect "defaultgroup" if specified there. PR: 217934 Reported by: Victor Sudakov Reviewed by: bapt Approved by: bapt, vsevolod (mentor) MFC after: 1 week Modified: head/usr.sbin/pw/pw_user.c Modified: head/usr.sbin/pw/pw_user.c ============================================================================== --- head/usr.sbin/pw/pw_user.c Fri Mar 24 16:18:20 2017 (r315911) +++ head/usr.sbin/pw/pw_user.c Fri Mar 24 16:18:57 2017 (r315912) @@ -1177,7 +1177,7 @@ pw_user_add(int argc, char **argv, char char line[_PASSWORD_LEN+1], path[MAXPATHLEN]; char *gecos, *homedir, *skel, *walk, *userid, *groupid, *grname; char *default_passwd, *name, *p; - const char *cfg; + const char *cfg = NULL; login_cap_t *lc; FILE *pfp, *fp; intmax_t id = -1; @@ -1356,6 +1356,9 @@ pw_user_add(int argc, char **argv, char if (GETPWNAM(name) != NULL) errx(EX_DATAERR, "login name `%s' already exists", name); + if (!grname) + grname = cmdcnf->default_group; + pwd = &fakeuser; pwd->pw_name = name; pwd->pw_class = cmdcnf->default_class ? cmdcnf->default_class : ""; @@ -1485,7 +1488,7 @@ pw_user_mod(int argc, char **argv, char struct group *grp; StringList *groups = NULL; char args[] = "C:qn:u:c:d:e:p:g:G:mM:l:k:s:w:L:h:H:NPYy:"; - const char *cfg; + const char *cfg = NULL; char *gecos, *homedir, *grname, *name, *newname, *walk, *skel, *shell; char *passwd, *class, *nispasswd; login_cap_t *lc; From owner-svn-src-head@freebsd.org Fri Mar 24 16:26:13 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 30F29D1B719; Fri, 24 Mar 2017 16:26:13 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F25851C0A; Fri, 24 Mar 2017 16:26:12 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OGQCZu085053; Fri, 24 Mar 2017 16:26:12 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OGQCq3085052; Fri, 24 Mar 2017 16:26:12 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201703241626.v2OGQCq3085052@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 24 Mar 2017 16:26:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315913 - head/sys/dev/isp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 16:26:13 -0000 Author: mav Date: Fri Mar 24 16:26:11 2017 New Revision: 315913 URL: https://svnweb.freebsd.org/changeset/base/315913 Log: Add brackets to fix incorrect macro expansion. Reported by: Andreas Hollmann / PVS-Studio MFC after: 2 weeks Modified: head/sys/dev/isp/ispmbox.h Modified: head/sys/dev/isp/ispmbox.h ============================================================================== --- head/sys/dev/isp/ispmbox.h Fri Mar 24 16:18:57 2017 (r315912) +++ head/sys/dev/isp/ispmbox.h Fri Mar 24 16:26:11 2017 (r315913) @@ -1207,7 +1207,7 @@ typedef struct { #define ICB2400_VPINFO_OFF 0x80 /* offset from start of ICB */ #define ICB2400_VPINFO_PORT_OFF(chan) \ (ICB2400_VPINFO_OFF + \ - sizeof (isp_icb_2400_vpinfo_t) + (chan * ICB2400_VPOPT_WRITE_SIZE)) + sizeof (isp_icb_2400_vpinfo_t) + ((chan) * ICB2400_VPOPT_WRITE_SIZE)) #define ICB2400_VPGOPT_FCA 0x01 /* Assume Clean Address bit in FLOGI ACC set (works only in static configurations) */ #define ICB2400_VPGOPT_MID_DISABLE 0x02 /* when set, connection mode2 will work with NPIV-capable switched */ From owner-svn-src-head@freebsd.org Fri Mar 24 17:34:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9735BD1B1CA; Fri, 24 Mar 2017 17:34:56 +0000 (UTC) (envelope-from bde@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 58988A1B; Fri, 24 Mar 2017 17:34:56 +0000 (UTC) (envelope-from bde@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OHYtXQ013402; Fri, 24 Mar 2017 17:34:55 GMT (envelope-from bde@FreeBSD.org) Received: (from bde@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OHYt04013400; Fri, 24 Mar 2017 17:34:55 GMT (envelope-from bde@FreeBSD.org) Message-Id: <201703241734.v2OHYt04013400@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bde set sender to bde@FreeBSD.org using -f From: Bruce Evans Date: Fri, 24 Mar 2017 17:34:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315914 - in head/sys: amd64/amd64 i386/i386 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 17:34:56 -0000 Author: bde Date: Fri Mar 24 17:34:55 2017 New Revision: 315914 URL: https://svnweb.freebsd.org/changeset/base/315914 Log: Remove buggy adjustment of page tables in db_write_bytes(). Long ago, perhaps only on i386, kernel text was mapped read-only and it was necessary to change the mapping to read-write to set breakpoints in kernel text. Other writes by ddb to kernel text were also allowed. This write protection is harder to implement with 4MB pages, and was lost even for 4K pages when 4MB pages were implemented. So changing the mapping became useless. It was actually worse than useless since it followed followed various null and otherwise garbage pointers to not change random memory instead of the mapping. (On i386s, the pointers became good in pmap_bootstrap(), and on amd64 the pointers became bad in pmap_bootstrap() if not before.) Another bug broke detection of following of null pointers on i386, except early in boot where not detecting this was a feature. When I fixed the bug, I accidentally broke the feature and soon got traps in db_write_bytes(). Setting breakpoints early in ddb was broken. kib pointed out that a clean way to do the adjustment would be to use a special [sub]map giving a small window on the bytes to be written. The trap handler didn't know how to fix up errors for pagefaults accessing the map itself. Such errors rarely need fixups, since most traps for the map are for the first access which is a read. Reviewed by: kib Modified: head/sys/amd64/amd64/db_interface.c head/sys/i386/i386/db_interface.c Modified: head/sys/amd64/amd64/db_interface.c ============================================================================== --- head/sys/amd64/amd64/db_interface.c Fri Mar 24 16:26:11 2017 (r315913) +++ head/sys/amd64/amd64/db_interface.c Fri Mar 24 17:34:55 2017 (r315914) @@ -30,17 +30,11 @@ __FBSDID("$FreeBSD$"); /* * Interface to new debugger. */ + #include #include #include -#include #include -#include - -#include - -#include -#include #include @@ -75,63 +69,16 @@ db_write_bytes(vm_offset_t addr, size_t jmp_buf jb; void *prev_jb; char *dst; - pt_entry_t *ptep0 = NULL; - pt_entry_t oldmap0 = 0; - vm_offset_t addr1; - pt_entry_t *ptep1 = NULL; - pt_entry_t oldmap1 = 0; int ret; prev_jb = kdb_jmpbuf(jb); ret = setjmp(jb); if (ret == 0) { - if (addr > trunc_page((vm_offset_t)btext) - size && - addr < round_page((vm_offset_t)etext)) { - - ptep0 = vtopte(addr); - oldmap0 = *ptep0; - *ptep0 |= PG_RW; - - /* - * Map another page if the data crosses a page - * boundary. - */ - if ((*ptep0 & PG_PS) == 0) { - addr1 = trunc_page(addr + size - 1); - if (trunc_page(addr) != addr1) { - ptep1 = vtopte(addr1); - oldmap1 = *ptep1; - *ptep1 |= PG_RW; - } - } else { - addr1 = trunc_2mpage(addr + size - 1); - if (trunc_2mpage(addr) != addr1) { - ptep1 = vtopte(addr1); - oldmap1 = *ptep1; - *ptep1 |= PG_RW; - } - } - - invltlb(); - } - dst = (char *)addr; - while (size-- > 0) *dst++ = *data++; } - (void)kdb_jmpbuf(prev_jb); - - if (ptep0) { - *ptep0 = oldmap0; - - if (ptep1) - *ptep1 = oldmap1; - - invltlb(); - } - return (ret); } Modified: head/sys/i386/i386/db_interface.c ============================================================================== --- head/sys/i386/i386/db_interface.c Fri Mar 24 16:26:11 2017 (r315913) +++ head/sys/i386/i386/db_interface.c Fri Mar 24 17:34:55 2017 (r315914) @@ -30,17 +30,14 @@ __FBSDID("$FreeBSD$"); /* * Interface to new debugger. */ + #include #include -#include #include #include #include -#include - -#include -#include +#include #include @@ -75,63 +72,16 @@ db_write_bytes(vm_offset_t addr, size_t jmp_buf jb; void *prev_jb; char *dst; - pt_entry_t *ptep0 = NULL; - pt_entry_t oldmap0 = 0; - vm_offset_t addr1; - pt_entry_t *ptep1 = NULL; - pt_entry_t oldmap1 = 0; int ret; prev_jb = kdb_jmpbuf(jb); ret = setjmp(jb); if (ret == 0) { - if (addr > trunc_page((vm_offset_t)btext) - size && - addr < round_page((vm_offset_t)etext)) { - - ptep0 = pmap_pte(kernel_pmap, addr); - oldmap0 = *ptep0; - *ptep0 |= PG_RW; - - /* - * Map another page if the data crosses a page - * boundary. - */ - if ((*ptep0 & PG_PS) == 0) { - addr1 = trunc_page(addr + size - 1); - if (trunc_page(addr) != addr1) { - ptep1 = pmap_pte(kernel_pmap, addr1); - oldmap1 = *ptep1; - *ptep1 |= PG_RW; - } - } else { - addr1 = trunc_4mpage(addr + size - 1); - if (trunc_4mpage(addr) != addr1) { - ptep1 = pmap_pte(kernel_pmap, addr1); - oldmap1 = *ptep1; - *ptep1 |= PG_RW; - } - } - - invltlb(); - } - dst = (char *)addr; - while (size-- > 0) *dst++ = *data++; } - (void)kdb_jmpbuf(prev_jb); - - if (ptep0) { - *ptep0 = oldmap0; - - if (ptep1) - *ptep1 = oldmap1; - - invltlb(); - } - return (ret); } From owner-svn-src-head@freebsd.org Fri Mar 24 17:45:10 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8666CD1B6F3; Fri, 24 Mar 2017 17:45:10 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (glebi.us [96.95.210.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 70E171353; Fri, 24 Mar 2017 17:45:10 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (localhost [127.0.0.1]) by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id v2OHj9g5093165 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 24 Mar 2017 10:45:09 -0700 (PDT) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebi.us (8.15.2/8.15.2/Submit) id v2OHj9uD093164; Fri, 24 Mar 2017 10:45:09 -0700 (PDT) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebi.us: glebius set sender to glebius@FreeBSD.org using -f Date: Fri, 24 Mar 2017 10:45:09 -0700 From: Gleb Smirnoff To: John Baldwin Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Message-ID: <20170324174509.GX23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <1782817.djIc6TfI1t@ralph.baldwin.cx> <20170321185004.GW23308@FreeBSD.org> <2618830.hTJSphVT4p@ralph.baldwin.cx> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2618830.hTJSphVT4p@ralph.baldwin.cx> User-Agent: Mutt/1.7.2 (2016-11-26) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 17:45:10 -0000 John, On Tue, Mar 21, 2017 at 02:24:30PM -0700, John Baldwin wrote: J> > I have very much anticipated this comment from you, John. J> > J> > I would like to remind you, that we have had this very exact conversation J> > back when I removed kvm support from netstat/route.c. Let me search the J> > archives: J> > J> > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html J> > J> > This conversation has had a continuation on IRC, which I don't archive. J> > J> > AFAIR, first I told that with all my involvement into networking stack, J> > I never ever had experienced a need to run route stats on a core. The J> > debugger were the only useful tool. And that opinion was seconded by J> > other network hackers. Then we discussed that a proper tool chould use J> > dynamic type parsing and not kvm(3). You said that future gdb has python J> > scripting and that would work fine. Meanwhile, you insisted that I restore J> > the functionality. I resisted to put kvm(3) back into netstat/route.c, and J> > instead I created a gdb script that prints exactly what 'nestat -anr -M core' J> > prints. And I committed the script just to satisfy your demand: J> > J> > tools/debugscripts/netstat-anr.gdb J> > J> > Can you please fairly answer, have you (or anyone else) ever used the J> > script during these 2 years? J> J> You never updated crashinfo to use the script (the point of crashinfo is to J> give an automated bit of information users can include in bug reports). J> crashinfo came from Yahoo! where knowing the active state of the system J> during a crash was indeed useful. It wasn't necessarily about debugging a J> panic in the network stack, but about obtaining information about the system J> useful in debugging crashes in arbitrary parts of the kernel. I don't work J> at Y! anymore, so I'm not in the same environment. Those things tend to be J> more useful when dealing with a large deployment of hetergenous systems J> rather than doing focused development on a driver or a bunch of identical J> systems with the same workload / role (e.g. appliances). Since you outlined that it is important that systems are heterogenous, looks like you anticipated my reply that at Netflix we also do automated crash collection. :) Still, my personal experience is that when analyzing a crash, you aren't interested in full table, be it a routing table or a PCB list. You are focused on the entry that crashed. This experience comes from my previous job Rambler, which is a Russian version of Yahoo! :) All the time I analyzed our internal crashes, or FreeBSD PRs, I always PgDown-ed this tons of information. J> Also, the setgid thing is a red herring. You don't need setgid to read from J> a core, only to use kvm against a live system. I'm all for using sysctls to J> fetch data against live system and only keeping kvm for use with core dumps J> which doesn't require setgid. Which means that if you want a tool to print out stats from a core, that should be a separate tool. And the runtime tool netstat should get free of kvm, and of setgid bit. Here we again come to the need of debugger with better scripting support. What are the expectations for newer gdb which has python scripting? -- Totus tuus, Glebius. From owner-svn-src-head@freebsd.org Fri Mar 24 20:50:56 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 513F5D1B34C; Fri, 24 Mar 2017 20:50:56 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from mail.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0BF711169; Fri, 24 Mar 2017 20:50:56 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from ralph.baldwin.cx (c-73-231-226-104.hsd1.ca.comcast.net [73.231.226.104]) by mail.baldwin.cx (Postfix) with ESMTPSA id A09BA10A7B9; Fri, 24 Mar 2017 16:50:54 -0400 (EDT) From: John Baldwin To: Gleb Smirnoff Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315662 - in head: contrib/bsnmp/snmp_mibII contrib/ipfilter/ipsend lib/libprocstat sys/netinet sys/sys usr.bin/netstat usr.bin/sockstat usr.bin/systat usr.sbin/tcpdrop usr.sbin/trpt Date: Fri, 24 Mar 2017 13:50:39 -0700 Message-ID: <2059536.bpqgJbnTOP@ralph.baldwin.cx> User-Agent: KMail/4.14.10 (FreeBSD/11.0-STABLE; KDE/4.14.10; amd64; ; ) In-Reply-To: <20170324174509.GX23308@FreeBSD.org> References: <201703210639.v2L6dnRf055522@repo.freebsd.org> <2618830.hTJSphVT4p@ralph.baldwin.cx> <20170324174509.GX23308@FreeBSD.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.4.3 (mail.baldwin.cx); Fri, 24 Mar 2017 16:50:54 -0400 (EDT) X-Virus-Scanned: clamav-milter 0.99.2 at mail.baldwin.cx X-Virus-Status: Clean X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 20:50:56 -0000 On Friday, March 24, 2017 10:45:09 AM Gleb Smirnoff wrote: > John, > > On Tue, Mar 21, 2017 at 02:24:30PM -0700, John Baldwin wrote: > J> > I have very much anticipated this comment from you, John. > J> > > J> > I would like to remind you, that we have had this very exact conversation > J> > back when I removed kvm support from netstat/route.c. Let me search the > J> > archives: > J> > > J> > https://lists.freebsd.org/pipermail/svn-src-head/2015-April/070480.html > J> > > J> > This conversation has had a continuation on IRC, which I don't archive. > J> > > J> > AFAIR, first I told that with all my involvement into networking stack, > J> > I never ever had experienced a need to run route stats on a core. The > J> > debugger were the only useful tool. And that opinion was seconded by > J> > other network hackers. Then we discussed that a proper tool chould use > J> > dynamic type parsing and not kvm(3). You said that future gdb has python > J> > scripting and that would work fine. Meanwhile, you insisted that I restore > J> > the functionality. I resisted to put kvm(3) back into netstat/route.c, and > J> > instead I created a gdb script that prints exactly what 'nestat -anr -M core' > J> > prints. And I committed the script just to satisfy your demand: > J> > > J> > tools/debugscripts/netstat-anr.gdb > J> > > J> > Can you please fairly answer, have you (or anyone else) ever used the > J> > script during these 2 years? > J> > J> You never updated crashinfo to use the script (the point of crashinfo is to > J> give an automated bit of information users can include in bug reports). > J> crashinfo came from Yahoo! where knowing the active state of the system > J> during a crash was indeed useful. It wasn't necessarily about debugging a > J> panic in the network stack, but about obtaining information about the system > J> useful in debugging crashes in arbitrary parts of the kernel. I don't work > J> at Y! anymore, so I'm not in the same environment. Those things tend to be > J> more useful when dealing with a large deployment of hetergenous systems > J> rather than doing focused development on a driver or a bunch of identical > J> systems with the same workload / role (e.g. appliances). > > Since you outlined that it is important that systems are heterogenous, looks > like you anticipated my reply that at Netflix we also do automated crash > collection. :) > > Still, my personal experience is that when analyzing a crash, you aren't > interested in full table, be it a routing table or a PCB list. You are > focused on the entry that crashed. This experience comes from my previous > job Rambler, which is a Russian version of Yahoo! :) > All the time I analyzed our internal crashes, or FreeBSD PRs, I always > PgDown-ed this tons of information. I'm not saying it is always useful, but it is sometimes useful. And it may not be a panic in the network stack, but more "which connections and on which mix of ports were active when it crashed". 'ps' output isn't only useful when you have a crash in fork(). It happens to be useful for other types of panics as well. > J> Also, the setgid thing is a red herring. You don't need setgid to read from > J> a core, only to use kvm against a live system. I'm all for using sysctls to > J> fetch data against live system and only keeping kvm for use with core dumps > J> which doesn't require setgid. > > Which means that if you want a tool to print out stats from a core, that should > be a separate tool. And the runtime tool netstat should get free of kvm, and of > setgid bit. A separate tool means that you have to reproduce the formatting bits, and it is convenient to have consistent output. > Here we again come to the need of debugger with better scripting support. What > are the expectations for newer gdb which has python scripting? 'pkg install gdb' has provided a working kgdb for over a year now. crashinfo will even look for and prefer kgdb from ports over kgdb from base. -- John Baldwin From owner-svn-src-head@freebsd.org Fri Mar 24 21:32:02 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 31B6FD1843F; Fri, 24 Mar 2017 21:32:02 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from smtp-out-so.shaw.ca (smtp-out-so.shaw.ca [64.59.136.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id DC567AFD; Fri, 24 Mar 2017 21:32:01 +0000 (UTC) (envelope-from cy.schubert@komquats.com) Received: from spqr.komquats.com ([96.50.22.10]) by shaw.ca with SMTP id rWoQcWJ7gC3JIrWoRcpLu4; Fri, 24 Mar 2017 15:32:00 -0600 X-Authority-Analysis: v=2.2 cv=XbT59Mx5 c=1 sm=1 tr=0 a=jvE2nwUzI0ECrNeyr98KWA==:117 a=jvE2nwUzI0ECrNeyr98KWA==:17 a=kj9zAlcOel0A:10 a=6Iz7jQTuP9IA:10 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=oEAUtf0-OmxjpcpeolcA:9 a=CjuIK1q_8ugA:10 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTPS id 0881AFD; Fri, 24 Mar 2017 14:31:57 -0700 (PDT) Received: from slippy (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id v2OLVvBa047226; Fri, 24 Mar 2017 14:31:57 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <201703242131.v2OLVvBa047226@slippy.cwsent.com> X-Mailer: exmh version 2.8.0 04/21/2012 with nmh-1.6 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Warner Losh cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315901 - head/sbin/devd In-Reply-To: Message from Warner Losh of "Fri, 24 Mar 2017 13:46:26 -0000." <201703241346.v2ODkQtJ019397@repo.freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Fri, 24 Mar 2017 14:31:57 -0700 X-CMAE-Envelope: MS4wfMSV6qspgrhzQJE5kGTZ7BqFTupKTj1ucUecTyRw33NJ3Hm79sXi+CCXtFEtQjIu+JWUhl2C9dYJfF29vEE+auLM5xVbkK9aC51pymYmPOoYnO9NnQYw OdUPY7q4RaR3gxlhwOjSBgeliLP4uAKGODSr9CTi6kGC+U66h0SS4XG+ngpazfOnK7l87kcF9JGNw5DWWY0ADVc4EPDQMC5lWGlBUpzfpjF2Mdu/N5pIdjhS E/LOU3zwtbKw9N6iNbHq8yBCa4U9ILeu8j4bNZSlkwM6mjoFTmuomaknSjKSenuf X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 21:32:02 -0000 In message <201703241346.v2ODkQtJ019397@repo.freebsd.org>, Warner Losh writes: > Author: imp > Date: Fri Mar 24 13:46:26 2017 > New Revision: 315901 > URL: https://svnweb.freebsd.org/changeset/base/315901 > > Log: > Use a more stream-lined version of fix_value. > > Submitted by: ian@ > > Modified: > head/sbin/devd/devd.cc > head/sbin/devd/devd.hh > > Modified: head/sbin/devd/devd.cc > ============================================================================= > = > --- head/sbin/devd/devd.cc Fri Mar 24 11:46:49 2017 (r315900) > +++ head/sbin/devd/devd.cc Fri Mar 24 13:46:26 2017 (r315901) > @@ -417,24 +417,16 @@ var_list::is_set(const string &var) cons > * converted to ". For all other characters, both \ and following > * character. So the string 'fre\:\"' is translated to 'fred\:"'. > */ > -const std::string & > +std::string > var_list::fix_value(const std::string &val) const > { > - char *tmp, *dst; > - const char *src; > - std::string *rv; > - > - dst = tmp = new char[val.length()]; > - src = val.c_str(); > - while (*src) { > - if (*src == '\\' && src[1] == '"') > - src++; > - else > - *dst++ = *src++; > - } > - rv = new string(tmp); > - delete tmp; > - return *rv; > + std::string rv(val); > + std::string::size_type pos(0); > + > + while ((pos = rv.find("\\\"", pos)) != rv.npos) { > + rv.erase(pos, 1); > + } > + return (rv); > } > > void > > Modified: head/sbin/devd/devd.hh > ============================================================================= > = > --- head/sbin/devd/devd.hh Fri Mar 24 11:46:49 2017 (r315900) > +++ head/sbin/devd/devd.hh Fri Mar 24 13:46:26 2017 (r315901) > @@ -57,7 +57,7 @@ public: > static const std::string nothing; > > private: > - const std::string &fix_value(const std::string &val) const; > + std::string fix_value(const std::string &val) const; > > std::map _vars; > }; > > Thank you Warner. -- Cheers, Cy Schubert FreeBSD UNIX: Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few. From owner-svn-src-head@freebsd.org Fri Mar 24 22:29:52 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5C215D1B3EA; Fri, 24 Mar 2017 22:29:52 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 29510275; Fri, 24 Mar 2017 22:29:52 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OMTp6O032699; Fri, 24 Mar 2017 22:29:51 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OMTpAN032698; Fri, 24 Mar 2017 22:29:51 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703242229.v2OMTpAN032698@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Fri, 24 Mar 2017 22:29:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315917 - head/sys/net80211 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 22:29:52 -0000 Author: avos Date: Fri Mar 24 22:29:51 2017 New Revision: 315917 URL: https://svnweb.freebsd.org/changeset/base/315917 Log: net80211: fix possible panic when wlan(4) interface is destroyed. If this is the last running vap wait until device will be powered off (fixes panic when 'ifconfig wlan0 destroy' is executed for running iwn(4) interface). Tested with: - Intel 6205, STA mode. - RTL8188EU, STA / IBSS modes. - RTL8821AU, STA / HOSTAP modes. Modified: head/sys/net80211/ieee80211.c Modified: head/sys/net80211/ieee80211.c ============================================================================== --- head/sys/net80211/ieee80211.c Fri Mar 24 18:28:48 2017 (r315916) +++ head/sys/net80211/ieee80211.c Fri Mar 24 22:29:51 2017 (r315917) @@ -728,6 +728,7 @@ ieee80211_vap_detach(struct ieee80211vap ieee80211_draintask(ic, &vap->iv_nstate_task); ieee80211_draintask(ic, &vap->iv_swbmiss_task); ieee80211_draintask(ic, &vap->iv_wme_task); + ieee80211_draintask(ic, &ic->ic_parent_task); /* XXX band-aid until ifnet handles this for us */ taskqueue_drain(taskqueue_swi, &ifp->if_linktask); From owner-svn-src-head@freebsd.org Fri Mar 24 22:33:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 08C4ED1B5FE; Fri, 24 Mar 2017 22:33:05 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CCBF5929; Fri, 24 Mar 2017 22:33:04 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2OMX3Gv036371; Fri, 24 Mar 2017 22:33:03 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2OMX36k036370; Fri, 24 Mar 2017 22:33:03 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201703242233.v2OMX36k036370@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Fri, 24 Mar 2017 22:33:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315918 - head/sys/arm64/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Mar 2017 22:33:05 -0000 Author: imp Date: Fri Mar 24 22:33:03 2017 New Revision: 315918 URL: https://svnweb.freebsd.org/changeset/base/315918 Log: Add 'device iic' to bring in userland I2C driver. Submitted by: karl@ Modified: head/sys/arm64/conf/GENERIC Modified: head/sys/arm64/conf/GENERIC ============================================================================== --- head/sys/arm64/conf/GENERIC Fri Mar 24 22:29:51 2017 (r315917) +++ head/sys/arm64/conf/GENERIC Fri Mar 24 22:33:03 2017 (r315918) @@ -174,6 +174,7 @@ device fdt_pinctrl device aw_rsb # Allwinner Reduced Serial Bus device bcm2835_bsc # Broadcom BCM283x I2C bus device iicbus +device iic # Clock and reset controllers device aw_ccu # Allwinner clock controller From owner-svn-src-head@freebsd.org Sat Mar 25 01:38:18 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E3D50D1CE12; Sat, 25 Mar 2017 01:38:18 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B39321BC6; Sat, 25 Mar 2017 01:38:18 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2P1cHAU009511; Sat, 25 Mar 2017 01:38:17 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2P1cHPK009510; Sat, 25 Mar 2017 01:38:17 GMT (envelope-from np@FreeBSD.org) Message-Id: <201703250138.v2P1cHPK009510@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Sat, 25 Mar 2017 01:38:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315920 - head/sys/dev/cxgbe/iw_cxgbe X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 01:38:19 -0000 Author: np Date: Sat Mar 25 01:38:17 2017 New Revision: 315920 URL: https://svnweb.freebsd.org/changeset/base/315920 Log: cxgbe/iw_cxgbe: c4iw_connect should always returns a -ve errno on failure. MFC after: 3 days Modified: head/sys/dev/cxgbe/iw_cxgbe/cm.c Modified: head/sys/dev/cxgbe/iw_cxgbe/cm.c ============================================================================== --- head/sys/dev/cxgbe/iw_cxgbe/cm.c Sat Mar 25 00:52:33 2017 (r315919) +++ head/sys/dev/cxgbe/iw_cxgbe/cm.c Sat Mar 25 01:38:17 2017 (r315920) @@ -2202,7 +2202,7 @@ int c4iw_connect(struct iw_cm_id *cm_id, ep->tos = 0; ep->com.local_addr = cm_id->local_addr; ep->com.remote_addr = cm_id->remote_addr; - err = soconnect(ep->com.so, (struct sockaddr *)&ep->com.remote_addr, + err = -soconnect(ep->com.so, (struct sockaddr *)&ep->com.remote_addr, ep->com.thread); if (!err) { From owner-svn-src-head@freebsd.org Sat Mar 25 01:45:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 684C0D1B418; Sat, 25 Mar 2017 01:45:05 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 381882BB; Sat, 25 Mar 2017 01:45:05 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2P1j4aU013727; Sat, 25 Mar 2017 01:45:04 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2P1j4Cj013726; Sat, 25 Mar 2017 01:45:04 GMT (envelope-from np@FreeBSD.org) Message-Id: <201703250145.v2P1j4Cj013726@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Sat, 25 Mar 2017 01:45:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315921 - head/sys/dev/cxgbe/iw_cxgbe X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 01:45:05 -0000 Author: np Date: Sat Mar 25 01:45:04 2017 New Revision: 315921 URL: https://svnweb.freebsd.org/changeset/base/315921 Log: cxgbe/iw_cxgbe: alloc_ep expects a gfp_t, and it's always ok to sleep during alloc_ep. Modified: head/sys/dev/cxgbe/iw_cxgbe/cm.c Modified: head/sys/dev/cxgbe/iw_cxgbe/cm.c ============================================================================== --- head/sys/dev/cxgbe/iw_cxgbe/cm.c Sat Mar 25 01:38:17 2017 (r315920) +++ head/sys/dev/cxgbe/iw_cxgbe/cm.c Sat Mar 25 01:45:04 2017 (r315921) @@ -695,7 +695,7 @@ process_newconn(struct iw_cm_id *parent_ MPASS(child_so != NULL); - child_ep = alloc_ep(sizeof(*child_ep), M_WAITOK); + child_ep = alloc_ep(sizeof(*child_ep), GFP_KERNEL); CTR5(KTR_IW_CXGBE, "%s: parent so %p, parent ep %p, child so %p, child ep %p", @@ -2134,7 +2134,7 @@ int c4iw_connect(struct iw_cm_id *cm_id, err = -EINVAL; goto out; } - ep = alloc_ep(sizeof(*ep), M_NOWAIT); + ep = alloc_ep(sizeof(*ep), GFP_KERNEL); if (!ep) { From owner-svn-src-head@freebsd.org Sat Mar 25 02:28:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ECF87D1C631; Sat, 25 Mar 2017 02:28:22 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BCAC0236; Sat, 25 Mar 2017 02:28:22 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2P2SLnP030356; Sat, 25 Mar 2017 02:28:21 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2P2SLMv030355; Sat, 25 Mar 2017 02:28:21 GMT (envelope-from np@FreeBSD.org) Message-Id: <201703250228.v2P2SLMv030355@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Sat, 25 Mar 2017 02:28:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315922 - head/sys/dev/cxgbe/iw_cxgbe X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 02:28:23 -0000 Author: np Date: Sat Mar 25 02:28:21 2017 New Revision: 315922 URL: https://svnweb.freebsd.org/changeset/base/315922 Log: cxgbe/iw_cxgbe: allocations that use GFP_KERNEL (which is M_WAITOK on FreeBSD) cannot fail. MFC after: 3 days Modified: head/sys/dev/cxgbe/iw_cxgbe/cm.c Modified: head/sys/dev/cxgbe/iw_cxgbe/cm.c ============================================================================== --- head/sys/dev/cxgbe/iw_cxgbe/cm.c Sat Mar 25 01:45:04 2017 (r315921) +++ head/sys/dev/cxgbe/iw_cxgbe/cm.c Sat Mar 25 02:28:21 2017 (r315922) @@ -2135,14 +2135,6 @@ int c4iw_connect(struct iw_cm_id *cm_id, goto out; } ep = alloc_ep(sizeof(*ep), GFP_KERNEL); - - if (!ep) { - - CTR2(KTR_IW_CXGBE, "%s:cc2 %p", __func__, cm_id); - printk(KERN_ERR MOD "%s - cannot alloc ep.\n", __func__); - err = -ENOMEM; - goto out; - } init_timer(&ep->timer); ep->plen = conn_param->private_data_len; @@ -2229,21 +2221,11 @@ out: int c4iw_create_listen_ep(struct iw_cm_id *cm_id, int backlog) { - int rc; struct c4iw_dev *dev = to_c4iw_dev(cm_id->device); struct c4iw_listen_ep *ep; struct socket *so = cm_id->so; ep = alloc_ep(sizeof(*ep), GFP_KERNEL); - CTR5(KTR_IW_CXGBE, "%s: cm_id %p, lso %p, ep %p, inp %p", __func__, - cm_id, so, ep, so->so_pcb); - if (ep == NULL) { - log(LOG_ERR, "%s: failed to alloc memory for endpoint\n", - __func__); - rc = ENOMEM; - goto failed; - } - ep->com.cm_id = cm_id; ref_cm_id(&ep->com); ep->com.dev = dev; @@ -2255,10 +2237,6 @@ c4iw_create_listen_ep(struct iw_cm_id *c cm_id->provider_data = ep; return (0); - -failed: - CTR3(KTR_IW_CXGBE, "%s: cm_id %p, FAILED (%d)", __func__, cm_id, rc); - return (-rc); } void From owner-svn-src-head@freebsd.org Sat Mar 25 02:42:53 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 50BBBD1C29F; Sat, 25 Mar 2017 02:42:53 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 207FD1066; Sat, 25 Mar 2017 02:42:53 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2P2gq4D038087; Sat, 25 Mar 2017 02:42:52 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2P2gqR7038086; Sat, 25 Mar 2017 02:42:52 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703250242.v2P2gqR7038086@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Sat, 25 Mar 2017 02:42:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315923 - head/sys/dev/iwm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 02:42:53 -0000 Author: adrian Date: Sat Mar 25 02:42:52 2017 New Revision: 315923 URL: https://svnweb.freebsd.org/changeset/base/315923 Log: [iwm] Tiny cleanup in iwm_rx_addbuf(). Obtained from: dragonflybsd.git 3370bc5504ebb3c1b9bb960a185cd0c8052a2845 Modified: head/sys/dev/iwm/if_iwm.c Modified: head/sys/dev/iwm/if_iwm.c ============================================================================== --- head/sys/dev/iwm/if_iwm.c Sat Mar 25 02:28:21 2017 (r315922) +++ head/sys/dev/iwm/if_iwm.c Sat Mar 25 02:42:52 2017 (r315923) @@ -3032,7 +3032,7 @@ iwm_rx_addbuf(struct iwm_softc *sc, int struct iwm_rx_ring *ring = &sc->rxq; struct iwm_rx_data *data = &ring->data[idx]; struct mbuf *m; - bus_dmamap_t dmamap = NULL; + bus_dmamap_t dmamap; bus_dma_segment_t seg; int nsegs, error; @@ -3046,7 +3046,8 @@ iwm_rx_addbuf(struct iwm_softc *sc, int if (error != 0) { device_printf(sc->sc_dev, "%s: can't map mbuf, error %d\n", __func__, error); - goto fail; + m_freem(m); + return error; } if (data->m != NULL) @@ -3067,9 +3068,6 @@ iwm_rx_addbuf(struct iwm_softc *sc, int BUS_DMASYNC_PREWRITE); return 0; -fail: - m_freem(m); - return error; } /* iwlwifi: mvm/rx.c */ From owner-svn-src-head@freebsd.org Sat Mar 25 02:49:22 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4D60AD1C77A; Sat, 25 Mar 2017 02:49:22 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1E43B1772; Sat, 25 Mar 2017 02:49:22 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2P2nL3G038551; Sat, 25 Mar 2017 02:49:21 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2P2nKJW038546; Sat, 25 Mar 2017 02:49:20 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703250249.v2P2nKJW038546@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Sat, 25 Mar 2017 02:49:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315925 - head/sys/dev/iwm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 02:49:22 -0000 Author: adrian Date: Sat Mar 25 02:49:20 2017 New Revision: 315925 URL: https://svnweb.freebsd.org/changeset/base/315925 Log: [iwm] Enable Energy Based Scan (EBS). This can significantly reduce scan duration thus saving time and power. EBS failure reported by FW disables EBS for current connection. It is re-enabled upon new connection attempt on any WLAN interface. Obtained from: dragonflybsd.git 89f579e9823a5c446ca172cf82bbc210d6a054a4 Modified: head/sys/dev/iwm/if_iwm.c head/sys/dev/iwm/if_iwm_scan.c head/sys/dev/iwm/if_iwm_scan.h head/sys/dev/iwm/if_iwmreg.h head/sys/dev/iwm/if_iwmvar.h Modified: head/sys/dev/iwm/if_iwm.c ============================================================================== --- head/sys/dev/iwm/if_iwm.c Sat Mar 25 02:44:25 2017 (r315924) +++ head/sys/dev/iwm/if_iwm.c Sat Mar 25 02:49:20 2017 (r315925) @@ -4518,6 +4518,11 @@ iwm_newstate(struct ieee80211vap *vap, e break; case IEEE80211_S_ASSOC: + /* + * EBS may be disabled due to previous failures reported by FW. + * Reset EBS status here assuming environment has been changed. + */ + sc->last_ebs_successful = TRUE; if ((error = iwm_assoc(vap, sc)) != 0) { device_printf(sc->sc_dev, "%s: failed to associate: %d\n", __func__, @@ -5525,36 +5530,27 @@ iwm_notif_intr(struct iwm_softc *sc) case IWM_INIT_COMPLETE_NOTIF: break; - case IWM_SCAN_OFFLOAD_COMPLETE: { - struct iwm_periodic_scan_complete *notif; - notif = (void *)pkt->data; + case IWM_SCAN_OFFLOAD_COMPLETE: + iwm_mvm_rx_lmac_scan_complete_notif(sc, pkt); if (sc->sc_flags & IWM_FLAG_SCAN_RUNNING) { sc->sc_flags &= ~IWM_FLAG_SCAN_RUNNING; ieee80211_runtask(ic, &sc->sc_es_task); } break; - } case IWM_SCAN_ITERATION_COMPLETE: { struct iwm_lmac_scan_complete_notif *notif; notif = (void *)pkt->data; - ieee80211_runtask(&sc->sc_ic, &sc->sc_es_task); - break; + break; } - - case IWM_SCAN_COMPLETE_UMAC: { - struct iwm_umac_scan_complete *notif; - notif = (void *)pkt->data; - IWM_DPRINTF(sc, IWM_DEBUG_SCAN, - "UMAC scan complete, status=0x%x\n", - notif->status); + case IWM_SCAN_COMPLETE_UMAC: + iwm_mvm_rx_umac_scan_complete_notif(sc, pkt); if (sc->sc_flags & IWM_FLAG_SCAN_RUNNING) { sc->sc_flags &= ~IWM_FLAG_SCAN_RUNNING; ieee80211_runtask(ic, &sc->sc_es_task); } break; - } case IWM_SCAN_ITERATION_COMPLETE_UMAC: { struct iwm_umac_scan_iter_complete_notif *notif; @@ -5563,7 +5559,6 @@ iwm_notif_intr(struct iwm_softc *sc) IWM_DPRINTF(sc, IWM_DEBUG_SCAN, "UMAC scan iteration " "complete, status=0x%x, %d channels scanned\n", notif->status, notif->scanned_channels); - ieee80211_runtask(&sc->sc_ic, &sc->sc_es_task); break; } @@ -5967,6 +5962,9 @@ iwm_attach(device_t dev) goto fail; } + /* Set EBS as successful as long as not stated otherwise by the FW. */ + sc->last_ebs_successful = TRUE; + /* PCI attach */ error = iwm_pci_attach(dev); if (error != 0) Modified: head/sys/dev/iwm/if_iwm_scan.c ============================================================================== --- head/sys/dev/iwm/if_iwm_scan.c Sat Mar 25 02:44:25 2017 (r315924) +++ head/sys/dev/iwm/if_iwm_scan.c Sat Mar 25 02:49:20 2017 (r315925) @@ -161,6 +161,9 @@ __FBSDID("$FreeBSD$"); * BEGIN mvm/scan.c */ +#define IWM_DENSE_EBS_SCAN_RATIO 5 +#define IWM_SPARSE_EBS_SCAN_RATIO 1 + static uint16_t iwm_mvm_scan_rx_chain(struct iwm_softc *sc) { @@ -198,6 +201,67 @@ iwm_mvm_scan_rate_n_flags(struct iwm_sof return htole32(IWM_RATE_6M_PLCP | tx_ant); } +static const char * +iwm_mvm_ebs_status_str(enum iwm_scan_ebs_status status) +{ + switch (status) { + case IWM_SCAN_EBS_SUCCESS: + return "successful"; + case IWM_SCAN_EBS_INACTIVE: + return "inactive"; + case IWM_SCAN_EBS_FAILED: + case IWM_SCAN_EBS_CHAN_NOT_FOUND: + default: + return "failed"; + } +} + +void +iwm_mvm_rx_lmac_scan_complete_notif(struct iwm_softc *sc, + struct iwm_rx_packet *pkt) +{ + struct iwm_periodic_scan_complete *scan_notif = (void *)pkt->data; + boolean_t aborted = (scan_notif->status == IWM_SCAN_OFFLOAD_ABORTED); + + /* If this happens, the firmware has mistakenly sent an LMAC + * notification during UMAC scans -- warn and ignore it. + */ + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_UMAC_SCAN)) { + device_printf(sc->sc_dev, + "%s: Mistakenly got LMAC notification during UMAC scan\n", + __func__); + return; + } + + IWM_DPRINTF(sc, IWM_DEBUG_SCAN, "Regular scan %s, EBS status %s (FW)\n", + aborted ? "aborted" : "completed", + iwm_mvm_ebs_status_str(scan_notif->ebs_status)); + + sc->last_ebs_successful = + scan_notif->ebs_status == IWM_SCAN_EBS_SUCCESS || + scan_notif->ebs_status == IWM_SCAN_EBS_INACTIVE; + +} + +void +iwm_mvm_rx_umac_scan_complete_notif(struct iwm_softc *sc, + struct iwm_rx_packet *pkt) +{ + struct iwm_umac_scan_complete *notif = (void *)pkt->data; + uint32_t uid = le32toh(notif->uid); + boolean_t aborted = (notif->status == IWM_SCAN_OFFLOAD_ABORTED); + + IWM_DPRINTF(sc, IWM_DEBUG_SCAN, + "Scan completed, uid %u, status %s, EBS status %s\n", + uid, + aborted ? "aborted" : "completed", + iwm_mvm_ebs_status_str(notif->ebs_status)); + + if (notif->ebs_status != IWM_SCAN_EBS_SUCCESS && + notif->ebs_status != IWM_SCAN_EBS_INACTIVE) + sc->last_ebs_successful = FALSE; +} + static int iwm_mvm_scan_skip_channel(struct ieee80211_channel *c) { @@ -480,6 +544,21 @@ iwm_mvm_config_umac_scan(struct iwm_soft return ret; } +static boolean_t +iwm_mvm_scan_use_ebs(struct iwm_softc *sc) +{ + const struct iwm_ucode_capabilities *capa = &sc->ucode_capa; + + /* We can only use EBS if: + * 1. the feature is supported; + * 2. the last EBS was successful; + * 3. if only single scan, the single scan EBS API is supported; + * 4. it's not a p2p find operation. + */ + return ((capa->flags & IWM_UCODE_TLV_FLAGS_EBS_SUPPORT) && + sc->last_ebs_successful); +} + int iwm_mvm_umac_scan(struct iwm_softc *sc) { @@ -549,6 +628,11 @@ iwm_mvm_umac_scan(struct iwm_softc *sc) } else req->general_flags |= htole32(IWM_UMAC_SCAN_GEN_FLAGS_PASSIVE); + if (iwm_mvm_scan_use_ebs(sc)) + req->channel_flags = IWM_SCAN_CHANNEL_FLAG_EBS | + IWM_SCAN_CHANNEL_FLAG_EBS_ACCURATE | + IWM_SCAN_CHANNEL_FLAG_CACHE_ADD; + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT)) req->general_flags |= @@ -674,9 +758,20 @@ iwm_mvm_lmac_scan(struct iwm_softc *sc) req->schedule[0].iterations = 1; req->schedule[0].full_scan_mul = 1; - /* Disable EBS. */ - req->channel_opt[0].non_ebs_ratio = 1; - req->channel_opt[1].non_ebs_ratio = 1; + if (iwm_mvm_scan_use_ebs(sc)) { + req->channel_opt[0].flags = + htole16(IWM_SCAN_CHANNEL_FLAG_EBS | + IWM_SCAN_CHANNEL_FLAG_EBS_ACCURATE | + IWM_SCAN_CHANNEL_FLAG_CACHE_ADD); + req->channel_opt[0].non_ebs_ratio = + htole16(IWM_DENSE_EBS_SCAN_RATIO); + req->channel_opt[1].flags = + htole16(IWM_SCAN_CHANNEL_FLAG_EBS | + IWM_SCAN_CHANNEL_FLAG_EBS_ACCURATE | + IWM_SCAN_CHANNEL_FLAG_CACHE_ADD); + req->channel_opt[1].non_ebs_ratio = + htole16(IWM_SPARSE_EBS_SCAN_RATIO); + } ret = iwm_send_cmd(sc, &hcmd); if (!ret) { Modified: head/sys/dev/iwm/if_iwm_scan.h ============================================================================== --- head/sys/dev/iwm/if_iwm_scan.h Sat Mar 25 02:44:25 2017 (r315924) +++ head/sys/dev/iwm/if_iwm_scan.h Sat Mar 25 02:49:20 2017 (r315925) @@ -106,9 +106,13 @@ #ifndef __IF_IWN_SCAN_H__ #define __IF_IWN_SCAN_H__ -extern int iwm_mvm_lmac_scan(struct iwm_softc *sc); +extern int iwm_mvm_lmac_scan(struct iwm_softc *); extern int iwm_mvm_config_umac_scan(struct iwm_softc *); extern int iwm_mvm_umac_scan(struct iwm_softc *); -extern int iwm_mvm_scan_stop_wait(struct iwm_softc *sc); +extern int iwm_mvm_scan_stop_wait(struct iwm_softc *); +extern void iwm_mvm_rx_lmac_scan_complete_notif(struct iwm_softc *, + struct iwm_rx_packet *); +extern void iwm_mvm_rx_umac_scan_complete_notif(struct iwm_softc *, + struct iwm_rx_packet *); #endif /* __IF_IWN_SCAN_H__ */ Modified: head/sys/dev/iwm/if_iwmreg.h ============================================================================== --- head/sys/dev/iwm/if_iwmreg.h Sat Mar 25 02:44:25 2017 (r315924) +++ head/sys/dev/iwm/if_iwmreg.h Sat Mar 25 02:49:20 2017 (r315925) @@ -5076,6 +5076,13 @@ enum iwm_scan_offload_complete_status { IWM_SCAN_OFFLOAD_ABORTED = 2, }; +enum iwm_scan_ebs_status { + IWM_SCAN_EBS_SUCCESS, + IWM_SCAN_EBS_FAILED, + IWM_SCAN_EBS_CHAN_NOT_FOUND, + IWM_SCAN_EBS_INACTIVE, +}; + /** * struct iwm_lmac_scan_complete_notif - notifies end of scanning (all channels) * SCAN_COMPLETE_NTF_API_S_VER_3 Modified: head/sys/dev/iwm/if_iwmvar.h ============================================================================== --- head/sys/dev/iwm/if_iwmvar.h Sat Mar 25 02:44:25 2017 (r315924) +++ head/sys/dev/iwm/if_iwmvar.h Sat Mar 25 02:49:20 2017 (r315925) @@ -536,6 +536,8 @@ struct iwm_softc { struct iwm_fw_paging fw_paging_db[IWM_NUM_OF_FW_PAGING_BLOCKS]; uint16_t num_of_paging_blk; uint16_t num_of_pages_in_last_blk; + + boolean_t last_ebs_successful; }; #define IWM_LOCK_INIT(_sc) \ From owner-svn-src-head@freebsd.org Sat Mar 25 02:44:26 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C0D5CD1C3CB; Sat, 25 Mar 2017 02:44:26 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 756F8128A; Sat, 25 Mar 2017 02:44:26 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2P2iPxw038305; Sat, 25 Mar 2017 02:44:25 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2P2iPfe038304; Sat, 25 Mar 2017 02:44:25 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703250244.v2P2iPfe038304@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Sat, 25 Mar 2017 02:44:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315924 - head/sys/dev/iwm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 02:44:26 -0000 Author: adrian Date: Sat Mar 25 02:44:25 2017 New Revision: 315924 URL: https://svnweb.freebsd.org/changeset/base/315924 Log: [iwm] GC unused code from if_iwm_scan.c, copyied from iwn or iwlwifi/dvm. Obtained from: dragonflybsd.git 10881df269b93c26e5ee6af629c36db5672e6e52 Modified: head/sys/dev/iwm/if_iwm_scan.c Modified: head/sys/dev/iwm/if_iwm_scan.c ============================================================================== --- head/sys/dev/iwm/if_iwm_scan.c Sat Mar 25 02:42:52 2017 (r315923) +++ head/sys/dev/iwm/if_iwm_scan.c Sat Mar 25 02:44:25 2017 (r315924) @@ -161,12 +161,6 @@ __FBSDID("$FreeBSD$"); * BEGIN mvm/scan.c */ -#define IWM_PLCP_QUIET_THRESH 1 -#define IWM_ACTIVE_QUIET_TIME 10 -#define LONG_OUT_TIME_PERIOD (600 * IEEE80211_DUR_TU) -#define SHORT_OUT_TIME_PERIOD (200 * IEEE80211_DUR_TU) -#define SUSPEND_TIME_PERIOD (100 * IEEE80211_DUR_TU) - static uint16_t iwm_mvm_scan_rx_chain(struct iwm_softc *sc) { @@ -181,26 +175,6 @@ iwm_mvm_scan_rx_chain(struct iwm_softc * return htole16(rx_chain); } -#if 0 -static uint32_t -iwm_mvm_scan_max_out_time(struct iwm_softc *sc, uint32_t flags, int is_assoc) -{ - if (!is_assoc) - return 0; - if (flags & 0x1) - return htole32(SHORT_OUT_TIME_PERIOD); - return htole32(LONG_OUT_TIME_PERIOD); -} - -static uint32_t -iwm_mvm_scan_suspend_time(struct iwm_softc *sc, int is_assoc) -{ - if (!is_assoc) - return 0; - return htole32(SUSPEND_TIME_PERIOD); -} -#endif - static uint32_t iwm_mvm_scan_rate_n_flags(struct iwm_softc *sc, int flags, int no_cck) { @@ -224,32 +198,6 @@ iwm_mvm_scan_rate_n_flags(struct iwm_sof return htole32(IWM_RATE_6M_PLCP | tx_ant); } -#if 0 -/* - * If req->n_ssids > 0, it means we should do an active scan. - * In case of active scan w/o directed scan, we receive a zero-length SSID - * just to notify that this scan is active and not passive. - * In order to notify the FW of the number of SSIDs we wish to scan (including - * the zero-length one), we need to set the corresponding bits in chan->type, - * one for each SSID, and set the active bit (first). If the first SSID is - * already included in the probe template, so we need to set only - * req->n_ssids - 1 bits in addition to the first bit. - */ -static uint16_t -iwm_mvm_get_active_dwell(struct iwm_softc *sc, int flags, int n_ssids) -{ - if (flags & IEEE80211_CHAN_2GHZ) - return 30 + 3 * (n_ssids + 1); - return 20 + 2 * (n_ssids + 1); -} - -static uint16_t -iwm_mvm_get_passive_dwell(struct iwm_softc *sc, int flags) -{ - return (flags & IEEE80211_CHAN_2GHZ) ? 100 + 20 : 100 + 10; -} -#endif - static int iwm_mvm_scan_skip_channel(struct ieee80211_channel *c) { From owner-svn-src-head@freebsd.org Sat Mar 25 02:55:14 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EEBEFD1CE44; Sat, 25 Mar 2017 02:55:14 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C95D416; Sat, 25 Mar 2017 02:55:14 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2P2tD9Y043076; Sat, 25 Mar 2017 02:55:13 GMT (envelope-from adrian@FreeBSD.org) Received: (from adrian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2P2tDKJ043073; Sat, 25 Mar 2017 02:55:13 GMT (envelope-from adrian@FreeBSD.org) Message-Id: <201703250255.v2P2tDKJ043073@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: adrian set sender to adrian@FreeBSD.org using -f From: Adrian Chadd Date: Sat, 25 Mar 2017 02:55:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315926 - head/sys/dev/iwm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 02:55:15 -0000 Author: adrian Date: Sat Mar 25 02:55:13 2017 New Revision: 315926 URL: https://svnweb.freebsd.org/changeset/base/315926 Log: [iwm] Add the BSS's basic rates to iwm's LQ command, not all the rates. Makes the firmware use appropriate Tx rates for ACKs. Obtained from: dragonflybsd.git ab1d3efc208e797c1e09759cd506c95c0aeaa06e Modified: head/sys/dev/iwm/if_iwm.c head/sys/dev/iwm/if_iwm_mac_ctxt.c head/sys/dev/iwm/if_iwm_util.h Modified: head/sys/dev/iwm/if_iwm.c ============================================================================== --- head/sys/dev/iwm/if_iwm.c Sat Mar 25 02:49:20 2017 (r315925) +++ head/sys/dev/iwm/if_iwm.c Sat Mar 25 02:55:13 2017 (r315926) @@ -4291,6 +4291,21 @@ iwm_node_alloc(struct ieee80211vap *vap, M_NOWAIT | M_ZERO); } +uint8_t +iwm_ridx2rate(struct ieee80211_rateset *rs, int ridx) +{ + int i; + uint8_t rval; + + for (i = 0; i < rs->rs_nrates; i++) { + rval = (rs->rs_rates[i] & IEEE80211_RATE_VAL); + if (rval == iwm_rates[ridx].rate) + return rs->rs_rates[i]; + } + + return 0; +} + static void iwm_setrates(struct iwm_softc *sc, struct iwm_node *in) { Modified: head/sys/dev/iwm/if_iwm_mac_ctxt.c ============================================================================== --- head/sys/dev/iwm/if_iwm_mac_ctxt.c Sat Mar 25 02:49:20 2017 (r315925) +++ head/sys/dev/iwm/if_iwm_mac_ctxt.c Sat Mar 25 02:55:13 2017 (r315926) @@ -162,24 +162,28 @@ __FBSDID("$FreeBSD$"); static void iwm_mvm_ack_rates(struct iwm_softc *sc, int is2ghz, - int *cck_rates, int *ofdm_rates) + int *cck_rates, int *ofdm_rates, struct iwm_node *in) { int lowest_present_ofdm = 100; int lowest_present_cck = 100; uint8_t cck = 0; uint8_t ofdm = 0; int i; + struct ieee80211_rateset *rs = &in->in_ni.ni_rates; if (is2ghz) { - for (i = 0; i <= IWM_LAST_CCK_RATE; i++) { + for (i = IWM_FIRST_CCK_RATE; i <= IWM_LAST_CCK_RATE; i++) { + if ((iwm_ridx2rate(rs, i) & IEEE80211_RATE_BASIC) == 0) + continue; cck |= (1 << i); if (lowest_present_cck > i) lowest_present_cck = i; } } for (i = IWM_FIRST_OFDM_RATE; i <= IWM_LAST_NON_HT_RATE; i++) { - int adj = i - IWM_FIRST_OFDM_RATE; - ofdm |= (1 << adj); + if ((iwm_ridx2rate(rs, i) & IEEE80211_RATE_BASIC) == 0) + continue; + ofdm |= (1 << (i - IWM_FIRST_OFDM_RATE)); if (lowest_present_ofdm > i) lowest_present_ofdm = i; } @@ -307,7 +311,7 @@ iwm_mvm_mac_ctxt_cmd_common(struct iwm_s } else { is2ghz = 1; } - iwm_mvm_ack_rates(sc, is2ghz, &cck_ack_rates, &ofdm_ack_rates); + iwm_mvm_ack_rates(sc, is2ghz, &cck_ack_rates, &ofdm_ack_rates, in); cmd->cck_rates = htole32(cck_ack_rates); cmd->ofdm_rates = htole32(ofdm_ack_rates); @@ -446,13 +450,11 @@ iwm_mvm_mac_ctxt_cmd_station(struct iwm_ { struct ieee80211_node *ni = vap->iv_bss; struct iwm_node *in = IWM_NODE(ni); - struct iwm_mac_ctx_cmd cmd; + struct iwm_mac_ctx_cmd cmd = {}; IWM_DPRINTF(sc, IWM_DEBUG_RESET, "%s: called; action=%d\n", __func__, action); - memset(&cmd, 0, sizeof(cmd)); - /* Fill the common data for all mac context types */ iwm_mvm_mac_ctxt_cmd_common(sc, in, &cmd, action); Modified: head/sys/dev/iwm/if_iwm_util.h ============================================================================== --- head/sys/dev/iwm/if_iwm_util.h Sat Mar 25 02:49:20 2017 (r315925) +++ head/sys/dev/iwm/if_iwm_util.h Sat Mar 25 02:55:13 2017 (r315926) @@ -120,6 +120,8 @@ extern int iwm_dma_contig_alloc(bus_dma_ bus_size_t size, bus_size_t alignment); extern void iwm_dma_contig_free(struct iwm_dma_info *); +extern uint8_t iwm_ridx2rate(struct ieee80211_rateset *rs, int ridx); + static inline uint8_t iwm_mvm_get_valid_tx_ant(struct iwm_softc *sc) { From owner-svn-src-head@freebsd.org Sat Mar 25 10:21:54 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E6075D1C107; Sat, 25 Mar 2017 10:21:54 +0000 (UTC) (envelope-from dchagin@mordor.heemeyer.club) Received: from heemeyer.club (heemeyer.club [108.61.204.158]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "heemeyer.club", Issuer "heemeyer.club" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id C6CCCE7A; Sat, 25 Mar 2017 10:21:53 +0000 (UTC) (envelope-from dchagin@mordor.heemeyer.club) Received: from mordor.heemeyer.club (dchagin.static.corbina.ru [78.107.232.239]) by heemeyer.club (8.15.2/8.15.1) with ESMTPS id v2PALhpB076374 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 25 Mar 2017 10:21:44 GMT (envelope-from dchagin@mordor.heemeyer.club) X-Authentication-Warning: heemeyer.club: Host dchagin.static.corbina.ru [78.107.232.239] claimed to be mordor.heemeyer.club Received: from mordor.heemeyer.club (localhost [127.0.0.1]) by mordor.heemeyer.club (8.15.2/8.15.1) with ESMTPS id v2PALgxc010052 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sat, 25 Mar 2017 13:21:42 +0300 (MSK) (envelope-from dchagin@mordor.heemeyer.club) Received: (from dchagin@localhost) by mordor.heemeyer.club (8.15.2/8.15.2/Submit) id v2PALgdL010051; Sat, 25 Mar 2017 13:21:42 +0300 (MSK) (envelope-from dchagin) Date: Sat, 25 Mar 2017 13:21:42 +0300 From: Chagin Dmitry To: Adrian Chadd Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315925 - head/sys/dev/iwm Message-ID: <20170325102142.GA8399@mordor.heemeyer.club> References: <201703250249.v2P2nKJW038546@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <201703250249.v2P2nKJW038546@repo.freebsd.org> User-Agent: Mutt/1.8.0 (2017-02-23) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 10:21:55 -0000 On Sat, Mar 25, 2017 at 02:49:20AM +0000, Adrian Chadd wrote: > Author: adrian > Date: Sat Mar 25 02:49:20 2017 > New Revision: 315925 > URL: https://svnweb.freebsd.org/changeset/base/315925 >=20 > Log: > [iwm] Enable Energy Based Scan (EBS). > =20 > This can significantly reduce scan duration thus saving time and power. > EBS failure reported by FW disables EBS for current connection. It is > re-enabled upon new connection attempt on any WLAN interface. > =20 > Obtained from: dragonflybsd.git 89f579e9823a5c446ca172cf82bbc210d6a054a4 >=20 > Modified: > head/sys/dev/iwm/if_iwm.c > head/sys/dev/iwm/if_iwm_scan.c > head/sys/dev/iwm/if_iwm_scan.h > head/sys/dev/iwm/if_iwmreg.h > head/sys/dev/iwm/if_iwmvar.h >=20 > Modified: head/sys/dev/iwm/if_iwm.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/dev/iwm/if_iwm.c Sat Mar 25 02:44:25 2017 (r315924) > +++ head/sys/dev/iwm/if_iwm.c Sat Mar 25 02:49:20 2017 (r315925) > @@ -4518,6 +4518,11 @@ iwm_newstate(struct ieee80211vap *vap, e > break; > =20 > case IEEE80211_S_ASSOC: > + /* > + * EBS may be disabled due to previous failures reported by FW. > + * Reset EBS status here assuming environment has been changed. > + */ > + sc->last_ebs_successful =3D TRUE; > if ((error =3D iwm_assoc(vap, sc)) !=3D 0) { > device_printf(sc->sc_dev, > "%s: failed to associate: %d\n", __func__, > @@ -5525,36 +5530,27 @@ iwm_notif_intr(struct iwm_softc *sc) > case IWM_INIT_COMPLETE_NOTIF: > break; > =20 > - case IWM_SCAN_OFFLOAD_COMPLETE: { > - struct iwm_periodic_scan_complete *notif; > - notif =3D (void *)pkt->data; > + case IWM_SCAN_OFFLOAD_COMPLETE: > + iwm_mvm_rx_lmac_scan_complete_notif(sc, pkt); > if (sc->sc_flags & IWM_FLAG_SCAN_RUNNING) { > sc->sc_flags &=3D ~IWM_FLAG_SCAN_RUNNING; > ieee80211_runtask(ic, &sc->sc_es_task); > } > break; > - } > =20 > case IWM_SCAN_ITERATION_COMPLETE: { > struct iwm_lmac_scan_complete_notif *notif; > notif =3D (void *)pkt->data; > - ieee80211_runtask(&sc->sc_ic, &sc->sc_es_task); > - break; > + break; > } > -=20 > - case IWM_SCAN_COMPLETE_UMAC: { > - struct iwm_umac_scan_complete *notif; > - notif =3D (void *)pkt->data; > =20 > - IWM_DPRINTF(sc, IWM_DEBUG_SCAN, > - "UMAC scan complete, status=3D0x%x\n", > - notif->status); > + case IWM_SCAN_COMPLETE_UMAC: > + iwm_mvm_rx_umac_scan_complete_notif(sc, pkt); > if (sc->sc_flags & IWM_FLAG_SCAN_RUNNING) { > sc->sc_flags &=3D ~IWM_FLAG_SCAN_RUNNING; > ieee80211_runtask(ic, &sc->sc_es_task); > } > break; > - } > =20 > case IWM_SCAN_ITERATION_COMPLETE_UMAC: { > struct iwm_umac_scan_iter_complete_notif *notif; > @@ -5563,7 +5559,6 @@ iwm_notif_intr(struct iwm_softc *sc) > IWM_DPRINTF(sc, IWM_DEBUG_SCAN, "UMAC scan iteration " > "complete, status=3D0x%x, %d channels scanned\n", > notif->status, notif->scanned_channels); > - ieee80211_runtask(&sc->sc_ic, &sc->sc_es_task); > break; > } > =20 > @@ -5967,6 +5962,9 @@ iwm_attach(device_t dev) > goto fail; > } > =20 > + /* Set EBS as successful as long as not stated otherwise by the FW. */ > + sc->last_ebs_successful =3D TRUE; > + > /* PCI attach */ > error =3D iwm_pci_attach(dev); > if (error !=3D 0) >=20 > Modified: head/sys/dev/iwm/if_iwm_scan.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/dev/iwm/if_iwm_scan.c Sat Mar 25 02:44:25 2017 (r315924) > +++ head/sys/dev/iwm/if_iwm_scan.c Sat Mar 25 02:49:20 2017 (r315925) > @@ -161,6 +161,9 @@ __FBSDID("$FreeBSD$"); > * BEGIN mvm/scan.c > */ > =20 > +#define IWM_DENSE_EBS_SCAN_RATIO 5 > +#define IWM_SPARSE_EBS_SCAN_RATIO 1 > + > static uint16_t > iwm_mvm_scan_rx_chain(struct iwm_softc *sc) > { > @@ -198,6 +201,67 @@ iwm_mvm_scan_rate_n_flags(struct iwm_sof > return htole32(IWM_RATE_6M_PLCP | tx_ant); > } > =20 > +static const char * > +iwm_mvm_ebs_status_str(enum iwm_scan_ebs_status status) > +{ > + switch (status) { > + case IWM_SCAN_EBS_SUCCESS: > + return "successful"; > + case IWM_SCAN_EBS_INACTIVE: > + return "inactive"; > + case IWM_SCAN_EBS_FAILED: > + case IWM_SCAN_EBS_CHAN_NOT_FOUND: > + default: > + return "failed"; > + } > +} > + > +void > +iwm_mvm_rx_lmac_scan_complete_notif(struct iwm_softc *sc, > + struct iwm_rx_packet *pkt) > +{ > + struct iwm_periodic_scan_complete *scan_notif =3D (void *)pkt->data; > + boolean_t aborted =3D (scan_notif->status =3D=3D IWM_SCAN_OFFLOAD_ABORT= ED); > + cc -target x86_64-unknown-freebsd12.0 --sysroot=3D/home/dchagin/obj/home/gi= t/head/tmp -B/home/dchagin/obj/home/git/head/tmp/usr/bin -c -O2 -pipe -fno-= strict-aliasing -g -nostdinc -I. -I/home/git/head/sys -I/home/git/head/sy= s/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global= =2Eh -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD -MF.depend.= if_iwm_scan.o -MTif_iwm_scan.o -mcmodel=3Dkernel -mno-red-zone -mno-mmx -mn= o-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fwrapv = -fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs -Wstri= ct-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wu= ndef -Wno-pointer-sign -D__printf__=3D__freebsd_kprintf__ -Wmissing-include= -dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error-tautologica= l-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-= unused-function -Wno-error-pointer-sign -Wno-error-shift-negative-value -Wn= o-error-address-of-packed-member -mno-aes -mno-avx -std=3Diso9899:1999 -W= error /home/git/head/sys/dev/iwm/if_iwm_scan.c /home/git/head/sys/dev/iwm/if_iwm_scan.c:224:12: error: unused variable 'ab= orted' [-Werror,-Wunused-variable] boolean_t aborted =3D (scan_notif->status =3D=3D IWM_SCAN_OFFLOAD_A= BORTED); ^ /home/git/head/sys/dev/iwm/if_iwm_scan.c:252:12: error: unused variable 'ab= orted' [-Werror,-Wunused-variable] boolean_t aborted =3D (notif->status =3D=3D IWM_SCAN_OFFLOAD_ABORTE= D); ^ /home/git/head/sys/dev/iwm/if_iwm_scan.c:251:11: error: unused variable 'ui= d' [-Werror,-Wunused-variable] uint32_t uid =3D le32toh(notif->uid); ^ 3 errors generated. > + /* If this happens, the firmware has mistakenly sent an LMAC > + * notification during UMAC scans -- warn and ignore it. > + */ > + if (fw_has_capa(&sc->ucode_capa, IWM_UCODE_TLV_CAPA_UMAC_SCAN)) { > + device_printf(sc->sc_dev, > + "%s: Mistakenly got LMAC notification during UMAC scan\n", > + __func__); > + return; > + } > + > + IWM_DPRINTF(sc, IWM_DEBUG_SCAN, "Regular scan %s, EBS status %s (FW)\n", > + aborted ? "aborted" : "completed", > + iwm_mvm_ebs_status_str(scan_notif->ebs_status)); > + > + sc->last_ebs_successful =3D > + scan_notif->ebs_status =3D=3D IWM_SCAN_EBS_SUCCESS || > + scan_notif->ebs_status =3D=3D IWM_SCAN_EBS_INACTIVE; > + > +} > + > +void > +iwm_mvm_rx_umac_scan_complete_notif(struct iwm_softc *sc, > + struct iwm_rx_packet *pkt) > +{ > + struct iwm_umac_scan_complete *notif =3D (void *)pkt->data; > + uint32_t uid =3D le32toh(notif->uid); > + boolean_t aborted =3D (notif->status =3D=3D IWM_SCAN_OFFLOAD_ABORTED); > + > + IWM_DPRINTF(sc, IWM_DEBUG_SCAN, > + "Scan completed, uid %u, status %s, EBS status %s\n", > + uid, > + aborted ? "aborted" : "completed", > + iwm_mvm_ebs_status_str(notif->ebs_status)); > + > + if (notif->ebs_status !=3D IWM_SCAN_EBS_SUCCESS && > + notif->ebs_status !=3D IWM_SCAN_EBS_INACTIVE) > + sc->last_ebs_successful =3D FALSE; > +} > + > static int > iwm_mvm_scan_skip_channel(struct ieee80211_channel *c) > { > @@ -480,6 +544,21 @@ iwm_mvm_config_umac_scan(struct iwm_soft > return ret; > } > =20 > +static boolean_t > +iwm_mvm_scan_use_ebs(struct iwm_softc *sc) > +{ > + const struct iwm_ucode_capabilities *capa =3D &sc->ucode_capa; > + > + /* We can only use EBS if: > + * 1. the feature is supported; > + * 2. the last EBS was successful; > + * 3. if only single scan, the single scan EBS API is supported; > + * 4. it's not a p2p find operation. > + */ > + return ((capa->flags & IWM_UCODE_TLV_FLAGS_EBS_SUPPORT) && > + sc->last_ebs_successful); > +} > + > int > iwm_mvm_umac_scan(struct iwm_softc *sc) > { > @@ -549,6 +628,11 @@ iwm_mvm_umac_scan(struct iwm_softc *sc) > } else > req->general_flags |=3D htole32(IWM_UMAC_SCAN_GEN_FLAGS_PASSIVE); > =20 > + if (iwm_mvm_scan_use_ebs(sc)) > + req->channel_flags =3D IWM_SCAN_CHANNEL_FLAG_EBS | > + IWM_SCAN_CHANNEL_FLAG_EBS_ACCURATE | > + IWM_SCAN_CHANNEL_FLAG_CACHE_ADD; > + > if (fw_has_capa(&sc->ucode_capa, > IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT)) > req->general_flags |=3D > @@ -674,9 +758,20 @@ iwm_mvm_lmac_scan(struct iwm_softc *sc) > req->schedule[0].iterations =3D 1; > req->schedule[0].full_scan_mul =3D 1; > =20 > - /* Disable EBS. */ > - req->channel_opt[0].non_ebs_ratio =3D 1; > - req->channel_opt[1].non_ebs_ratio =3D 1; > + if (iwm_mvm_scan_use_ebs(sc)) { > + req->channel_opt[0].flags =3D > + htole16(IWM_SCAN_CHANNEL_FLAG_EBS | > + IWM_SCAN_CHANNEL_FLAG_EBS_ACCURATE | > + IWM_SCAN_CHANNEL_FLAG_CACHE_ADD); > + req->channel_opt[0].non_ebs_ratio =3D > + htole16(IWM_DENSE_EBS_SCAN_RATIO); > + req->channel_opt[1].flags =3D > + htole16(IWM_SCAN_CHANNEL_FLAG_EBS | > + IWM_SCAN_CHANNEL_FLAG_EBS_ACCURATE | > + IWM_SCAN_CHANNEL_FLAG_CACHE_ADD); > + req->channel_opt[1].non_ebs_ratio =3D > + htole16(IWM_SPARSE_EBS_SCAN_RATIO); > + } > =20 > ret =3D iwm_send_cmd(sc, &hcmd); > if (!ret) { >=20 > Modified: head/sys/dev/iwm/if_iwm_scan.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/dev/iwm/if_iwm_scan.h Sat Mar 25 02:44:25 2017 (r315924) > +++ head/sys/dev/iwm/if_iwm_scan.h Sat Mar 25 02:49:20 2017 (r315925) > @@ -106,9 +106,13 @@ > #ifndef __IF_IWN_SCAN_H__ > #define __IF_IWN_SCAN_H__ > =20 > -extern int iwm_mvm_lmac_scan(struct iwm_softc *sc); > +extern int iwm_mvm_lmac_scan(struct iwm_softc *); > extern int iwm_mvm_config_umac_scan(struct iwm_softc *); > extern int iwm_mvm_umac_scan(struct iwm_softc *); > -extern int iwm_mvm_scan_stop_wait(struct iwm_softc *sc); > +extern int iwm_mvm_scan_stop_wait(struct iwm_softc *); > +extern void iwm_mvm_rx_lmac_scan_complete_notif(struct iwm_softc *, > + struct iwm_rx_packet *); > +extern void iwm_mvm_rx_umac_scan_complete_notif(struct iwm_softc *, > + struct iwm_rx_packet *); > =20 > #endif /* __IF_IWN_SCAN_H__ */ >=20 > Modified: head/sys/dev/iwm/if_iwmreg.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/dev/iwm/if_iwmreg.h Sat Mar 25 02:44:25 2017 (r315924) > +++ head/sys/dev/iwm/if_iwmreg.h Sat Mar 25 02:49:20 2017 (r315925) > @@ -5076,6 +5076,13 @@ enum iwm_scan_offload_complete_status { > IWM_SCAN_OFFLOAD_ABORTED =3D 2, > }; > =20 > +enum iwm_scan_ebs_status { > + IWM_SCAN_EBS_SUCCESS, > + IWM_SCAN_EBS_FAILED, > + IWM_SCAN_EBS_CHAN_NOT_FOUND, > + IWM_SCAN_EBS_INACTIVE, > +}; > + > /** > * struct iwm_lmac_scan_complete_notif - notifies end of scanning (all c= hannels) > * SCAN_COMPLETE_NTF_API_S_VER_3 >=20 > Modified: head/sys/dev/iwm/if_iwmvar.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/dev/iwm/if_iwmvar.h Sat Mar 25 02:44:25 2017 (r315924) > +++ head/sys/dev/iwm/if_iwmvar.h Sat Mar 25 02:49:20 2017 (r315925) > @@ -536,6 +536,8 @@ struct iwm_softc { > struct iwm_fw_paging fw_paging_db[IWM_NUM_OF_FW_PAGING_BLOCKS]; > uint16_t num_of_paging_blk; > uint16_t num_of_pages_in_last_blk; > + > + boolean_t last_ebs_successful; > }; > =20 > #define IWM_LOCK_INIT(_sc) \ --=20 From owner-svn-src-head@freebsd.org Sat Mar 25 10:39:26 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6812FD1C42D; Sat, 25 Mar 2017 10:39:26 +0000 (UTC) (envelope-from ganbold@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 273DD1777; Sat, 25 Mar 2017 10:39:26 +0000 (UTC) (envelope-from ganbold@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PAdPnw030931; Sat, 25 Mar 2017 10:39:25 GMT (envelope-from ganbold@FreeBSD.org) Received: (from ganbold@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PAdPMM030930; Sat, 25 Mar 2017 10:39:25 GMT (envelope-from ganbold@FreeBSD.org) Message-Id: <201703251039.v2PAdPMM030930@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ganbold set sender to ganbold@FreeBSD.org using -f From: Ganbold Tsagaankhuu Date: Sat, 25 Mar 2017 10:39:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315931 - head/sys/arm/allwinner X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 10:39:26 -0000 Author: ganbold Date: Sat Mar 25 10:39:24 2017 New Revision: 315931 URL: https://svnweb.freebsd.org/changeset/base/315931 Log: Fix and add comments to match selected frequency sample. Add debug printfs when bootverbose is used. No functional changes. Modified: head/sys/arm/allwinner/aw_cir.c Modified: head/sys/arm/allwinner/aw_cir.c ============================================================================== --- head/sys/arm/allwinner/aw_cir.c Sat Mar 25 05:41:34 2017 (r315930) +++ head/sys/arm/allwinner/aw_cir.c Sat Mar 25 10:39:24 2017 (r315931) @@ -89,7 +89,12 @@ __FBSDID("$FreeBSD$"); /* IR Sample Configure Reg */ #define AW_IR_CIR 0x34 -/* Filter Threshold = 8 * 21.3 = ~128us < 200us */ + +/* + * Frequency sample: 23437.5Hz (Cycle: 42.7us) + * Pulse of NEC Remote > 560us + */ +/* Filter Threshold = 8 * 42.7 = ~341us < 500us */ #define AW_IR_RXFILT_VAL (((8) & 0x3f) << 2) /* Idle Threshold = (2 + 1) * 128 * 42.7 = ~16.4ms > 9ms */ #define AW_IR_RXIDLE_VAL (((2) & 0xff) << 8) @@ -317,12 +322,17 @@ aw_ir_intr(void *arg) /* Read RX interrupt status */ val = READ(sc, AW_IR_RXSTA); + if (bootverbose) + device_printf(sc->dev, "RX interrupt status: %x\n", val); /* Clean all pending interrupt statuses */ WRITE(sc, AW_IR_RXSTA, val | AW_IR_RXSTA_CLEARALL); /* When Rx FIFO Data available or Packet end */ if (val & (AW_IR_RXINT_RAI_EN | AW_IR_RXINT_RPEI_EN)) { + if (bootverbose) + device_printf(sc->dev, + "RX FIFO Data available or Packet end\n"); /* Get available message count in RX FIFO */ dcnt = AW_IR_RXSTA_COUNTER(val); /* Read FIFO */ From owner-svn-src-head@freebsd.org Sat Mar 25 10:42:12 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3D51AD1C69E; Sat, 25 Mar 2017 10:42:12 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 05B741BE0; Sat, 25 Mar 2017 10:42:11 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PAgBXi032674; Sat, 25 Mar 2017 10:42:11 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PAgBfn032673; Sat, 25 Mar 2017 10:42:11 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703251042.v2PAgBfn032673@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sat, 25 Mar 2017 10:42:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315932 - head/sys/x86/iommu X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 10:42:12 -0000 Author: kib Date: Sat Mar 25 10:42:10 2017 New Revision: 315932 URL: https://svnweb.freebsd.org/changeset/base/315932 Log: Slight cleanup of the comment. Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/x86/iommu/intel_dmar.h Modified: head/sys/x86/iommu/intel_dmar.h ============================================================================== --- head/sys/x86/iommu/intel_dmar.h Sat Mar 25 10:39:24 2017 (r315931) +++ head/sys/x86/iommu/intel_dmar.h Sat Mar 25 10:42:10 2017 (r315932) @@ -82,8 +82,8 @@ RB_PROTOTYPE(dmar_gas_entries_tree, dmar /* * The domain abstraction. Most non-constant members of the domain - * are locked by the owning dmar unit lock, not by the domain lock. - * Most important, dmar lock protects the contexts list. + * are protected by owning dmar unit lock, not by the domain lock. + * Most important, the dmar lock protects the contexts list. * * The domain lock protects the address map for the domain, and list * of unload entries delayed. From owner-svn-src-head@freebsd.org Sat Mar 25 10:45:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 56B10D1C742; Sat, 25 Mar 2017 10:45:17 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 260931D88; Sat, 25 Mar 2017 10:45:17 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PAjGK7034921; Sat, 25 Mar 2017 10:45:16 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PAjG1u034920; Sat, 25 Mar 2017 10:45:16 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703251045.v2PAjG1u034920@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sat, 25 Mar 2017 10:45:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315933 - head/sys/x86/iommu X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 10:45:17 -0000 Author: kib Date: Sat Mar 25 10:45:16 2017 New Revision: 315933 URL: https://svnweb.freebsd.org/changeset/base/315933 Log: Do not create RMRR entries for identity-mapped domains. It does not make sense since identity mapping already provides the required mapping for RMRR ranges. More, since identity page tables do not reflect content of map entries for id domains, creating RMRR entries makes domain data inconsistent. Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/x86/iommu/intel_ctx.c Modified: head/sys/x86/iommu/intel_ctx.c ============================================================================== --- head/sys/x86/iommu/intel_ctx.c Sat Mar 25 10:42:10 2017 (r315932) +++ head/sys/x86/iommu/intel_ctx.c Sat Mar 25 10:45:16 2017 (r315933) @@ -433,11 +433,13 @@ dmar_get_ctx_for_dev(struct dmar_unit *d TD_PINNED_ASSERT; return (NULL); } - error = domain_init_rmrr(domain1, dev); - if (error != 0) { - dmar_domain_destroy(domain1); - TD_PINNED_ASSERT; - return (NULL); + if (!id_mapped) { + error = domain_init_rmrr(domain1, dev); + if (error != 0) { + dmar_domain_destroy(domain1); + TD_PINNED_ASSERT; + return (NULL); + } } ctx1 = dmar_ctx_alloc(domain1, rid); ctxp = dmar_map_ctx_entry(ctx1, &sf); From owner-svn-src-head@freebsd.org Sat Mar 25 10:47:36 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D3986D1C7CF; Sat, 25 Mar 2017 10:47:36 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A348A1EE7; Sat, 25 Mar 2017 10:47:36 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PAlZLN035032; Sat, 25 Mar 2017 10:47:35 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PAlZHx035031; Sat, 25 Mar 2017 10:47:35 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201703251047.v2PAlZHx035031@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sat, 25 Mar 2017 10:47:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315934 - head/sys/x86/iommu X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 10:47:36 -0000 Author: kib Date: Sat Mar 25 10:47:35 2017 New Revision: 315934 URL: https://svnweb.freebsd.org/changeset/base/315934 Log: Avoid leaking allocated but unused context after creation race. As noted in the comment, nothing special needs to be done to destroy the unneeded context after the allocation race, but the context memory itself still should to be freed. Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/x86/iommu/intel_ctx.c Modified: head/sys/x86/iommu/intel_ctx.c ============================================================================== --- head/sys/x86/iommu/intel_ctx.c Sat Mar 25 10:45:16 2017 (r315933) +++ head/sys/x86/iommu/intel_ctx.c Sat Mar 25 10:47:35 2017 (r315934) @@ -472,13 +472,15 @@ dmar_get_ctx_for_dev(struct dmar_unit *d dmar->unit, dmar->segment, bus, slot, func, rid, domain->domain, domain->mgaw, domain->agaw, id_mapped ? "id" : "re"); + dmar_unmap_pgtbl(sf); } else { - /* Nothing needs to be done to destroy ctx1. */ + dmar_unmap_pgtbl(sf); dmar_domain_destroy(domain1); + /* Nothing needs to be done to destroy ctx1. */ + free(ctx1, M_DMAR_CTX); domain = ctx->domain; ctx->refs++; /* tag referenced us */ } - dmar_unmap_pgtbl(sf); } else { domain = ctx->domain; ctx->refs++; /* tag referenced us */ From owner-svn-src-head@freebsd.org Sat Mar 25 10:47:59 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E8B70D1C82B; Sat, 25 Mar 2017 10:47:59 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B8844102D; Sat, 25 Mar 2017 10:47:59 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PAlwpf035088; Sat, 25 Mar 2017 10:47:58 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PAlwjm035087; Sat, 25 Mar 2017 10:47:58 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201703251047.v2PAlwjm035087@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sat, 25 Mar 2017 10:47:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315935 - head/usr.sbin/pw/tests X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 10:48:00 -0000 Author: bapt Date: Sat Mar 25 10:47:58 2017 New Revision: 315935 URL: https://svnweb.freebsd.org/changeset/base/315935 Log: Add a regression test for r31512 fix PR: 217934 MFC after: 1 week Modified: head/usr.sbin/pw/tests/pw_useradd_test.sh Modified: head/usr.sbin/pw/tests/pw_useradd_test.sh ============================================================================== --- head/usr.sbin/pw/tests/pw_useradd_test.sh Sat Mar 25 10:47:35 2017 (r315934) +++ head/usr.sbin/pw/tests/pw_useradd_test.sh Sat Mar 25 10:47:58 2017 (r315935) @@ -384,6 +384,19 @@ user_add_with_pw_conf_body() atf_check -s exit:0 \ ${PW} useradd foo -C ${HOME}/pw.conf } +atf_test_case user_add_defaultgroup +user_add_defaultgroup_body() +{ + populate_etc_skel + echo 'defaultgroup = "plop"' > ${HOME}/pw.conf + atf_check -s exit:0 \ + ${PW} groupadd plop -g 442 + atf_check -s exit:0 \ + ${PW} useradd foo -C ${HOME}/pw.conf + atf_check -s exit:0 \ + -o inline:"foo:*:1001:442::0:0:User &:/home/foo:/bin/sh\n" \ + ${PW} usershow foo +} atf_init_test_cases() { atf_add_test_case user_add @@ -419,4 +432,5 @@ atf_init_test_cases() { atf_add_test_case user_add_w_random atf_add_test_case user_add_w_yes atf_add_test_case user_add_with_pw_conf + atf_add_test_case user_add_defaultgroup } From owner-svn-src-head@freebsd.org Sat Mar 25 12:04:17 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6DF9ED1DA46; Sat, 25 Mar 2017 12:04:17 +0000 (UTC) (envelope-from des@des.no) Received: from smtp.des.no (smtp.des.no [194.63.250.102]) by mx1.freebsd.org (Postfix) with ESMTP id 3907D1FDC; Sat, 25 Mar 2017 12:04:16 +0000 (UTC) (envelope-from des@des.no) Received: from desk.des.no (smtp.des.no [194.63.250.102]) by smtp.des.no (Postfix) with ESMTP id 4555DDCB4; Sat, 25 Mar 2017 12:04:10 +0000 (UTC) Received: by desk.des.no (Postfix, from userid 1001) id 5D65343498; Sat, 25 Mar 2017 13:04:10 +0100 (CET) From: =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= To: Warner Losh Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315773 - head/sbin/devd References: <201703230236.v2N2apvX051799@repo.freebsd.org> Date: Sat, 25 Mar 2017 13:04:10 +0100 In-Reply-To: <201703230236.v2N2apvX051799@repo.freebsd.org> (Warner Losh's message of "Thu, 23 Mar 2017 02:36:51 +0000 (UTC)") Message-ID: <86fui1imv9.fsf@desk.des.no> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 12:04:17 -0000 Warner Losh writes: > Log: > Implement quote escaping. String values may now contain " if you > it is preceded by \. If you're interested, openpam_readword(3) implements the full POSIX shell quoting rules, including line continuations and multi-line quoted strings, and should be fairly easy to translate to C++. There is also an openpam_readlinev(3) which reads a full line (or more in case of line continuations) and returns an array of words. Obviously, you'll want to copy & adapt them rather than link devd with libpam. contrib/openpam/lib/libpam/openpam_read{word,linev}.c DES --=20 Dag-Erling Sm=C3=B8rgrav - des@des.no From owner-svn-src-head@freebsd.org Sat Mar 25 13:15:44 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C2DC9D1C2D7; Sat, 25 Mar 2017 13:15:44 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8FEDE18F1; Sat, 25 Mar 2017 13:15:44 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PDFhU0096263; Sat, 25 Mar 2017 13:15:43 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PDFhUu096262; Sat, 25 Mar 2017 13:15:43 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703251315.v2PDFhUu096262@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Sat, 25 Mar 2017 13:15:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315946 - head/sys/dev/iwn X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 13:15:44 -0000 Author: avos Date: Sat Mar 25 13:15:43 2017 New Revision: 315946 URL: https://svnweb.freebsd.org/changeset/base/315946 Log: iwn: add few missing notification types into iwn_intr_str() Modified: head/sys/dev/iwn/if_iwn_debug.h Modified: head/sys/dev/iwn/if_iwn_debug.h ============================================================================== --- head/sys/dev/iwn/if_iwn_debug.h Sat Mar 25 12:53:20 2017 (r315945) +++ head/sys/dev/iwn/if_iwn_debug.h Sat Mar 25 13:15:43 2017 (r315946) @@ -72,6 +72,7 @@ iwn_intr_str(uint8_t cmd) case IWN_RX_PHY: return "RX_PHY"; case IWN_MPDU_RX_DONE: return "MPDU_RX_DONE"; case IWN_RX_DONE: return "RX_DONE"; + case IWN_RX_COMPRESSED_BA: return "RX_COMPRESSED_BA"; /* Command Notifications */ case IWN_CMD_RXON: return "IWN_CMD_RXON"; @@ -81,6 +82,7 @@ iwn_intr_str(uint8_t cmd) case IWN_CMD_LINK_QUALITY: return "IWN_CMD_LINK_QUALITY"; case IWN_CMD_SET_LED: return "IWN_CMD_SET_LED"; case IWN5000_CMD_WIMAX_COEX: return "IWN5000_CMD_WIMAX_COEX"; + case IWN_TEMP_NOTIFICATION: return "IWN_TEMP_NOTIFICATION"; case IWN5000_CMD_CALIB_CONFIG: return "IWN5000_CMD_CALIB_CONFIG"; case IWN5000_CMD_CALIB_RESULT: return "IWN5000_CMD_CALIB_RESULT"; case IWN5000_CMD_CALIB_COMPLETE: return "IWN5000_CMD_CALIB_COMPLETE"; From owner-svn-src-head@freebsd.org Sat Mar 25 13:17:50 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 52AE9D1C3C4; Sat, 25 Mar 2017 13:17:50 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 139E11A71; Sat, 25 Mar 2017 13:17:50 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PDHnCm096367; Sat, 25 Mar 2017 13:17:49 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PDHnAh096366; Sat, 25 Mar 2017 13:17:49 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201703251317.v2PDHnAh096366@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 25 Mar 2017 13:17:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315947 - head/contrib/libcxxrt X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 13:17:50 -0000 Author: dim Date: Sat Mar 25 13:17:48 2017 New Revision: 315947 URL: https://svnweb.freebsd.org/changeset/base/315947 Log: Import libcxxrt master 8a853717e61d5d55cbdf74d9d0a7545da5d5ff92. Interesting fixes which were not already merged: 0c7c611 Merge C++ demangler bug fixes from ELF Tool Chain (#40) 2b208d9 __cxa_demangle_gnu3: demangle 'z' as '...', not 'ellipsis' (#41) MFC after: 3 days Modified: head/contrib/libcxxrt/libelftc_dem_gnu3.c Directory Properties: head/contrib/libcxxrt/ (props changed) Modified: head/contrib/libcxxrt/libelftc_dem_gnu3.c ============================================================================== --- head/contrib/libcxxrt/libelftc_dem_gnu3.c Sat Mar 25 13:15:43 2017 (r315946) +++ head/contrib/libcxxrt/libelftc_dem_gnu3.c Sat Mar 25 13:17:48 2017 (r315947) @@ -846,7 +846,7 @@ cpp_demangle_push_type_qualifier(struct free(buf); ++e_idx; break; - }; + } --idx; } @@ -1007,7 +1007,7 @@ cpp_demangle_read_expr_primary(struct cp return (cpp_demangle_push_str(ddata, "true", 4)); default: return (0); - }; + } case 'd': ++ddata->cur; @@ -1057,7 +1057,7 @@ cpp_demangle_read_expr_primary(struct cp default: return (0); - }; + } } static int @@ -1332,14 +1332,14 @@ cpp_demangle_read_expression(struct cpp_ /* operator sizeof */ ddata->cur += 2; return (cpp_demangle_read_expression_unary(ddata, "sizeof", 6)); - }; + } switch (*ddata->cur) { case 'L': return (cpp_demangle_read_expr_primary(ddata)); case 'T': return (cpp_demangle_read_tmpl_param(ddata)); - }; + } return (0); } @@ -1555,11 +1555,13 @@ cpp_demangle_read_encoding(struct cpp_de if (!cpp_demangle_push_str(ddata, "non-transaction clone for ", 26)) return (0); + break; case 't': default: if (!cpp_demangle_push_str(ddata, "transaction clone for ", 22)) return (0); + break; } ++ddata->cur; return (cpp_demangle_read_encoding(ddata)); @@ -1712,7 +1714,7 @@ cpp_demangle_read_encoding(struct cpp_de if (*ddata->cur == '\0') return (0); break; - }; + } return (cpp_demangle_read_name(ddata)); } @@ -1784,7 +1786,7 @@ cpp_demangle_read_name(struct cpp_demang return (cpp_demangle_read_nested_name(ddata)); case 'Z': return (cpp_demangle_read_local_name(ddata)); - }; + } if (!vector_str_init(&v)) return (0); @@ -1885,7 +1887,7 @@ cpp_demangle_read_nested_name(struct cpp case 'K': ddata->mem_cst = true; break; - }; + } ++ddata->cur; } @@ -1913,7 +1915,7 @@ cpp_demangle_read_nested_name(struct cpp default: if (!cpp_demangle_read_uqname(ddata)) goto clean; - }; + } if ((subst_str = vector_str_substr(output, p_idx, output->size - 1, &subst_str_len)) == NULL) @@ -2188,35 +2190,35 @@ cpp_demangle_read_subst(struct cpp_deman case SIMPLE_HASH('S', 'd'): /* std::basic_iostream > */ - if (!cpp_demangle_push_str(ddata, "std::iostream", 19)) + if (!cpp_demangle_push_str(ddata, "std::basic_iostream", 19)) return (0); - ddata->last_sname = "iostream"; + ddata->last_sname = "basic_iostream"; ddata->cur += 2; if (*ddata->cur == 'I') return (cpp_demangle_read_subst_stdtmpl(ddata, - "std::iostream", 19)); + "std::basic_iostream", 19)); return (1); case SIMPLE_HASH('S', 'i'): /* std::basic_istream > */ - if (!cpp_demangle_push_str(ddata, "std::istream", 18)) + if (!cpp_demangle_push_str(ddata, "std::basic_istream", 18)) return (0); - ddata->last_sname = "istream"; + ddata->last_sname = "basic_istream"; ddata->cur += 2; if (*ddata->cur == 'I') return (cpp_demangle_read_subst_stdtmpl(ddata, - "std::istream", 18)); + "std::basic_istream", 18)); return (1); case SIMPLE_HASH('S', 'o'): /* std::basic_ostream > */ - if (!cpp_demangle_push_str(ddata, "std::ostream", 18)) + if (!cpp_demangle_push_str(ddata, "std::basic_ostream", 18)) return (0); - ddata->last_sname = "istream"; + ddata->last_sname = "basic_ostream"; ddata->cur += 2; if (*ddata->cur == 'I') return (cpp_demangle_read_subst_stdtmpl(ddata, - "std::ostream", 18)); + "std::basic_ostream", 18)); return (1); case SIMPLE_HASH('S', 's'): @@ -2238,7 +2240,7 @@ cpp_demangle_read_subst(struct cpp_deman case SIMPLE_HASH('S', 't'): /* std:: */ return (cpp_demangle_read_subst_std(ddata)); - }; + } if (*(++ddata->cur) == '\0') return (0); @@ -2386,7 +2388,7 @@ cpp_demangle_read_tmpl_arg(struct cpp_de return (cpp_demangle_read_expr_primary(ddata)); case 'X': return (cpp_demangle_read_expression(ddata)); - }; + } return (cpp_demangle_read_type(ddata, 0)); } @@ -2863,11 +2865,11 @@ again: case 'z': /* ellipsis */ - if (!cpp_demangle_push_str(ddata, "ellipsis", 8)) + if (!cpp_demangle_push_str(ddata, "...", 3)) goto clean; ++ddata->cur; goto rtn; - }; + } if (!cpp_demangle_read_name(ddata)) goto clean; @@ -3331,7 +3333,7 @@ cpp_demangle_read_uqname(struct cpp_dema return (0); ddata->cur += 2; return (1); - }; + } /* vendor extened operator */ if (*ddata->cur == 'v' && ELFTC_ISDIGIT(*(ddata->cur + 1))) { @@ -3377,7 +3379,7 @@ cpp_demangle_read_uqname(struct cpp_dema return (0); ddata->cur +=2; return (1); - }; + } /* source name */ if (ELFTC_ISDIGIT(*ddata->cur) != 0) @@ -3740,7 +3742,7 @@ hex_to_dec(char c) return (15); default: return (-1); - }; + } } static void From owner-svn-src-head@freebsd.org Sat Mar 25 13:32:30 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 80FFBD1CAD1; Sat, 25 Mar 2017 13:32:30 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 17EEE13AC; Sat, 25 Mar 2017 13:32:30 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PDWTBh004280; Sat, 25 Mar 2017 13:32:29 GMT (envelope-from dchagin@FreeBSD.org) Received: (from dchagin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PDWS6O004270; Sat, 25 Mar 2017 13:32:28 GMT (envelope-from dchagin@FreeBSD.org) Message-Id: <201703251332.v2PDWS6O004270@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dchagin set sender to dchagin@FreeBSD.org using -f From: Dmitry Chagin Date: Sat, 25 Mar 2017 13:32:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315948 - in head: bin/csh contrib/tcsh contrib/tcsh/config contrib/tcsh/nls contrib/tcsh/nls/C contrib/tcsh/nls/et contrib/tcsh/nls/finnish contrib/tcsh/nls/french contrib/tcsh/nls/ger... X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 13:32:30 -0000 Author: dchagin Date: Sat Mar 25 13:32:28 2017 New Revision: 315948 URL: https://svnweb.freebsd.org/changeset/base/315948 Log: Update to tcsh 6.20.00 Added: head/contrib/tcsh/dotlock.c - copied unchanged from r315512, vendor/tcsh/dist/dotlock.c head/contrib/tcsh/dotlock.h - copied unchanged from r315512, vendor/tcsh/dist/dotlock.h head/contrib/tcsh/tcsh.man.new - copied unchanged from r315512, vendor/tcsh/dist/tcsh.man.new Deleted: head/contrib/tcsh/configure.in Modified: head/bin/csh/Makefile head/contrib/tcsh/Fixes (contents, props changed) head/contrib/tcsh/Imakefile (contents, props changed) head/contrib/tcsh/Makefile.in (contents, props changed) head/contrib/tcsh/Makefile.std (contents, props changed) head/contrib/tcsh/Makefile.vms (contents, props changed) head/contrib/tcsh/README (contents, props changed) head/contrib/tcsh/complete.tcsh (contents, props changed) head/contrib/tcsh/config.guess (contents, props changed) head/contrib/tcsh/config.h.in (contents, props changed) head/contrib/tcsh/config.sub (contents, props changed) head/contrib/tcsh/config/bsd4.4 (contents, props changed) head/contrib/tcsh/config_f.h (contents, props changed) head/contrib/tcsh/configure (contents, props changed) head/contrib/tcsh/ed.chared.c (contents, props changed) head/contrib/tcsh/ed.decls.h (contents, props changed) head/contrib/tcsh/ed.defns.c (contents, props changed) head/contrib/tcsh/ed.inputl.c (contents, props changed) head/contrib/tcsh/ed.refresh.c (contents, props changed) head/contrib/tcsh/ed.screen.c (contents, props changed) head/contrib/tcsh/ed.term.h (contents, props changed) head/contrib/tcsh/ed.xmap.c (contents, props changed) head/contrib/tcsh/gethost.c (contents, props changed) head/contrib/tcsh/glob.c (contents, props changed) head/contrib/tcsh/host.defs (contents, props changed) head/contrib/tcsh/nls/C/set1 (contents, props changed) head/contrib/tcsh/nls/C/set20 (contents, props changed) head/contrib/tcsh/nls/C/set9 (contents, props changed) head/contrib/tcsh/nls/Makefile.in head/contrib/tcsh/nls/catgen head/contrib/tcsh/nls/et/set1 (contents, props changed) head/contrib/tcsh/nls/et/set20 (contents, props changed) head/contrib/tcsh/nls/et/set9 (contents, props changed) head/contrib/tcsh/nls/finnish/set1 (contents, props changed) head/contrib/tcsh/nls/finnish/set20 (contents, props changed) head/contrib/tcsh/nls/finnish/set3 (contents, props changed) head/contrib/tcsh/nls/finnish/set9 (contents, props changed) head/contrib/tcsh/nls/french/set1 (contents, props changed) head/contrib/tcsh/nls/french/set20 (contents, props changed) head/contrib/tcsh/nls/french/set9 (contents, props changed) head/contrib/tcsh/nls/german/set1 (contents, props changed) head/contrib/tcsh/nls/german/set20 (contents, props changed) head/contrib/tcsh/nls/german/set9 (contents, props changed) head/contrib/tcsh/nls/greek/set1 (contents, props changed) head/contrib/tcsh/nls/greek/set20 (contents, props changed) head/contrib/tcsh/nls/greek/set9 (contents, props changed) head/contrib/tcsh/nls/italian/set1 (contents, props changed) head/contrib/tcsh/nls/italian/set20 (contents, props changed) head/contrib/tcsh/nls/italian/set9 (contents, props changed) head/contrib/tcsh/nls/ja/set1 (contents, props changed) head/contrib/tcsh/nls/russian/set1 (contents, props changed) head/contrib/tcsh/nls/russian/set20 (contents, props changed) head/contrib/tcsh/nls/russian/set9 (contents, props changed) head/contrib/tcsh/nls/spanish/set1 (contents, props changed) head/contrib/tcsh/nls/spanish/set20 (contents, props changed) head/contrib/tcsh/nls/spanish/set9 (contents, props changed) head/contrib/tcsh/nls/ukrainian/set1 (contents, props changed) head/contrib/tcsh/nls/ukrainian/set20 (contents, props changed) head/contrib/tcsh/nls/ukrainian/set9 (contents, props changed) head/contrib/tcsh/patchlevel.h (contents, props changed) head/contrib/tcsh/sh.c (contents, props changed) head/contrib/tcsh/sh.char.h (contents, props changed) head/contrib/tcsh/sh.decls.h (contents, props changed) head/contrib/tcsh/sh.dir.c (contents, props changed) head/contrib/tcsh/sh.dol.c (contents, props changed) head/contrib/tcsh/sh.err.c (contents, props changed) head/contrib/tcsh/sh.exec.c (contents, props changed) head/contrib/tcsh/sh.exp.c (contents, props changed) head/contrib/tcsh/sh.file.c (contents, props changed) head/contrib/tcsh/sh.func.c (contents, props changed) head/contrib/tcsh/sh.glob.c (contents, props changed) head/contrib/tcsh/sh.h (contents, props changed) head/contrib/tcsh/sh.hist.c (contents, props changed) head/contrib/tcsh/sh.init.c (contents, props changed) head/contrib/tcsh/sh.lex.c (contents, props changed) head/contrib/tcsh/sh.misc.c (contents, props changed) head/contrib/tcsh/sh.print.c (contents, props changed) head/contrib/tcsh/sh.proc.c (contents, props changed) head/contrib/tcsh/sh.proc.h (contents, props changed) head/contrib/tcsh/sh.sem.c (contents, props changed) head/contrib/tcsh/sh.set.c (contents, props changed) head/contrib/tcsh/sh.time.c (contents, props changed) head/contrib/tcsh/tc.alloc.c (contents, props changed) head/contrib/tcsh/tc.bind.c (contents, props changed) head/contrib/tcsh/tc.const.c (contents, props changed) head/contrib/tcsh/tc.decls.h (contents, props changed) head/contrib/tcsh/tc.func.c (contents, props changed) head/contrib/tcsh/tc.nls.c (contents, props changed) head/contrib/tcsh/tc.nls.h (contents, props changed) head/contrib/tcsh/tc.os.c (contents, props changed) head/contrib/tcsh/tc.printf.c (contents, props changed) head/contrib/tcsh/tc.prompt.c (contents, props changed) head/contrib/tcsh/tc.str.c (contents, props changed) head/contrib/tcsh/tc.who.c (contents, props changed) head/contrib/tcsh/tcsh.man (contents, props changed) head/contrib/tcsh/tw.color.c (contents, props changed) head/contrib/tcsh/tw.comp.c (contents, props changed) head/contrib/tcsh/tw.decls.h (contents, props changed) head/contrib/tcsh/tw.parse.c (contents, props changed) Directory Properties: head/contrib/tcsh/ (props changed) head/contrib/tcsh/FAQ (props changed) head/contrib/tcsh/MAKEDIFFS (props changed) head/contrib/tcsh/MAKESHAR (props changed) head/contrib/tcsh/NewThings (props changed) head/contrib/tcsh/Ported (props changed) head/contrib/tcsh/README.imake (props changed) head/contrib/tcsh/WishList (props changed) head/contrib/tcsh/Y2K (props changed) head/contrib/tcsh/csh-mode.el (props changed) head/contrib/tcsh/ed.h (props changed) head/contrib/tcsh/ed.init.c (props changed) head/contrib/tcsh/ed.term.c (props changed) head/contrib/tcsh/eight-bit.me (props changed) head/contrib/tcsh/glob.3 (props changed) head/contrib/tcsh/glob.h (props changed) head/contrib/tcsh/imake.config (props changed) head/contrib/tcsh/install-sh (props changed) head/contrib/tcsh/ma.setp.c (props changed) head/contrib/tcsh/mi.termios.c (props changed) head/contrib/tcsh/mi.varargs.h (props changed) head/contrib/tcsh/mi.wait.h (props changed) head/contrib/tcsh/nls/C/charset (props changed) head/contrib/tcsh/nls/C/set10 (props changed) head/contrib/tcsh/nls/C/set11 (props changed) head/contrib/tcsh/nls/C/set12 (props changed) head/contrib/tcsh/nls/C/set13 (props changed) head/contrib/tcsh/nls/C/set14 (props changed) head/contrib/tcsh/nls/C/set15 (props changed) head/contrib/tcsh/nls/C/set16 (props changed) head/contrib/tcsh/nls/C/set17 (props changed) head/contrib/tcsh/nls/C/set18 (props changed) head/contrib/tcsh/nls/C/set19 (props changed) head/contrib/tcsh/nls/C/set2 (props changed) head/contrib/tcsh/nls/C/set21 (props changed) head/contrib/tcsh/nls/C/set22 (props changed) head/contrib/tcsh/nls/C/set23 (props changed) head/contrib/tcsh/nls/C/set24 (props changed) head/contrib/tcsh/nls/C/set25 (props changed) head/contrib/tcsh/nls/C/set26 (props changed) head/contrib/tcsh/nls/C/set27 (props changed) head/contrib/tcsh/nls/C/set29 (props changed) head/contrib/tcsh/nls/C/set3 (props changed) head/contrib/tcsh/nls/C/set30 (props changed) head/contrib/tcsh/nls/C/set31 (props changed) head/contrib/tcsh/nls/C/set4 (props changed) head/contrib/tcsh/nls/C/set5 (props changed) head/contrib/tcsh/nls/C/set6 (props changed) head/contrib/tcsh/nls/C/set7 (props changed) head/contrib/tcsh/nls/C/set8 (props changed) head/contrib/tcsh/nls/et/charset (props changed) head/contrib/tcsh/nls/et/set10 (props changed) head/contrib/tcsh/nls/et/set11 (props changed) head/contrib/tcsh/nls/et/set12 (props changed) head/contrib/tcsh/nls/et/set13 (props changed) head/contrib/tcsh/nls/et/set14 (props changed) head/contrib/tcsh/nls/et/set15 (props changed) head/contrib/tcsh/nls/et/set16 (props changed) head/contrib/tcsh/nls/et/set17 (props changed) head/contrib/tcsh/nls/et/set18 (props changed) head/contrib/tcsh/nls/et/set19 (props changed) head/contrib/tcsh/nls/et/set2 (props changed) head/contrib/tcsh/nls/et/set21 (props changed) head/contrib/tcsh/nls/et/set22 (props changed) head/contrib/tcsh/nls/et/set23 (props changed) head/contrib/tcsh/nls/et/set24 (props changed) head/contrib/tcsh/nls/et/set25 (props changed) head/contrib/tcsh/nls/et/set26 (props changed) head/contrib/tcsh/nls/et/set27 (props changed) head/contrib/tcsh/nls/et/set29 (props changed) head/contrib/tcsh/nls/et/set3 (props changed) head/contrib/tcsh/nls/et/set30 (props changed) head/contrib/tcsh/nls/et/set31 (props changed) head/contrib/tcsh/nls/et/set4 (props changed) head/contrib/tcsh/nls/et/set5 (props changed) head/contrib/tcsh/nls/et/set6 (props changed) head/contrib/tcsh/nls/et/set7 (props changed) head/contrib/tcsh/nls/et/set8 (props changed) head/contrib/tcsh/nls/finnish/charset (props changed) head/contrib/tcsh/nls/finnish/set10 (props changed) head/contrib/tcsh/nls/finnish/set11 (props changed) head/contrib/tcsh/nls/finnish/set12 (props changed) head/contrib/tcsh/nls/finnish/set13 (props changed) head/contrib/tcsh/nls/finnish/set14 (props changed) head/contrib/tcsh/nls/finnish/set15 (props changed) head/contrib/tcsh/nls/finnish/set16 (props changed) head/contrib/tcsh/nls/finnish/set17 (props changed) head/contrib/tcsh/nls/finnish/set18 (props changed) head/contrib/tcsh/nls/finnish/set19 (props changed) head/contrib/tcsh/nls/finnish/set2 (props changed) head/contrib/tcsh/nls/finnish/set21 (props changed) head/contrib/tcsh/nls/finnish/set22 (props changed) head/contrib/tcsh/nls/finnish/set23 (props changed) head/contrib/tcsh/nls/finnish/set24 (props changed) head/contrib/tcsh/nls/finnish/set25 (props changed) head/contrib/tcsh/nls/finnish/set26 (props changed) head/contrib/tcsh/nls/finnish/set27 (props changed) head/contrib/tcsh/nls/finnish/set29 (props changed) head/contrib/tcsh/nls/finnish/set30 (props changed) head/contrib/tcsh/nls/finnish/set31 (props changed) head/contrib/tcsh/nls/finnish/set4 (props changed) head/contrib/tcsh/nls/finnish/set5 (props changed) head/contrib/tcsh/nls/finnish/set6 (props changed) head/contrib/tcsh/nls/finnish/set7 (props changed) head/contrib/tcsh/nls/finnish/set8 (props changed) head/contrib/tcsh/nls/french/charset (props changed) head/contrib/tcsh/nls/french/set10 (props changed) head/contrib/tcsh/nls/french/set11 (props changed) head/contrib/tcsh/nls/french/set12 (props changed) head/contrib/tcsh/nls/french/set13 (props changed) head/contrib/tcsh/nls/french/set14 (props changed) head/contrib/tcsh/nls/french/set15 (props changed) head/contrib/tcsh/nls/french/set16 (props changed) head/contrib/tcsh/nls/french/set17 (props changed) head/contrib/tcsh/nls/french/set18 (props changed) head/contrib/tcsh/nls/french/set19 (props changed) head/contrib/tcsh/nls/french/set2 (props changed) head/contrib/tcsh/nls/french/set21 (props changed) head/contrib/tcsh/nls/french/set22 (props changed) head/contrib/tcsh/nls/french/set23 (props changed) head/contrib/tcsh/nls/french/set24 (props changed) head/contrib/tcsh/nls/french/set25 (props changed) head/contrib/tcsh/nls/french/set26 (props changed) head/contrib/tcsh/nls/french/set27 (props changed) head/contrib/tcsh/nls/french/set29 (props changed) head/contrib/tcsh/nls/french/set3 (props changed) head/contrib/tcsh/nls/french/set30 (props changed) head/contrib/tcsh/nls/french/set31 (props changed) head/contrib/tcsh/nls/french/set4 (props changed) head/contrib/tcsh/nls/french/set5 (props changed) head/contrib/tcsh/nls/french/set6 (props changed) head/contrib/tcsh/nls/french/set7 (props changed) head/contrib/tcsh/nls/french/set8 (props changed) head/contrib/tcsh/nls/german/charset (props changed) head/contrib/tcsh/nls/german/set10 (props changed) head/contrib/tcsh/nls/german/set11 (props changed) head/contrib/tcsh/nls/german/set12 (props changed) head/contrib/tcsh/nls/german/set13 (props changed) head/contrib/tcsh/nls/german/set14 (props changed) head/contrib/tcsh/nls/german/set15 (props changed) head/contrib/tcsh/nls/german/set16 (props changed) head/contrib/tcsh/nls/german/set17 (props changed) head/contrib/tcsh/nls/german/set18 (props changed) head/contrib/tcsh/nls/german/set19 (props changed) head/contrib/tcsh/nls/german/set2 (props changed) head/contrib/tcsh/nls/german/set21 (props changed) head/contrib/tcsh/nls/german/set22 (props changed) head/contrib/tcsh/nls/german/set23 (props changed) head/contrib/tcsh/nls/german/set24 (props changed) head/contrib/tcsh/nls/german/set25 (props changed) head/contrib/tcsh/nls/german/set26 (props changed) head/contrib/tcsh/nls/german/set27 (props changed) head/contrib/tcsh/nls/german/set29 (props changed) head/contrib/tcsh/nls/german/set3 (props changed) head/contrib/tcsh/nls/german/set30 (props changed) head/contrib/tcsh/nls/german/set31 (props changed) head/contrib/tcsh/nls/german/set4 (props changed) head/contrib/tcsh/nls/german/set5 (props changed) head/contrib/tcsh/nls/german/set6 (props changed) head/contrib/tcsh/nls/german/set7 (props changed) head/contrib/tcsh/nls/german/set8 (props changed) head/contrib/tcsh/nls/greek/charset (props changed) head/contrib/tcsh/nls/greek/set10 (props changed) head/contrib/tcsh/nls/greek/set11 (props changed) head/contrib/tcsh/nls/greek/set12 (props changed) head/contrib/tcsh/nls/greek/set13 (props changed) head/contrib/tcsh/nls/greek/set14 (props changed) head/contrib/tcsh/nls/greek/set15 (props changed) head/contrib/tcsh/nls/greek/set16 (props changed) head/contrib/tcsh/nls/greek/set17 (props changed) head/contrib/tcsh/nls/greek/set18 (props changed) head/contrib/tcsh/nls/greek/set19 (props changed) head/contrib/tcsh/nls/greek/set2 (props changed) head/contrib/tcsh/nls/greek/set21 (props changed) head/contrib/tcsh/nls/greek/set22 (props changed) head/contrib/tcsh/nls/greek/set23 (props changed) head/contrib/tcsh/nls/greek/set24 (props changed) head/contrib/tcsh/nls/greek/set25 (props changed) head/contrib/tcsh/nls/greek/set26 (props changed) head/contrib/tcsh/nls/greek/set27 (props changed) head/contrib/tcsh/nls/greek/set29 (props changed) head/contrib/tcsh/nls/greek/set3 (props changed) head/contrib/tcsh/nls/greek/set30 (props changed) head/contrib/tcsh/nls/greek/set31 (props changed) head/contrib/tcsh/nls/greek/set4 (props changed) head/contrib/tcsh/nls/greek/set5 (props changed) head/contrib/tcsh/nls/greek/set6 (props changed) head/contrib/tcsh/nls/greek/set7 (props changed) head/contrib/tcsh/nls/greek/set8 (props changed) head/contrib/tcsh/nls/italian/charset (props changed) head/contrib/tcsh/nls/italian/set10 (props changed) head/contrib/tcsh/nls/italian/set11 (props changed) head/contrib/tcsh/nls/italian/set12 (props changed) head/contrib/tcsh/nls/italian/set13 (props changed) head/contrib/tcsh/nls/italian/set14 (props changed) head/contrib/tcsh/nls/italian/set15 (props changed) head/contrib/tcsh/nls/italian/set16 (props changed) head/contrib/tcsh/nls/italian/set17 (props changed) head/contrib/tcsh/nls/italian/set18 (props changed) head/contrib/tcsh/nls/italian/set19 (props changed) head/contrib/tcsh/nls/italian/set2 (props changed) head/contrib/tcsh/nls/italian/set21 (props changed) head/contrib/tcsh/nls/italian/set22 (props changed) head/contrib/tcsh/nls/italian/set23 (props changed) head/contrib/tcsh/nls/italian/set24 (props changed) head/contrib/tcsh/nls/italian/set25 (props changed) head/contrib/tcsh/nls/italian/set26 (props changed) head/contrib/tcsh/nls/italian/set27 (props changed) head/contrib/tcsh/nls/italian/set29 (props changed) head/contrib/tcsh/nls/italian/set3 (props changed) head/contrib/tcsh/nls/italian/set30 (props changed) head/contrib/tcsh/nls/italian/set31 (props changed) head/contrib/tcsh/nls/italian/set4 (props changed) head/contrib/tcsh/nls/italian/set5 (props changed) head/contrib/tcsh/nls/italian/set6 (props changed) head/contrib/tcsh/nls/italian/set7 (props changed) head/contrib/tcsh/nls/italian/set8 (props changed) head/contrib/tcsh/nls/ja/charset (props changed) head/contrib/tcsh/nls/ja/set10 (props changed) head/contrib/tcsh/nls/ja/set11 (props changed) head/contrib/tcsh/nls/ja/set12 (props changed) head/contrib/tcsh/nls/ja/set13 (props changed) head/contrib/tcsh/nls/ja/set15 (props changed) head/contrib/tcsh/nls/ja/set16 (props changed) head/contrib/tcsh/nls/ja/set17 (props changed) head/contrib/tcsh/nls/ja/set18 (props changed) head/contrib/tcsh/nls/ja/set2 (props changed) head/contrib/tcsh/nls/ja/set21 (props changed) head/contrib/tcsh/nls/ja/set24 (props changed) head/contrib/tcsh/nls/ja/set29 (props changed) head/contrib/tcsh/nls/ja/set3 (props changed) head/contrib/tcsh/nls/ja/set30 (props changed) head/contrib/tcsh/nls/ja/set4 (props changed) head/contrib/tcsh/nls/ja/set5 (props changed) head/contrib/tcsh/nls/ja/set6 (props changed) head/contrib/tcsh/nls/ja/set7 (props changed) head/contrib/tcsh/nls/ja/set8 (props changed) head/contrib/tcsh/nls/russian/charset (props changed) head/contrib/tcsh/nls/russian/set10 (props changed) head/contrib/tcsh/nls/russian/set11 (props changed) head/contrib/tcsh/nls/russian/set12 (props changed) head/contrib/tcsh/nls/russian/set13 (props changed) head/contrib/tcsh/nls/russian/set14 (props changed) head/contrib/tcsh/nls/russian/set15 (props changed) head/contrib/tcsh/nls/russian/set16 (props changed) head/contrib/tcsh/nls/russian/set17 (props changed) head/contrib/tcsh/nls/russian/set18 (props changed) head/contrib/tcsh/nls/russian/set19 (props changed) head/contrib/tcsh/nls/russian/set2 (props changed) head/contrib/tcsh/nls/russian/set21 (props changed) head/contrib/tcsh/nls/russian/set22 (props changed) head/contrib/tcsh/nls/russian/set23 (props changed) head/contrib/tcsh/nls/russian/set24 (props changed) head/contrib/tcsh/nls/russian/set25 (props changed) head/contrib/tcsh/nls/russian/set26 (props changed) head/contrib/tcsh/nls/russian/set27 (props changed) head/contrib/tcsh/nls/russian/set29 (props changed) head/contrib/tcsh/nls/russian/set3 (props changed) head/contrib/tcsh/nls/russian/set30 (props changed) head/contrib/tcsh/nls/russian/set31 (props changed) head/contrib/tcsh/nls/russian/set4 (props changed) head/contrib/tcsh/nls/russian/set5 (props changed) head/contrib/tcsh/nls/russian/set6 (props changed) head/contrib/tcsh/nls/russian/set7 (props changed) head/contrib/tcsh/nls/russian/set8 (props changed) head/contrib/tcsh/nls/spanish/charset (props changed) head/contrib/tcsh/nls/spanish/set10 (props changed) head/contrib/tcsh/nls/spanish/set11 (props changed) head/contrib/tcsh/nls/spanish/set12 (props changed) head/contrib/tcsh/nls/spanish/set13 (props changed) head/contrib/tcsh/nls/spanish/set14 (props changed) head/contrib/tcsh/nls/spanish/set15 (props changed) head/contrib/tcsh/nls/spanish/set16 (props changed) head/contrib/tcsh/nls/spanish/set17 (props changed) head/contrib/tcsh/nls/spanish/set18 (props changed) head/contrib/tcsh/nls/spanish/set19 (props changed) head/contrib/tcsh/nls/spanish/set2 (props changed) head/contrib/tcsh/nls/spanish/set21 (props changed) head/contrib/tcsh/nls/spanish/set22 (props changed) head/contrib/tcsh/nls/spanish/set23 (props changed) head/contrib/tcsh/nls/spanish/set24 (props changed) head/contrib/tcsh/nls/spanish/set25 (props changed) head/contrib/tcsh/nls/spanish/set26 (props changed) head/contrib/tcsh/nls/spanish/set27 (props changed) head/contrib/tcsh/nls/spanish/set29 (props changed) head/contrib/tcsh/nls/spanish/set3 (props changed) head/contrib/tcsh/nls/spanish/set30 (props changed) head/contrib/tcsh/nls/spanish/set31 (props changed) head/contrib/tcsh/nls/spanish/set4 (props changed) head/contrib/tcsh/nls/spanish/set5 (props changed) head/contrib/tcsh/nls/spanish/set6 (props changed) head/contrib/tcsh/nls/spanish/set7 (props changed) head/contrib/tcsh/nls/spanish/set8 (props changed) head/contrib/tcsh/nls/ukrainian/charset (props changed) head/contrib/tcsh/nls/ukrainian/set10 (props changed) head/contrib/tcsh/nls/ukrainian/set11 (props changed) head/contrib/tcsh/nls/ukrainian/set12 (props changed) head/contrib/tcsh/nls/ukrainian/set13 (props changed) head/contrib/tcsh/nls/ukrainian/set14 (props changed) head/contrib/tcsh/nls/ukrainian/set15 (props changed) head/contrib/tcsh/nls/ukrainian/set16 (props changed) head/contrib/tcsh/nls/ukrainian/set17 (props changed) head/contrib/tcsh/nls/ukrainian/set18 (props changed) head/contrib/tcsh/nls/ukrainian/set19 (props changed) head/contrib/tcsh/nls/ukrainian/set2 (props changed) head/contrib/tcsh/nls/ukrainian/set21 (props changed) head/contrib/tcsh/nls/ukrainian/set22 (props changed) head/contrib/tcsh/nls/ukrainian/set23 (props changed) head/contrib/tcsh/nls/ukrainian/set24 (props changed) head/contrib/tcsh/nls/ukrainian/set25 (props changed) head/contrib/tcsh/nls/ukrainian/set26 (props changed) head/contrib/tcsh/nls/ukrainian/set27 (props changed) head/contrib/tcsh/nls/ukrainian/set29 (props changed) head/contrib/tcsh/nls/ukrainian/set3 (props changed) head/contrib/tcsh/nls/ukrainian/set30 (props changed) head/contrib/tcsh/nls/ukrainian/set31 (props changed) head/contrib/tcsh/nls/ukrainian/set4 (props changed) head/contrib/tcsh/nls/ukrainian/set5 (props changed) head/contrib/tcsh/nls/ukrainian/set6 (props changed) head/contrib/tcsh/nls/ukrainian/set7 (props changed) head/contrib/tcsh/nls/ukrainian/set8 (props changed) head/contrib/tcsh/pathnames.h (props changed) head/contrib/tcsh/sh.char.c (props changed) head/contrib/tcsh/sh.dir.h (props changed) head/contrib/tcsh/sh.parse.c (props changed) head/contrib/tcsh/sh.types.h (props changed) head/contrib/tcsh/snames.h (props changed) head/contrib/tcsh/src.desc (props changed) head/contrib/tcsh/tc.disc.c (props changed) head/contrib/tcsh/tc.h (props changed) head/contrib/tcsh/tc.os.h (props changed) head/contrib/tcsh/tc.sched.c (props changed) head/contrib/tcsh/tc.sig.c (props changed) head/contrib/tcsh/tc.sig.h (props changed) head/contrib/tcsh/tc.vers.c (props changed) head/contrib/tcsh/tc.wait.h (props changed) head/contrib/tcsh/tcsh.man2html (props changed) head/contrib/tcsh/termcap.vms (props changed) head/contrib/tcsh/tw.h (props changed) head/contrib/tcsh/tw.help.c (props changed) head/contrib/tcsh/tw.init.c (props changed) head/contrib/tcsh/tw.spell.c (props changed) head/contrib/tcsh/vms.termcap.c (props changed) Modified: head/bin/csh/Makefile ============================================================================== --- head/bin/csh/Makefile Sat Mar 25 13:17:48 2017 (r315947) +++ head/bin/csh/Makefile Sat Mar 25 13:32:28 2017 (r315948) @@ -33,6 +33,7 @@ SRCS+= tc.alloc.c tc.bind.c tc.const.c t tc.func.c tc.nls.c tc.os.c tc.os.h tc.printf.c tc.prompt.c \ tc.sched.c tc.sig.c tc.sig.h tc.str.c sh.types.h tc.vers.c tc.wait.h \ tc.who.c tc.h +SRCS+= dotlock.c dotlock.h GENHDRS= ed.defns.h sh.err.h tc.const.h tc.defs.c SRCS+= ${GENHDRS} Modified: head/contrib/tcsh/Fixes ============================================================================== --- head/contrib/tcsh/Fixes Sat Mar 25 13:17:48 2017 (r315947) +++ head/contrib/tcsh/Fixes Sat Mar 25 13:32:28 2017 (r315948) @@ -1,3 +1,95 @@ + 20. V6.20.00 - 20161124 + 19. Don't resize the screen if it did not change size. + 18. V6.19.01 - 20161025 + 17. restore file description when cleaning up after eval: + repeat 99 time + 16. PR/572: Fix $SHLVL issue when exec'ing subshells. + 15. PR/403: Fix backquote expansion for multi-byte character sets. + 14. Fix drawing issu with multi-line prompt (Kensuke Iwahashi/David Kaspar) + 13. always send prusage to stdout. + 12. PR/526: Fix double \\ printing from previous fix in history expansion. + 11. Android updates from Corinna Vinschen + 10. PR/526: Quote backslashes properly so they can be preserved in `` + expansions + 9. Fix memory leak for paraml + 8. Add notempty and ask values for the noclobber setting (Martin Tournoij) + 7. more correct $wordchars for vimode (Luke Mewburn) + 6. expose VImode in $vimode (Luke Mewburn) + 5. display what the compiled in editor is in bindkey -d (Luke Mewburn) + 4. run-fg-editor improvements and documentation (Luke Mewburn) + 3. Fix parsing of 'if (cond)then' (Fridolin Pokorny) + 2. PR/437: Fix handling of invalid unicode characters. + 1. PR/451: Fix error messages containing %c to be always '%c' + + 41. V6.19.00 - 20150521 + 40. V6.18.05 - 20150510 + 39. fix reseting when interrupted inside an eval "eval sleep 10^C" + (paulo.cesar.pereira.de.andrade) + 38. rename handle_intr -> handle_interrupt as originally intended. + 37. fix input tests that need stdin on a tty + 36. V6.18.04 - 20150504 + 35. revert fix echo "\1", it is incorrect. + 34. revert fix to PR/437, breaks short strings. + 33. V6.18.03 - 20150503 + 32. PR/437: Nakajima Akira: Fix segmentation fault reading input files + 31. PR/291: Print job status messages to stderr. + 30. Fridolin Pokorny NUL in `` does not mean EOF. + 29. Pavel Raiskup fix hang with: + while (1) + ( date & ; wait ) + end + 28. Add cdtohome special variable (Martin Tournoij) + 27. Fix root prompt char for windows (Corinna Vinschen) + 26. For "next" completion matches only consider exact matches of the previous + word (Jamie Landeg-Jones) + 25. Fix echo "\1" for echo_style=both where the first character was + not processed properly (Gary Duzan) + 24. V6.18.02 - 20140618 + 23. fix ls-F /non printing exit value twice. + 22. rename configure.in to configure.ac, add aclocal.m4 to CVS + 21. set foo="aabaabaa"; echo $foo:as/a// should produce bb + 20. Add locked merge history support (Marcin Konarski) + 19. Support more resource limits from various BSD's + 18. Cache history count to speed up thing + 17. PR/240: minix support + 16. revert fix for 15. Causes extra quoting, for example (foo is a program + that prints its arguments): + $ ./foo 'abc' * + '\a\b\c' + 15. fix globbing for ``, stripping backslashes. Example: + cat << _EOF > huh + echo 'hello\;world' + _EOF + echo `./huh 0` + echo `./huh $?` + 14. fix for `` that causes hang. Example: + cat << _EOF > huh + #!/bin/sh + echo "[$@]" + echo "I am running" + echo "I am running ($$)" >> huh.out + _EOF + cat << _EOF > huh.tcsh + #!/bin/tcsh -f + + ./huh \ + `#comment blah blah blah` \ + parameter a \ + `#comment blah blah blah` \ + parameter b \ + `#comment blah blah blah` \ + parameter c + echo ok + _EOF + 13. remove AsciiOnly fix now that the real issue has been fixed (Roman Kollar) + 12. define utmp file for aix (Laurence Darby) + 11. fix if history in loops + 10. make ls-F print to stderr and set the exit code + 9. make rmstar interruptible on linux + 8. Get rid of pret_t and make the printf functions return the number of + characters printed as the system ones do. + 7. Parse a FreeBSD compat $LSCOLORS. What to do when both LSCOLORS and + LS_COLORS are set. I am not documenting this until we decide. 6. V6.18.01 - 20120214 5. fix interruptible wait again 4. ignore bogus compiler overflow message Modified: head/contrib/tcsh/Imakefile ============================================================================== --- head/contrib/tcsh/Imakefile Sat Mar 25 13:17:48 2017 (r315947) +++ head/contrib/tcsh/Imakefile Sat Mar 25 13:32:28 2017 (r315948) @@ -1,5 +1,5 @@ XCOMM -XCOMM $tcsh: Imakefile,v 1.87 2010/01/28 19:01:05 christos Exp $ +XCOMM $tcsh: Imakefile,v 1.88 2014/07/07 20:34:58 christos Exp $ XCOMM XCOMM Imakefile for tcsh 6.12 XCOMM Marc Horowitz, MIT SIPB @@ -526,8 +526,8 @@ MISCF = Makefile.std Fixes MAKEDIFFS MAK WishList config_f.h eight-bit.me glob.3 patchlevel.h \ pathnames.h tcsh.man Ported src.desc Imakefile imake.config \ README.imake complete.tcsh vmsreadme.txt Makefile.vms termcap.vms \ - snames.h host.defs gethost.c tcsh.man2html Makefile.in configure.in \ - Makefile.win32 + snames.h host.defs gethost.c tcsh.man2html Makefile.in configure.ac \ + Makefile.win32 aclocal.m4 CONFSRCS=config/[a-z]* Modified: head/contrib/tcsh/Makefile.in ============================================================================== --- head/contrib/tcsh/Makefile.in Sat Mar 25 13:17:48 2017 (r315947) +++ head/contrib/tcsh/Makefile.in Sat Mar 25 13:32:28 2017 (r315948) @@ -1,4 +1,4 @@ -# $tcsh: Makefile.in,v 3.49 2011/02/05 17:35:31 christos Exp $ +# $tcsh: Makefile.in,v 3.59 2015/08/24 20:09:04 kim Exp $ # Makefile.in 4.3 6/11/83 # # C Shell with process control; VM/UNIX VAX Makefile @@ -315,8 +315,8 @@ CPP = @CPP@ # on the suns does not know how to make dynamically linked binaries. # This is set by autoconf. CC = @CC@ -#CC= gcc -Wall -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith -Werror -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wsign-compare -Wcast-qual -Wreturn-type -Wswitch -Wshadow -Wwrite-strings -Wextra -# -ansi -pedantic +#CC= gcc -Wall -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith -Werror -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wsign-compare -Wcast-qual -Wreturn-type -Wswitch -Wshadow -Wwrite-strings -Wextra -Wcast-qual -Wwrite-strings -Wold-style-definition -Wuninitialized -Wpointer-sign +# -Wconversion -Wformat=2 -ansi -pedantic #CC= gcc -Wall -pipe -B/bin/ # Generate code for Intel 486 (linux) #CC= gcc -m486 -pipe -Wall @@ -377,14 +377,14 @@ ASSRCS= sh.c sh.dir.c sh.dol.c sh.err.c sh.lex.c sh.misc.c sh.parse.c sh.print.c sh.proc.c sh.sem.c \ sh.set.c sh.time.c sh.char.h sh.dir.h sh.proc.h sh.h \ tw.color.c -PSSRCS= sh.decls.h glob.c glob.h mi.termios.c mi.wait.h mi.varargs.h ma.setp.c \ +PSSRCS= sh.decls.h glob.c glob.h dotlock.c dotlock.h mi.termios.c mi.wait.h mi.varargs.h ma.setp.c \ vms.termcap.c SHSRCS= ${ASSRCS} ${PSSRCS} SHOBJS= sh.${SUF} sh.dir.${SUF} sh.dol.${SUF} sh.err.${SUF} sh.exec.${SUF} \ sh.char.${SUF} sh.exp.${SUF} sh.file.${SUF} sh.func.${SUF} \ sh.glob.${SUF} sh.hist.${SUF} sh.init.${SUF} sh.lex.${SUF} \ sh.misc.${SUF} sh.parse.${SUF} sh.print.${SUF} sh.proc.${SUF} \ - sh.sem.${SUF} sh.set.${SUF} sh.time.${SUF} glob.${SUF} \ + sh.sem.${SUF} sh.set.${SUF} sh.time.${SUF} glob.${SUF} dotlock.${SUF} \ mi.termios.${SUF} ma.setp.${SUF} vms.termcap.${SUF} TWSRCS= tw.decls.h tw.h tw.help.c tw.init.c tw.parse.c tw.spell.c \ @@ -411,12 +411,12 @@ AVSRCS= Fixes MAKEDIFFS MAKESHAR NewThin WishList config_f.h eight-bit.me glob.3 patchlevel.h \ pathnames.h tcsh.man Ported src.desc Imakefile imake.config \ README.imake complete.tcsh vmsreadme.txt termcap.vms snames.h \ - host.defs gethost.c tcsh.man2html configure.in configure config.h.in \ - tests/testsuite.at + host.defs gethost.c tcsh.man2html configure.ac configure config.h.in \ + tests/testsuite.at aclocal.m4 TESTFILES= tests/aliases.at tests/arguments.at tests/commands.at \ tests/expr.at tests/lexical.at tests/mb-eucjp.at \ - tests/mb-utf8.at tests/noexec.at tests/syntax.at tests/subst.at \ - tests/variables.at tests/sh.dol.at + tests/mb-utf8.at tests/noexec.at tests/parenthesis.at tests/syntax.at \ + tests/subst.at tests/variables.at tests/sh.dol.at VHSRCS=${PVSRCS} ${AVSRCS} @@ -533,11 +533,11 @@ tc.const.h: tc.const.c sh.char.h config. ${CPP} $(CPPFLAGS) ${DFLAGS} ${EXTRAFLAGS} -D_h_tc_const\ $(srcdir)/tc.const.c | \ sed -n -e 's/^\(Char STR[a-zA-Z0-9_]*\) *\[ *\].*/extern \1[];/p' | \ - sort >> $@.tmp + LC_COLLATE=C sort >> $@.tmp @echo '#endif /* _h_tc_const */' >> $@.tmp @if [ -f $@ ] && cmp -s $@.tmp $@; then echo $@ unchanged.; rm -f $@.tmp; else mv -f $@.tmp $@; echo $@ recreated.; fi -$(srcdir)/tests/package.m4: $(srcdir)/configure.in +$(srcdir)/tests/package.m4: $(srcdir)/configure.ac { \ echo '# Signature of the current package.'; \ echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ @@ -594,12 +594,12 @@ vgrind: @vgrind -t -x -h Index index >/crp/bill/csh/index.t install-strip: install + -strip ${DESTBIN}/tcsh$(EXEEXT) install: tcsh$(EXEEXT) install.catalogs install.man -mkdir -p ${DESTBIN} -mv -f ${DESTBIN}/tcsh$(EXEEXT) ${DESTBIN}/tcsh.old cp tcsh$(EXEEXT) ${DESTBIN}/tcsh$(EXEEXT) - -strip ${DESTBIN}/tcsh$(EXEEXT) chmod 755 ${DESTBIN}/tcsh$(EXEEXT) install.catalogs: @@ -623,25 +623,6 @@ install.man: tcsh.man # nroff -man tcsh.man | compress > ${DESTMAN}/tcsh.${MANSECT}.Z # chmod 444 ${DESTMAN}/tcsh.${MANSECT}.Z -install.cygwin: install - -gzip ${DESTMAN}/tcsh.${MANSECT} - -mkdir -p ${DESTDIR}${prefix}/share/doc/tcsh - cp ${srcdir}/FAQ ${srcdir}/Fixes ${DESTDIR}${prefix}/share/doc/tcsh - cp ${srcdir}/NewThings ${srcdir}/README ${DESTDIR}${prefix}/share/doc/tcsh - cp ${srcdir}/WishList ${srcdir}/Y2K ${DESTDIR}${prefix}/share/doc/tcsh - perl ${srcdir}/tcsh.man2html ${srcdir}/tcsh.man - cp -rp tcsh.html ${DESTDIR}${prefix}/share/doc/tcsh - -mkdir -p ${DESTDIR}/etc/defaults/etc/profile.d - -mkdir -p ${DESTDIR}/etc/profile.d - -mkdir -p ${DESTDIR}/etc/postinstall - -mkdir -p ${DESTDIR}/etc/preremove - cp -p ${srcdir}/cygwin/csh.cshrc ${DESTDIR}/etc/defaults/etc - cp -p ${srcdir}/cygwin/csh.login ${DESTDIR}/etc/defaults/etc - cp -p ${srcdir}/cygwin/bindkey.tcsh ${DESTDIR}/etc/defaults/etc/profile.d - cp -p ${srcdir}/complete.tcsh ${DESTDIR}/etc/defaults/etc/profile.d - cp -p ${srcdir}/cygwin/postinstall.sh ${DESTDIR}/etc/postinstall/tcsh.sh - cp -p ${srcdir}/cygwin/preremove.sh ${DESTDIR}/etc/preremove/tcsh.sh - clean: clean.catalogs ${RM} -f a.out strings x.c xs.c tcsh$(EXEEXT) tcsh.a _MAKE_LOG gethost ${RM} -f *.${SUF} *.i *.s @@ -748,11 +729,11 @@ ftp: tcsh-${VERSION}.tar.Z tcsh.tahoe-${ autoconfigure: $(srcdir)/configure $(srcdir)/config.h.in -$(srcdir)/configure: $(srcdir)/configure.in +$(srcdir)/configure: $(srcdir)/configure.ac cd $(srcdir) && autoconf $(srcdir)/config.h.in: $(srcdir)/stamp-h.in -$(srcdir)/stamp-h.in: $(srcdir)/configure.in +$(srcdir)/stamp-h.in: $(srcdir)/configure.ac cd $(srcdir) && autoheader @echo timestamp > $(srcdir)/stamp-h.in @@ -787,6 +768,9 @@ ${TWOBJS} ${TWINC}: ${TWH} # glob.h glob.${SUF} sh.glob.${SUF}: glob.h +# dotlock.h +dotlock.${SUF}: dotlock.h + # ed.defns.h EDDINC=tc.bind.${SUF} tc.func.${SUF} tc.os.${SUF} ${EDOBJS} ${EDDINC}: ed.defns.h Modified: head/contrib/tcsh/Makefile.std ============================================================================== --- head/contrib/tcsh/Makefile.std Sat Mar 25 13:17:48 2017 (r315947) +++ head/contrib/tcsh/Makefile.std Sat Mar 25 13:32:28 2017 (r315948) @@ -1,4 +1,4 @@ -# $tcsh: Makefile.std,v 1.97 2006/03/02 18:46:44 christos Exp $ +# $tcsh: Makefile.std,v 1.100 2015/08/24 20:09:04 kim Exp $ # Makefile.std 4.3 6/11/83 # # C Shell with process control; VM/UNIX VAX Makefile @@ -287,14 +287,14 @@ ASSRCS= sh.c sh.dir.c sh.dol.c sh.err.c sh.exp.c sh.file.c sh.func.c sh.glob.c sh.hist.c sh.init.c \ sh.lex.c sh.misc.c sh.parse.c sh.print.c sh.proc.c sh.sem.c \ sh.set.c sh.time.c sh.char.h sh.dir.h sh.proc.h sh.h -PSSRCS= sh.decls.h glob.c glob.h mi.termios.c mi.wait.h mi.varargs.h ma.setp.c \ +PSSRCS= sh.decls.h glob.c glob.h dotlock.c dotlock.h mi.termios.c mi.wait.h mi.varargs.h ma.setp.c \ vms.termcap.c SHSRCS= ${ASSRCS} ${PSSRCS} SHOBJS= sh.${SUF} sh.dir.${SUF} sh.dol.${SUF} sh.err.${SUF} sh.exec.${SUF} \ sh.char.${SUF} sh.exp.${SUF} sh.file.${SUF} sh.func.${SUF} \ sh.glob.${SUF} sh.hist.${SUF} sh.init.${SUF} sh.lex.${SUF} \ sh.misc.${SUF} sh.parse.${SUF} sh.print.${SUF} sh.proc.${SUF} \ - sh.sem.${SUF} sh.set.${SUF} sh.time.${SUF} glob.${SUF} \ + sh.sem.${SUF} sh.set.${SUF} sh.time.${SUF} glob.${SUF} dotlock.${SUF} \ mi.termios.${SUF} ma.setp.${SUF} vms.termcap.${SUF} TWSRCS= tw.decls.h tw.h tw.help.c tw.init.c tw.parse.c tw.spell.c \ @@ -321,7 +321,8 @@ AVSRCS= Fixes MAKEDIFFS MAKESHAR NewThin WishList config_f.h eight-bit.me glob.3 patchlevel.h \ pathnames.h tcsh.man Ported src.desc Imakefile imake.config \ README.imake complete.tcsh vmsreadme.txt termcap.vms snames.h \ - host.defs gethost.c tcsh.man2html configure.in configure config.h.in + host.defs gethost.c tcsh.man2html configure.ac configure config.h.in \ + aclocal.m4 VHSRCS=${PVSRCS} ${AVSRCS} @@ -424,7 +425,7 @@ tc.const.h: tc.const.c sh.char.h config. ${CPP} $(INCLUDES) ${DFLAGS} ${EXTRAFLAGS} -D_h_tc_const\ $(srcdir)/tc.const.c | grep 'Char STR' | \ sed -e 's/Char \([a-zA-Z0-9_]*\) *\[ *\].*/extern Char \1[];/' | \ - sort >> $@ + LC_COLLATE=C sort >> $@ @echo '#endif /* _h_tc_const */' >> $@ csh.prof: ${OBJS} sh.prof.${SUF} mcrt0.${SUF} @@ -584,11 +585,11 @@ ftp: tcsh-${VERSION}.tar.Z tcsh.tahoe-${ autoconfigure: $(srcdir)/configure $(srcdir)/config.h.in -$(srcdir)/configure: $(srcdir)/configure.in +$(srcdir)/configure: $(srcdir)/configure.ac cd $(srcdir) && autoconf $(srcdir)/config.h.in: $(srcdir)/stamp-h.in -$(srcdir)/stamp-h.in: $(srcdir)/configure.in +$(srcdir)/stamp-h.in: $(srcdir)/configure.ac cd $(srcdir) && autoheader @echo timestamp > $(srcdir)/stamp-h.in @@ -620,6 +621,9 @@ ${TWOBJS} ${TWINC}: ${TWH} # glob.h glob.${SUF} sh.glob.${SUF}: glob.h +# dotlock.h +dotlock.${SUF}: dotlock.h + # ed.defns.h EDDINC=tc.bind.${SUF} tc.func.${SUF} tc.os.${SUF} ${EDOBJS} ${EDDINC}: ed.defns.h Modified: head/contrib/tcsh/Makefile.vms ============================================================================== --- head/contrib/tcsh/Makefile.vms Sat Mar 25 13:17:48 2017 (r315947) +++ head/contrib/tcsh/Makefile.vms Sat Mar 25 13:32:28 2017 (r315948) @@ -1,4 +1,4 @@ -# $tcsh: Makefile.vms,v 1.39 2006/03/02 18:46:44 christos Exp $ +# $tcsh: Makefile.vms,v 1.40 2014/07/07 20:34:58 christos Exp $ # Makefile.vms 4.3 6/11/83 # # C Shell with process control; VM/UNIX VAX Makefile @@ -299,7 +299,7 @@ AVSRCS= Fixes MAKEDIFFS MAKESHAR NewThin WishList config_f.h eight-bit.me glob.3 patchlevel.h \ pathnames.h tcsh.man Ported src.desc Imakefile imake.config \ README.imake complete.tcsh vmsreadme.txt termcap.vms snames.h \ - host.defs gethost.c tcsh.man2html configure.in + host.defs gethost.c tcsh.man2html configure.ac aclocal.m4 VHSRCS=${PVSRCS} ${AVSRCS} Modified: head/contrib/tcsh/README ============================================================================== --- head/contrib/tcsh/README Sat Mar 25 13:17:48 2017 (r315947) +++ head/contrib/tcsh/README Sat Mar 25 13:32:28 2017 (r315948) @@ -1,4 +1,4 @@ -This is tcsh version 6.18.01. Tcsh is a version of the Berkeley +This is tcsh version 6.20.00. Tcsh is a version of the Berkeley C-Shell, with the addition of: a command line editor, command and file name completion, listing, etc. and a bunch of small additions to the shell itself. Modified: head/contrib/tcsh/complete.tcsh ============================================================================== --- head/contrib/tcsh/complete.tcsh Sat Mar 25 13:17:48 2017 (r315947) +++ head/contrib/tcsh/complete.tcsh Sat Mar 25 13:32:28 2017 (r315948) @@ -1,5 +1,5 @@ # -# $tcsh: complete.tcsh,v 1.52 2010/05/07 17:54:13 christos Exp $ +# $tcsh: complete.tcsh,v 1.56 2015/07/03 16:52:47 christos Exp $ # example file using the new completion code # # Debian GNU/Linux @@ -20,1209 +20,1262 @@ # Cleanup by Martin A. Godisch . onintr - -if (! $?prompt) goto end +if ( ! $?prompt ) goto end -if ($?tcsh) then - if ($tcsh != 1) then - set rev=$tcsh:r - set rel=$rev:e - set pat=$tcsh:e - set rev=$rev:r +if ( $?tcsh ) then + if ( $tcsh != 1 ) then + set rev=$tcsh:r:r + set rel=$tcsh:r:e + if ( $rev > 6 || ( $rev > 5 && $rel > 1 ) ) then + set _has_complete=1 endif - if ($rev > 5 && $rel > 1) then - set _complete=1 - endif - unset rev rel pat + endif + unset rev rel endif -if ($?_complete) then - set noglob - if ( ! $?hosts ) set hosts - foreach f ("$HOME/.hosts" /usr/local/etc/csh.hosts "$HOME/.rhosts" /etc/hosts.equiv) - if ( -r "$f" ) then - set hosts = ($hosts `grep -v "+" "$f" | grep -E -v "^#" | tr -s " " " " | cut -f 1`) - endif - end - if ( -r "$HOME/.netrc" ) then - set f=`awk '/machine/ { print $2 }' < "$HOME/.netrc"` >& /dev/null - set hosts=($hosts $f) - endif - if ( -r "$HOME/.ssh/known_hosts" ) then - set f=`cat "$HOME/.ssh/known_hosts" | cut -f 1 -d \ ` >& /dev/null - set f=`cat "$HOME/.ssh/known_hosts" | cut -f 1 -d \ | sed -e 's/,/ /g'` >& /dev/null - set hosts=($hosts $f) - endif - unset f - if ( ! $?hosts ) then - set hosts=(hyperion.ee.cornell.edu phaeton.ee.cornell.edu \ - guillemin.ee.cornell.edu vangogh.cs.berkeley.edu \ - ftp.uu.net prep.ai.mit.edu export.lcs.mit.edu \ - labrea.stanford.edu sumex-aim.stanford.edu \ - tut.cis.ohio-state.edu) - endif +if ( ! $?_has_complete ) goto end - complete ywho n/*/\$hosts/ # argument from list in $hosts - complete rsh p/1/\$hosts/ c/-/"(l n)"/ n/-l/u/ N/-l/c/ n/-/c/ p/2/c/ p/*/f/ - complete ssh p/1/\$hosts/ c/-/"(l n)"/ n/-l/u/ N/-l/c/ n/-/c/ p/2/c/ p/*/f/ - complete xrsh p/1/\$hosts/ c/-/"(l 8 e)"/ n/-l/u/ N/-l/c/ n/-/c/ p/2/c/ p/*/f/ - complete rlogin p/1/\$hosts/ c/-/"(l 8 e)"/ n/-l/u/ - complete telnet p/1/\$hosts/ p/2/x:''/ n/*/n/ - - complete cd p/1/d/ # Directories only - complete chdir p/1/d/ - complete pushd p/1/d/ - complete popd p/1/d/ - complete pu p/1/d/ - complete po p/1/d/ - complete complete p/1/X/ # Completions only - complete uncomplete n/*/X/ - complete exec p/1/c/ # Commands only - complete trace p/1/c/ - complete strace p/1/c/ - complete which n/*/c/ - complete where n/*/c/ - complete skill p/1/c/ - complete dde p/1/c/ - complete adb c/-I/d/ n/-/c/ N/-/"(core)"/ p/1/c/ p/2/"(core)"/ - complete sdb p/1/c/ - complete dbx c/-I/d/ n/-/c/ N/-/"(core)"/ p/1/c/ p/2/"(core)"/ - complete xdb p/1/c/ - complete gdb n/-d/d/ n/*/c/ - complete ups p/1/c/ - complete set 'c/*=/f/' 'p/1/s/=' 'n/=/f/' - complete unset n/*/s/ - complete alias p/1/a/ # only aliases are valid - complete unalias n/*/a/ - complete xdvi n/*/f:*.dvi/ # Only files that match *.dvi - complete dvips n/*/f:*.dvi/ - if ($?traditional_complete) then - complete tex n/*/f:*.tex/ # Only files that match *.tex - else - complete tex n/*/f:*.{tex,texi}/ # Files that match *.tex and *.texi - endif - complete latex n/*/f:*.{tex,ltx}/ - complete su c/--/"(login fast preserve-environment command shell \ - help version)"/ c/-/"(f l m p c s -)"/ \ - n/{-c,--command}/c/ \ - n@{-s,--shell}@'`cat /etc/shells`'@ n/*/u/ - complete cc c/-[IL]/d/ \ - c@-l@'`\ls -1 /usr/lib/lib*.a | sed s%^.\*/lib%%\;s%\\.a\$%%`'@ \ - c/-/"(o l c g L I D U)"/ n/*/f:*.[coasi]/ - complete acc c/-[IL]/d/ \ - c@-l@'`\ls -1 /usr/lang/SC1.0/lib*.a | sed s%^.\*/lib%%\;s%\\.a\$%%`'@ \ - c/-/"(o l c g L I D U)"/ n/*/f:*.[coasi]/ - complete gcc c/-[IL]/d/ \ - c/-f/"(caller-saves cse-follow-jumps delayed-branch \ - elide-constructors expensive-optimizations \ - float-store force-addr force-mem inline \ - inline-functions keep-inline-functions \ - memoize-lookups no-default-inline \ - no-defer-pop no-function-cse omit-frame-pointer \ - rerun-cse-after-loop schedule-insns \ - schedule-insns2 strength-reduce \ - thread-jumps unroll-all-loops \ - unroll-loops syntax-only all-virtual \ - cond-mismatch dollars-in-identifiers \ - enum-int-equiv no-asm no-builtin \ - no-strict-prototype signed-bitfields \ - signed-char this-is-variable unsigned-bitfields \ - unsigned-char writable-strings call-saved-reg \ - call-used-reg fixed-reg no-common \ - no-gnu-binutils nonnull-objects \ - pcc-struct-return pic PIC shared-data \ - short-enums short-double volatile)"/ \ - c/-W/"(all aggregate-return cast-align cast-qual \ - comment conversion enum-clash error format \ - id-clash-len implicit missing-prototypes \ - no-parentheses pointer-arith return-type shadow \ - strict-prototypes switch uninitialized unused \ - write-strings)"/ \ - c/-m/"(68000 68020 68881 bitfield fpa nobitfield rtd \ - short c68000 c68020 soft-float g gnu unix fpu \ - no-epilogue)"/ \ - c/-d/"(D M N)"/ \ - c/-/"(f W vspec v vpath ansi traditional \ - traditional-cpp trigraphs pedantic x o l c g L \ - I D U O O2 C E H B b V M MD MM i dynamic \ - nodtdlib static nostdinc undef)"/ \ - c/-l/f:*.a/ \ - n/*/f:*.{c,C,cc,o,a,s,i}/ - complete g++ n/*/f:*.{C,cc,o,s,i}/ - complete CC n/*/f:*.{C,cc,cpp,o,s,i}/ - complete rm c/--/"(directory force interactive verbose \ - recursive help version)"/ c/-/"(d f i v r R -)"/ \ - n/*/f:^*.{c,cc,C,h,in}/ # Protect precious files - complete vi n/*/f:^*.[oa]/ - complete bindkey N/-a/b/ N/-c/c/ n/-[ascr]/'x:'/ \ - n/-[svedlr]/n/ c/-[vedl]/n/ c/-/"(a s k c v e d l r)"/\ - n/-k/"(left right up down)"/ p/2-/b/ \ - p/1/'x:'/ - - complete find n/-fstype/"(nfs 4.2)"/ n/-name/f/ \ - n/-type/"(c b d f p l s)"/ n/-user/u/ n/-group/g/ \ - n/-exec/c/ n/-ok/c/ n/-cpio/f/ n/-ncpio/f/ n/-newer/f/ \ - c/-/"(fstype name perm prune type user nouser \ - group nogroup size inum atime mtime ctime exec \ - ok print ls cpio ncpio newer xdev depth \ - daystart follow maxdepth mindepth noleaf version \ - anewer cnewer amin cmin mmin true false uid gid \ - ilname iname ipath iregex links lname empty path \ - regex used xtype fprint fprint0 fprintf \ - print0 printf not a and o or)"/ \ - n/*/d/ - - complete -%* c/%/j/ # fill in the jobs builtin - complete {fg,bg,stop} c/%/j/ p/1/"(%)"// - - complete limit c/-/"(h)"/ n/*/l/ - complete unlimit c/-/"(h)"/ n/*/l/ - - complete -co* p/0/"(compress)"/ # make compress completion - # not ambiguous - if ($?traditional_complete) then - complete zcat n/*/f:*.Z/ - else - # "zcat" may be linked to "compress" or "gzip" - if (-X zcat) then - zcat --version >& /dev/null - if ($status != 0) then - complete zcat n/*/f:*.Z/ - else - complete zcat c/--/"(force help license quiet version)"/ \ - c/-/"(f h L q V -)"/ n/*/f:*.{gz,Z,z,zip}/ - endif - endif - endif +if ( ! $?noglob ) set noglob _unset_noglob - complete finger c/*@/\$hosts/ n/*/u/@ - complete ping p/1/\$hosts/ - complete traceroute p/1/\$hosts/ - - complete {talk,ntalk,phone} p/1/'`users | tr " " "\012" | uniq`'/ \ - n/*/\`who\ \|\ grep\ \$:1\ \|\ awk\ \'\{\ print\ \$2\ \}\'\`/ - - complete ftp c/-/"(d i g n v)"/ n/-/\$hosts/ p/1/\$hosts/ n/*/n/ - - # this one is simple... - #complete rcp c/*:/f/ C@[./\$~]*@f@ n/*/\$hosts/: - # From Michael Schroeder - # This one will rsh to the file to fetch the list of files! - complete rcp 'c%*@*:%`set q=$:-0;set q="$q:s/@/ /";set q="$q:s/:/ /";set q=($q " ");rsh $q[2] -l $q[1] ls -dp $q[3]\*`%' 'c%*:%`set q=$:-0;set q="$q:s/:/ /";set q=($q " ");rsh $q[1] ls -dp $q[2]\*`%' 'c%*@%$hosts%:' 'C@[./$~]*@f@' 'n/*/$hosts/:' - - complete dd c/--/"(help version)"/ c/[io]f=/f/ \ - c/conv=*,/"(ascii ebcdic ibm block unblock \ - lcase notrunc ucase swab noerror sync)"/,\ - c/conv=/"(ascii ebcdic ibm block unblock \ - lcase notrunc ucase swab noerror sync)"/,\ - c/*=/x:''/ \ - n/*/"(if of conv ibs obs bs cbs files skip file seek count)"/= - - complete nslookup p/1/x:''/ p/2/\$hosts/ - - complete ar c/[dmpqrtx]/"(c l o u v a b i)"/ p/1/"(d m p q r t x)"// \ - p/2/f:*.a/ p/*/f:*.o/ - - # these should be merged with the MH completion hacks below - jgotts - complete {refile,sprev,snext,scan,pick,rmm,inc,folder,show} \ - "c@+@F:$HOME/Mail/@" - - # these and interrupt handling from Jaap Vermeulen - complete {rexec,rxexec,rxterm,rmterm} \ - 'p/1/$hosts/' 'c/-/(l L E)/' 'n/-l/u/' 'n/-L/f/' \ - 'n/-E/e/' 'n/*/c/' - complete kill 'c/-/S/' 'c/%/j/' \ - 'n/*/`ps -u $LOGNAME | awk '"'"'{print $1}'"'"'`/' - - # these from Marc Horowitz - complete attach 'n/-mountpoint/d/' 'n/-m/d/' 'n/-type/(afs nfs rvd ufs)/' \ - 'n/-t/(afs nfs rvd ufs)/' 'n/-user/u/' 'n/-U/u/' \ - 'c/-/(verbose quiet force printpath lookup debug map \ - nomap remap zephyr nozephyr readonly write \ - mountpoint noexplicit explicit type mountoptions \ - nosetuid setuid override skipfsck lock user host)/' \ - 'n/-e/f/' 'n/*/()/' - complete hesinfo 'p/1/u/' \ - 'p/2/(passwd group uid grplist pcap pobox cluster \ - filsys sloc service)/' - - # these from E. Jay Berkenbilt - # = isn't always followed by a filename or a path anymore - jgotts - if ($?traditional_complete) then - complete ./configure \ - 'c/--*=/f/' 'c/--{cache-file,prefix,exec-prefix,\ - bindir,sbindir,libexecdir,datadir,\ - sysconfdir,sharedstatedir,localstatedir,\ - libdir,includedir,oldincludedir,infodir,\ - mandir,srcdir}/(=)//' \ - 'c/--/(cache-file verbose prefix exec-prefix bindir \ - sbindir libexecdir datadir sysconfdir \ - sharedstatedir localstatedir libdir \ - includedir oldincludedir infodir mandir \ - srcdir)//' - else - complete ./configure \ - 'c@--{prefix,exec-prefix,bindir,sbindir,libexecdir,datadir,sysconfdir,sharedstatedir,localstatedir,infodir,mandir,srcdir,x-includes,x-libraries}=*@x:'@ \ - 'c/--cachefile=*/x:/' \ - 'c/--{enable,disable,with}-*/x://' \ - 'c/--*=/x://' \ - 'c/--/(prefix= exec-prefix= bindir= \ - sbindir= libexecdir= datadir= sysconfdir= \ - sharedstatedir= localstatedir= infodir= \ - mandir= srcdir= x-includes= x-libraries= cachefile= \ - enable- disable- with- \ - help no-create quiet silent version verbose )//' - endif - complete gs 'c/-sDEVICE=/(x11 cdjmono cdj550 epson eps9high epsonc \ - dfaxhigh dfaxlow laserjet ljet4 sparc pbm \ - pbmraw pgm pgmraw ppm ppmraw bit)/' \ - 'c/-sOutputFile=/f/' 'c/-s/(DEVICE OutputFile)/=' \ - 'c/-d/(NODISPLAY NOPLATFONTS NOPAUSE)/' 'n/*/f/' - complete perl 'n/-S/c/' - complete printenv 'n/*/e/' - complete sccs p/1/"(admin cdc check clean comb deledit delget \ - delta diffs edit enter fix get help info \ - print prs prt rmdel sccsdiff tell unedit \ - unget val what)"/ - complete setenv 'p/1/e/' 'c/*:/f/' - - # these and method of setting hosts from Kimmo Suominen - if ( -f "$HOME/.mh_profile" && -x "`which folders`" ) then - - if ( ! $?FOLDERS ) setenv FOLDERS "`folders -fast -recurse`" - if ( ! $?MHA ) setenv MHA "`ali | sed -e '/^ /d' -e 's/:.*//'`" - - set folders = ( $FOLDERS ) - set mha = ( $MHA ) - - complete ali \ - 'c/-/(alias nolist list nonormalize normalize nouser user help)/' \ - 'n,-alias,f,' - - complete anno \ - 'c/-/(component noinplace inplace nodate date text help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete burst \ - 'c/-/(noinplace inplace noquiet quiet noverbose verbose help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete comp \ - 'c/-/(draftfolder draftmessage nodraftfolder editor noedit file form nouse use whatnowproc nowhatnowproc help)/' \ - 'c,+,$folders,' \ - 'n,-whatnowproc,c,' \ - 'n,-file,f,'\ - 'n,-form,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete dist \ - 'c/-/(noannotate annotate draftfolder draftmessage nodraftfolder editor noedit form noinplace inplace whatnowproc nowhatnowproc help)/' \ - 'c,+,$folders,' \ - 'n,-whatnowproc,c,' \ - 'n,-form,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete folder \ - 'c/-/(all nofast fast noheader header nopack pack noverbose verbose norecurse recurse nototal total noprint print nolist list push pop help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete folders \ - 'c/-/(all nofast fast noheader header nopack pack noverbose verbose norecurse recurse nototal total noprint print nolist list push pop help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete forw \ - 'c/-/(noannotate annotate draftfolder draftmessage nodraftfolder editor noedit filter form noformat format noinplace inplace digest issue volume whatnowproc nowhatnowproc help)/' \ - 'c,+,$folders,' \ - 'n,-whatnowproc,c,' \ - 'n,-filter,f,'\ - 'n,-form,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete inc \ - 'c/-/(audit file noaudit nochangecur changecur file form format nosilent silent notruncate truncate width help)/' \ - 'c,+,$folders,' \ - 'n,-audit,f,'\ - 'n,-form,f,' - - complete mark \ - 'c/-/(add delete list sequence nopublic public nozero zero help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete mhmail \ - 'c/-/(body cc from subject help)/' \ - 'n,-cc,$mha,' \ - 'n,-from,$mha,' \ - 'n/*/$mha/' - - complete mhpath \ - 'c/-/(help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete msgchk \ - 'c/-/(nodate date nonotify notify help)/' - - complete msh \ - 'c/-/(prompt noscan scan notopcur topcur help)/' - - complete next \ - 'c/-/(draft form moreproc nomoreproc length width showproc noshowproc header noheader help)/' \ - 'c,+,$folders,' \ - 'n,-moreproc,c,' \ - 'n,-showproc,c,' \ - 'n,-form,f,' - - complete packf \ - 'c/-/(file help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete pick \ - 'c/-/(and or not lbrace rbrace cc date from search subject to othercomponent after before datefield sequence nopublic public nozero zero nolist list help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete prev \ - 'c/-/(draft form moreproc nomoreproc length width showproc noshowproc header noheader help)/' \ - 'c,+,$folders,' \ - 'n,-moreproc,c,' \ - 'n,-showproc,c,' \ - 'n,-form,f,' - - complete prompter \ - 'c/-/(erase kill noprepend prepend norapid rapid nodoteof doteof help)/' - - complete refile \ - 'c/-/(draft nolink link nopreserve preserve src file help)/' \ - 'c,+,$folders,' \ - 'n,-file,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete rmf \ - 'c/-/(nointeractive interactive help)/' \ - 'c,+,$folders,' - - complete rmm \ - 'c/-/(help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete scan \ - 'c/-/(noclear clear form format noheader header width noreverse reverse file help)/' \ - 'c,+,$folders,' \ - 'n,-form,f,'\ - 'n,-file,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete send \ - 'c/-/(alias draft draftfolder draftmessage nodraftfolder filter nofilter noformat format noforward forward nomsgid msgid nopush push noverbose verbose nowatch watch width help)/' \ - 'n,-alias,f,'\ - 'n,-filter,f,' - - complete show \ - 'c/-/(draft form moreproc nomoreproc length width showproc noshowproc header noheader help)/' \ - 'c,+,$folders,' \ - 'n,-moreproc,c,' \ - 'n,-showproc,c,' \ - 'n,-form,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete sortm \ - 'c/-/(datefield textfield notextfield limit nolimit noverbose verbose help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete vmh \ - 'c/-/(prompt vmhproc novmhproc help)/' \ - 'n,-vmhproc,c,' - - complete whatnow \ - 'c/-/(draftfolder draftmessage nodraftfolder editor noedit prompt help)/' - - complete whom \ - 'c/-/(alias nocheck check draft draftfolder draftmessage nodraftfolder help)/' \ - 'n,-alias,f,' - - complete plum \ - 'c/-/()/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete mail \ - 'c/-/()/' \ - 'n/*/$mha/' +# Old TCSH versions don't define OSTYPE. +# Use a close approximation instead. - endif +if ( ! $?OSTYPE ) then + setenv OSTYPE `echo "$HOSTTYPE" | sed -e 's/^(i[3456]86|(amd|x86_)64)-//'` +endif - #from Dan Nicolaescu - if ( $?MODULESHOME ) then - alias Compl_module 'find ${MODULEPATH:as/:/ /} -name .version -o -name .modulea\* -prune -o -print | sed `echo "-e s@${MODULEPATH:as%:%/\*@@g -e s@%}/\*@@g"`' - complete module 'p%1%(add load unload switch display avail use unuse update purge list clear help initadd initrm initswitch initlist initclear)%' \ - 'n%{unl*,sw*,inits*}%`echo "$LOADEDMODULES:as/:/ /"`%' \ - 'n%{lo*,di*,he*,inita*,initr*}%`eval Compl_module`%' \ - 'N%{sw*,initsw*}%`eval Compl_module`%' 'C%-%(-append)%' 'n%{use,unu*,av*}%d%' 'n%-append%d%' \ - 'C%[^-]*%`eval Compl_module`%' - endif +if ( ! $?hosts ) set hosts + +foreach f ( "$HOME/."{,r,ssh/known_}hosts* \ + /usr/local/etc/csh.hosts /etc/hosts.equiv ) + if ( -r "$f" ) then + set hosts=($hosts `sed \ + -e 's/#.*//' \ + -e '/^[+-]@/d' \ + -e 's/^[-+]//' \ + -e 's/[[:space:]].*//' \ + -e 's/,/\n/g' "$f" \ + | sed -e '/^[.:[:xdigit:][:space:]]*$/d'`) + endif +end +unset f + +if ( -r "$HOME/.netrc" ) then + set hosts=($hosts `awk '$1 == "machine" { print $2 }' "$HOME/.netrc"`) +endif + +set hosts=(`echo $hosts | tr ' ' '\012' | sort -u`) + +if ( ! $#hosts ) then + # This is just a hint for the user. + set hosts=(ftp.funet.fi ftp.gnu.org ftp.uu.net) +endif + +complete ywho n/*/\$hosts/ # argument from list in $hosts +complete rsh p/1/\$hosts/ c/-/"(l n)"/ n/-l/u/ N/-l/c/ n/-/c/ p/2/c/ p/*/f/ +complete ssh p/1/\$hosts/ c/-/"(l n)"/ n/-l/u/ N/-l/c/ n/-/c/ p/2/c/ p/*/f/ +complete xrsh p/1/\$hosts/ c/-/"(l 8 e)"/ n/-l/u/ N/-l/c/ n/-/c/ p/2/c/ p/*/f/ +complete rlogin p/1/\$hosts/ c/-/"(l 8 e)"/ n/-l/u/ +complete telnet p/1/\$hosts/ p/2/x:''/ n/*/n/ + +complete cd p/1/d/ # Directories only +complete chdir p/1/d/ +complete pushd p/1/d/ +complete popd p/1/d/ +complete pu p/1/d/ +complete po p/1/d/ +complete complete p/1/X/ # Completions only +complete uncomplete n/*/X/ +complete exec p/1/c/ # Commands only +complete trace p/1/c/ +complete strace p/1/c/ +complete which n/*/c/ +complete where n/*/c/ +complete skill p/1/c/ +complete dde p/1/c/ +complete adb c/-I/d/ n/-/c/ N/-/"(core)"/ p/1/c/ p/2/"(core)"/ +complete sdb p/1/c/ +complete dbx c/-I/d/ n/-/c/ N/-/"(core)"/ p/1/c/ p/2/"(core)"/ +complete xdb p/1/c/ +complete gdb n/-d/d/ n/*/c/ +complete ups p/1/c/ +complete set 'c/*=/f/' 'p/1/s/=' 'n/=/f/' +complete unset n/*/s/ +complete alias p/1/a/ # only aliases are valid +complete unalias n/*/a/ +complete xdvi n/*/f:*.dvi/ +complete dvips n/*/f:*.dvi/ +complete tex n/*/f:*.{tex,texi}/ +complete latex n/*/f:*.{tex,ltx}/ + +complete su \ + c/--/"(login fast preserve-environment command shell help version)"/ \ + c/-/"(f l m p c s -)"/ \ + n/{-c,--command}/c/ \ + n@{-s,--shell}@'`cat /etc/shells`'@ \ + n/*/u/ +complete cc \ + c/-[IL]/d/ \ + c@-l@'`\ls -1 /usr/lib/lib*.a | sed s%^.\*/lib%%\;s%\\.a\$%%`'@ \ + c/-/"(o l c g L I D U)"/ n/*/f:*.[coasi]/ +complete acc \ + c/-[IL]/d/ \ + c@-l@'`\ls -1 /usr/lang/SC1.0/lib*.a | sed s%^.\*/lib%%\;s%\\.a\$%%`'@ \ + c/-/"(o l c g L I D U)"/ n/*/f:*.[coasi]/ +complete gcc \ + c/-[IL]/d/ \ + c/-f/"(caller-saves cse-follow-jumps delayed-branch elide-constructors \ + expensive-optimizations float-store force-addr force-mem inline \ + inline-functions keep-inline-functions memoize-lookups \ + no-default-inline no-defer-pop no-function-cse omit-frame-pointer \ + rerun-cse-after-loop schedule-insns schedule-insns2 strength-reduce \ + thread-jumps unroll-all-loops unroll-loops syntax-only all-virtual \ + cond-mismatch dollars-in-identifiers enum-int-equiv no-asm no-builtin \ + no-strict-prototype signed-bitfields signed-char this-is-variable \ + unsigned-bitfields unsigned-char writable-strings call-saved-reg \ + call-used-reg fixed-reg no-common no-gnu-binutils nonnull-objects \ + pcc-struct-return pic PIC shared-data short-enums short-double \ + volatile)"/ \ + c/-W/"(all aggregate-return cast-align cast-qual comment conversion \ + enum-clash error format id-clash-len implicit missing-prototypes \ + no-parentheses pointer-arith return-type shadow strict-prototypes \ + switch uninitialized unused write-strings)"/ \ + c/-m/"(68000 68020 68881 bitfield fpa nobitfield rtd short c68000 c68020 \ + soft-float g gnu unix fpu no-epilogue)"/ \ + c/-d/"(D M N)"/ \ + c/-/"(f W vspec v vpath ansi traditional traditional-cpp trigraphs pedantic \ + x o l c g L I D U O O2 C E H B b V M MD MM i dynamic nodtdlib static \ + nostdinc undef)"/ \ + c/-l/f:*.a/ \ + n/*/f:*.{c,C,cc,o,a,s,i}/ +complete g++ n/*/f:*.{C,cc,o,s,i}/ +complete CC n/*/f:*.{C,cc,cpp,o,s,i}/ +complete rm \ + c/--/"(directory force interactive verbose recursive help version)"/ \ + c/-/"(d f i v r R -)"/ \ + n/*/f:^*.{c,cc,C,h,in}/ + # Protect precious files +complete vi n/*/f:^*.[oa]/ +complete bindkey \ + N/-a/b/ N/-c/c/ n/-[ascr]/'x:'/ \ + n/-[svedlr]/n/ c/-[vedl]/n/ c/-/"(a s k c v e d l r)"/ \ + n/-k/"(left right up down)"/ p/2-/b/ \ + p/1/'x:'/ + +complete find \ + n/-fstype/"(nfs 4.2)"/ \ + n/-name/f/ \ + n/-type/"(c b d f p l s)"/ \ + n/-user/u/ \ + n/-group/g/ \ + n/-exec/c/ \ + n/-ok/c/ \ + n/-cpio/f/ \ + n/-ncpio/f/ \ + n/-newer/f/ \ + c/-/"(fstype name perm prune type user nouser group nogroup size inum \ + atime mtime ctime exec ok print ls cpio ncpio newer xdev depth \ + daystart follow maxdepth mindepth noleaf version anewer cnewer \ + amin cmin mmin true false uid gid ilname iname ipath iregex links \ + lname empty path regex used xtype fprint fprint0 fprintf print0 \ + printf not a and o or)"/ \ + n/*/d/ + +complete -%* c/%/j/ # fill in the jobs builtin +complete {fg,bg,stop} c/%/j/ p/1/"(%)"// + +complete limit c/-/"(h)"/ n/*/l/ +complete unlimit c/-/"(h)"/ n/*/l/ + +#complete -co* p/0/"(compress)"/ # make compress completion +# # not ambiguous + +# "zcat" may be linked to "compress" or "gzip" +if (-X zcat) then + zcat --version >& /dev/null + if ($status != 0) then + complete zcat n/*/f:*.Z/ + else + complete zcat c/--/"(force help license quiet version)"/ \ + c/-/"(f h L q V -)"/ \ + n/*/f:*.{gz,Z,z,zip}/ + endif +endif + +complete finger c/*@/\$hosts/ n/*/u/@ +complete ping p/1/\$hosts/ +complete traceroute p/1/\$hosts/ + +complete {talk,ntalk,phone} \ + p/1/'`users | tr " " "\012" | uniq`'/ \ + n/*/\`who\ \|\ grep\ \$:1\ \|\ awk\ \'\{\ print\ \$2\ \}\'\`/ + +complete ftp c/-/"(d i g n v)"/ n/-/\$hosts/ p/1/\$hosts/ n/*/n/ + +# this one is simple... +#complete rcp c/*:/f/ C@[./\$~]*@f@ n/*/\$hosts/: +# From Michael Schroeder +# This one will rsh to the file to fetch the list of files! *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Sat Mar 25 14:14:13 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 78491D1C614; Sat, 25 Mar 2017 14:14:13 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 52BEA1A1A; Sat, 25 Mar 2017 14:14:13 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PEECGu020900; Sat, 25 Mar 2017 14:14:12 GMT (envelope-from dchagin@FreeBSD.org) Received: (from dchagin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PEEBBL020895; Sat, 25 Mar 2017 14:14:11 GMT (envelope-from dchagin@FreeBSD.org) Message-Id: <201703251414.v2PEEBBL020895@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dchagin set sender to dchagin@FreeBSD.org using -f From: Dmitry Chagin Date: Sat, 25 Mar 2017 14:14:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315952 - head/contrib/tcsh X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 14:14:13 -0000 Author: dchagin Date: Sat Mar 25 14:14:11 2017 New Revision: 315952 URL: https://svnweb.freebsd.org/changeset/base/315952 Log: MFV r315950: Update vendor/tcsh to git b605cb561d Vendor changes: 1. PR/471: Daiki Ueno: Delay interpreting arginp until we've processed our startup files (which can change the NLS environment). 2. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar). 3. Fix out of bounds read (Brooks Davis) (reproduce by starting tcsh and hitting tab at the prompt). 4. Don't play pointer tricks that are undefined in modern c (Brooks Davis). Modified: head/contrib/tcsh/Fixes head/contrib/tcsh/ed.chared.c head/contrib/tcsh/sh.c head/contrib/tcsh/sh.func.c head/contrib/tcsh/tw.init.c Directory Properties: head/contrib/tcsh/ (props changed) Modified: head/contrib/tcsh/Fixes ============================================================================== --- head/contrib/tcsh/Fixes Sat Mar 25 14:12:12 2017 (r315951) +++ head/contrib/tcsh/Fixes Sat Mar 25 14:14:11 2017 (r315952) @@ -1,3 +1,4 @@ + 22. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar) 20. V6.20.00 - 20161124 19. Don't resize the screen if it did not change size. 18. V6.19.01 - 20161025 Modified: head/contrib/tcsh/ed.chared.c ============================================================================== --- head/contrib/tcsh/ed.chared.c Sat Mar 25 14:12:12 2017 (r315951) +++ head/contrib/tcsh/ed.chared.c Sat Mar 25 14:14:11 2017 (r315952) @@ -750,7 +750,7 @@ c_substitute(void) /* * If we found a history character, go expand it. */ - if (HIST != '\0' && *p == HIST) + if (p >= InputBuf && HIST != '\0' && *p == HIST) nr_exp = c_excl(p); else nr_exp = 0; Modified: head/contrib/tcsh/sh.c ============================================================================== --- head/contrib/tcsh/sh.c Sat Mar 25 14:12:12 2017 (r315951) +++ head/contrib/tcsh/sh.c Sat Mar 25 14:14:11 2017 (r315952) @@ -248,6 +248,7 @@ main(int argc, char **argv) char *tcp, *ttyn; int f, reenter; char **tempv; + const char *targinp = NULL; int osetintr; struct sigaction oparintr; @@ -937,30 +938,7 @@ main(int argc, char **argv) *p &= ASCII; } #endif - arginp = SAVE(tempv[0]); - - /* - * we put the command into a variable - */ - if (arginp != NULL) - setv(STRcommand, quote(Strsave(arginp)), VAR_READWRITE); - - /* - * * Give an error on -c arguments that end in * backslash to - * ensure that you don't make * nonportable csh scripts. - */ - { - int count; - - cp = Strend(arginp); - count = 0; - while (cp > arginp && *--cp == '\\') - ++count; - if ((count & 1) != 0) { - exiterr = 1; - stderror(ERR_ARGC); - } - } + targinp = tempv[0]; prompt = 0; nofile = 1; break; @@ -1205,7 +1183,7 @@ main(int argc, char **argv) sigset_interrupting(SIGXFSZ, queue_phup); #endif - if (quitit == 0 && arginp == 0) { + if (quitit == 0 && targinp == 0) { #ifdef SIGTSTP (void) signal(SIGTSTP, SIG_IGN); #endif @@ -1323,7 +1301,7 @@ main(int argc, char **argv) */ sigset_interrupting(SIGCHLD, queue_pchild); - if (intty && !arginp) + if (intty && !targinp) (void) ed_Setup(editing);/* Get the tty state, and set defaults */ /* Only alter the tty state if editing */ @@ -1358,7 +1336,7 @@ main(int argc, char **argv) #ifdef _PATH_DOTCSHRC (void) srcfile(_PATH_DOTCSHRC, 0, 0, NULL); #endif - if (!arginp && !onelflg && !havhash) + if (!targinp && !onelflg && !havhash) dohash(NULL,NULL); #ifndef LOGINFIRST #ifdef _PATH_DOTLOGIN @@ -1378,7 +1356,7 @@ main(int argc, char **argv) if (!srccat(varval(STRhome), STRsldottcshrc)) (void) srccat(varval(STRhome), STRsldotcshrc); - if (!arginp && !onelflg && !havhash) + if (!targinp && !onelflg && !havhash) dohash(NULL,NULL); /* @@ -1398,7 +1376,7 @@ main(int argc, char **argv) exitset--; /* Initing AFTER .cshrc is the Right Way */ - if (intty && !arginp) { /* PWP setup stuff */ + if (intty && !targinp) { /* PWP setup stuff */ ed_Init(); /* init the new line editor */ #ifdef SIG_WINDOW check_window_size(1); /* mung environment */ @@ -1413,6 +1391,32 @@ main(int argc, char **argv) if (nexececho) setNS(STRecho); + + if (targinp) { + arginp = SAVE(targinp); + /* + * we put the command into a variable + */ + if (arginp != NULL) + setv(STRcommand, quote(Strsave(arginp)), VAR_READWRITE); + + /* + * * Give an error on -c arguments that end in * backslash to + * ensure that you don't make * nonportable csh scripts. + */ + { + int count; + + cp = Strend(arginp); + count = 0; + while (cp > arginp && *--cp == '\\') + ++count; + if ((count & 1) != 0) { + exiterr = 1; + stderror(ERR_ARGC); + } + } + } /* * All the rest of the world is inside this call. The argument to process * indicates whether it should catch "error unwinds". Thus if we are a Modified: head/contrib/tcsh/sh.func.c ============================================================================== --- head/contrib/tcsh/sh.func.c Sat Mar 25 14:12:12 2017 (r315951) +++ head/contrib/tcsh/sh.func.c Sat Mar 25 14:14:11 2017 (r315952) @@ -2734,16 +2734,18 @@ nlsclose(void) int getYN(const char *prompt) { - int doit, c; + int doit; + char c; + xprintf("%s", prompt); flush(); - (void) force_read(SHIN, &c, 1); + (void) force_read(SHIN, &c, sizeof(c)); /* * Perhaps we should use the yesexpr from the * actual locale */ doit = (strchr(CGETS(22, 14, "Yy"), c) != NULL); - while (c != '\n' && force_read(SHIN, &c, 1) == 1) + while (c != '\n' && force_read(SHIN, &c, sizeof(c)) == sizeof(c)) continue; return doit; } Modified: head/contrib/tcsh/tw.init.c ============================================================================== --- head/contrib/tcsh/tw.init.c Sat Mar 25 14:12:12 2017 (r315951) +++ head/contrib/tcsh/tw.init.c Sat Mar 25 14:14:11 2017 (r315952) @@ -125,9 +125,8 @@ tw_str_add(stringlist_t *sl, size_t len) sl->buff = xrealloc(sl->buff, sl->tbuff * sizeof(Char)); /* Re-thread the new pointer list, if changed */ if (ptr != NULL && ptr != sl->buff) { - intptr_t offs = sl->buff - ptr; for (i = 0; i < sl->nlist; i++) - sl->list[i] += offs; + sl->list[i] = sl->buff + (sl->list[i] - ptr); } disabled_cleanup(&pintr_disabled); } From owner-svn-src-head@freebsd.org Sat Mar 25 15:06:30 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0C5DED1854E; Sat, 25 Mar 2017 15:06:30 +0000 (UTC) (envelope-from karels@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CB2F21268; Sat, 25 Mar 2017 15:06:29 +0000 (UTC) (envelope-from karels@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PF6STb040788; Sat, 25 Mar 2017 15:06:28 GMT (envelope-from karels@FreeBSD.org) Received: (from karels@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PF6SEF040785; Sat, 25 Mar 2017 15:06:28 GMT (envelope-from karels@FreeBSD.org) Message-Id: <201703251506.v2PF6SEF040785@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: karels set sender to karels@FreeBSD.org using -f From: Mike Karels Date: Sat, 25 Mar 2017 15:06:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315956 - in head/sys: netinet netinet6 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 15:06:30 -0000 Author: karels Date: Sat Mar 25 15:06:28 2017 New Revision: 315956 URL: https://svnweb.freebsd.org/changeset/base/315956 Log: Fix reference count leak with L2 caching. ip_forward, TCP/IPv6, and probably SCTP leaked references to L2 cache entry because they used their own routes on the stack, not in_pcb routes. The original model for route caching was callers that provided a route structure to ip{,6}input() would keep the route, and this model was used for L2 caching as well. Instead, change L2 caching to be done by default only when using a route structure in the in_pcb; the pcb deallocation code frees L2 as well as L3 cacches. A separate change will add route caching to TCP/IPv6. Another suggestion was to have the transport protocols indicate willingness to use L2 caching, but this approach keeps the changes in the network level Reviewed by: ae gnn MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D10059 and those below, will be ignored-- > Description of fields to fill in above: 76 columns --| > PR: If and which Problem Report is related. > Submitted by: If someone else sent in the change. > Reported by: If someone else reported the issue. > Reviewed by: If someone else reviewed your modification. > Approved by: If you needed approval for this commit. > Obtained from: If the change is from a third party. > MFC after: N [day[s]|week[s]|month[s]]. Request a reminder email. > MFH: Ports tree branch name. Request approval for merge. > Relnotes: Set to 'yes' for mention in release notes. > Security: Vulnerability reference (one per line) or description. > Sponsored by: If the change was sponsored by an organization. > Differential Revision: https://reviews.freebsd.org/D### (*full* phabric URL needed). > Empty fields above will be automatically removed. M netinet/in_pcb.c M netinet/ip_output.c M netinet6/ip6_output.c Modified: head/sys/netinet/in_pcb.c head/sys/netinet/ip_output.c head/sys/netinet6/ip6_output.c Modified: head/sys/netinet/in_pcb.c ============================================================================== --- head/sys/netinet/in_pcb.c Sat Mar 25 14:28:20 2017 (r315955) +++ head/sys/netinet/in_pcb.c Sat Mar 25 15:06:28 2017 (r315956) @@ -328,6 +328,12 @@ in_pcballoc(struct socket *so, struct in #endif inp->inp_gencnt = ++pcbinfo->ipi_gencnt; refcount_init(&inp->inp_refcount, 1); /* Reference from inpcbinfo */ + + /* + * Routes in inpcb's can cache L2 as well; they are guaranteed + * to be cleaned up. + */ + inp->inp_route.ro_flags = RT_LLE_CACHE; INP_LIST_WUNLOCK(pcbinfo); #if defined(IPSEC) || defined(IPSEC_SUPPORT) || defined(MAC) out: Modified: head/sys/netinet/ip_output.c ============================================================================== --- head/sys/netinet/ip_output.c Sat Mar 25 14:28:20 2017 (r315955) +++ head/sys/netinet/ip_output.c Sat Mar 25 15:06:28 2017 (r315956) @@ -242,8 +242,7 @@ ip_output(struct mbuf *m, struct mbuf *o if (ro == NULL) { ro = &iproute; bzero(ro, sizeof (*ro)); - } else - ro->ro_flags |= RT_LLE_CACHE; + } #ifdef FLOWTABLE if (ro->ro_rt == NULL) Modified: head/sys/netinet6/ip6_output.c ============================================================================== --- head/sys/netinet6/ip6_output.c Sat Mar 25 14:28:20 2017 (r315955) +++ head/sys/netinet6/ip6_output.c Sat Mar 25 15:06:28 2017 (r315956) @@ -494,8 +494,7 @@ ip6_output(struct mbuf *m0, struct ip6_p if (ro == NULL) { ro = &ip6route; bzero((caddr_t)ro, sizeof(*ro)); - } else - ro->ro_flags |= RT_LLE_CACHE; + } ro_pmtu = ro; if (opt && opt->ip6po_rthdr) ro = &opt->ip6po_route; From owner-svn-src-head@freebsd.org Sat Mar 25 15:47:31 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BF7DFD1D0FB; Sat, 25 Mar 2017 15:47:31 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7206C1481; Sat, 25 Mar 2017 15:47:31 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PFlUjJ056928; Sat, 25 Mar 2017 15:47:30 GMT (envelope-from dchagin@FreeBSD.org) Received: (from dchagin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PFlUpf056924; Sat, 25 Mar 2017 15:47:30 GMT (envelope-from dchagin@FreeBSD.org) Message-Id: <201703251547.v2PFlUpf056924@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dchagin set sender to dchagin@FreeBSD.org using -f From: Dmitry Chagin Date: Sat, 25 Mar 2017 15:47:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315957 - in head/sys: amd64/linux amd64/linux32 compat/linux i386/linux X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 15:47:31 -0000 Author: dchagin Date: Sat Mar 25 15:47:29 2017 New Revision: 315957 URL: https://svnweb.freebsd.org/changeset/base/315957 Log: Implement Linux mincore() system call. This is necessary for the upcoming drm-next. Suggested by: hselasky@ MFC after: 1 month Modified: head/sys/amd64/linux/linux_dummy.c head/sys/amd64/linux32/linux32_dummy.c head/sys/compat/linux/linux_misc.c head/sys/i386/linux/linux_dummy.c Modified: head/sys/amd64/linux/linux_dummy.c ============================================================================== --- head/sys/amd64/linux/linux_dummy.c Sat Mar 25 15:06:28 2017 (r315956) +++ head/sys/amd64/linux/linux_dummy.c Sat Mar 25 15:47:29 2017 (r315957) @@ -59,7 +59,6 @@ UNIMPLEMENTED(tuxcall); UNIMPLEMENTED(uselib); UNIMPLEMENTED(vserver); -DUMMY(mincore); DUMMY(sendfile); DUMMY(syslog); DUMMY(setfsuid); Modified: head/sys/amd64/linux32/linux32_dummy.c ============================================================================== --- head/sys/amd64/linux32/linux32_dummy.c Sat Mar 25 15:06:28 2017 (r315956) +++ head/sys/amd64/linux32/linux32_dummy.c Sat Mar 25 15:47:29 2017 (r315957) @@ -79,7 +79,6 @@ DUMMY(sendfile); DUMMY(setfsuid); DUMMY(setfsgid); DUMMY(pivot_root); -DUMMY(mincore); DUMMY(ptrace); DUMMY(lookup_dcookie); DUMMY(remap_file_pages); Modified: head/sys/compat/linux/linux_misc.c ============================================================================== --- head/sys/compat/linux/linux_misc.c Sat Mar 25 15:06:28 2017 (r315956) +++ head/sys/compat/linux/linux_misc.c Sat Mar 25 15:47:29 2017 (r315957) @@ -2534,3 +2534,17 @@ linux_getrandom(struct thread *td, struc return (read_random_uio(&uio, args->flags & LINUX_GRND_NONBLOCK)); } + +int +linux_mincore(struct thread *td, struct linux_mincore_args *args) +{ + struct mincore_args bsd_args; + + /* Needs to be page-aligned */ + if (args->start & PAGE_MASK) + return (EINVAL); + bsd_args.addr = PTRIN(args->start); + bsd_args.len = args->len; + bsd_args.vec = args->vec; + return (sys_mincore(td, &bsd_args)); +} Modified: head/sys/i386/linux/linux_dummy.c ============================================================================== --- head/sys/i386/linux/linux_dummy.c Sat Mar 25 15:06:28 2017 (r315956) +++ head/sys/i386/linux/linux_dummy.c Sat Mar 25 15:47:29 2017 (r315957) @@ -82,7 +82,6 @@ DUMMY(sendfile); /* different semantics DUMMY(setfsuid); DUMMY(setfsgid); DUMMY(pivot_root); -DUMMY(mincore); DUMMY(lookup_dcookie); DUMMY(remap_file_pages); DUMMY(mbind); From owner-svn-src-head@freebsd.org Sat Mar 25 15:57:49 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 70C7CD1D61F; Sat, 25 Mar 2017 15:57:49 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 26A021A73; Sat, 25 Mar 2017 15:57:49 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PFvmhN060895; Sat, 25 Mar 2017 15:57:48 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PFvmhP060893; Sat, 25 Mar 2017 15:57:48 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703251557.v2PFvmhP060893@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Sat, 25 Mar 2017 15:57:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315958 - head/sys/dev/iwn X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 15:57:49 -0000 Author: avos Date: Sat Mar 25 15:57:47 2017 New Revision: 315958 URL: https://svnweb.freebsd.org/changeset/base/315958 Log: iwn: do not try to update node configuration when the node does not exist. Firmware will just respond with status '0x8' (node does not exist) or will hang -> cause 'device timeout's (sometimes). Modified: head/sys/dev/iwn/if_iwn.c head/sys/dev/iwn/if_iwnreg.h Modified: head/sys/dev/iwn/if_iwn.c ============================================================================== --- head/sys/dev/iwn/if_iwn.c Sat Mar 25 15:47:29 2017 (r315957) +++ head/sys/dev/iwn/if_iwn.c Sat Mar 25 15:57:47 2017 (r315958) @@ -2651,7 +2651,15 @@ iwn_read_eeprom_enhinfo(struct iwn_softc static struct ieee80211_node * iwn_node_alloc(struct ieee80211vap *vap, const uint8_t mac[IEEE80211_ADDR_LEN]) { - return malloc(sizeof (struct iwn_node), M_80211_NODE,M_NOWAIT | M_ZERO); + struct iwn_node *wn; + + wn = malloc(sizeof (struct iwn_node), M_80211_NODE, M_NOWAIT | M_ZERO); + if (wn == NULL) + return (NULL); + + wn->id = IWN_ID_UNDEFINED; + + return (&wn->ni); } static __inline int @@ -7355,6 +7363,9 @@ iwn_ampdu_rx_start(struct ieee80211_node tid = MS(le16toh(baparamset), IEEE80211_BAPS_TID); ssn = MS(le16toh(baseqctl), IEEE80211_BASEQ_START); + if (wn->id == IWN_ID_UNDEFINED) + return (ENOENT); + memset(&node, 0, sizeof node); node.id = wn->id; node.control = IWN_NODE_UPDATE; @@ -7386,6 +7397,9 @@ iwn_ampdu_rx_stop(struct ieee80211_node DPRINTF(sc, IWN_DEBUG_TRACE, "->Doing %s\n", __func__); + if (wn->id == IWN_ID_UNDEFINED) + goto end; + /* XXX: tid as an argument */ for (tid = 0; tid < WME_NUM_TID; tid++) { if (&ni->ni_rx_ampdu[tid] == rap) @@ -7399,6 +7413,7 @@ iwn_ampdu_rx_stop(struct ieee80211_node node.delba_tid = tid; DPRINTF(sc, IWN_DEBUG_RECV, "DELBA RA=%d TID=%d\n", wn->id, tid); (void)ops->add_node(sc, &node, 1); +end: sc->sc_ampdu_rx_stop(ni, rap); } @@ -7473,6 +7488,9 @@ iwn_ampdu_tx_start(struct ieee80211com * DPRINTF(sc, IWN_DEBUG_TRACE, "->Doing %s\n", __func__); + if (wn->id == IWN_ID_UNDEFINED) + return (0); + /* Enable TX for the specified RA/TID. */ wn->disable_tid &= ~(1 << tid); memset(&node, 0, sizeof node); Modified: head/sys/dev/iwn/if_iwnreg.h ============================================================================== --- head/sys/dev/iwn/if_iwnreg.h Sat Mar 25 15:47:29 2017 (r315957) +++ head/sys/dev/iwn/if_iwnreg.h Sat Mar 25 15:57:47 2017 (r315958) @@ -690,13 +690,15 @@ struct iwn_node_info { uint8_t macaddr[IEEE80211_ADDR_LEN]; uint16_t reserved2; uint8_t id; -#define IWN_ID_BSS 0 +#define IWN_ID_BSS 0 #define IWN_STA_ID 1 -#define IWN_PAN_ID_BCAST 14 +#define IWN_PAN_ID_BCAST 14 #define IWN5000_ID_BROADCAST 15 #define IWN4965_ID_BROADCAST 31 +#define IWN_ID_UNDEFINED (uint8_t)-1 + uint8_t flags; #define IWN_FLAG_SET_KEY (1 << 0) #define IWN_FLAG_SET_DISABLE_TID (1 << 1) From owner-svn-src-head@freebsd.org Sat Mar 25 17:45:32 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EE3CCD1D04E; Sat, 25 Mar 2017 17:45:32 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pf0-x234.google.com (mail-pf0-x234.google.com [IPv6:2607:f8b0:400e:c00::234]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BCDE4187B; Sat, 25 Mar 2017 17:45:32 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pf0-x234.google.com with SMTP id 20so8431821pfk.2; Sat, 25 Mar 2017 10:45:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=TeRSVshSme9Nogmmo7UtG0d6k2dFS8FTv4X1W/5J2+0=; b=huTdpDiGeSknyY4JxqiD1wzJsno1oowihaiYGkEwSQnk+dbPcYE/+H1+DBZSkwDTiV vPU+X/jjMD8v3siljz8ob4DIncyMfgr717kk0m56HsEVsz5bHTwg4vNZQiSDkMSkOi4b 3RpwtrjQkfsLPMkD3osKM4MRN391l5iDBQjbrpQlcebADt+ZLhg3JTSRDQdMvwVoJTR+ 8txfmqDBGFSR0PFhWRHm8qO6YtjDa1HyYhLKGTI7dbcPjjRyYP9pnVL8Bmcub//yY99l Sv2ltcn/La4t8BO7TV/KNHaA9miIvGjCQpl0zL616+nMhX7rGNxnLwBeZEoozVqulIPq Y9uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=TeRSVshSme9Nogmmo7UtG0d6k2dFS8FTv4X1W/5J2+0=; b=a5FoPqmEQqKZC6CTokYvn7je4xUAu+1xPTtEJzqfhcE7VAaC1uhmoNeBlOrnt4jpYM PIQOSpgrSoBKZ/XqAbyuc4Wjr0RXWOn+yGP+qXmoa7HN9MHP4NoT2SjJYEXSV4/OFNH+ HfWPBSuy8eD9Ews1sqotXoH4YD/6TfRU30lXYiQokMNTpF2jbe1D2LxWPKmA8OOdG4qA XEbdkgfUU0YbpQGddG/c2vBGjsm4iX+LKtwLjE++410siO+0+P5pRFshiLXERVk29rIW xfN3dT8ZKrXYu+Kg8EJvjCSPWzRq53p98BLKHguQGBFtr6af6R+yOfvglAIq3Kuor1nD URJQ== X-Gm-Message-State: AFeK/H1UxpMc7F8nEhHB2bjnkDOOsKVi9J+H2tUVGkH365dQNS8O8+zX0y4JFcst3R62Pw== X-Received: by 10.98.100.88 with SMTP id y85mr15957000pfb.112.1490463932067; Sat, 25 Mar 2017 10:45:32 -0700 (PDT) Received: from [192.168.20.13] (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id 187sm11753068pff.17.2017.03.25.10.45.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 25 Mar 2017 10:45:31 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (1.0) Subject: Re: svn commit: r315948 - in head: bin/csh contrib/tcsh contrib/tcsh/config contrib/tcsh/nls contrib/tcsh/nls/C contrib/tcsh/nls/et contrib/tcsh/nls/finnish contrib/tcsh/nls/french contrib/tcsh/nls/ger... From: Ngie Cooper X-Mailer: iPhone Mail (14D27) In-Reply-To: <201703251332.v2PDWS6O004270@repo.freebsd.org> Date: Sat, 25 Mar 2017 10:45:30 -0700 Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: 7bit Message-Id: <71317296-9981-4B0B-8243-5E4403CE8C62@gmail.com> References: <201703251332.v2PDWS6O004270@repo.freebsd.org> To: Dmitry Chagin X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 17:45:33 -0000 > On Mar 25, 2017, at 06:32, Dmitry Chagin wrote: > > Author: dchagin > Date: Sat Mar 25 13:32:28 2017 > New Revision: 315948 > URL: https://svnweb.freebsd.org/changeset/base/315948 > > Log: > Update to tcsh 6.20.00 Relnotes: yes Should this be MFCed? Thanks! -Ngie From owner-svn-src-head@freebsd.org Sat Mar 25 18:45:12 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3F420D1D269; Sat, 25 Mar 2017 18:45:12 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EAF2A16A1; Sat, 25 Mar 2017 18:45:11 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PIjBbx029509; Sat, 25 Mar 2017 18:45:11 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PIj9k2029497; Sat, 25 Mar 2017 18:45:09 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201703251845.v2PIj9k2029497@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Sat, 25 Mar 2017 18:45:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315959 - in head/sys: amd64/amd64 amd64/vmm amd64/vmm/amd i386/i386 x86/include x86/x86 x86/xen X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 18:45:12 -0000 Author: avg Date: Sat Mar 25 18:45:09 2017 New Revision: 315959 URL: https://svnweb.freebsd.org/changeset/base/315959 Log: specific end of interrupt implementation for AMD Local APIC The change is more intrusive than I would like because the feature requires that a vector number is written to a special register. Thus, now the vector number has to be provided to lapic_eoi(). It was readily available in the IO-APIC and MSI cases, but the IPI handlers required more work. Also, we now store the VMM IPI number in a global variable, so that it is available to the justreturn handler for the same reason. Reviewed by: kib MFC after: 6 weeks Differential Revision: https://reviews.freebsd.org/D9880 Modified: head/sys/amd64/amd64/apic_vector.S head/sys/amd64/amd64/genassym.c head/sys/amd64/vmm/amd/svm.c head/sys/amd64/vmm/vmm.c head/sys/amd64/vmm/vmm_host.h head/sys/i386/i386/apic_vector.s head/sys/i386/i386/genassym.c head/sys/x86/include/apicvar.h head/sys/x86/x86/io_apic.c head/sys/x86/x86/local_apic.c head/sys/x86/x86/msi.c head/sys/x86/xen/xen_apic.c Modified: head/sys/amd64/amd64/apic_vector.S ============================================================================== --- head/sys/amd64/amd64/apic_vector.S Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/amd64/amd64/apic_vector.S Sat Mar 25 18:45:09 2017 (r315959) @@ -50,22 +50,6 @@ #define LK #endif - .text - SUPERALIGN_TEXT - /* End Of Interrupt to APIC */ -as_lapic_eoi: - cmpl $0,x2apic_mode - jne 1f - movq lapic_map,%rax - movl $0,LA_EOI(%rax) - ret -1: - movl $MSR_APIC_EOI,%ecx - xorl %eax,%eax - xorl %edx,%edx - wrmsr - ret - /* * I/O Interrupt Entry Point. Rather than having one entry point for * each interrupt source, we use one entry point for each 32-bit word @@ -182,7 +166,7 @@ IDTVEC(xen_intr_upcall) SUPERALIGN_TEXT invltlb_ret: - call as_lapic_eoi + call native_lapic_eoi POP_FRAME jmp doreti_iret @@ -191,18 +175,21 @@ IDTVEC(invltlb) PUSH_FRAME call invltlb_handler + movl $IPI_INVLTLB, %edi jmp invltlb_ret IDTVEC(invltlb_pcid) PUSH_FRAME call invltlb_pcid_handler + movl $IPI_INVLTLB, %edi jmp invltlb_ret IDTVEC(invltlb_invpcid) PUSH_FRAME call invltlb_invpcid_handler + movl $IPI_INVLTLB, %edi jmp invltlb_ret /* @@ -215,6 +202,7 @@ IDTVEC(invlpg) PUSH_FRAME call invlpg_handler + movl $IPI_INVLPG, %edi jmp invltlb_ret /* @@ -226,6 +214,7 @@ IDTVEC(invlrng) PUSH_FRAME call invlrng_handler + movl $IPI_INVLRNG, %edi jmp invltlb_ret /* @@ -237,6 +226,7 @@ IDTVEC(invlcache) PUSH_FRAME call invlcache_handler + movl $IPI_INVLCACHE, %edi jmp invltlb_ret /* @@ -247,7 +237,8 @@ IDTVEC(invlcache) IDTVEC(ipi_intr_bitmap_handler) PUSH_FRAME - call as_lapic_eoi + movl $IPI_BITMAP_VECTOR, %edi + call native_lapic_eoi FAKE_MCOUNT(TF_RIP(%rsp)) @@ -263,7 +254,8 @@ IDTVEC(ipi_intr_bitmap_handler) IDTVEC(cpustop) PUSH_FRAME - call as_lapic_eoi + movl $IPI_STOP, %edi + call native_lapic_eoi call cpustop_handler jmp doreti @@ -277,7 +269,8 @@ IDTVEC(cpususpend) PUSH_FRAME call cpususpend_handler - call as_lapic_eoi + movl $IPI_SUSPEND, %edi + call native_lapic_eoi jmp doreti /* @@ -295,37 +288,22 @@ IDTVEC(rendezvous) incq (%rax) #endif call smp_rendezvous_action - call as_lapic_eoi + movl $IPI_RENDEZVOUS, %edi + call native_lapic_eoi jmp doreti /* * IPI handler whose purpose is to interrupt the CPU with minimum overhead. * This is used by bhyve to force a host cpu executing in guest context to * trap into the hypervisor. - * - * This handler is different from other IPI handlers in the following aspects: - * - * 1. It doesn't push a trapframe on the stack. - * - * This implies that a DDB backtrace involving 'justreturn' will skip the - * function that was interrupted by this handler. - * - * 2. It doesn't 'swapgs' when userspace is interrupted. - * - * The 'justreturn' handler does not access any pcpu data so it is not an - * issue. Moreover the 'justreturn' handler can only be interrupted by an NMI - * whose handler already doesn't trust GS.base when kernel code is interrupted. */ .text SUPERALIGN_TEXT IDTVEC(justreturn) - pushq %rax - pushq %rcx - pushq %rdx - call as_lapic_eoi - popq %rdx - popq %rcx - popq %rax + PUSH_FRAME + movl vmm_ipinum, %edi + call native_lapic_eoi + POP_FRAME jmp doreti_iret #endif /* SMP */ Modified: head/sys/amd64/amd64/genassym.c ============================================================================== --- head/sys/amd64/amd64/genassym.c Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/amd64/amd64/genassym.c Sat Mar 25 18:45:09 2017 (r315959) @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #ifdef HWPMC_HOOKS #include @@ -61,7 +62,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include +#include #include #include #include @@ -215,10 +218,19 @@ ASSYM(PC_LDT, offsetof(struct pcpu, pc_l ASSYM(PC_COMMONTSSP, offsetof(struct pcpu, pc_commontssp)); ASSYM(PC_TSS, offsetof(struct pcpu, pc_tss)); ASSYM(PC_PM_SAVE_CNT, offsetof(struct pcpu, pc_pm_save_cnt)); - + ASSYM(LA_EOI, LAPIC_EOI * LAPIC_MEM_MUL); ASSYM(LA_ISR, LAPIC_ISR0 * LAPIC_MEM_MUL); +ASSYM(IPI_INVLTLB, IPI_INVLTLB); +ASSYM(IPI_INVLPG, IPI_INVLPG); +ASSYM(IPI_INVLRNG, IPI_INVLRNG); +ASSYM(IPI_INVLCACHE, IPI_INVLCACHE); +ASSYM(IPI_BITMAP_VECTOR, IPI_BITMAP_VECTOR); +ASSYM(IPI_STOP, IPI_STOP); +ASSYM(IPI_SUSPEND, IPI_SUSPEND); +ASSYM(IPI_RENDEZVOUS, IPI_RENDEZVOUS); + ASSYM(KCSEL, GSEL(GCODE_SEL, SEL_KPL)); ASSYM(KDSEL, GSEL(GDATA_SEL, SEL_KPL)); ASSYM(KUCSEL, GSEL(GUCODE_SEL, SEL_UPL)); Modified: head/sys/amd64/vmm/amd/svm.c ============================================================================== --- head/sys/amd64/vmm/amd/svm.c Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/amd64/vmm/amd/svm.c Sat Mar 25 18:45:09 2017 (r315959) @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include "vmm_host.h" #include "vmm_lapic.h" #include "vmm_stat.h" #include "vmm_ktr.h" @@ -1620,7 +1621,7 @@ svm_inj_interrupts(struct svm_softc *sc, * Although not explicitly specified in APMv2 the * relative priorities were verified empirically. */ - ipi_cpu(curcpu, IPI_AST); /* XXX vmm_ipinum? */ + ipi_cpu(curcpu, vmm_ipinum); } else { vm_nmi_clear(sc->vm, vcpu); Modified: head/sys/amd64/vmm/vmm.c ============================================================================== --- head/sys/amd64/vmm/vmm.c Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/amd64/vmm/vmm.c Sat Mar 25 18:45:09 2017 (r315959) @@ -215,7 +215,6 @@ SYSCTL_INT(_hw_vmm, OID_AUTO, halt_detec &halt_detection_enabled, 0, "Halt VM if all vcpus execute HLT with interrupts disabled"); -static int vmm_ipinum; SYSCTL_INT(_hw_vmm, OID_AUTO, ipinum, CTLFLAG_RD, &vmm_ipinum, 0, "IPI vector used for vcpu notifications"); Modified: head/sys/amd64/vmm/vmm_host.h ============================================================================== --- head/sys/amd64/vmm/vmm_host.h Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/amd64/vmm/vmm_host.h Sat Mar 25 18:45:09 2017 (r315959) @@ -33,6 +33,8 @@ #error "no user-serviceable parts inside" #endif +extern int vmm_ipinum; + struct xsave_limits { int xsave_enabled; uint64_t xcr0_allowed; Modified: head/sys/i386/i386/apic_vector.s ============================================================================== --- head/sys/i386/i386/apic_vector.s Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/i386/i386/apic_vector.s Sat Mar 25 18:45:09 2017 (r315959) @@ -44,22 +44,6 @@ #include "assym.s" - .text - SUPERALIGN_TEXT - /* End Of Interrupt to APIC */ -as_lapic_eoi: - cmpl $0,x2apic_mode - jne 1f - movl lapic_map,%eax - movl $0,LA_EOI(%eax) - ret -1: - movl $MSR_APIC_EOI,%ecx - xorl %eax,%eax - xorl %edx,%edx - wrmsr - ret - /* * I/O Interrupt Entry Point. Rather than having one entry point for * each interrupt source, we use one entry point for each 32-bit word @@ -188,7 +172,8 @@ IDTVEC(xen_intr_upcall) .text SUPERALIGN_TEXT invltlb_ret: - call as_lapic_eoi + call native_lapic_eoi + add $4, %esp POP_FRAME iret @@ -200,6 +185,7 @@ IDTVEC(invltlb) call invltlb_handler + pushl $IPI_INVLTLB jmp invltlb_ret /* @@ -214,6 +200,7 @@ IDTVEC(invlpg) call invlpg_handler + pushl $IPI_INVLPG jmp invltlb_ret /* @@ -228,6 +215,7 @@ IDTVEC(invlrng) call invlrng_handler + pushl $IPI_INVLRNG jmp invltlb_ret /* @@ -242,6 +230,7 @@ IDTVEC(invlcache) call invlcache_handler + pushl $IPI_INVLCACHE jmp invltlb_ret /* @@ -254,8 +243,10 @@ IDTVEC(ipi_intr_bitmap_handler) SET_KERNEL_SREGS cld - call as_lapic_eoi - + pushl $IPI_BITMAP_VECTOR + call native_lapic_eoi + add $4, %esp + FAKE_MCOUNT(TF_EIP(%esp)) call ipi_bitmap_handler @@ -272,7 +263,9 @@ IDTVEC(cpustop) SET_KERNEL_SREGS cld - call as_lapic_eoi + pushl $IPI_STOP + call native_lapic_eoi + add $4, %esp call cpustop_handler POP_FRAME @@ -288,7 +281,9 @@ IDTVEC(cpususpend) SET_KERNEL_SREGS cld - call as_lapic_eoi + pushl $IPI_SUSPEND + call native_lapic_eoi + add $4, %esp call cpususpend_handler POP_FRAME @@ -313,7 +308,9 @@ IDTVEC(rendezvous) #endif call smp_rendezvous_action - call as_lapic_eoi + pushl $IPI_RENDEZVOUS + call native_lapic_eoi + add $4, %esp POP_FRAME iret Modified: head/sys/i386/i386/genassym.c ============================================================================== --- head/sys/i386/i386/genassym.c Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/i386/i386/genassym.c Sat Mar 25 18:45:09 2017 (r315959) @@ -70,7 +70,10 @@ __FBSDID("$FreeBSD$"); #include #include #ifdef DEV_APIC +#include +#include #include +#include #endif #include #include @@ -219,6 +222,15 @@ ASSYM(PC_PRIVATE_TSS, offsetof(struct pc #ifdef DEV_APIC ASSYM(LA_EOI, LAPIC_EOI * LAPIC_MEM_MUL); ASSYM(LA_ISR, LAPIC_ISR0 * LAPIC_MEM_MUL); + +ASSYM(IPI_INVLTLB, IPI_INVLTLB); +ASSYM(IPI_INVLPG, IPI_INVLPG); +ASSYM(IPI_INVLRNG, IPI_INVLRNG); +ASSYM(IPI_INVLCACHE, IPI_INVLCACHE); +ASSYM(IPI_BITMAP_VECTOR, IPI_BITMAP_VECTOR); +ASSYM(IPI_STOP, IPI_STOP); +ASSYM(IPI_SUSPEND, IPI_SUSPEND); +ASSYM(IPI_RENDEZVOUS, IPI_RENDEZVOUS); #endif ASSYM(KCSEL, GSEL(GCODE_SEL, SEL_KPL)); Modified: head/sys/x86/include/apicvar.h ============================================================================== --- head/sys/x86/include/apicvar.h Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/x86/include/apicvar.h Sat Mar 25 18:45:09 2017 (r315959) @@ -210,7 +210,7 @@ struct apic_ops { void (*setup)(int); void (*dump)(const char *); void (*disable)(void); - void (*eoi)(void); + void (*eoi)(u_int vector); int (*id)(void); int (*intr_pending)(u_int); void (*set_logical_id)(u_int, u_int, u_int); @@ -301,10 +301,10 @@ lapic_disable(void) } static inline void -lapic_eoi(void) +lapic_eoi(u_int vector) { - apic_ops.eoi(); + apic_ops.eoi(vector); } static inline int @@ -469,6 +469,7 @@ lapic_set_lvt_triggermode(u_int apic_id, return (apic_ops.set_lvt_triggermode(apic_id, lvt, trigger)); } +void native_lapic_eoi(u_int vector); void lapic_handle_cmc(void); void lapic_handle_error(void); void lapic_handle_intr(int vector, struct trapframe *frame); Modified: head/sys/x86/x86/io_apic.c ============================================================================== --- head/sys/x86/x86/io_apic.c Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/x86/x86/io_apic.c Sat Mar 25 18:45:09 2017 (r315959) @@ -151,10 +151,10 @@ _ioapic_eoi_source(struct intsrc *isrc, volatile uint32_t *apic_eoi; uint32_t low1; - lapic_eoi(); + src = (struct ioapic_intsrc *)isrc; + lapic_eoi(src->io_vector); if (!lapic_eoi_suppression) return; - src = (struct ioapic_intsrc *)isrc; if (src->io_edgetrigger) return; io = (struct ioapic *)isrc->is_pic; Modified: head/sys/x86/x86/local_apic.c ============================================================================== --- head/sys/x86/x86/local_apic.c Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/x86/x86/local_apic.c Sat Mar 25 18:45:09 2017 (r315959) @@ -83,6 +83,9 @@ __FBSDID("$FreeBSD$"); #define GSEL_APIC GSEL(GCODE_SEL, SEL_KPL) #endif +#define INTEL_SEOI 1 +#define AMD_SEOI 2 + /* Sanity checks on IDT vectors. */ CTASSERT(APIC_IO_INTS + APIC_NUM_IOINTS == APIC_TIMER_INT); CTASSERT(APIC_TIMER_INT < APIC_LOCAL_INTS); @@ -184,6 +187,10 @@ static struct eventtimer lapic_et; #ifdef SMP static uint64_t lapic_ipi_wait_mult; #endif +#ifdef __amd64__ +/* IPI vector used for VMM VCPU notifications. */ +int vmm_ipinum; +#endif SYSCTL_NODE(_hw, OID_AUTO, apic, CTLFLAG_RD, 0, "APIC options"); SYSCTL_INT(_hw_apic, OID_AUTO, x2apic_mode, CTLFLAG_RD, &x2apic_mode, 0, ""); @@ -312,7 +319,6 @@ static void native_lapic_xapic_mode(void static void native_lapic_setup(int boot); static void native_lapic_dump(const char *str); static void native_lapic_disable(void); -static void native_lapic_eoi(void); static int native_lapic_id(void); static int native_lapic_intr_pending(u_int vector); static u_int native_apic_cpuid(u_int apic_id); @@ -447,6 +453,31 @@ elvt_mode(struct lapic *la, u_int idx, u return (lvt_mode_impl(la, elvt, idx, value)); } +static inline uint32_t +amd_read_ext_features(void) +{ + uint32_t version; + + if (cpu_vendor_id != CPU_VENDOR_AMD) + return (0); + version = lapic_read32(LAPIC_VERSION); + if ((version & APIC_VER_AMD_EXT_SPACE) != 0) + return (lapic_read32(LAPIC_EXT_FEATURES)); + return (0); +} + +static inline uint32_t +amd_read_elvt_count(void) +{ + uint32_t extf; + uint32_t count; + + extf = amd_read_ext_features(); + count = (extf & APIC_EXTF_ELVT_MASK) >> APIC_EXTF_ELVT_SHIFT; + count = min(count, APIC_ELVT_MAX + 1); + return (count); +} + /* * Map the local APIC and setup necessary interrupt vectors. */ @@ -456,9 +487,9 @@ native_lapic_init(vm_paddr_t addr) #ifdef SMP uint64_t r, r1, r2, rx; #endif - uint32_t ver; + uint32_t extf, ver; u_int regs[4]; - int i, arat; + int i, arat, seoi_enable; /* * Enable x2APIC mode if possible. Map the local APIC @@ -546,16 +577,27 @@ native_lapic_init(vm_paddr_t addr) */ ver = lapic_read32(LAPIC_VERSION); if ((ver & APIC_VER_EOI_SUPPRESSION) != 0) { - lapic_eoi_suppression = 1; + lapic_eoi_suppression = INTEL_SEOI; + } else { + extf = amd_read_ext_features(); + if ((extf & APIC_EXTF_SEIO_CAP) != 0) + lapic_eoi_suppression = AMD_SEOI; + } + if (lapic_eoi_suppression != 0) { + seoi_enable = 1; if (vm_guest == VM_GUEST_KVM) { if (bootverbose) printf( "KVM -- disabling lapic eoi suppression\n"); - lapic_eoi_suppression = 0; + seoi_enable = 0; } TUNABLE_INT_FETCH("hw.lapic_eoi_suppression", - &lapic_eoi_suppression); + &seoi_enable); + if (seoi_enable == 0) + lapic_eoi_suppression = 0; } + if (lapic_eoi_suppression != 0) + printf("LAPIC specific EOI enabled\n"); #ifdef SMP #define LOOPS 100000 @@ -642,32 +684,6 @@ native_lapic_create(u_int apic_id, int b #endif } -static inline uint32_t -amd_read_ext_features(void) -{ - uint32_t version; - - if (cpu_vendor_id != CPU_VENDOR_AMD) - return (0); - version = lapic_read32(LAPIC_VERSION); - if ((version & APIC_VER_AMD_EXT_SPACE) != 0) - return (lapic_read32(LAPIC_EXT_FEATURES)); - else - return (0); -} - -static inline uint32_t -amd_read_elvt_count(void) -{ - uint32_t extf; - uint32_t count; - - extf = amd_read_ext_features(); - count = (extf & APIC_EXTF_ELVT_MASK) >> APIC_EXTF_ELVT_SHIFT; - count = min(count, APIC_ELVT_MAX + 1); - return (count); -} - /* * Dump contents of local APIC registers */ @@ -702,9 +718,11 @@ native_lapic_dump(const char* str) extf = amd_read_ext_features(); if (extf != 0) { printf(" AMD ext features: 0x%08x\n", extf); + extf = lapic_read32(LAPIC_EXT_CTRL); + printf(" AMD ext control: 0x%08x\n", extf); elvt_count = amd_read_elvt_count(); for (i = 0; i < elvt_count; i++) - printf(" AMD elvt%d: 0x%08x\n", i, + printf(" AMD elvt%d: 0x%08x\n", i, lapic_read32(LAPIC_EXT_LVT0 + i)); } } @@ -1022,9 +1040,15 @@ lapic_enable(void) value = lapic_read32(LAPIC_SVR); value &= ~(APIC_SVR_VECTOR | APIC_SVR_FOCUS); value |= APIC_SVR_FEN | APIC_SVR_SWEN | APIC_SPURIOUS_INT; - if (lapic_eoi_suppression) + if (lapic_eoi_suppression == INTEL_SEOI) value |= APIC_SVR_EOI_SUPPRESSION; lapic_write32(LAPIC_SVR, value); + + if (lapic_eoi_suppression == AMD_SEOI) { + value = lapic_read32(LAPIC_EXT_CTRL); + value |= APIC_EXTF_SEIO_CAP; + lapic_write32(LAPIC_EXT_CTRL, value); + } } /* Reset the local APIC on the BSP during resume. */ @@ -1227,11 +1251,14 @@ lapic_set_tpr(u_int vector) #endif } -static void -native_lapic_eoi(void) +void +native_lapic_eoi(u_int vector) { - lapic_write32_nofence(LAPIC_EOI, 0); + if (lapic_eoi_suppression == AMD_SEOI) + lapic_write32(LAPIC_EXT_SEOI, vector); + else + lapic_write32_nofence(LAPIC_EOI, 0); } void @@ -1252,7 +1279,7 @@ lapic_handle_timer(struct trapframe *fra struct thread *td; /* Send EOI first thing. */ - lapic_eoi(); + lapic_eoi(APIC_TIMER_INT); #if defined(SMP) && !defined(SCHED_ULE) /* @@ -1373,7 +1400,7 @@ void lapic_handle_cmc(void) { - lapic_eoi(); + lapic_eoi(APIC_CMC_INT); cmc_intr(); } @@ -1447,7 +1474,7 @@ lapic_handle_error(void) esr = lapic_read32(LAPIC_ESR); printf("CPU%d: local APIC error 0x%x\n", PCPU_GET(cpuid), esr); - lapic_eoi(); + lapic_eoi(APIC_ERROR_INT); } static u_int Modified: head/sys/x86/x86/msi.c ============================================================================== --- head/sys/x86/x86/msi.c Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/x86/x86/msi.c Sat Mar 25 18:45:09 2017 (r315959) @@ -177,16 +177,18 @@ msi_enable_source(struct intsrc *isrc) static void msi_disable_source(struct intsrc *isrc, int eoi) { + struct msi_intsrc *msi = (struct msi_intsrc *)isrc; if (eoi == PIC_EOI) - lapic_eoi(); + lapic_eoi(msi->msi_vector); } static void msi_eoi_source(struct intsrc *isrc) { + struct msi_intsrc *msi = (struct msi_intsrc *)isrc; - lapic_eoi(); + lapic_eoi(msi->msi_vector); } static void Modified: head/sys/x86/xen/xen_apic.c ============================================================================== --- head/sys/x86/xen/xen_apic.c Sat Mar 25 15:57:47 2017 (r315958) +++ head/sys/x86/xen/xen_apic.c Sat Mar 25 18:45:09 2017 (r315959) @@ -147,7 +147,7 @@ xen_pv_lapic_is_x2apic(void) } static void -xen_pv_lapic_eoi(void) +xen_pv_lapic_eoi(u_int vector) { XEN_APIC_UNSUPPORTED; From owner-svn-src-head@freebsd.org Sat Mar 25 19:08:52 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8A113D1D7C2; Sat, 25 Mar 2017 19:08:52 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4C98A1067; Sat, 25 Mar 2017 19:08:52 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PJ8p5l037407; Sat, 25 Mar 2017 19:08:51 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PJ8pAV037406; Sat, 25 Mar 2017 19:08:51 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201703251908.v2PJ8pAV037406@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Sat, 25 Mar 2017 19:08:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315960 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 19:08:52 -0000 Author: avg Date: Sat Mar 25 19:08:51 2017 New Revision: 315960 URL: https://svnweb.freebsd.org/changeset/base/315960 Log: dtrace sched:::preempt should fire only when there is preemption The probe fire on any thread switch before. Reviewed by: markj MFC after: 1 week Sponsored by: Panzura Modified: head/sys/kern/kern_synch.c Modified: head/sys/kern/kern_synch.c ============================================================================== --- head/sys/kern/kern_synch.c Sat Mar 25 18:45:09 2017 (r315959) +++ head/sys/kern/kern_synch.c Sat Mar 25 19:08:51 2017 (r315960) @@ -430,7 +430,11 @@ mi_switch(int flags, struct thread *newt PCPU_SET(switchticks, ticks); CTR4(KTR_PROC, "mi_switch: old thread %ld (td_sched %p, pid %ld, %s)", td->td_tid, td_get_sched(td), td->td_proc->p_pid, td->td_name); - SDT_PROBE0(sched, , , preempt); +#ifdef KDTRACE_HOOKS + if ((flags & SW_PREEMPT) != 0 || ((flags & SW_INVOL) != 0 && + (flags & SW_TYPE_MASK) == SWT_NEEDRESCHED)) + SDT_PROBE0(sched, , , preempt); +#endif sched_switch(td, newtd, flags); CTR4(KTR_PROC, "mi_switch: new thread %ld (td_sched %p, pid %ld, %s)", td->td_tid, td_get_sched(td), td->td_proc->p_pid, td->td_name); From owner-svn-src-head@freebsd.org Sat Mar 25 19:12:11 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 552BCD1D953; Sat, 25 Mar 2017 19:12:11 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 223AF1450; Sat, 25 Mar 2017 19:12:11 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PJCAEF041074; Sat, 25 Mar 2017 19:12:10 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PJCAic041072; Sat, 25 Mar 2017 19:12:10 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201703251912.v2PJCAic041072@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Sat, 25 Mar 2017 19:12:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315961 - head/sys/dev/sound/pci/hda X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 19:12:11 -0000 Author: sbruno Date: Sat Mar 25 19:12:09 2017 New Revision: 315961 URL: https://svnweb.freebsd.org/changeset/base/315961 Log: Add ids for ALC233 found on Intel Skull Mountain NUC. Modified: head/sys/dev/sound/pci/hda/hdac.h head/sys/dev/sound/pci/hda/hdacc.c Modified: head/sys/dev/sound/pci/hda/hdac.h ============================================================================== --- head/sys/dev/sound/pci/hda/hdac.h Sat Mar 25 19:08:51 2017 (r315960) +++ head/sys/dev/sound/pci/hda/hdac.h Sat Mar 25 19:12:09 2017 (r315961) @@ -339,6 +339,7 @@ /* Realtek */ #define REALTEK_VENDORID 0x10ec #define HDA_CODEC_ALC221 HDA_CODEC_CONSTRUCT(REALTEK, 0x0221) +#define HDA_CODEC_ALC233 HDA_CODEC_CONSTRUCT(REALTEK, 0x0233) #define HDA_CODEC_ALC260 HDA_CODEC_CONSTRUCT(REALTEK, 0x0260) #define HDA_CODEC_ALC262 HDA_CODEC_CONSTRUCT(REALTEK, 0x0262) #define HDA_CODEC_ALC267 HDA_CODEC_CONSTRUCT(REALTEK, 0x0267) Modified: head/sys/dev/sound/pci/hda/hdacc.c ============================================================================== --- head/sys/dev/sound/pci/hda/hdacc.c Sat Mar 25 19:08:51 2017 (r315960) +++ head/sys/dev/sound/pci/hda/hdacc.c Sat Mar 25 19:12:09 2017 (r315961) @@ -77,6 +77,7 @@ static const struct { { HDA_CODEC_CS4207, 0, "Cirrus Logic CS4207" }, { HDA_CODEC_CS4210, 0, "Cirrus Logic CS4210" }, { HDA_CODEC_ALC221, 0, "Realtek ALC221" }, + { HDA_CODEC_ALC233, 0, "Realtek ALC233" }, { HDA_CODEC_ALC260, 0, "Realtek ALC260" }, { HDA_CODEC_ALC262, 0, "Realtek ALC262" }, { HDA_CODEC_ALC267, 0, "Realtek ALC267" }, From owner-svn-src-head@freebsd.org Sat Mar 25 20:19:50 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 518DED1D9AB; Sat, 25 Mar 2017 20:19:50 +0000 (UTC) (envelope-from dchagin@mordor.heemeyer.club) Received: from heemeyer.club (heemeyer.club [108.61.204.158]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "heemeyer.club", Issuer "heemeyer.club" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 216CC11C5; Sat, 25 Mar 2017 20:19:48 +0000 (UTC) (envelope-from dchagin@mordor.heemeyer.club) Received: from mordor.heemeyer.club (dchagin.static.corbina.ru [78.107.232.239]) by heemeyer.club (8.15.2/8.15.1) with ESMTPS id v2PKJilX078337 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 25 Mar 2017 20:19:45 GMT (envelope-from dchagin@mordor.heemeyer.club) X-Authentication-Warning: heemeyer.club: Host dchagin.static.corbina.ru [78.107.232.239] claimed to be mordor.heemeyer.club Received: from mordor.heemeyer.club (localhost [127.0.0.1]) by mordor.heemeyer.club (8.15.2/8.15.1) with ESMTPS id v2PKJhXx016121 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sat, 25 Mar 2017 23:19:43 +0300 (MSK) (envelope-from dchagin@mordor.heemeyer.club) Received: (from dchagin@localhost) by mordor.heemeyer.club (8.15.2/8.15.2/Submit) id v2PKJhet016120; Sat, 25 Mar 2017 23:19:43 +0300 (MSK) (envelope-from dchagin) Date: Sat, 25 Mar 2017 23:19:43 +0300 From: Chagin Dmitry To: Ngie Cooper Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315948 - in head: bin/csh contrib/tcsh contrib/tcsh/config contrib/tcsh/nls contrib/tcsh/nls/C contrib/tcsh/nls/et contrib/tcsh/nls/finnish contrib/tcsh/nls/french contrib/tcsh/nls/ger... Message-ID: <20170325201943.GA16107@mordor.heemeyer.club> References: <201703251332.v2PDWS6O004270@repo.freebsd.org> <71317296-9981-4B0B-8243-5E4403CE8C62@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <71317296-9981-4B0B-8243-5E4403CE8C62@gmail.com> User-Agent: Mutt/1.8.0 (2017-02-23) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 20:19:50 -0000 On Sat, Mar 25, 2017 at 10:45:30AM -0700, Ngie Cooper wrote: > > > On Mar 25, 2017, at 06:32, Dmitry Chagin wrote: > > > > Author: dchagin > > Date: Sat Mar 25 13:32:28 2017 > > New Revision: 315948 > > URL: https://svnweb.freebsd.org/changeset/base/315948 > > > > Log: > > Update to tcsh 6.20.00 > > Relnotes: yes > don't think it matters, > Should this be MFCed? > I did not plan -- From owner-svn-src-head@freebsd.org Sat Mar 25 20:51:07 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7AFA1D1D875; Sat, 25 Mar 2017 20:51:07 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-it0-x230.google.com (mail-it0-x230.google.com [IPv6:2607:f8b0:4001:c0b::230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 41B6B1885; Sat, 25 Mar 2017 20:51:07 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: by mail-it0-x230.google.com with SMTP id y18so39531598itc.0; Sat, 25 Mar 2017 13:51:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=A6yHlwjd6mZlEb0M6guqV20ymdtmaLNVJKP+Y+F8KtY=; b=egcWYksFrKEdIYUpKp8je0hay2waaUjpKRCBJBB1n+LfUnVR+AbrelexPo52ly349n WJiqB907hrXs2ScT8F+mmLJEO3oRw88glo27ng9YqoS+nWdk9VUaDseb8EO87LpG4uFO aKRJ/kHKXhBdCn611XDahKI19hnZb+uyDStV4jD+vBDVOrt2QEk9xfPNMcB9YsbCJKHc bzhhY6iKF0nb1E1I6NzVBg3CshHOHD8ophNI6AVZOQBywxOyyEnk4oi30C/wXG6DFfDo cVvt0pLu9biWguOAEUWtxCn0f8XCu/SrGIIUoT/YlST76EUegBBvjWtPZjRPWoLSOOgK oSjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=A6yHlwjd6mZlEb0M6guqV20ymdtmaLNVJKP+Y+F8KtY=; b=Wc8xDqtTyKDceWsvO7ZLXkTjT6VDgiSpYkPkqmtup+5BeQo7KAcGmUOcb+SybAhbam 1SKcFsYVLuSHTy6RqfoXzMIi8/LD+gL/njCMDMeT3aQafjmXo1kQfoQqf2hMzISkwTsg FLveRg4zmSQk0Q23MWxjMjOjmPByvdxoTEzX2S8MEdvxsqm5meOB2szt8pMkflHeITp5 tv4YZ+1yCDNLgi73lYieu5s6779v/PYgWxgt6Ky69ODNvvOOmAT7yXrMT8bZ5b/VnSjB GC0xhSNLI/xTa5zj63cxhvfaJ29LHGcn+JSTZnPsUuytL66V0OQnnv0TymdqluNPeJC/ 3YfA== X-Gm-Message-State: AFeK/H1sh/Cy+PSeexJvX/mVLLXqafWk9eggUFMFoXOYVX6DWhLWFD8MgpLlb7Tp2SZT68H8LXDg3gBTCW+AjA== X-Received: by 10.107.47.102 with SMTP id j99mr13971833ioo.52.1490475066472; Sat, 25 Mar 2017 13:51:06 -0700 (PDT) MIME-Version: 1.0 Sender: carpeddiem@gmail.com Received: by 10.107.30.209 with HTTP; Sat, 25 Mar 2017 13:50:46 -0700 (PDT) In-Reply-To: <20170325201943.GA16107@mordor.heemeyer.club> References: <201703251332.v2PDWS6O004270@repo.freebsd.org> <71317296-9981-4B0B-8243-5E4403CE8C62@gmail.com> <20170325201943.GA16107@mordor.heemeyer.club> From: Ed Maste Date: Sat, 25 Mar 2017 16:50:46 -0400 X-Google-Sender-Auth: ZcAOOW8zbT2M449HHmc9ApLseQs Message-ID: Subject: Re: svn commit: r315948 - in head: bin/csh contrib/tcsh contrib/tcsh/config contrib/tcsh/nls contrib/tcsh/nls/C contrib/tcsh/nls/et contrib/tcsh/nls/finnish contrib/tcsh/nls/french contrib/tcsh/nls/ger... To: Chagin Dmitry Cc: Ngie Cooper , "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 20:51:07 -0000 On 25 March 2017 at 16:19, Chagin Dmitry wrote: >> > Log: >> > Update to tcsh 6.20.00 >> >> Relnotes: yes >> > don't think it matters, In general I'd expect release notes to mention the version numbers for all updated third-party software components. From owner-svn-src-head@freebsd.org Sat Mar 25 21:33:50 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 51FCCD1D63D; Sat, 25 Mar 2017 21:33:50 +0000 (UTC) (envelope-from sevan@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F26A9117A; Sat, 25 Mar 2017 21:33:49 +0000 (UTC) (envelope-from sevan@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PLXnZE097808; Sat, 25 Mar 2017 21:33:49 GMT (envelope-from sevan@FreeBSD.org) Received: (from sevan@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PLXnGP097807; Sat, 25 Mar 2017 21:33:49 GMT (envelope-from sevan@FreeBSD.org) Message-Id: <201703252133.v2PLXnGP097807@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sevan set sender to sevan@FreeBSD.org using -f From: Sevan Janiyan Date: Sat, 25 Mar 2017 21:33:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315964 - head/usr.sbin/ppp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 21:33:50 -0000 Author: sevan (doc committer) Date: Sat Mar 25 21:33:48 2017 New Revision: 315964 URL: https://svnweb.freebsd.org/changeset/base/315964 Log: ftp.microsoft.com is dead and the document was not archived, point to the full protocol spec document instead. Fix spelling mistake flagged by igor. Rephrase bad sentence flagged by igor. Approved by: bcr (mentor) MFC after: 5 days Differential Revision: https://reviews.freebsd.org/D10111 Modified: head/usr.sbin/ppp/ppp.8 Modified: head/usr.sbin/ppp/ppp.8 ============================================================================== --- head/usr.sbin/ppp/ppp.8 Sat Mar 25 20:14:08 2017 (r315963) +++ head/usr.sbin/ppp/ppp.8 Sat Mar 25 21:33:48 2017 (r315964) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 25, 2009 +.Dd March 25, 2017 .Dt PPP 8 .Os .Sh NAME @@ -265,7 +265,7 @@ will force it to exit. .It Supports client callback. .Nm can use either the standard LCP callback protocol or the Microsoft -CallBack Control Protocol (ftp://ftp.microsoft.com/developr/rfc/cbcp.txt). +CallBack Control Protocol (https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-CBCP/[MS-CBCP].pdf). .It Supports NAT or packet aliasing. Packet aliasing (a.k.a.\& IP masquerading) allows computers on a private, unregistered network to access the Internet. @@ -3523,7 +3523,7 @@ for details of the available commands. This command tells .Nm to punch holes in the firewall for FTP or IRC DCC connections. -This is done dynamically by installing termporary firewall rules which +This is done dynamically by installing temporary firewall rules which allow a particular connection (and only that connection) to go through the firewall. The rules are removed once the corresponding connection terminates. @@ -5555,7 +5555,7 @@ seconds. .It set rad_port_id Ar option When RADIUS is configured, setting the .Dq rad_port_id -value allows to specify what should be sent to the RADIUS server as +value specifies what should be sent to the RADIUS server as NAS-Port-Id. The .Ar option Ns No s From owner-svn-src-head@freebsd.org Sat Mar 25 22:07:23 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 08A21D1DEFD; Sat, 25 Mar 2017 22:07:23 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CC541163; Sat, 25 Mar 2017 22:07:22 +0000 (UTC) (envelope-from avos@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PM7Lv2010244; Sat, 25 Mar 2017 22:07:21 GMT (envelope-from avos@FreeBSD.org) Received: (from avos@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PM7L4Z010243; Sat, 25 Mar 2017 22:07:21 GMT (envelope-from avos@FreeBSD.org) Message-Id: <201703252207.v2PM7L4Z010243@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avos set sender to avos@FreeBSD.org using -f From: Andriy Voskoboinyk Date: Sat, 25 Mar 2017 22:07:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315966 - head/sys/dev/iwn X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 22:07:23 -0000 Author: avos Date: Sat Mar 25 22:07:21 2017 New Revision: 315966 URL: https://svnweb.freebsd.org/changeset/base/315966 Log: iwn: fix return code conflict in iwn_init_locked() Do not try to use errno(2) codes here; instead, just return unique value (1) when radio is disabled via hardware switch and another one (-1) for any other error in initialization path. Tested with Intel 6205, STA mode. Modified: head/sys/dev/iwn/if_iwn.c Modified: head/sys/dev/iwn/if_iwn.c ============================================================================== --- head/sys/dev/iwn/if_iwn.c Sat Mar 25 21:46:02 2017 (r315965) +++ head/sys/dev/iwn/if_iwn.c Sat Mar 25 22:07:21 2017 (r315966) @@ -5120,7 +5120,7 @@ iwn_parent(struct ieee80211com *ic) case 0: ieee80211_start_all(ic); break; - case EAGAIN: + case 1: /* radio is disabled via RFkill switch */ taskqueue_enqueue(sc->sc_tq, &sc->sc_rftoggle_task); break; @@ -8879,8 +8879,10 @@ iwn_init_locked(struct iwn_softc *sc) /* Check that the radio is not disabled by hardware switch. */ if (!(IWN_READ(sc, IWN_GP_CNTRL) & IWN_GP_CNTRL_RFKILL)) { - error = EAGAIN; - goto fail; + iwn_stop_locked(sc); + DPRINTF(sc, IWN_DEBUG_TRACE, "->%s: end\n",__func__); + + return (1); } /* Read firmware images from the filesystem. */ @@ -8921,7 +8923,7 @@ fail: DPRINTF(sc, IWN_DEBUG_TRACE, "->%s: end in error\n",__func__); - return (error); + return (-1); } static int From owner-svn-src-head@freebsd.org Sat Mar 25 22:58:39 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0F79AD1D022; Sat, 25 Mar 2017 22:58:39 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D09F21B76; Sat, 25 Mar 2017 22:58:38 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v2PMwbDs030820; Sat, 25 Mar 2017 22:58:37 GMT (envelope-from gonzo@FreeBSD.org) Received: (from gonzo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v2PMwbkQ030819; Sat, 25 Mar 2017 22:58:37 GMT (envelope-from gonzo@FreeBSD.org) Message-Id: <201703252258.v2PMwbkQ030819@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gonzo set sender to gonzo@FreeBSD.org using -f From: Oleksandr Tymoshenko Date: Sat, 25 Mar 2017 22:58:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r315967 - head/sys/arm/broadcom/bcm2835 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 22:58:39 -0000 Author: gonzo Date: Sat Mar 25 22:58:37 2017 New Revision: 315967 URL: https://svnweb.freebsd.org/changeset/base/315967 Log: [rpi] Use compatibility string from upstream DTB for I2C controller FreeBSD uses upstream DTB for RPi3 build and compatibility string for i2c device is different there. Add this new string to compatibility data. Reported by: Karl Denninger MFC after: 3 days Modified: head/sys/arm/broadcom/bcm2835/bcm2835_bsc.c Modified: head/sys/arm/broadcom/bcm2835/bcm2835_bsc.c ============================================================================== --- head/sys/arm/broadcom/bcm2835/bcm2835_bsc.c Sat Mar 25 22:07:21 2017 (r315966) +++ head/sys/arm/broadcom/bcm2835/bcm2835_bsc.c Sat Mar 25 22:58:37 2017 (r315967) @@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$"); static struct ofw_compat_data compat_data[] = { {"broadcom,bcm2835-bsc", 1}, {"brcm,bcm2708-i2c", 1}, + {"brcm,bcm2835-i2c", 1}, {NULL, 0} }; From owner-svn-src-head@freebsd.org Sat Mar 25 23:36:38 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 569F2D1E00A; Sat, 25 Mar 2017 23:36:38 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E249D1622; Sat, 25 Mar 2017 23:36:37 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id v2PNaW0n075017 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sun, 26 Mar 2017 01:36:33 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua v2PNaW0n075017 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id v2PNaWuo075016; Sun, 26 Mar 2017 01:36:32 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Sun, 26 Mar 2017 01:36:32 +0200 From: Konstantin Belousov To: Dmitry Chagin Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r315957 - in head/sys: amd64/linux amd64/linux32 compat/linux i386/linux Message-ID: <20170325233632.GI43712@kib.kiev.ua> References: <201703251547.v2PFlUpf056924@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201703251547.v2PFlUpf056924@repo.freebsd.org> User-Agent: Mutt/1.8.0 (2017-02-23) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Mar 2017 23:36:38 -0000 On Sat, Mar 25, 2017 at 03:47:30PM +0000, Dmitry Chagin wrote: > Author: dchagin > Date: Sat Mar 25 15:47:29 2017 > New Revision: 315957 > URL: https://svnweb.freebsd.org/changeset/base/315957 > > Log: > Implement Linux mincore() system call. > This is necessary for the upcoming drm-next. > +int > +linux_mincore(struct thread *td, struct linux_mincore_args *args) > +{ > + struct mincore_args bsd_args; > + > + /* Needs to be page-aligned */ > + if (args->start & PAGE_MASK) > + return (EINVAL); > + bsd_args.addr = PTRIN(args->start); > + bsd_args.len = args->len; > + bsd_args.vec = args->vec; > + return (sys_mincore(td, &bsd_args)); > +} Almost all syscalls implementations in vm/vm_mmap.c got the kern_* helpers, sys_mincore() did not because it was not called outside the file. Please add kern_mincore() and use it, instead of abusing syscall entry.